Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.01.2017, 13:58   #1
smile-777
Junior Member
 
Регистрация: 18.01.2017
Сообщений: 8
Вес репутации: 0
smile-777 is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Цитата:
Сообщение от Admin Посмотреть сообщение
PHP код:
#include <CyberLib.h> //Библиотека от Cyber-Place.ru
volatile uint8_t ticDimmer1Dimmer2Dimmer3;
uint8_t data;

void setup() 

  
D4_OutD5_OutD6_Out//Настраиваем порты на выход
  
D4_LowD5_LowD6_Low//установить на выходах низкий уровень сигнала
  
D2_In//настраиваем порт на вход для отслеживания прохождения сигнала через ноль  
  
//CHANGE – прерывание вызывается при любом изменении значения на входе; 
//RISING – вызов прерывания при изменении уровня напряжения с низкого (Low) на высокий(HIGH) 
//FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкий (Low) 
    
attachInterrupt(0detect_upLOW);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
    
StartTimer1(halfcycle40); //время для одного разряда ШИМ
    
StopTimer1(); //остановить таймер
    
UART_Init(115200); //инициализация порта
}
//********************обработчики прерываний*******************************
void halfcycle()  //прерывания таймера

  
tic++;  //счетчик  
  
if(Dimmer1 tic D4_High//управляем выходом
  
if(Dimmer2 tic D5_High;  //управляем выходом
  
if(Dimmer3 tic D6_High;  //управляем выходом 
}

void  detect_up()  // обработка внешнего прерывания. Сработает по переднему фронту
{  
 
tic=0;             //обнулить счетчик
 
ResumeTimer1();   //запустить таймер
 
attachInterrupt(0detect_downHIGH);  //перепрограммировать прерывание на другой обработчик
}  

void  detect_down()  // обработка внешнего прерывания. Сработает по заднему фронту
{   
 
StopTimer1(); //остановить таймер
 
D4_LowD5_LowD6_Low//логический ноль на выходы
 
tic=0;       //обнулить счетчик
 
attachInterrupt(0detect_upLOW); //перепрограммировать прерывание на другой обработчик

//*************************************************************************
void loop() 
{
Start
  
if (UART_ReadByte(data)) Dimmer1=data;
  
   
Dimmer2=195//200=мин. 0=макс 
   
Dimmer3=0//200=мин. 0=макс 
End
Доброго времени суток!
Признаюсь честно, не так давно заинтересовался программированием МК, причем с целью именно прикладного применения. Язык С++ изучаю уже 3й день и видимо по этому у меня есть вопросы по данному коду
Не сочтите за неуважение!

Как я понял, изначально мы назначаем нулевому прерыванию на входе 2 запускать функцию detect_up() при появлении низкого уровня (переход через ноль).
Эта функция обнуляет счетчик tic и запускает таймер1 "тикать" с периодичностью 40мкс, заодно переопределяя функцию и условие нулевого прерывания.
В это время таймер "тикает", синусоида ползет вверх и когда количество тиков превышает "уровень" диммера, на выход подается единица, лампочка светит с этого момента синусоиды и до её спада до нуля.
При переходе через ноль, функция detect_down() останавливает тиканье таймера, обнуляет его и ставит ноль на выходы, "гася лампочку" на какую-то часть периода, до нового запуска цикла.

Верно ли я мыслю?
Отсюда первый вопрос, почему всего 201 уровень (0...200), если в полупериод 50Гц укладывается 250 отрезков по 40мкс?
И ещё объясните пожалуйста значение выражения volatile uint8_t tic?
Это что-то связанное с работой регистров?
8 это разрядность таймера?
Спасибо за терпение! Простите за тупость )
smile-777 вне форума   Ответить с цитированием
Старый 18.01.2017, 14:08   #2
Volody
Junior Member
 
Регистрация: 18.01.2017
Сообщений: 2
Вес репутации: 0
Volody is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Здравствуйте люди добрые! Как можно осуществить задуманную задачу. С одного радио пульта управлять несколькими лампами. Включать, диммировать по раздельности, а так же всё вместе и сразу, то есть управлять 3-5 ардуино с одного пульта и сразу вместе и по раздельности. Плавное включение и отключение

Последний раз редактировалось Volody; 18.01.2017 в 14:13.
Volody вне форума   Ответить с цитированием
Старый 18.01.2017, 14:21   #3
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Я так понимаю все от кнопок пульта зависит
Если пульт с одной кнопкой , то ни как
Admin вне форума   Ответить с цитированием
Старый 18.01.2017, 15:42   #4
smile-777
Junior Member
 
Регистрация: 18.01.2017
Сообщений: 8
Вес репутации: 0
smile-777 is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Цитата:
Сообщение от Admin Посмотреть сообщение
Я так понимаю все от кнопок пульта зависит
Если пульт с одной кнопкой , то ни как
А по моим вопросам что-нибудь скажете?
Или может где копать укажете?
Заранее благодарен!
smile-777 вне форума   Ответить с цитированием
Старый 18.01.2017, 14:28   #5
Volody
Junior Member
 
Регистрация: 18.01.2017
Сообщений: 2
Вес репутации: 0
Volody is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

НУ это и понятно, что с одной кнопкой никак))))). Кнопок на пульте много и это радует). Вот каждую прописать в скетч и назначить ей нужную команду. Как это сделать? Мне нужно даже просто скетч диммирование с радиопульта и всё, остальное примерно сам знаю как и что, а может и нет)
Volody вне форума   Ответить с цитированием
Старый 18.01.2017, 21:18   #6
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Цитата:
Верно ли я мыслю?
Верно

