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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2014, 18:54   #351
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, работающий в фоновом режиме

delayMicroseconds() в прерывании будет работать
Так как эта функция не использует таймер
Admin вне форума   Ответить с цитированием
Старый 30.03.2014, 20:39   #352
ChemDevil
Junior Member
 
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0
ChemDevil is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Надо переделать Вашу программу для Дуе без библиотек. Я так понял, что алгоритм Вашей программы примерно такой (для одного канала):
1. сначала обзываем входной (детектор 0) и выходной пин (на триак).
2. Ставим уровень сигнала на триак = 0;
3. Нужно запустить какой-то таймер.. Видимо, из стандартных библиотек.
4. Функция прерывания: там одна в другой (первая по переднему фронту, после ее завершения вызывается вторая по заднему);
5. В основном теле обработка из сериал будет.

Вопрос: у вас есть функция halfcycle() (там счетчик), не вижу где она вызывается. По алгоритму примерно всё верно?
ChemDevil вне форума   Ответить с цитированием
Старый 30.03.2014, 21:08   #353
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Цитата:
Сообщение от ChemDevil Посмотреть сообщение
Вопрос: у вас есть функция halfcycle() (там счетчик), не вижу где она вызывается.
на 5 строчек выше
Цитата:
StartTimer1(halfcycle, 40); //время для одного разряда ШИМ
и на 10 ниже в первом обработчике прерывания по UP
Цитата:
ResumeTimer1(); //запустить таймер
А так примерно правильно. Насчет таймера из стандартных библиотек - надо четко следить чтоб она для DUO подходила, все таки камень серьезно отличается от большинства контроллеров. Например если применимо к данной программе - у основных контроллеров серии Arduino внешние прерывания могут быть всего у 2=х пинов, то у Duo можно назначить любой, соответственно и синтаксис функции несколько изменен

PS. Настолько привык к CyberLib , что уже с трудом вспомнил как обращаться к цифровым пинам стандартными командами Arduino, еще раз спасибо Admin

Последний раз редактировалось Bulatovor; 30.03.2014 в 21:22.
Bulatovor вне форума   Ответить с цитированием
Старый 30.03.2014, 21:23   #354
ChemDevil
Junior Member
 
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0
ChemDevil is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Хм, Bulatovor, вы заинтриговали меня) может быть мне тоже проще исправить данную библиотеку под Дуе? Это сложно?
ChemDevil вне форума   Ответить с цитированием
Старый 30.03.2014, 21:51   #355
ChemDevil
Junior Member
 
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0
ChemDevil is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Что принципиально нужно исправить, чтобы пользоваться данной библиотекой с Due? Это реальная задача?
ChemDevil вне форума   Ответить с цитированием
Старый 30.03.2014, 22:19   #356
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

В основном адресацию. Библиотека уже большая - для начала , чтоб работать с программой димера, достаточно исправить прямое обращение к пинам, Timer1 и Uart
Bulatovor вне форума   Ответить с цитированием
Старый 30.03.2014, 22:23   #357
ChemDevil
Junior Member
 
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0
ChemDevil is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Т.е. просто заменить эти команды на стандартные?
ChemDevil вне форума   Ответить с цитированием
Старый 30.03.2014, 23:28   #358
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Заменить библиотечные функции на стандартные -это если переписать программу диммера. Если переписывать библиотеку -то первое что нужно это мурзилка по контроллеру -порты, частоты, регистры
Bulatovor вне форума   Ответить с цитированием
Старый 30.03.2014, 23:54   #359
ChemDevil
Junior Member
 
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0
ChemDevil is an unknown quantity at this point
Lightbulb Re: Многоканальный Dimmer, работающий в фоновом режиме

Удалось исправить собственную программу, чему я несказанно рад. Если кому понадобится, вот код с пояснениями:
Код:
String Voltage = "";//Строка общения с Serial;
int Ac_Load = 3;//Пин нагрузки;   
int Dimming = 999;//Уровень яркости (мб любой) 0 - min, 999 - max;
boolean Marker = false;//Маркер того, прошла ли функция прерывания ZC (ZeroCross);
unsigned long currentM = micros();//Счётчик микросекунд (текущее значение);
unsigned long previousM = 0;//Предыдущее значение счетчика микросекунд;
	 
void setup() {
Serial.begin(9600);//Инициализация Serial;
pinMode(Ac_Load, OUTPUT);// Устанавливаем AC Load пин как вывод;
attachInterrupt(2, ZC, RISING);//Функция внешнего прерывания ZC (ZeroCross) на пин 2;
}
	 
void ZC(){ 
Marker = true;//Маркер того, что фунция прошла;
previousM = currentM;//Приравнивает предыдущее значение счетчика к текущему (начинаем отсчет);
}
 
void loop() {
currentM = micros();
//Время оключения: В сети 50Гц, одна волна: 1/50=20мс; Одна полуволна 10мс; (10мс-10мкс)/999=10мкс;
int Dimtime = (10*(999-Dimming));
//Если маркер больше нуля и разница между текущим и предыдущим значением больше времени отключения 
if ((Marker == true) && ((currentM - previousM) > Dimtime))
  {digitalWrite(Ac_Load, HIGH);//Открываем симистор;
    if ((currentM - previousM) > (Dimtime+10))//Через 10мкс закрываем симистор;
      {digitalWrite(Ac_Load, LOW);//Закрываем симистор;
        Marker = 0;//Возвращаем маркер в исходное состояние;
      }
  }
while (Serial.available() > 0)//Цикл приема данных с Serial 
  {char c = Serial.read();//Записываем посимвольно данные из Serial$
     if (c == ' ')//Если в конце пробел, то заканчиваем принятие строки;
      {Serial.println(Voltage);//Выводим в Serial всю строку;
        Dimming = Voltage.toInt();//Переводим строку в уровень яркости (integer);
        Voltage = "";//Обнуляем строку;
      }
     else
     {Voltage += c;//Записываем очередной символ в строку;    
     }      
  }
}
уровень яркости от 0 до 999. В com-порт подаем число яркости+пробел (маячок об окончании). Отдельное спасибо этому форму за помощь
ChemDevil вне форума   Ответить с цитированием
Старый 17.04.2014, 14:31   #360
Vvasya
Junior Member
 
Регистрация: 17.04.2014
Сообщений: 1
Вес репутации: 0
Vvasya is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Добрый день!
Сейчас очень интересует Ваша разработка, но есть пара вопросов...
Сразу извиняюсь, возможно где-то в теме есть ответы, но 36 страниц...
Интересует насколько универсален ваш диммер.
Есть 4 вида нагрузок:
- Блок питания на 12 вольт и светодиодная лента.
- Люминисцентные лампы с электромагнитными ПРА со стартерами и с электронными ПРА.
- Металогалогеновая лампа с балластом.
- Нагревательный прибор (маломощный).
Vvasya вне форума   Ответить с цитированием
Ответ


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

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

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

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


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


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