Смотрите, тут ничего сверх мудрёного. Результатирующая частота от таймера1 и таймера2 должна быть не обязательно целочисленной, но одинаковой.
FCPU / ICR1 / 2 == FCPU / CLK_div / (OCR2A+1)
Сейчас это в виде таких цифр
16000000 / 3200 / 2 == 16000000 / 32 /(199+1)
и соответссно подставляя другие подбирайте, что б обе части выражения были равны. Я не гений математики, и заранее не могу сказать на каких цифрах всё будет сходится.
На УНО сам я такое бы стессно не стал делать. На stm32 это несравнимо удобнее и проще. Но там всё по другому, и опыт набранный вами на avr вам не особо-то пригодится , придётся начинать с ноля:)
Именно для этого люди и придумали конспекты.
Конспект - это способ выделить главное из прочитанного и запомнить его.
Тут и подбирать то особо не надо.
16000000 / 3200 / 2 == 16000000 / 32 /(199+1)
3200 * 2 == 32 * (199+1)
3200 = 16*(199+1)
ICR1 = 16( OCR2A + 1)
(Для прескаллера Таймера2 = 32 )
Но вы это и так знали, а ТС скорее всего это не сильно поможет.
P/S Спасибо вам за пример синхроипульсов.
@dimax
Действительно спасибо.
Не знал про регистр GTCCR
Если использовать прерывания:
.org OC1Baddr
SBIS PINB,PB2
RETI
SBI PINB,PB0
SBI PINB,PB0
RETI
5кГц (1600-710-790)
задержка между фронтами - 8 тактов процессора,
сам импульс - 2 такта процессора
Спасибо вам!!! Информация к размышлению получена, буду экспериментировать!
Если прерывания запрещены (совпало с прерыванием Timer0 или RX TX), то задержка увеличится.
Тут зависит, что допустимо а что нет.
Если это не допустимо, но длина импульса может быть до 10 мкс, то можно поставить внешнюю логику, например 2И для выводов PB2 и PB0. Тогда импульс будет начинаться одновременно с основным фронтом, а заканчиваться по прерыванию, и т.к. прерывания Timer0 и RX TX занимают меньше 10 мкс, то задний фронт не должен выйти за это значение.
Хотя если начинать делать внешнюю обвязку, то можно и до мультивибратора дойти, и вообще от прерываний не зависеть.
DIMAX! Появляйся чаще, а то без тебя тут сплошной флуд )))
У меня нет других прерываний:
.org 0
JMP Start
.org OC1Baddr
SBIS PINB,PB2
RETI
SBI PINB,PB0
SBI PINB,PB0
RETI
Start:
LDI R16,Low(RAMEND)
...
Вы бы хоть посмотрели реальный вывод вашей программы на 9 и 10 пинах. Вы думаете что у вас длительность сигнала на 10 Пине короче чем на 9. В реальности это не так. Сигнал у вас там будет одинаковый, сдвинутый по фазе.