Микроконтроллеры | Помогите разобраться с двумя таймерами ATMega16 |
|
---|---|---|
Здравствуйте! Замучали меня эти таймеры. Не пойму, почему при включении прерываний от Timer/Counter 2 меандры на выходах по таймеру 0 начинают плавать? Даже поставил протеус и там тоже самое как и в vmlab. И по даташиту пробовал настроить и по мастеру кода и по avr calc, но не получается нормальный сигнал. Когда отключаю прерывания от таймера 2 (бит OCIE2 регистра TIMSK), то меандры в прерывании от таймера 0 "выравниваются". Но мне и от таймера 2 тоже нужны. Прикладываю проект в протеусе 7.3 sp4. |
|
|
В коде у Вас задействованы таймеры 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 |
|
|
Нет, именно 0x0B - нужно попробовать снизить частоту тиков в 4 раза. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |