Adc пины не дружат с дисплеем

Тема в разделе "ESP8266, ESP32", создана пользователем WhiteFox, 30 мар 2022.

Метки:
  1. WhiteFox

    WhiteFox Нерд

    Плата: esp-wroom-32 38 pin
    Подключал дисплей к VSPI:
    MOSI - 23
    CLK - 18
    CS - 5
    DC - 17
    RST - 16
    Все работало, не один из этих контактов не ADC.
    После чего у меня возникла потребность установить энкодер.
    Энкодер с ADC пинами работал плохо, поэтому я его решил перебросить на 5, 17 и 16 контакт.
    Сейчас энкодер работает идеально, а дисплей на контактах 4, 0 и 2 не работает.
    Перед прошивкой, шлейф с дисплея снимаю.
    Нашел такую процедуру:
    gpio_pad_select_gpio();
    Не помогла.
    Может кто-то знает как правильно перевести ADC в цифровые выходы?
     
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    А че стандартные Ардуиновские -
    pinMode(pin, OUTPUT);
    pinMode(pin, INPUT);
    pinMode(pin, INPUT_PULLUP);
    не работают на ESP ?
    В работе важнее изображение на экране. Так что верните дисплей туда где он нормально работал. И воюйте с энкодером - это будет намного проще. Вам надо перевести три пина в режим цифрового входа с подтяжкой. И всех делов.
    Сами опрашиваете энкодер или библиотеку используете ?
     
    Последнее редактирование: 31 мар 2022
  3. WhiteFox

    WhiteFox Нерд

    Написал свою библиотеку и пользуюсь ей. Собирал библиотеку по примерам других библиотек.
    https://github.com/WhiteFoxDeveloper/ESP-IDF-LIBS/tree/main/Encoder
    Сейчас она выглядит чуть иначе, но указанная версия ни чуть не хуже.
    Пишу код в визуалке по фреймворку esp idf, ардуиновские процедуры не бачу.
    ADC пины можно инициализировать как обыкновенные цифровые, но они введут себя как-то не так...
    Подозреваю, что дело в неправильной инициализации.
    Инициализация:
    Код (C++):
    gpio_pad_select_gpio(gpio);
      gpio_config_t io_conf = {
          .intr_type = GPIO_INTR_ANYEDGE, //Прерывание в обе стороны
          .pin_bit_mask = 1ULL << gpio),
          .mode = GPIO_MODE_INPUT,
          .pull_down_en = 0, //без земли
          .pull_up_en = 1};    //с подтяжкой
      gpio_config(&io_conf);
    gpio_install_isr_service(0);
    gpio_isr_handler_add(gpio, interrupt, args);
     
    Последнее редактирование: 31 мар 2022
  4. WhiteFox

    WhiteFox Нерд

    Нашел в чем дело, благодаря недавно пришедшей плате.
    Почему-то 0 контакт никак не хочет работать, при этом на распиновке он не указан как HS.
    Использовал вместо 4, 0 и 2 пина, 4, 2 и 15.