Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 25.11.2010, 23:27   #11
mr_smit
Временная регистрация
 
Аватар для mr_smit
 
Регистрация: 14.09.2009
Сообщений: 87
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
mr_smit на пути к лучшему
По умолчанию Re: Задержки при плавной регулировке. Диммер с ДУ

Код:
#define delay_   30    // плавность включения
...
status++;
...
OCR1A = nagruzka[status];   // увеличиваем яркость
delay_ms(delay_);
Т.е. значение в OCR1A меняется с интервалом 30 мс. А разве можно как то по другому плавно включить????
Реклама:
mr_smit вне форума  
Непрочитано 25.11.2010, 23:51   #12
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Задержки при плавной регулировке. Диммер с ДУ

Сообщение от mr_smit Посмотреть сообщение
Т.е. если прошло более 48 мс и от TSOPа ничего не пришло, то значит кнопку отпустили button_up = yes; и увеличение яркости в цикле while (button_up == no) прекращается.
Таймер увеличения/уменьшения - сами посылки. Если 1 посылка с паузой занимает 100мС, то и синхронизируйтесь прямо по ним. Это проще, чем отсчитывать 48мС и заканчивать текущую операцию. Получили команду с пульта - выполнили ее. Придет следующая - опять реакция. Не пришла - угол включения тиристора остается постоянным.
kison вне форума  
Непрочитано 26.11.2010, 01:05   #13
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Задержки при плавной регулировке. Диммер с ДУ

Сообщение от mr_smit Посмотреть сообщение
Т.е. значение в OCR1A меняется с интервалом 30 мс. А разве можно как то по другому плавно включить????
У вас не плавно включить, а плавно изменять.
Даже показал примерно как.
CodeNameHawk вне форума  
Непрочитано 26.11.2010, 22:09   #14
mr_smit
Временная регистрация
 
Аватар для mr_smit
 
Регистрация: 14.09.2009
Сообщений: 87
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
mr_smit на пути к лучшему
По умолчанию Re: Задержки при плавной регулировке. Диммер с ДУ

Сообщение от kison Посмотреть сообщение
Таймер увеличения/уменьшения - сами посылки. Если 1 посылка с паузой занимает 100мС, то и синхронизируйтесь прямо по ним. Это проще, чем отсчитывать 48мС и заканчивать текущую операцию. Получили команду с пульта - выполнили ее. Придет следующая - опять реакция. Не пришла - угол включения тиристора остается постоянным.
Сделал. Нет плавности.

