Пара вопросов по энкодеру

VictorV

✩✩✩✩✩✩✩
11 Дек 2019
5
0
Привет, ребята (с) :)

Есть несколько вопросов о тонкостях работы китайских энкодеров типа таких, возможно у кого-то будет желание и возможность мне помочь:


Вопросы следующие:

1) При подключении к проекту для управления адресной светодиодной лентой через FastLED все три энкодера что у меня были начинают глючить - неправильно или с большим количеством ошибок обрабатывается поворот ручки "влево", т.е. против часовой стрелки. Клик и вправо - работают хорошо.
Для подключения используется библиотека от Алекса. Что странно - "чистые" сэмплы от библиотеки, без подключенного FastLED и ленты работают замечательно, глюки начинаются только при подключении ленты, даже маленькой на 10 диодов.

Немного исправила ситуацию директива input_pullup для энкодера, но ложные срабатывания "влево" все еще бывают.


2) Можно ли вынести энкодер на несколько метров от Ардуины? Специфика проекта такая, что светодиодная лента и контроллер будут в одном месте (контроллер максимально близко к ленте), а энкодер в пульте управления, который от ардуины метрах в 4-5. Можно ли просто подключить длинным проводом, или надо какую-то защиту от помех?


3) Будут ли работать два одинаковых энкодера подключенных паралельно к тем же пинам? Т.е. чтобы была возможность задавать состояния переменных энкодером из разных мест? Именно одновремнно крутить ручки двух энкодеров никто не будет, скорее по очереди из точки А и точки Б. Допустимо ли такое подключение?

Спасибо :)
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
FastLED запрещает прерывания на время вывода данных в ленту. Возможно в этом дело, если используешь прерывания для обработки энкодера. И не запрещать она не может, по крайней мере на микропроцессорах AVR, иначе тайминги поплывут и пойдут цветные глюки на ленту.

Если на энкодере нет антидребезговых конденсаторов, это тоже добавит ложных срабатываний.

Для обновления каждого пикселя нужно 0.03мс. Оптимальное время опроса энкодер без антидребезга каждые 1-5мс. При 1мс будешь ловить дребезг (проявляется как многократное срабатывание прокрутки), при 5мс начнутся пропуски вращений. Так что в лучшем случае уже при 150 пикселях энкодеры начнут некорректно работать.
 
  • Лойс +1
Реакции: VictorV

Старик Похабыч

★★★★★★★
14 Авг 2019
4,242
1,297
Москва
У Алекса есть подключение с тиком и с прерываниями. Можно попробовать с тиком, если цикл loop крутиться больше чем 15 000 раз в секунду. Ну или воткнуть эти тики в медленные функции
Если энкодер именно такой как на фото, то там есть RC-цепочки для отсева ложных срабатываний.
Параллельно энкодеры будут работать как будто один, если их крутить по очереди. Но если крутить оба, то вообще не понятно что будет, каша.
Насчет нескольких метров не знаю, не пробовал.
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
больше, порядка 0.1 мс
Частота шины 800 КГц, длина одного бита 3 такта, всего битов 24 - итого 800 / (3 *24) = 11.1 КГц или примрно 0.09 мс на пиксель
А с чего вдруг 3 такта на бит? В даташите по-моему довольно однозначно 1,25мкс на бит (*24бит = 30мкс/пиксель):

1600880518825.png
 

bort707

★★★★★★✩
21 Сен 2020
3,044
909
А с чего вдруг 3 такта на бит?
ну так на ваших картинках и есть три такта на бит - для передачи нуля 1 такт HIGH + 2 LOW, для передачи единицы наоборот.

Другое дело, что я ошибся, частота 800 КГц - это не частота отдельных тактов, а всего пакета. Так что насчет длительности пикселя Вы правы.
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
ну так на ваших картинках и есть три такта на бит - для передачи нуля 1 такт HIGH + 2 LOW, для передачи единицы наоборот.

Другое дело, что я ошибся, частота 800 КГц - это не частота отдельных тактов, а всего пакета. Так что насчет длительности пикселя Вы правы.
Тактов чего? И почему именно 3? Может ноль это 35 HIGH и 80 LOW.

Да и не пакет это, с каких пор один бит стал пакетом?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,242
1,297
Москва
Автору.. я тут текст накидал по быстрому
 
  • Лойс +1
Реакции: VictorV

VictorV

✩✩✩✩✩✩✩
11 Дек 2019
5
0
Ох. Большое всем спасибо за основательную теорию и ответы. Жить стало интереснее, но грустнее.

Да, у меня энкодер как на картинке, и да висит на прерывании.

Тогда наверное более правильным будет другой вопрос - а чем собственно и как наиболее "правильно" управлять параметрами светодиодной ленты?
Особенно с большим количеством диодов?

Уходить на ESP8266? Прикручивать к проекту какой-нибудь Blynk или ваять приложение под андроид?
Или может есть другие "аппаратные" контроллеры для менее проблемного взаимодействия с лентой?
Потенциометр? Просто горсть кнопок?

Сплошные вопросы...
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,242
1,297
Москва
Поверь, esp можно загрузить и затормозить не хуже arduino, несколько сложнее , но можно.
Просто надо разобраться в порядке действий, понимать что будет если .. Практика решает все
 
  • Лойс +1
Реакции: kostyamat

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,395
971
58
Марий-Эл
Уходить на ESP8266? Прикручивать к проекту какой-нибудь Blynk или ваять приложение под андроид?
Уходить на STM32.
Данная задача там решается на уровне периферии, практически не затрагивая ядра.