У меня проблема с таймерами 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 В) на весь период.
Спасибо за ваше предложение.
как обычно для любого вопроса о SO, вы должны привести пример кода, который вы пробовали до сих пор. Один код стоит миллиона объяснений! – zmo