Bluetooth + диммер на ATtiny85

Тема в разделе "Arduino & Shields", создана пользователем Motrosoff, 25 фев 2018.

Метки:
  1. SergeiL

    SergeiL Оракул Модератор

    Обновил (отредактировал) скетч, скопируйте снова, забыл TinySerial.begin(9600);
     
  2. SergeiL

    SergeiL Оракул Модератор

    Еще подправил. Последний вариант:
    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial TinySerial (3, 4);


    int AC_LOAD = 1; // Output to Opto Triac pin
    volatile int dimming = 128; // Dimming level (0-128) 0 = ON, 128 = OFF

    int LED = 0;
    int val;
    int dimtime;
    void setup()
    {

    pinMode(LED, OUTPUT);
    pinMode(AC_LOAD, OUTPUT); // Set the AC Load as output
    attachInterrupt(0, zero_crosss_int, RISING); // Choose the zero cross interrupt # from the table above
    }

    void zero_crosss_int() // function to be fired at the zero crossing to dim the light
    {
      if (dimtime < 1) //Turn TRIAC completely OFF if dim is 0
      {
        digitalWrite(AC_LOAD, LOW);
      } else if (dimtime > 254)  //Turn TRIAC completely ON if dim is 255
      {
        digitalWrite(AC_LOAD, HIGH);
      }
      else
      {
        // Firing angle calculation :: 50Hz-> 10ms (1/2 Cycle)
        // (10000us - 10us) / 128 = 75 (Approx)
        dimtime = (75 * dimming);
        delayMicroseconds(dimtime); // Off cycle
        digitalWrite(AC_LOAD, HIGH); // triac firing
        delayMicroseconds(10); // triac On propogation delay
        digitalWrite(AC_LOAD, LOW); // triac Off
      }
    }

    void loop()
    {
      if (TinySerial.available())
      {
        dimtime = TinySerial.read();
      }
    }
     
  3. parovoZZ

    parovoZZ Гуру

    Не понял, для чего вот эта задержка

    Код (C++):
    delayMicroseconds(10); // triac On propogation delay
     
  4. SergeiL

    SergeiL Оракул Модератор

    А какую альтернативу Вы предлагаете?
    Что тут не так?
     
  5. parovoZZ

    parovoZZ Гуру

    Тьфу ты, там микросекунды, а я прочитал миллисекунды))) Один глаз заснул просто))))
     
  6. Motrosoff

    Motrosoff Гик

    Эххх(( чувачёк...я не знаю как это в коде реализовать на примере, который выше код...
     
  7. parovoZZ

    parovoZZ Гуру

    Не запаривайся. Код фуфло полное. МК не будет вылезать из прерывания на малых углах регулирования.
     
  8. SergeiL

    SergeiL Оракул Модератор

    Ну а какие проблемы, можно аппаратный таймер использовать для включения и выключения оптрона. :)
    Для начала хоть так бы заработало, а таймер прикрутить не проблема.
    Еще не известно, что по последовательному порту приходит.
     
    Последнее редактирование: 1 мар 2018
  9. parovoZZ

    parovoZZ Гуру

    Самое жесткое, что мк может уйти в deadlock.
    Для ламп накаливания(и для обогревателей тоже) регулирование необходимо производить не линейно, а по косинусу. На малых углах открытия очень нежно, а ближе к полному открытию грубо. Значения косинуса вычисляются загодя и заносятся в память.
     
    Последнее редактирование: 1 мар 2018
  10. Motrosoff

    Motrosoff Гик

    ёшки матрёшки, неужели так всё сложно(((
     
  11. parovoZZ

    parovoZZ Гуру

    О, на самом деле там не совсем косинус, а вот такой вот полином:

    y(x) = k1•x2 + k2•x + k3

    Сложно? Это ещё не поднимался вопрос о стабилизации яркости.