Цитата:
Отсюда первый вопрос, почему всего 201 уровень (0...200), если в полупериод 50Гц укладывается 250 отрезков по 40мкс?
Еще есть уровень срабатывания детектора, детектор это светодиод и для его включения требуется определенный уровень напряжения.

Цитата:
И ещё объясните пожалуйста значение выражения volatile uint8_t tic?
uint8_t - это тип байт

volatile – это спецификатор, применяемый при объявлении переменной. Он сообщает компилятору, что значение переменной может изменяться в любой момент – без какого-либо действия со стороны кода, который компилятор обнаруживает поблизости.
Admin вне форума   Ответить с цитированием
Старый 19.01.2017, 05:33   #7
smile-777
Junior Member
 
Регистрация: 18.01.2017
Сообщений: 8
Вес репутации: 0
smile-777 is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Цитата:
Сообщение от Admin Посмотреть сообщение
Верно


Еще есть уровень срабатывания детектора, детектор это светодиод и для его включения требуется определенный уровень напряжения.


uint8_t - это тип байт

volatile – это спецификатор, применяемый при объявлении переменной. Он сообщает компилятору, что значение переменной может изменяться в любой момент – без какого-либо действия со стороны кода, который компилятор обнаруживает поблизости.
Спасибо за развернутый ответ!

Понял, получается детектор перехода через ноль имеет задержку, её вы и учли, но это в свою очередь означает, что мы не можем включить нагрузку на 100% мощности, т.к. часть синусоиды в любом случае обрезается, верно?
И ещё, 40*200 - выбрано опытным путем, как я понимаю?
Но мы ведь можем для удобства сделать например 32 мкс период таймера, что бы в 8000мкс укладывалось 250 значений?
Или даже 80мкс, что бы 100 значений (100% с шагом 1%).

По uint8_t понял. К теме это не относится, дальше сам )

Спасибо за ответ!
smile-777 вне форума   Ответить с цитированием
Старый 19.01.2017, 12:55   #8
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Цитата:
что мы не можем включить нагрузку на 100% мощности
В сети напряжение плавает от 180 до 250 В, поэтому отсечку в 2В я бы не стал рассматривать в всерьез. На симисторе падение напряжения гораздо больше

Цитата:
И ещё, 40*200 - выбрано опытным путем, как я понимаю?
да
Цитата:

Но мы ведь можем для удобства сделать например 32 мкс период таймера, что бы в 8000мкс укладывалось 250 значений? Или даже 80мкс, что бы 100 значений (100% с шагом 1%).
Конечно можно.
Admin вне форума   Ответить с цитированием
Старый 19.01.2017, 21:38   #9
smile-777
Junior Member
 
Регистрация: 18.01.2017
Сообщений: 8
Вес репутации: 0
smile-777 is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Цитата:
Сообщение от Admin Посмотреть сообщение
На симисторе падение напряжения гораздо больше
да вроде те же 1.5-2 вольта...
Ну да ладно, суть не в этом, вас я понял, потери не большие, на уровне погрешности.
Спасибо!
smile-777 вне форума   Ответить с цитированием
Старый 20.01.2017, 07:53   #10
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Извиняюсь, отсечка там не 2 вольта, а побольше. Это зависит от минимального тока срабатывания оптрона
Admin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 17 (пользователей: 0 , гостей: 17)
 

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 21:38. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика