диммер на 220в без таймеров
- Войдите на сайт для отправки комментариев
Доброе время суток!
Делаю на базе ардуино контроллер для управления освещением. Один из источников освещения - обычная люстра с лампами 220в, соответственно распаял схему диммера (http://mp3car.ru/blog/arduino/2.html) и залил скечт. Все работает, но есть нюанс. Программа использует Timer1, который в свою очередь использует пины 9 и 10 (PWM) для реализации, а они у меня заняты управлением светодиодными лентами и светильниками.
Пробую реализовать тоже самое без таймеров, на счетчике micros, но пока не получается.
Ниже код. В нем закоментированные строки с кодом про таймер, если их раскомментировать то все работает, но отключабтся пины 9 и 10.
Dimmer1=190; attachInterrupt(1, detect_up, LOW); // настроить срабатывание прерывания на pin 3 на низкий уровень
//StartTimer1(halfcycle, 40); //время для одного разряда ШИМ
//StopTimer1(); //остановить таймер }
//********************обработчики прерываний*******************************
void halfcycle() //прерывания таймера
{
tic++; //счетчик
if(Dimmer1 < tic )
digitalWrite(4, HIGH);
}
void detect_up() // обработка внешнего прерывания. Сработает по переднему фронту
{
tic=0; //обнулить счетчик
timer=true;
//ResumeTimer1(); //запустить таймер
attachInterrupt(1, detect_down, HIGH); //перепрограммировать прерывание на другой обработчик
}
void detect_down() // обработка внешнего прерывания. Сработает по заднему фронту
{
//StopTimer1(); //остановить таймер
timer=false;
digitalWrite(4, LOW);
tic=0; //обнулить счетчик
attachInterrupt(1, detect_up, LOW); //перепрограммировать прерывание на другой обработчик
}
//*************************************************************************
void loop()
{
if (timer==true){
currentMicros = micros();
if(currentMicros - previousMicros > 40) {
// сохраняем время последнего переключения
previousMicros = currentMicros;
halfcycle();
//timer=false;
}
}
}
gonzales, тут дело не в пинах 9 и 10, таймер в коде диммера их не использует. Видимо сам таймер1 у вас занят в коде управления лентами. Городить на микросе -и не думайте. Шим делают только на таймере. Поэтому либо диммер, либо светодиодные ленты вам нужно перевести на другой таймер. И кстати вставляете код в сообщения по правилам, принятым на нашем форуме http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
это про таймеры
http://arduino.ru/Tutorial/Arduino_Interrupts_part2
Вот эту фразу не понял. Но в принципе проблема решилась
так что, если кому надо, код рабочий. 255 - полностью выключено, 0 - полностью включено