Спільноти › Електронні вироби › Блог › Енкодер. Енкодер? Енкодер!

Кілька місяців тому я вже викладав у своєму блозі та спільноті програми для роботи з енкодером. Пост називався «енкодер це просто». Недоліком тих програм було використання затримок для програмного придушення брязкоту контактів. У звичайних пристроях такі затримки цілком прийнятні і не позначаються на якості виконуваних завдань. Але бувають завдання, коли використання затримок є недозволеною розкіш, навіть якщо це і не горезвісний delay().

І ось нещодавно довелося займатися написанням програми для стенду з налаштування паливної апаратури дизельних двигунів. У програмі, крім тахометра, лічильника заданої кількості обертів, кнопок, індикації тощо. треба було ще обробляти дані з восьми енкодерів. Використання абсолютних енкодерів (ru.wikipedia.org/wiki/Датчик_кута_поворота) проект не передбачав, тому довелося мучитися з інкрементальними.

Насамперед потрібно було позбутися будь-яких затримок в обробці сигналів. Після деякої «муки» вийшов ось такий код.

блог

Незважаючи на свою стислість, ця програма цілком успішно справляється зі своїм завданням. Можете її використовувати в проектах для регулювань, паяльних станціях, підсилювачах і т.п.

Але мені потрібно було збільшити точність відстеження переміщення, потрібно було реагувати на кожен біт інформації. Як прийнято говорити, «допила» програму, отримав бажану точність.

Апетит приходить під час їжі, і на певному етапі розробки було прийнято рішення обробляти кожен енкодер своїм контролером. Використати ATmega або ATtiny85 (це було в наявності) у яких на борту є UART, здалося якось марнотратно.

В мережіє трохи інформації по програмному UART для ATtiny13, я за основу взяв цей лістинг. 7> енкодер. Тепер усі вісім енкодерів можна підключити на одну шину і не боятися, що основна програма пропустить якусь зміну кута.

Усім вдалих проектів та гарних рішень.