Подключение Энкодера и LCD-I2C
- Войдите на сайт для отправки комментариев
Вс, 31/05/2020 - 19:47
День добрый знатокам.
На большинстве подключений вижу как энкодеры подключаются к D2 и D3. К этим же контактам у Yun rev.2 выведены SDA и SCL для I2C подключений. Если я хочу подключить дисплей через I2C то куда лучше подключить энкодер?
Энкодер, обычно, цепляют на ноги, где есть прерывания, можно и без прерываний работать, но тогда будут пропуски и не совсем адекватное поведение, особенно на больших оборотах. Ищите подробное описание своей платы, и смотрите есть ли свободные ноги с прерыванием.
День добрый знатокам.
На большинстве подключений вижу как энкодеры подключаются к D2 и D3. К этим же контактам у Yun rev.2 выведены SDA и SCL для I2C подключений. Если я хочу подключить дисплей через I2C то куда лучше подключить энкодер?
А что за ардуина то? У уно/нано и прочих на atmega 328 аппаратной I2C находится на А4/А5.
то? У уно/нано и прочих на atmega 328 аппаратной I2C находится на А4/А5.
Это Yun Rev.2
по описанию у неё I2C на D2 и D3.
Макс, спасибо за подсказку
Прерывания у Yun Rev.2 на D0-D3 и D7 . Т.к. я хочу использовать D0 & D1 для сериал дата, а D2 и D3 для I2C, то остаётся один только D7. Подключить хотя бы один из выходов Up/Dwn incremental decoder к нему, чтоб хоть как-то уменьшить пропуски? больших скоростей вращения не предполагаю - вращения вала енкодера пальцами.
Не уверен, что хватит одного прерывания для энкодера, но попробовать можно.
У меня энкодер подключен через MCP23017, которая использует всего одно прерывание. Это работает, но возможно будет сильно лишним костылем в вашем случае. Можно подумать, и как нибудь через логические элементы типа ИЛИ (или тупо через диоды) стучаться еще и на ногу с прерыванием при повороте.
Вполне хватает и одного прерывания.
И более того:За один щелчок энкодера сигнал на выводах (дребезг не рассматриваем) изменяется 4 раза(по 2 раза на каждом из выводов). Поэтому и прерывания хватит одного и даже следить нужно только за одним из фронтов сигнала.
Более удобный вариант при работе с энкодером, не менять значение переменной за которую отвечает поворот, а ввести ещё одну знаковую и при повороте в одну сторону присваивать ей значение "1" , а при повороте в другую "-1".
Ну и дальше в коде где будет запрос делать что то такое:
if(enc_tick){val+=enc_tick;enc_tick=0;}
Верно для кодов без delay() обрабатываемых быстрее , чем пользователь крутит энкодер.