Показано с 1 по 10 из 315

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Продвинутый
    Регистрация
    28.11.2010
    Возраст
    61
    Сообщений
    241
    Вес репутации
    232

    По умолчанию Re: AC dimmer 220V 50Hz

    Думаю так.
    PHP код:
    #include <avr/delay.h>   
    int AC_pin 10;  // выход для симистора     
    volatile byte dim 128;    // уровень димирования (0-128)  0 = on, 128 = 0ff     

    void setup()     
    {      
      
    pinMode(AC_pinOUTPUT);            
      
    attachInterrupt(0FrontUpRISING);  //прерывание по изменению уровня с низкого на высокий     
    }     
    // Функция обработки прерывания на подъем       
    void FrontUp()       
    {     
      
    detachInterrupt(0);     
      
    _delay_us(1000+(65*dim));  // отсекаем лишнее  
      
    digitalWrite(AC_pinHIGH);  // включить симистор     
      
    _delay_us(100);      // короткая пауза, чтобы обеспечить включение симистора     
      
    digitalWrite(AC_pinLOW);   // выключение симистора(он выключится когда полупериод достигнет нуля)      
      
    attachInterrupt(0FrontDownFALLING);       
    }       
    // Функция обработки прерывания на спад      
    void FrontDown()       
    {      
      
    detachInterrupt(0);
      
    attachInterrupt(0FrontUpRISING);       
    }     

    void loop()     
    {   
    dim=64
     
    // if(dim > 0) {dim--; _delay_ms(50);} else dim=128;  // пример уменьшения яркости лампы     

    Мои проекты - Катер для рыбалки

  2. #2
    Новичок
    Регистрация
    30.12.2010
    Сообщений
    5
    Вес репутации
    184

    Вопрос Re: AC dimmer 220V 50Hz

    Цитата Сообщение от Mastar Посмотреть сообщение
    Думаю так.
    PHP код:
    #include <avr/delay.h>   
    int AC_pin 10;  // выход для симистора     
    volatile byte dim 128;    // уровень димирования (0-128)  0 = on, 128 = 0ff     

    void setup()     
    {      
      
    pinMode(AC_pinOUTPUT);            
      
    attachInterrupt(0FrontUpRISING);  //прерывание по изменению уровня с низкого на высокий     
    }     
    // Функция обработки прерывания на подъем       
    void FrontUp()       
    {     
      
    detachInterrupt(0);     
      
    _delay_us(1000+(65*dim));  // отсекаем лишнее  
      
    digitalWrite(AC_pinHIGH);  // включить симистор     
      
    _delay_us(100);      // короткая пауза, чтобы обеспечить включение симистора     
      
    digitalWrite(AC_pinLOW);   // выключение симистора(он выключится когда полупериод достигнет нуля)      
      
    attachInterrupt(0FrontDownFALLING);       
    }       
    // Функция обработки прерывания на спад      
    void FrontDown()       
    {      
      
    detachInterrupt(0);
      
    attachInterrupt(0FrontUpRISING);       
    }     

    void loop()     
    {   
    dim=64
     
    // if(dim > 0) {dim--; _delay_ms(50);} else dim=128;  // пример уменьшения яркости лампы     

    Привет!
    Вчера собрал схему на макетке и залил прогу, все работает, яркость регулируется. Остается вопрос, лампа немного мерцает. Подозреваю, что в проге управление идет только одного полупериода, второй пропускается. Или я прогу не так прочитал?
    Если да, то что лучше, поставить диодный мост или в проге дописать еще одно включение симистора?
    Спасибо.
    Последний раз редактировалось Лабрадор05; 04.03.2012 в 13:25.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •