AtMega16 T1 ШИМ CTC прерывания по OCR - мин. длительность ?

Обсуждаем контроллеры компании Atmel.
Ответить
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

AtMega16 T1 ШИМ CTC прерывания по OCR - мин. длительность ?

Сообщение ВитГо »

Приветствую Форумчане!

Разместил этот же вопрос на easyelectronics...


в моей задаче мне нужно при помощи микроконтроллера avr генерить импульсы различной частоты и скважности, причем важна точность генерации.
например нужно генерить такой сигнал на ноге контроллера
L - низкий уровень
H - высокий уровень
число - длительность уровня в мкс
L 2.35; H 4.7; L 1.5; H 3.0; L 27.3 H 4.7 и так далее

то есть промежутки очень короткие...
по закону мерфи нужно что бы контроллер еще чем нибудь занимался в это время (гы,гы,гы, сам знаю :-( )

у меня возникла идея сделать эту генерацию при помощи таймера T1 в режиме CTC с прерыванием и сбросом по совпадению с OCR1

частота таймера - максимальная, 16 мгц (такт меги от кварца)
прескалер = 1

тогда один такт таймера это 0.0625 мкс (1\16000000)

я посчитаю длительности сигналов и засуну их в массив, получиться чтото вроде
2.35\0.0625=37.5==38
4.7\0.0625=75.2==75
1.5\0.0625=24
и так далее

теперь самый интересный вопрос: а сколько времени занимает вход и выход из прерывания в подобных случаях?

просто мне нужно в прерывании выполнить как минимум:

Код: Выделить всё

     IN R2, SREG  //- сохранить флаговый регистр 

// здесь устанавливаем бит порта в состояние что нам нужно
     OR  R3, R3    // проверим на ноль флаг фазы, сначала R3=0
     BREQ PB0_L  // переход на сброс бита порта

     SBI PORTB, 0 // установили бит порта в 1
     RJMP CONT   // продолжаем

PB0_L: // здесь сброс бита порта
      CBI PORTB, 0 // сбросили бит порта в 0

CONT:  // продолжаем
      COM R3     // инвертируем фазу для следующего захода
      LPM  R4, Z+ // читаем следующую длительность фазы сигнала
      OUT OCR1AH, R5 // примем что R5=0 всегда
      OUT OCR1AL, R4
      OUT SREG, R2
      RETI


код писал по памяти, могу ошибиться в переходах, точно не помню как правильно называется OCR1...

ну так вот собственно вопрос - какую минимальную длительность фазы сигнала я смогу таким образом обеспечить ?

вернее по программе выше я смогу посчитать и сам.. а вот сколько тактов я потеряю на входе выходе из такого прерывания прерывания ?

если не понятно написал - скажите попробую еще как нить объяснить..

p.s. может есть какие то другие способы решения моей задачи ?
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: AtMega16 T1 ШИМ CTC прерывания по OCR - мин. длительност

Сообщение zero648 »

теперь самый интересный вопрос: а сколько времени занимает вход и выход из прерывания в подобных случаях?
Ну видимо аналогично командам CALL (4) + переход по вектору указалелю (3) и RET (4).
Последний раз редактировалось zero648 Сб авг 18, 2012 16:50:04, всего редактировалось 1 раз.
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: AtMega16 T1 ШИМ CTC прерывания по OCR - мин. длительност

Сообщение ВитГо »

zero648 писал(а):
теперь самый интересный вопрос: а сколько времени занимает вход и выход из прерывания в подобных случаях?
Ну видимо аналогично командам CALL (4) + переход по вектору указалелю (2 или 3) и RET (4).


эхх.. с моей задачкой "видимо" большой риск - уж больно мало тактов на 1.5 мкс остается - всего 24 такта - придется как то этот интервал nop'ами реализовывать, но надежда умирает последней...

не могу найти в документации про это..

вот и решил спросить...
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: AtMega16 T1 ШИМ CTC прерывания по OCR - мин. длительност

Сообщение ВитГо »

спасибо всем думавшим - вопрос снят.

если кому будет интересно ответ дали здесь http://forum.easyelectronics.ru/viewtop ... 66#p205266

p.s. если админ сочтет ссылку неуместной - то можно ее удалить к собачьим хвостам :-)
Ответить

Вернуться в «AVR»