реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> 2 ШИМа на 16 разрядном таймере
Varlamov_E
сообщение Aug 27 2009, 13:56
Сообщение #1





Группа: Участник
Сообщений: 3
Регистрация: 13-08-09
Пользователь №: 51 862



Возможно ли сделать 2 шима на 16 разрядном таймере (T1) на ATmega 16 ?
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Aug 27 2009, 14:17
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Естественно можно, но с одинаковой частотой.
Go to the top of the page
 
+Quote Post
Varlamov_E
сообщение Aug 27 2009, 14:30
Сообщение #3





Группа: Участник
Сообщений: 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 - значени при досчете до которого возникает прерывание .
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 27 2009, 14:44
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Только вопрос: нафига размножать прерывания, если можно обновлять оба регистра в прерывании Timer1 Overflow?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 27 2009, 14:47
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(_Pasha @ Aug 27 2009, 18:44) *
Только вопрос: нафига размножать прерывания, если можно обновлять оба регистра в прерывании Timer1 Overflow?

Угу, тем более, что так можно с легкостью получить еще несколько match в том же цикле.
Go to the top of the page
 
+Quote Post
Varlamov_E
сообщение Aug 27 2009, 14:51
Сообщение #6





Группа: Участник
Сообщений: 3
Регистрация: 13-08-09
Пользователь №: 51 862



На сколько я понимаю Timer1 Overflow это когда таймер до конца досчитывает ,
мне так не надо, мне надо генерить прямоугольные импульсы разной длины.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 27 2009, 14:56
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Ну да. И регистры сравнения надо обновлять именно в этот момент.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 27 2009, 15:25
Сообщение #8


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Varlamov_E @ Aug 27 2009, 17:51) *
мне так не надо, мне надо генерить прямоугольные импульсы разной длины.

Если делать так, как Вы хотите - то получится, что обновление ОСх будет аж в следующем ТОРе, поскольку прерывание будет после данного события. Если писАть в нуле(overflow) - регистры обновятся в текущем ТОРе. Если сделаете это быстро- то практически для всего набора значений.
Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 27 2009, 16:20
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Господа инженеры, не забывайте что в PWM-режимах регистры OCR работают с двойной буферизацией. Писать в них можно когда угодно, не обязательно в прерывании, но данные будут храниться в буферных регистрах и только по началу следующего цикла будут аппаратно переписаны в регистры сравнения.
В примере выше установлен режим FastPWM 8bit, поэтому в соответствии с Table 47. Waveform Generation Mode Bit Description регистры OCR обновляются когда TCNT сбрасывается в 0 (BOTTOM).


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 27 2009, 18:38
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Но два прерывания всё равно не нужны. Об этом и указали топикстартеру.
Если обрабатывать обновление в голове, то требуется следить за флагом, а так - типичная работа по прерыванию OVF, что и было ему предложено.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 28 2009, 04:34
Сообщение #11


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(SSerge @ Aug 27 2009, 19:20) *
В примере выше установлен режим FastPWM 8bit, поэтому в соответствии с Table 47. Waveform Generation Mode Bit Description регистры OCR обновляются когда TCNT сбрасывается в 0 (BOTTOM).

Давно я, оказывается, не обновлял ДШ на мегу16... В старом был в табл.47 OCRx update on TOP. Пардон за попытку ввести в заблуждение smile.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 17 2009, 15:08
Сообщение #12


кекс
******

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



Цитата(SasaVitebsk @ Aug 27 2009, 20:38) *
Но два прерывания всё равно не нужны. Об этом и указали топикстартеру.
Если обрабатывать обновление в голове, то требуется следить за флагом, а так - типичная работа по прерыванию OVF, что и было ему предложено.

Если обрабатывать в OVF, задержим смену на 0 и околонулевые значения всегда у обоих PWM каналов! PWM для "тихих сигналов" будет работать с искажениями.

Если обслуживать каждый OCR индивидуально как делает автор, то проблемы с доп искажениями на "тихих сигналах" практически исчезнут полностью, за счет хардварной буферизации. Но накладных расходов будет больше.

Поэтому категорически заявлять, что два прерывания не нужны - не стоит. Надо подумать что важнее и выбрать между, накладными расходами и искажением слабых сигналов.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 17 2009, 15:37
Сообщение #13


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;


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 17 2009, 18:12
Сообщение #14


кекс
******

Группа: Свой
Сообщений: 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.

Прошу предыдущий пост игнорировать, поспешишь людей насмешишь. sad.gif
Использование TOVF для перезагрузки обоих каналов более безопасно чем перезагрузка по OC event'у, и в тоже время менее накладна для процессора.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 18:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01482 секунд с 7
ELECTRONIX ©2004-2016