Замена 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