Код:
...
        if (b_cnt == 32)  {                                                     //если приняли уже 4 байта
                 if ((cmd_1 + cmd_0) == 0xFF) {                                  //проверили правильность приема команды              
                  cmd = cmd_1;
                    if (cmd == 0b11111000) {      // кнопка "Display" - увеличение яркости
                     TCCR1B=0x02;
                     OCR1A = nagruzka[status];
                     status++;
                     if (status ›= 98) {
                      TCCR1B=0x00;
		              status = 97;   
                      PORTC.5 = 1;                // полностью включили
			         }
                    }
mr_smit вне форума  
Непрочитано 26.11.2010, 22:14   #15
mr_smit
Временная регистрация
 
Аватар для mr_smit
 
Регистрация: 14.09.2009
Сообщений: 87
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
mr_smit на пути к лучшему
По умолчанию Re: Задержки при плавной регулировке. Диммер с ДУ

Сообщение от CodeNameHawk Посмотреть сообщение
Зачем здесь
Код:
delay_ms(delay_);
Вместо того, чтобы делать прерывания минимально короткими, вы в них применяете задержку. А ведь пока выполняется одно прерывание, то другое прерывание, с более низким приоритетом, будет отложено.
Так ведь в прерывании нет delay_ms(delay_). Эту задержку использую в основном цикле. Я окончательно запутался. Руки опускаются... как только люди яркость регулируют...
mr_smit вне форума  
Непрочитано 26.11.2010, 23:02   #16
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Задержки при плавной регулировке. Диммер с ДУ

Сообщение от mr_smit Посмотреть сообщение
Сделал. Нет плавности.
Теперь отключите светодиод оттуда, где он сейчас и инвертируйте его состояние при каждом приеме посылки. Проблема именно в неравномерном приеме. А задержка в прерывании у Вас все же есть, пусть и на 200мкС всего. Но при такте в 16МГц это 3200 тактов. Разблокируйте прерывания внутри обработчика перед задержкой и запретите сразу после нее. Я не думаю что будут проблемы если эта задержка вдруг станет 257мкС.
kison вне форума  
Непрочитано 26.11.2010, 23:03   #17
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Задержки при плавной регулировке. Диммер с ДУ

Сообщение от mr_smit Посмотреть сообщение
Так ведь в прерывании нет delay_ms(delay_).
Задержка в прерывании, это типа здесь.
Код:
// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
  { 
  PORTC.5 = 1;    // открыли симистор
  delay_us(200);  // импульс 200 мкс
  PORTC.5 = 0;    // вернулись в режим ожидания
  }
Попробуйте выкинуть delay_ms(delay_) в основном цикле.
Код:
	   if (cmd == 0b11111000) {       // кнопка "Display" - увеличение яркости
          TCCR1B=0x02;
		  status++;
		  if (status ›= 98) {
            TCCR1B=0x00;
		    status = 98;   
            PORTC.5 = 1;                // полностью включили
			}
          else {
		    OCR1A = nagruzka[status];   // увеличиваем яркость
		    delay_ms(delay_);
            }
		 }
Если есть индикатор, для отладки выводите на него код принятой команды и количество правильно принятых импульсов и количество неудачных декодирований команд.
(Придется изменить подпрограмму)
Узнаете успевает ли все обрабатывать проц.
CodeNameHawk вне форума  
Непрочитано 27.11.2010, 02:01   #18
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Задержки при плавной регулировке. Диммер с ДУ

Сообщение от CodeNameHawk Посмотреть сообщение
Узнаете успевает ли все обрабатывать проц.
На 16MHz?!!

Возможно Вы загнали пульт в слишком жесткие условия по времени. Если поможет, здесь проект обработки как раз с таким пультом(системой команд). Вся работа с пультом в прерывании Ext_INT0, для отсчета интервалов использован Timer0. МК Attiny15(1.6MHz). Внешнее прерывание настроено на любой перепад. Правда всё на ассемблере... как сумел...
На картинке верхние 3 графика - начало команд.
Remote_On-Off.zip
Нажмите на изображение для увеличения
Название: Nec.jpg
Просмотров: 77
Размер:	156.6 Кб
ID:	15165
omercury вне форума  
Непрочитано 27.11.2010, 17:13   #19
mr_smit
Временная регистрация
 
Аватар для mr_smit
 
Регистрация: 14.09.2009
Сообщений: 87
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
mr_smit на пути к лучшему
Вопрос Re: Задержки при плавной регулировке. Диммер с ДУ

Сообщение от omercury Посмотреть сообщение
Возможно Вы загнали пульт в слишком жесткие условия по времени.
Таймер тикает каждые 96 мкс. Он что на 16МГц так будет тикать что на 8МГц и т.д. О каких интервалах вы говорите???

Это?
Код:
if (tick ›= 92 && tick ‹ 96)  
if (tick ›= 21 && tick ‹ 25 && start_cond) 
if (tick ›= 10 && tick ‹ 22 && start_cond)
mr_smit вне форума  
Непрочитано 27.11.2010, 18:01   #20
mr_smit
Временная регистрация
 
Аватар для mr_smit
 
Регистрация: 14.09.2009
Сообщений: 87
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
mr_smit на пути к лучшему
Вопрос Re: Задержки при плавной регулировке. Диммер с ДУ

Убавил задержку в прерывании. Было 200 мкс, поставил 75 мкс. Стало плавнее...
Код:
// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
  { 
  PORTC.5 = 1;    // открыли симистор
  delay_us(75);  // импульс 75 мкс
  PORTC.5 = 0;   // вернулись в режим ожидания
  }
Как подать импульс открытия не используя delay_us(75) я не знаю. Понимаю что в прерывании нельзя использовать задержку. Но а как без неё??????????

Вот, смотрите как всё работает:
Видео:


Последняя редакция кода в приложении.
Вложения:
Тип файла: rar dimmer.rar (3.1 Кб, 65 просмотров)
mr_smit вне форума  
Закрытая тема

Закладки


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Нужна схема автоматического закрывания дверей автомобиля при движении Aviasined Электроника средств транспорта 17 28.09.2010 06:14


Часовой пояс GMT +4, время: 05:43.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot