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

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,381
    Вес репутации
    10

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

    Цитата Сообщение от knyaz2020 Посмотреть сообщение
    а функции FrontUp() и FrontDown() как правильно вызывать?
    Они сами вызываются при прохождении через ноль
    Наброскал скетч , сразу предупреждаю что для стабильной работы скетча нужно знать время от реального нуля до срабатывания прерывания, тоже самое косается спада, иначе у нас получается не симметричное срабатывание датчика нуля
    Вычислить можно осциллографом, если такой имеется
    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()    
    {  
      
    int dimtime = (77*dim);  // вычислим время отсечки  
      
    _delay_us(dimtime);  // отсекаем лишнее   
      
    digitalWrite(AC_pinHIGH);  // включить симистор  
      
    _delay_us(200);      // короткая пауза, чтобы обеспечить включение симистора  
      
    digitalWrite(AC_pinLOW);   // выключение симистора(он выключится когда полупериод достигнет нуля)    
      
    detachInterrupt(0);   
      
    attachInterrupt(0FrontDownFALLING);    
    }    
    // Функция обработки прерывания на спад   
    void FrontDown()    
    {   
      
    int dimtime = (79*dim);  // вычислим время отсечки  
      
    _delay_us(dimtime);  // отсекаем лишнее  
    digitalWrite(AC_pinHIGH);  // включить симистор  
      
    _delay_us(200);      // короткая пауза, чтобы обеспечить включение симистора  
      
    digitalWrite(AC_pinLOW);   // выключение симистора(он выключится   
      
    detachInterrupt(0);    
      
    attachInterrupt(0FrontUpRISING);    
    }  

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

    Последний раз редактировалось Chip; 21.11.2011 в 22:36.

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

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

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

Ваши права

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