W806 - GPIO и таймеры. часть 2.

В этом эпизоде рассмотрим работу внешних прерываний, прикрутим к процессору инфракрасный приемник, а также попробуем изобразить извращенский софтовый ШИМ на таймерах.
Прикинув, как на практике изобразить работу внешних прерываний, решил подружить W806 с инфракрасным приемником TSOP и помигать светодиодиками при помощи пульта ДУ. Т.к. абсолютное большинство пультов в моем доме работают по протоколу NEC, то его декодирование и будем реализовывать. Вернее, портировать алгоритм, который отлично себя показал в работе на контроллерах STM8. Интересности — под катом.


Читать дальше

Timers Capture mode или ПРАВИЛЬНАЯ работа с таймером в режиме захвата

AVR
Сказано об этом в сети много, но на примере дремучих камней и без особых разъяснений. По этому напишу своё.
Есть у АВР такая фишка — захват. Суть в том, что по фронту или спаду (настраивается битом) сигнала на специальной ноге ICRx, делается снимок регистра TCNT и сохраняется в bmp формате и копируется в регистр ICRx. Опосля чего вызывается прерывание, если оно разрешено. В прерывание мы можем входить не спеша — данные из регистра никуда не денутся. Главное успеть обработать до следующего «снимка».
Всё красиво, всё хорошо. Но вот беда. Атмельцы не сделали возможность сбрасывать/запускать таймер по событию! Таймер крутится в цикле, снимается его мгновенное значение, а дальше делай с ним что хочешь.
Самый секас начинается, когда нам надо отслеживать опускание частоты сигнала ниже порога переполнения таймера. Был бы аппаратный ресет — всё понятно. Мониторь бит OVF при считывании результата и не парься! Но, увы и ах.


Читать дальше
  • +2
  • 04 января 2013, 19:47
  • Dikoy
  • 1