Вообщем принимал сигналы с энкодера(3.3V) на 3 пина и ничего не получилось. Сначала думал дело в резисторном делителе, но нет. Решил проверить на чистом пине: подключил GPIO34 на вход и накидывал разные потенциалы. Вдруг случайно задел пин пальцем и в консоль вывело высокий сигнал. Получается, что высокий сигнал определяется с 0.1V+. Как это исправить? Пробовал подключать резистор к питанию и земле программно - не помогло. Код (C++): #define blink GPIO_NUM_23 #define test GPIO_NUM_34 void app_main(void) { printf("System true\n"); gpio_reset_pin(blink); gpio_reset_pin(test); //gpio_pad_select_gpio(blink); //gpio_pad_select_gpio(test); gpio_set_direction(blink, GPIO_MODE_OUTPUT); gpio_set_direction(test, GPIO_MODE_INPUT); //gpio_pulldown_dis(test); //gpio_pullup_en(test); while(true){ uint64_t level = gpio_get_level(test); if(level){ gpio_set_level(blink, 1); } else { gpio_set_level(blink, 0); } printf("%llu\n", level); vTaskDelay(1000 / portTICK_PERIOD_MS); } }
Схема: Питание энкодера - 5V. С энкодера идут 3 сигнальных пина уровнем 5V. С помощью резисторных делителей я преобразую уровень 5V с энкодера в 3.3V и отдаю сигнал микроконтроллеру ESP32. Проверял выходы энкодера, все в норме (5V 0.2мА при высоком уровне, 0V при низком уровне) При полностью собранной схеме на входных пинах GPIO напряжение 1V(высокий уровень) и 0.2V(низкий уровень) Без микроконтроллера сопротивление между линией 5V и GND 5кОм, с микроконтроллером так же. Резисторный делитель потребляет 0.6мА (замерено амперметром) Пока делал замеры выше, заметил что, резисторные делители делят напряжение нормально если подать линию питания 5V, а не сигнал с энкодера. Позже покопался в чужих проектах, подсмотрел как принимать сигналы и разобрался. Проблема явно в резисторном делителе. Если я возьму резисторы больших номиналов, то потребление делителя должно уменьшиться, а значит проблема будет решена? Правильно мыслю? Еще вопрос: что будет, если подать на пин микроконтроллера 5V?
немного не понял - в висящий в аоздухе пин тыкнул пальцем? ну так там на пальце наводка может быть в несколько вольт, не надо куда ни попадя пальцем тыкать
Да, таким образом я понял, что пин определял 0.1V как высокий уровень сигнала. Не думаю, что на пальце может даже 1 вольт набраться. Мультиметр показывает 0.1-0.8V. Живу в сельской местности, тут наводки малы.
Отключите от делителей входы процессора, и медленно вращая энкодер или нажимая его кнопку, мерьте напруги с делителей. Они должны меняться 0-3,1 вольт. ПС. Вы не забыли переключить пины проца в режим входов ? ППС. Напряжение на пальце в импульсе может быть и киловольт. Называется - "статика". Так что экспериментировать со входами микр не занулившись на общую шину устройства - не рекомендуется.
Вообщем разобрался, чет я совсем позабыл закон Ома... Все что я выше писал - полный бред. Достаточно 1 резистора на 30 кОм, т.к второй резистор уже стоит внутри энкодера...
А если ты энкодер не на 5, а на 3.3 Вольта сразу подключишь, то и резисторов никаких не надо, и жрать он не будет ничего совсем.
Других чего? Ты схему энкодера-то видел, разрабоччик хренов? Ему абсолютно по барабану, 1 Вольт ты туда подашь или 20, главное чтоб устройство узнало, покрутили энкодер или нет.
надо не думать, а читать литературу. Устройства разрабатываются с расчётом, что на пальце будет разряд до 2кВ. А вот такие бездумные прикосновения могут и "убить" микросхему.
ну ты то про какой-то эфимерный энкодер говоришь. А эфимерный энкодер может быть с любыми потрохами, поэтому за все эфимерные говорить не надо.