Приветствую Форумчане!
Разместил этот же вопрос на 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==
384.7\0.0625=75.2==
751.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. может есть какие то другие способы решения моей задачи ?