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

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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.02.2015, 19:46   #11
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 800
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, работающий в фоновом режиме

Ну теперь для меня стало ясно где искать. Чтение яндекса показало, что IRRemove.h использует прерывания во всю. Например участники дружественного форума mebitek и Chip ( )еще в 2011 году выяснили, что IrRemove и MsTimer2 одно и тоже прерывание Timer2 и несовместимы.
Итого, прерывания в ардуине не имеют приоритета -соответственно пока обрабытывается одно из прерываний - в твоем случае чтение ИК датчика - прерывания диммера не работают. Чтоб не мигало нужна ИК библиотека без прерываний(но я такой не нашел -может Вам повезет) . Ну и решить проблемы немосместимости библиотек MsTimer2 её можно заменить на TimerOne или использовать многозадачность ардуино версии 2

А теперь о грустном
Цитата:
Хотелось бы, чтобы свет вообще не мигал из-за ИК приемника) По крайней мере при считывании температуры этого удалось добиться
Математика твои хотелки делает невозможным (ну за исключением проживания на жд станциях европы и сша, где частота тока 16 и 25 кгц). Длина пачки импульсов большинства пультов от 60 до 80 мсек. А чтоб диммер не пропускал периоды - считать и обработать эту пачку вы должны за 40 . Путем оптимизации кода можно добится только минимального мерцания -шоб незаметно было

После оптимизации кода чтения пульта ДУ надо измерить время его обработки, соответственно увеличить интервал таймера
Цитата:
StartTimer1(halfcycle, 40); //время для одного разряда ШИМ
и соответственно уменьшить дискретность регулирования

Последний раз редактировалось Bulatovor; 25.02.2015 в 20:57.
Bulatovor вне форума   Ответить с цитированием
 


Здесь присутствуют: 19 (пользователей: 0 , гостей: 19)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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


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


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