![]() |
|
|
|
|
#1 |
|
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 800 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
В основном адресацию. Библиотека уже большая - для начала , чтоб работать с программой димера, достаточно исправить прямое обращение к пинам, Timer1 и Uart
|
|
|
|
|
|
#2 |
|
Junior Member
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0 ![]() |
Т.е. просто заменить эти команды на стандартные?
|
|
|
|
|
|
#3 |
|
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 800 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Заменить библиотечные функции на стандартные -это если переписать программу диммера. Если переписывать библиотеку -то первое что нужно это мурзилка по контроллеру -порты, частоты, регистры
|
|
|
|
|
|
#4 |
|
Junior Member
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0 ![]() |
Удалось исправить собственную программу, чему я несказанно рад. Если кому понадобится, вот код с пояснениями:
Код:
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;//Записываем очередной символ в строку;
}
}
}
|
|
|
|
|
|
#5 |
|
Junior Member
Регистрация: 17.04.2014
Сообщений: 1
Вес репутации: 0 ![]() |
Добрый день!
Сейчас очень интересует Ваша разработка, но есть пара вопросов... Сразу извиняюсь, возможно где-то в теме есть ответы, но 36 страниц... Интересует насколько универсален ваш диммер. Есть 4 вида нагрузок: - Блок питания на 12 вольт и светодиодная лента. - Люминисцентные лампы с электромагнитными ПРА со стартерами и с электронными ПРА. - Металогалогеновая лампа с балластом. - Нагревательный прибор (маломощный). |
|
|
|
|
|
#6 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Диммер не будет работать с люминесцентными лампами.
С металогалогеновыми лампами работать будет, но про балласт хотелость бы подробней услышать? С нагревательными приборами , с большинством светодиодных ламп тоже будет работать. Не будет работать с устройствами имеющими электронные преобразователи к таким относятся люминесцентные лампы |
|
|
|
|
|
#7 | |
|
Junior Member
Регистрация: 16.04.2014
Сообщений: 7
Вес репутации: 0 ![]() |
Цитата:
Залил скетч, подключил купленный у вас модуль... на буквы Г и d реагирует, на все остальное горит полным накалом... т.е. без разницы отослал я 0 или 250, просто горит и все.... что не так? комманду отправляю так: 0 и ентер, с пробел или без после 0-250 разницы ни какой... |
|
|
|
|
|
|
#8 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Попробуйте вот этот скетч
Регулируется ступенчато от 0 до 9 |
|
|
|
|
|
#9 |
|
Junior Member
Регистрация: 29.04.2014
Сообщений: 3
Вес репутации: 0 ![]() |
ПЛАТФОРМА ARDUINO LEONARDO ПРИ ПОДКЛЮЧЕНИИ БИБЛИОТЕКИ БИБЛИОТЕКА CyberLib_H НЕ ОПРЕДЕЛЯЕТСЯ
|
|
|
|
|
|
#10 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Библиотека CyberLib для leonardo не подойдет
|
|
|
|
![]() |
| Здесь присутствуют: 5 (пользователей: 0 , гостей: 5) | |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|