Свежие обсуждения
Микроконтроллеры

Помогите разобраться с двумя таймерами ATMega16

1 3

Здравствуйте! Замучали меня эти таймеры. Не пойму, почему при включении прерываний от Timer/Counter 2 меандры на выходах по таймеру 0 начинают плавать? Даже поставил протеус и там тоже самое как и в vmlab. И по даташиту пробовал настроить и по мастеру кода и по avr calc, но не получается нормальный сигнал. Когда отключаю прерывания от таймера 2 (бит OCIE2 регистра TIMSK), то меандры в прерывании от таймера 0 "выравниваются". Но мне и от таймера 2 тоже нужны. Прикладываю проект в протеусе 7.3 sp4.

189691.zip

 

В коде у Вас задействованы таймеры 0 и 2, в вопросе - 1 и 2. Где правильно ?

 

Исправил вопрос. Правильно как в коде.

 

Тогда следующий вопрос. Для таймера 0, судя по даташиту, вы выбрали режим PWM, да еще и с коррекцией фазы. Если не секрет - для чего? В этом режиме у вас интервалы между четными и нечетными прерываниями от таймера будут различны (посмотрите стр 79 полного даташита). Вы именно этого и хотели?

 

chav1961: (посмотрите стр 79 полного даташита). Вы именно этого и хотели? Нет, такого как раз оччень не хотелось бы. Я настраивал так на CTC: Ну режим таймера 0 у меня получается 0А. Это ведь 0b00001 010. Те три бита справа это clk/8 - установил делитель на 8. Далее идёт бит WGM01, его в 1, т.к. по таблице 38 ДШ это относится к режиму СТС и, ещё в этом же режиме ставим WGM00 в 0 (бит 6). Остаются биты 4 - COM00, 5 - COM01, 7 - FOC0. Смотрю в ДШ на таблицу 39. В ней, т.к. мне надо выход таймера OCR0 отключить от порта PB.3, то COM00 и COM01 ставлю в 0. Остаётся FOC0, его тоже в 0. Где я ошибся?

 

Ёлки, вот эта строка ДШ (с.83) - Bit 7 – FOC0: Force Output Compare. The FOC0 bit is only active when the WGM00 bit specifies a non-PWM mode. Т.е. WGM00 и FOC0 тоже в 1 надо ставить.

 

Тогда нигде. Это я ошибся WGM00 и 01 попутал. Попробуйте для эксперимента для таймера 0 вместо 0x0A сделать 0x0B. Если проблема исчезнет, значит, слишком длинные обработчики прерываний. Если не исчезнет - будем думать дальше. FOC - это имитация сравнения со OCR.

 

Поставьте WGM00 и FOC0 тоже в 1 и попробуйте. Тоже всё в норму приходит у вас? А не блин, тогда PWM получается. Как-то написано всё двусмысленно в ДШ.

 

chav1961: вместо 0x0A сделать 0x0B
Наверное 8А? Но не помогает и FOC0 в 1.

 

Нет, именно 0x0B - нужно попробовать снизить частоту тиков в 4 раза.