Маленький миниотчет. Эксперименты ставил в BASCOM-AVR.
Сконфигурировал оба таймера меги128 на двухпроходный ШИМ, записал в регистры сравнения числа, и стал в протеусе глядеть осцилограмки. Воочию виден рассинхрон около 32 тактов таймера (если считать что весть двухпроходный период 512 тактов). Поменял местами строки конфигурирования таймеров и увидел такой же рассинхрон в другую сторону. очевидно что конфигурация с запуском таймера в BASCOM-AVR длится целых 32 такта. Перед тем как опускатся до прямого редактирования регистров управления таймерами, решил после строки конфигурации таймер останавливать, а потом после того как они сконфигурированы оба в той же последовательности запустить. И о чудо, таймера пошли ноздря в ноздрю. (для проверки попробовал запустить таймеры не в той последовательности в которой останавливал, и снова рассинхрон, но уже всего в 2 такта). Итого имеем 6 каналов работающих синхронно без низкоуровневых плясок с конфигурационными регистрами. Осталось проверить в железе.
Результирующий рабочий код:
Код
$regfile = "m128def.dat"
$crystal = 8000000
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Compare C Pwm = Clear Up , Prescale = 1
Config Portb = Output
Stop Timer1
Config Timer3 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Compare C Pwm = Clear Up , Prescale = 1
Config Porte = Output
Stop Timer3
Start Timer1
Start Timer3
Compare3a = 32
Compare3b = 1
Compare3c = 96
Compare1a = 132
Compare1b = 1
Compare1c = 196
Do
Loop
End
Авось кому сгодится.
Сообщение отредактировал -=TRO=- - Nov 2 2014, 14:27