|
2 ШИМа на 16 разрядном таймере |
|
|
|
Aug 27 2009, 13:56
|
Группа: Участник
Сообщений: 3
Регистрация: 13-08-09
Пользователь №: 51 862

|
Возможно ли сделать 2 шима на 16 разрядном таймере (T1) на ATmega 16 ?
|
|
|
|
|
 |
Ответов
(1 - 13)
|
Aug 27 2009, 14:30
|
Группа: Участник
Сообщений: 3
Регистрация: 13-08-09
Пользователь №: 51 862

|
Верно ли это ?
TCCR1A=0xA1; TCCR1B=0x09;
///////// TIMER1 COMPA Interrupt ////////////
#pragma vector = 0x18 __interrupt void TIMER1_COMPA_Interrupt( void ) { OCR1A = Next; }
///////// TIMER1 COMPB Interrupt ////////////
#pragma vector = 0x1C __interrupt void TIMER1_COMPB_Interrupt( void ) {
OCR1B = Next;
}
Next - значени при досчете до которого возникает прерывание .
|
|
|
|
|
Aug 27 2009, 14:51
|
Группа: Участник
Сообщений: 3
Регистрация: 13-08-09
Пользователь №: 51 862

|
На сколько я понимаю Timer1 Overflow это когда таймер до конца досчитывает , мне так не надо, мне надо генерить прямоугольные импульсы разной длины.
|
|
|
|
|
Nov 17 2009, 15:08
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(SasaVitebsk @ Aug 27 2009, 20:38)  Но два прерывания всё равно не нужны. Об этом и указали топикстартеру. Если обрабатывать обновление в голове, то требуется следить за флагом, а так - типичная работа по прерыванию OVF, что и было ему предложено. Если обрабатывать в OVF, задержим смену на 0 и околонулевые значения всегда у обоих PWM каналов! PWM для "тихих сигналов" будет работать с искажениями. Если обслуживать каждый OCR индивидуально как делает автор, то проблемы с доп искажениями на "тихих сигналах" практически исчезнут полностью, за счет хардварной буферизации. Но накладных расходов будет больше. Поэтому категорически заявлять, что два прерывания не нужны - не стоит. Надо подумать что важнее и выбрать между, накладными расходами и искажением слабых сигналов.
|
|
|
|
|
Nov 17 2009, 15:37
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(defunct @ Nov 17 2009, 15:08)  Если обрабатывать в OVF, задержим смену на 0 и околонулевые значения всегда у обоих PWM каналов! PWM для "тихих сигналов" будет работать с искажениями Поясните, что значит "задержим смену на 0", она же аппаратно делается. Не понял также, почему нельзя в одном прерывании сделать две пересылки? OCR1A = Next; OCR1B = Next;
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Nov 17 2009, 18:12
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(=GM= @ Nov 17 2009, 17:37)  Поясните, что значит "задержим смену на 0", она же аппаратно делается. Код OVF OVF OVF ---|------------------|------------------|------------------|---- ^ ^ ^ ^ new OCR applied here OCR current | +-- new OCR placed into the HW buf + still old OCR tiggered OC event Посмотрел на свою же картинку и понял, что никаких проблем не будет. Будет только задержка на один OVF цикл. А в плане качества так наоборот лучше, т.к. задержка вывода сл. семпла не зависимости от значения в OCR. Прошу предыдущий пост игнорировать, поспешишь людей насмешишь.  Использование TOVF для перезагрузки обоих каналов более безопасно чем перезагрузка по OC event'у, и в тоже время менее накладна для процессора.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|