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

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


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

Эксперименты с шаговиком

Потихоньку раскуриваю что и как

Почти все в описалове на ютубе. Код страшный и уродливый, впервые задумался что ассемблер наверное не помешает. Сделано на хтоническом флаговом автомате без прерывний. Хотя по хорошему таймер для расчета приращения скорости не помешал бы. Движок похоже не вышел на максимальные обороты. Длительность подачи напряжения на ногу — около 10 мс на максимальной скорости. У мотора 64 шага на оборот и понижающий в 64 раза редуктор. Пальцами удержать весьма и весьма сложно. В полношаговом режиме запустить не смог, хотя пытался не очень настойчиво. Пока отлаживал в Протеусе нашел багу с переполнением буфера в протеусовском примере АВР+шаговик. Особо не мешало, но побочные спецэффекты крови попили
  • +2
  • 08 октября 2012, 02:55
  • Buba