Замена Timer1 на FlexiTimer2
- Войдите на сайт для отправки комментариев
Вс, 10/02/2019 - 10:48
Взял стандартный скетч для диммера, но он не работает на Мега 2560 из-за таймера Timer1, тупо заменил его на FlexiTimer2, но не работает. Подскажите пожалуйста где ошибка?
#define dimPin 8
#define zeroPin 2
#include <FlexiTimer2.h>
//#include <CyberLib.h> // шустрая библиотека для таймера
volatile int tic, Dimmer;
void setup() {
Serial.begin(9600);
pinMode(dimPin, OUTPUT);
digitalWrite(dimPin, 0);
pinMode(zeroPin, INPUT); // настраиваем порт на вход для отслеживания прохождения сигнала через ноль
attachInterrupt(0, detect_up, FALLING); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
// StartTimer1(timer_interrupt, 40); // время для одного разряда ШИМ
// StopTimer1(); // остановить таймер
FlexiTimer2::set(40, timer_interrupt) ;
FlexiTimer2::stop() ;
Serial.println("Start");
}
void loop() {
// раскомментировать для ввода числа диммирования чеерез монитор порта (0 - 255)
if (Serial.available()) {
Dimmer = Serial.parseInt();
Serial.println(Dimmer);
}
// раскомментировать для управления потенциометром (аналоговый А0)
// Dimmer = map(analogRead(0), 0, 1023, 240, 0);
}
//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------
void timer_interrupt() { // прерывания таймера срабатывают каждые 40 мкс
tic++; // счетчик
if (tic > Dimmer) // если настало время включать ток
digitalWrite(dimPin, 1); // врубить ток
}
void detect_up() { // обработка внешнего прерывания на пересекание нуля снизу
tic = 0; // обнулить счетчик
// ResumeTimer1(); // перезапустить таймер
FlexiTimer2::start();
attachInterrupt(0, detect_down, RISING); // перенастроить прерывание
}
void detect_down() { // обработка внешнего прерывания на пересекание нуля сверху
tic = 0; // обнулить счетчик
// StopTimer1(); // остановить таймер
FlexiTimer2::stop() ;
digitalWrite(dimPin, 0); // вырубить ток
attachInterrupt(0, detect_up, FALLING); // перенастроить прерывание
}
//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------
А что он должен делать-то? О чём вообще речь?
Це, очередной симисторный диммер.
Не ожидал я несовместимости киберлиб с мегой 2560, на 328 работает отлично ведь, лампочки мигают, а тут надо таймер менять.
Не ожидал я несовместимости киберлиб с мегой 2560,
Они говорят, что совместима.
Вам лучше прямо у них и спрашивать, они там нормально отвечают - http://cyber-place.ru/showthread.php?t=550
Не компилит он с таймером1, видать таймер к архитектуре привязан.
exit status 1
ну, бывает, чо.
Ну, я Вам уже сказал, куда обратиться.
А зачем там Timer1, оно вроде и на киберлибе одной работает.
Я наверное не верно называю т.к. StartTimer1 это функция киберлиб, а не TimerOne
Оказывается есть библиотека RBDdimmer которая нормально работает с Мега 2560