Может драйвер светодиодной лампы мешаетЯ вот собрал диммер для светодиодных ламп (230 В)
Может драйвер светодиодной лампы мешаетЯ вот собрал диммер для светодиодных ламп (230 В)
А в этом уже есть что-то! Осталось найти такой скетч )) Я в написании скетчей не фонтан. Буду пробовать и этот вариант.Шим тут вреден.
На один переход через ноль, один импульс открывания.
Причём импульс должен коротким, иначе если податите длинный импульс не задолго до перехода через ноль (малая мощность), симистор откроется два раза.
Открылся, напряжение упало до нуля - закрылся, и открылся снова, когда напряжение выросло.
Нет, драйвер тут не причем. Пробовал полностью исключить светодиодную нагрузку и подключал ЛН. Результат тот-же, только мелкие мерцания не так заметны из-за понятного специфического свойства работы ЛН.Может драйвер светодиодной лампы мешает
синхронизируйте осциллограф от P2 и покажите P1.Нет, драйвер тут не причем. Пробовал полностью исключить светодиодную нагрузку и подключал ЛН. Результат тот-же, только мелкие мерцания не так заметны из-за понятного специфического свойства работы ЛН.
Вот - первый сигнал это в точке Р1 а второй (прямоугольный) - это Р2.синхронизируйте осциллограф от P2 и покажите P1.
Шутить вы умеете, а поискать ? Вы что думаете до вас никто не собирал?А в этом уже есть что-то! Осталось найти такой скетч )) Я в написании скетчей не фонтан. Буду пробовать и этот вариант.
Потрясли первая и третья ссылка! ))))))Шутить вы умеете, а поискать ? Вы что думаете до вас никто не собирал?
https://arduino.ua/prod3117-odnokanalnii-dimmer-220v-dlya-arduino-ot-robotdyn
https://github.com/RobotDynOfficial/RBDDimmer
https://www.google.com/search?sxsrf=ALeKk03el6EDIdtJpRuCvWCqUm8CYuXkOg:1603298354588&source=hp&ei=MmSQX7mpIYj6UraljpAJ&q=Arduino+скетч+для+диммера&oq=&gs_lcp=CgZwc3ktYWIQElAAWABg4uAJaABwAHgAgAEAiAEAkgEAmAEAoAEGqgEHZ3dzLXdpeg&gs_ivs=1&sclient=psy-ab
я просил не сигналы отдельно показать, а один относительно другого.Вот - первый сигнал это в точке Р1 а второй (прямоугольный) - это Р2.
Ну да готовая библиотека просто мусор.Вот со второй ссылкой надо будет покопаться во всем мусоре и найти что-то полезное.
Извините, у меня двухканального осциллографа нет, не могу одновременно подключить оба пина для сравнения. Одно могу сказать - сигнал перехода нуля стоит стабильно как вкопанный и ШИМ сигнал так же (частота не скачет).я просил не сигналы отдельно показать, а один относительно другого.
Чтобы можно было увидеть задержку и если есть пропадания то сбой синхронизации.
Для кого-то она готовая а для кого-то (например как я, простого электрика) она далеко ни о чем не говорит. Я пытаюсь разобраться в том что я не большой мастер а вы мне бросаете "формулы высшей математики и утверждаете что это как два пальца об асфальт". Для вас это просто а для меня это еще сложная математика.Ну да готовая библиотека просто мусор.
У вас стоит сигнал как вкопанный потому что вы от него же и синхронизируетесь.Извините, у меня двухканального осциллографа нет, не могу одновременно подключить оба пина для сравнения. Одно могу сказать - сигнал перехода нуля стоит стабильно как вкопанный и ШИМ сигнал так же (частота не скачет).
Ну да ладно. Дайте ссылку на программу, которую грузите.
#include "CyberLib.h" //Библиотека от Cyber-Place.ru
volatile uint32_t Dimmer1, Dimmer2,T,T1,D1,D2;
#define DT 10 //длительность импульса
#define Tdet 10000 //длительность импульса 100 Гц
#define Tdet2 Tdet/2 // половина длительность 100 Гц
void setup()
{
D5_Out; D6_Out; //Настраиваем порты на выход
D5_Low; D6_Low; //установить на выходах низкий уровень сигнала
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
pinMode(A0, INPUT);
pinMode(A1, INPUT);
T=micros();
attachInterrupt(0,detect,RISING); // настроить срабатывание прерывания interrupt0 на pin 2 по положительному фронту
UART_Init(115200); //инициализация порта
}
void loop()
{
Dimmer1 = map(analogRead(0), 0, 1023, 255, 0); // Эти входы для потенциометров добавил сам
Dimmer2 = map(analogRead(1), 0, 1023, 255, 0);
T1=micros()-T;
if (T1>0 && T1<Tdet) //контроль длительности импульса детектора
{
if (D1>0 && (D1-T1)>=0) { D5_High; delayMicroseconds(DT); D1=0; D5_Low;}
if (D2>0 && (D2-T1)>=0) { D6_High; delayMicroseconds(DT); D2=0; D6_Low; }
}
}
void detect() // обработка внешнего прерывания.
{
if (T1>Tdet2) //фильтр дребезга перехода
{ D1=Dimmer1; D2=Dimmer2; T=micros(); D6_Low; D5_Low; }
}
#include "CyberLib.h" //Библиотека от Cyber-Place.ru
volatile uint32_t T,T1,D1,D2;
#define DT 10 //длительность импульса
#define Tdet 10000 //длительность импульса 100 Гц
#define Tdet2 Tdet/2 // половина длительность 100 Гц
void setup()
{
D5_Out; D6_Out; //Настраиваем порты на выход
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
pinMode(A0, INPUT);
pinMode(A1, INPUT);
T=micros();
attachInterrupt(0,detect,RISING); // настроить срабатывание прерывания interrupt0 на pin 2 по положительному фронту
UART_Init(115200); //инициализация порта
}
void loop()
{
D5_Low; D6_Low;
T1=micros()-T;
if (T1>0 && T1<Tdet) //контроль длительности импульса детектора
{
if (D1-T1)>0) { D5_High; delayMicroseconds(DT);D1=0;}
if (D2-T1)>0) { D6_High; delayMicroseconds(DT);D2=0;}
}
}
void detect() // обработка внешнего прерывания
{
if (T1>Tdet2) //фильтр дребезга перехода
{ T=micros();
D1=map(analogRead(0), 0, 1023, 255, 0); // Эти входы для потенциометров
D2= map(analogRead(1), 0, 1023, 255, 0); }
}
Этот код вообще не компилируется, выдает какие-то ошибки:немного упростил:
ошибка синтаксиса скобки не хватает:Этот код вообще не компилируется, выдает какие-то ошибки:
error: expected primary-expression before '>' token
if (D1-T1)>0) { D5_High; delayMicroseconds(DT);D1=0;}
^
error: expected primary-expression before '>' token
if (D2-T1)>0) { D6_High; delayMicroseconds(DT);D2=0;}
А код выше компилируется но не генерируются импульсы запуска
Добавил скобки, скомпилировался код. Теперь генерирует на выходе НЕ регулируемые импульсы с частотой 35,6 кГц. Лампочка соответственно, горит постоянно. ((ошибка синтаксиса скобки не хватает:
if((D1-T1)>0) { D5_High; delayMicroseconds(DT);D1=0;}
if((D2-T1)>0) { D6_High; delayMicroseconds(DT);D2=0;}
#include "CyberLib.h" //Библиотека от Cyber-Place.ru
volatile uint32_t T,T1,D1,D2;
#define DT 10 //длительность импульса
#define Tdet 10000 //длительность импульса 100 Гц
#define Tdet2 Tdet/2 // половина длительность 100 Гц
void setup()
{
D5_Out; D6_Out; //Настраиваем порты на выход
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
pinMode(A0, INPUT);
pinMode(A1, INPUT);
T=micros();
attachInterrupt(0,detect,RISING); // настроить срабатывание прерывания interrupt0 на pin 2 по положительному фронту
UART_Init(115200); //инициализация порта
}
void loop()
{
D5_Low; D6_Low;
T1=micros()-T;
ardprintf(" %d %d %d %d ", T,T1,D1,D2);
if (T1>0 && T1<Tdet) //контроль длительности импульса детектора
{
if (D1-T1)>0) { D5_High; delayMicroseconds(DT);D1=0;}
if (D2-T1)>0) { D6_High; delayMicroseconds(DT);D2=0;}
}
}
void detect() // обработка внешнего прерывания
{
if (T1>Tdet2) //фильтр дребезга перехода
{ T=micros();
D1=map(analogRead(0), 0, 1023, 255, 0); // Эти входы для потенциометров
D2= map(analogRead(1), 0, 1023, 255, 0);
}
}