2014-01-25 3 views
-1

У меня проблема с таймерами arduino. Сначала позвольте мне объяснить, что я знаю о них. Я не знаю, есть ли способ решить эту проблему для общих таймеров. Благодаря таймеры функции:Предотвращение нежелательного переключения в таймер

1) Они всегда начинаются с нуля,

2) Они работают как UP-счетный или UP-DOWN подсчета таймеров,

3) Каждый таймер имеет два регистров сравнения.

В моем проекте задействованы случаи для работы в период выборки (период), т. Е. Таймер работает в течение времени выборки и на основе значений в регистре сравнения выходы TIOA и TIOB переключаются. Я работаю в режиме «вверх-вниз». Теперь проблема в том, когда у меня есть нуль в регистре сравнения. Я ожидаю нулевой вывод (на TIOA и TIOB) за весь период. Но таймер также переключает вывод для нулевого сравнения. т. е. вместо того, чтобы получать нуль, я получаю квадратную волну с периодом (2 *) в качестве своего периода времени. Является ли эта общая проблема и для других таймеров?

Можете ли вы, ребята, предложить мне обходной путь для решения этой проблемы?

Заранее спасибо.

#include <AdvaDueTC.h> 

int default_clock = 1; 
int RCcntS = 2187*2; 
int period0 = 65536; 
int a = 2180; 
int b = 0; 

void subrtn() 
{ 
changeTC_TC3_Period(RCcntS); // loading sampler TC3 with RCcntS 

changeTC_TC0_Period(RCcntS/2,a,b); // loading timer TC0 with RCcntT 

} 
void setup() { 

setupTC3_Interrupt(period0,default_clock ,subrtn);//setup sampler interrupt 

setupTC_TC0_Timing(period0, default_clock); 

} 

void loop() { 
// put your main code here, to run repeatedly: 

} 

функции используются:

Здесь ТС3 находится в режиме UP и TC0 находится в режиме UPDOWN работы. TIOA0 и TIOB0 используются для получения выходного сигнала (например, в REG_TC0_CMR0, ACPA, BCPB установлено значение 3). Здесь TIOB0 переключается, и я хочу оставаться на одном клапане (0 или 3,3 В) на весь период.

Спасибо за ваше предложение.

+0

как обычно для любого вопроса о SO, вы должны привести пример кода, который вы пробовали до сих пор. Один код стоит миллиона объяснений! – zmo

ответ

0

когда я ноль в сравнение регистре Я ожидаю, что нулевой выход

я ожидать, что выход будет срабатывает в два раза (вверх и вниз) каждый тик (я думаю, что вы называете это период), потому что таймер переполняется КАЖДЫЙ тик.

Решение отключает сравнение таймера.

это кажется мне PWM, может быть, вы получите лучший результат, используя специальный HW

0

Да что вы сказали правильно. Сначала я не мог его получить, но этот таймер MCU имеет возможность установить или очистить выходное значение таймера за весь период. поэтому, не переходя в TOGGLE, я использовал эти опции для получения желаемой операции.

Смежные вопросы