В начало | Зарегистрироваться | Заказать наши киты почтой
 
 
 
 

Программный валкодер

📆1 августа 2008   ✒️archinub   🔎28.262   💬10  

Это не новость и не статья. Это просто развёрнутый комментарий к датагосркой статье "Что есть валкодер?"

Я попробую «на пальцах», без привязки к конкретной реализации, рассказать алгоритм программной обработки валкодера, т.е. когда всю аппаратную обвязку мы выбросили и диаграмму работы обрабатываем микроконтроллером (раз уж он всё равно есть — пусть работает).

Схема


От приведенной там схемы оставляем только:


Немного теории


Берём таблицу истинности (приведенную там же ):
Программный валкодер
T — шаг состояния;
VAL0 — состояние датчика №0
VAL1 — состояние датчика №1
Заметим, что эта таблица истинности описывает изменения состояний датчиков при движении диска на один зуб только в одну сторону, в реальности требуется ещё одна таблица, описывающая обратное движение. Но её можно не рисовать, просто прочесть уже имеющуюся справа-налево (от состояния 5 к состоянию 1), главное не запутаться.

Приводим таблицу истинности к линейному виду (делаем проекцию двухмерного объекта на линию), получаем:

T — шаг состояния;
VAL — номер датчика (№0 или №1)
data — состояния датчика, или собственно таблица истинности. Поскольку движение закольцовано, два нуля в начале и конце диаграммы смыкаются и одну пару из них отбрасываем. Нужный нам байт выделен жёлтым.
byte — пронумеруем биты в байте, просто что бы не запутаться.

Не забудем таблицу и для обратного движения:


Кстати, в этом месте уже можно догадаться, что будет дальше.

В программе нам потребуется переменная (один байт) для хранения текущего состояния датчиков и две константы для проверки исполнения таблицы истинности:
static char diagramma;
const char diag_plus = 0b00011110;
const char diag_minus = 0b00101101;

Реализовать алгоритм можно как обработку прерывания от таймера или в общем цикле программы (если он не слишком длинный).

Теперь собственно алгоритм:


1. При входе в подпрограмму обработки валкодера первым шагом сравниваем состояние датчика VAL0 с битом diagramma.0 и датчика VAL1 с битом diagramma.1 если хоть один не совпал, то тогда идём дальше, иначе выход из прерывания (или в основной цикл программы), здесь больше ничего не делаем. Таким образом нам не страшны зависания диска в промежуточных состояниях.

2. Сдвигаем байт diagramma на два разряда в сторону старшего разряда.

3. Присваиваем двум младшим разрядам diagramma текущие значения соответствующих датчиков.

4. Сравниваем поочерёдно diagramma с константами diag_plus и diag_minus с какой совпала, на обработку того события уходим, если ни с одной не совпала — значит выход (диаграмма ещё не завершена). Таким образом нам не страшны никакие колебания диска в промежуточных состояниях — мы считаем только полные циклы прохождения зубцов перед датчиком.

Вопрос быстродействия


Если для регуляторов громкости и тембра пропустить несколько зубцов диска не смертельно, то при реализации валкодером, например, счётчика ленты магнитофона, это уже критически важно и, чтобы не было пропусков в счете, потребуется считать ограничение по минимальной частоте вызова прерывания для обработки датчика (или максимальной длительности главного цикла программы, если делать без прерываний).
Но этот вопрос слишком зависит от конкретной реализации и здесь рассматривать не будем.
Кстати при реализации алгоритма на ассемблере он занимает считанные байты и вопрос быстродействия скорее всего не возникнет.

В общем всё заключается в том, что кому проще: распаять несколько деталей или дописать несколько строк.

Камрад, рассмотри датагорские рекомендации

🌼 Полезные и проверенные железяки, можно брать

Опробовано в лаборатории редакции или читателями.




 

Читательское голосование

Нравится

Статью одобрили 5 читателей.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
 

Поделись с друзьями!

 

 

Связанные материалы

 

Схема на Датагоре. Новая статья Что есть валкодер...... Приветик! Ща я вам как расскажу, как устроен валкодер. Да проще некуда. В самом простом...
Схема на Датагоре. Новая статья Немного про шину 1-Wire и цифровой термометр DS18b20... Здравствуйте, друзья. Хочу предложить вашему вниманию несколько простых функций для работы с шиной...
Схема на Датагоре. Новая статья Ремонт и переделка проигрывателя винила SONY- PS-242... Попал мне в руки вот такой агрегат. Настоящий японец. Состояние внешне красивое, но нерабочее....
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 7... Поговорим о прерываниях. Слово прерывание говорит само за себя, происходит остановка какого — то...
Схема на Датагоре. Новая статья Кнопочный выключатель для УНЧ на JK-триггере CD4027... Обычно использовать маленький красивый выключатель для подачи питания на силовой трансформатор нет...
Схема на Датагоре. Новая статья Датчик угла поворота. Сельсин-датчик и приёмник на микроконтроллере.... Схема сельсин-датчика и программа микроконтроллера практически полностью взяты из журнала Радио №4...
Схема на Датагоре. Новая статья Вариант подключения датчиков и темброблок для гитары Gibson Les Paul и подобных... Доброго времени суток, коллеги! Это моя первая статья, поэтому прошу строго не судить. Разумная...
Схема на Датагоре. Новая статья Датагорский проект 10 "Water Tank Controller". Модификация блока управления для полива... Привет, друзья! Последний раз я имел дело с микроконтроллерами лет 20 назад, во время ПК типа...
Схема на Датагоре. Новая статья Термометр + термостат на микроконтроллере PIC16F876 и датчиках DS18B20... История этого термометра началась в далёком 2011 году. Мне понадобилось в подвале частного дома, в...
Схема на Датагоре. Новая статья SHT10 + Atmega8: Микроконтроллерный модуль управления вентилятором санузла, v2... Доброго дня, сограждане! Представляю вторую версию блока управления вентилятором для ванной,...
Схема на Датагоре. Новая статья Контроллер системы водоснабжения «бак - насос» с ультразвуковым датчиком уровня. Датагорский бакомер in action!... Вперёд, товарищи! На дачу! В. Ленин И. Гаврилов Конечно, у меня Новый экземпляр уровнемера...
Схема на Датагоре. Новая статья Несколько функций для програмной реализации протокола I2C на AVR... Добрый день, дорогие друзья! Решил поделиться с вами несколькими функция для работы по протоколу...
 

Комментарии, вопросы, ответы, дополнения, отзывы

 

<
Читатель Датагора

Gringo

<
Читатель Датагора

alx32

<
Читатель Датагора

andrdoy

<
Читатель Датагора

andrdoy

<
Читатель Датагора

archinub

<
Читатель Датагора

andrdoy

<
Читатель Датагора

andrdoy

<
Читатель Датагора

archinub

<
Читатель Датагора

bacek

<
Читатель Датагора

teXnik

Добавить комментарий, вопрос, отзыв 💬

Камрады, будьте дружелюбны, соблюдайте правила!

  • Смайлы и люди
    Животные и природа
    Еда и напитки
    Активность
    Путешествия и места
    Предметы
    Символы
    Флаги
 
 
В начало | Зарегистрироваться | Заказать наши киты почтой