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

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

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

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

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

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

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

 
Опции темы
Непрочитано 05.03.2015, 13:33  
rd6dne
Частый гость
 
Регистрация: 03.05.2007
Сообщений: 17
Сказал спасибо: 3
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
rd6dne на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Вот ссылкаhttp://www.radioparty.ru/device-pic/214-sensordimmer Работает стабильно, под свои нужды немного доработать можно. Вместо сенсора кнопку ставил то-же работает.
Реклама:
rd6dne вне форума  
Непрочитано 05.03.2015, 20:53  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
Но, если в прерывании будем инициализировать TCNT значениями больше чем регистр сравнения, то и совпадения не будет никогда. Кстати, я могу это сейчас прогнать в AVR Studio
PS. Только что прогнал в AVR Studio свои предположения по инициализации. Все подтвердилось - ШИМ пропадает.
"Прощёлкайте" пожалуйста ещё один цикл таймера в симулякре.
omercury вне форума  
Непрочитано 05.03.2015, 21:42  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
"Прощёлкайте" пожалуйста ещё один цикл таймера в симулякре.
Всем доброго времени суток.
Если честно, я не понял, что я должен был увидеть, но для большей наглядности, я сообразил проект в Proteus. Замкнутый переключатель вписывает значение в TCNT0.

PS. Только что заметил, что, если значение, OCR0A маленькое, то пока в прерывании впишется ТCNT0 происходит совпадение и выход устанавливается и сбрасывается при TOP. Но при этом ШИМ становится не предсказуемым и зависит от длительности прерывания.... Мне кажется, что использовать эти режимы, которые мало поддаются анализу, неэффективно.
Вложения:
Тип файла: rar Work_tn13.rar (56.9 Кб, 23 просмотров)

Последний раз редактировалось МВА; 05.03.2015 в 23:02.
МВА вне форума  
Непрочитано 07.03.2015, 01:02  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Исправил в коде кучу ошибок теперь компилируется без ошибок и замечаний, но дело в том, что микроконтроллер почему-то не просыпается после нажатия кнопки!
Кому не сложно, посмотрите пожалуйста, почему? Вот исправленный код
Вложения:
Тип файла: txt Tiny13_button_and_LED.txt (5.3 Кб, 22 просмотров)
prosto_andriy вне форума  
Непрочитано 07.03.2015, 01:11  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
Если честно, я не понял, что я должен был увидеть
То, что ШИМ не щёлкнет только один раз, в следующем цикле уже всё будет нормально. Но для того он и сбрасывается, чтоб не выйти за пределы, правда делать это надо до включения таймера.
omercury вне форума  
Непрочитано 07.03.2015, 02:19  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

No comments.
Вложения:
Тип файла: txt Tiny13_button_and_LED.c.txt (7.6 Кб, 34 просмотров)
omercury вне форума  
Сказали "Спасибо" omercury
prosto_andriy (07.03.2015)
Непрочитано 07.03.2015, 18:37  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
No comments.
Всем доброго времени суток.
//TCCR0A &=~(3‹‹6); // щтключить ШИМ
//TCCR0A & = ~((1‹‹COM01)|(1‹‹COM00)); //Отключить ВЫХОД от ШИМ, хотя зачем это делать не включая его, тоже непонятно
ЭТИ ДВЕ СТРОЧКИ, ЭТО ОДНО И ТОЖЕ.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
if (BACKLIGHT_on) //Если флаг установлен (включен)
{
TCCR0A&=~(3‹‹6); // выключить ШИМ
led_on = 0;//выключить светодиод
BACKLIGHT_on = 0; //сбросить флаг его включения
I_Want_Sleep(); //усыпление микроконторллера
}
else //А если выключен - включить
{
-----------------------------------------------------------------------------------
//А ЗДЕСЬ, ЕСЛИ ВЫ ВКЛЮЧАЕТЕ ПОДСВЕТКУ, ЗАЧЕМ ВЫКЛЮЧАТЬ ШИМ. НО, ЕСЛИ ВКЛЮЧИТЬ ШИМ, ТО led_on=1; - БЕСПОЛЕЗНАЯ ИНСТРУКЦИЯ
-----------------------------------------------------------------------------------
TCCR0A&=~(3‹‹6); // выключить ШИМ
led_on = 1; // включить светодиод
BACKLIGHT_on = 1; // установить флаг включения
}

Последний раз редактировалось МВА; 07.03.2015 в 19:28.
МВА вне форума  
Непрочитано 07.03.2015, 19:19  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
То, что ШИМ не щёлкнет только один раз, в следующем цикле уже всё будет нормально. Но для того он и сбрасывается, чтоб не выйти за пределы, правда делать это надо до включения таймера.
Мы говорим о записи в TCNT в прерывании о переполнении. Прерывание вызывается в каждом цикле, при переходе через ТОР в 0.
Значит в каждом цикле будет происходить эта запись. И она имеет значение, только тогда, когда нужно подогнать точное значение между прерываниями для инкремента таймеров, но когда нет ШИМ и не в конце прерывания, а в начале. Но, как я понял, даже записывать 0, (в конце прерывания, а в начале он и так там есть) - это на грани фола. Дело в том, что таймер считает асинхронно. И когда уже идет прерывание, он начал отсчет с нуля. Прерывание, может иметь и пятьдесят, и сто, в общем, разное количество тиков. И поэтому, при выходе, будет сбрасываться счет, что приведет к затягиванию цикла на количество тиков в прерывании.

PC. Для Prosto Andriy, если Вы внимательно читали мои коментарии, то вот, в главной функции есть такие строчки.
systemClock++; //ЭТА ПЕРЕМЕННАЯ УВЕЛИЧИВАЕТСЯ В ПРЕРЫВАНИИ ПО ПЕРЕПОЛНЕНИЮ И У НЕЕ ДОЛЖНЫ БЫТЬ РАВНОМЕРНЫЕ ТИКИ.
//А В ДАННОМ СЛУЧАЕ, МЕЖДУ ПРЕРЫВАНИЯМИ, ОНА БУДЕТ УВЕЛИЧИВАТЬСЯ С ТАКОЙ СКОРОСТЬЮ, ЧТО ДОСТИГНЕТ МАКСИМУМА
//ЧЕРЕЗ МИЛИСИКУНДЫ.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!
Я думаю, что Вы даже не заметите, как МК проснется и снова заснет.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!
if (systemClock › secundes)
{
TCCR0A&=~(3‹‹6); // выключить ШИМ (ЭТА СТРОЧКА)
led_on = 0; //(И ЭТА ТОЖЕ ЕСТЬ В ФУНКЦИИ I_Want_Sleep())
I_Want_Sleep(); //Усыпляем МК в PowerDown

}

Последний раз редактировалось МВА; 07.03.2015 в 21:29.
МВА вне форума  
Непрочитано 07.03.2015, 21:52  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Omercury, большое спасибо за код, но компилятор похоже не понял вот эту строку:
PHP код:
TCCR0A = (1‹‹WGM1) | (1‹‹WGM0); //Теперь таймер работает в Fast PWM, но выход отключен, см 8 bit timer/counter register description 
Вылазит:
PHP код:
Error\untitled.c(155): undefined symbol 'WGM1' 
Непонятно почему???
И ещё мне непонятно, как добавить задержку, в том месте, где Вы посоветовали?
Как будет отсчитываться интервал времени, если таймер выключается предыдущей строкой??? Нужно его опять включить??? Вот фрагмент кода:
PHP код:
void I_Want_Sleep(void)
{
        
systemClock 0;
        
//TCCR0A =~(3‹‹6);    // щтключить ШИМ        
                //TCCR0A & = ~((1‹‹COM01)|(1‹‹COM00)); //Отключить ВЫХОД от ШИМ, хотя зачем это делать не включая его, тоже непонятно
        
led_on 0;                  //ЭТУ СТРОЧКУ ЖЕЛАТЕЛЬНО ПИСАТЬ ПОСЛЕ ОТКЛЮЧЕНИЯ ВЫХОДА ТАЙМЕРА 
    
BACKLIGHT_on 0;             //Сбросили флаг, чтоб в следующий раз включился
    
TCCR0B=0;                           //Disable timer   ТАЙМЕР МОЖНО НЕ ВЫКЛЮЧАТЬ, ЧТОБЫ ПОТОМ НЕ ВКЛЮЧАТЬ, ОН И ТАК ТИКАТЬ НЕ БУДЕТ.

/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        
        //Правильно его выключать, а вдруг досчитал уже.
        // И ещё сюда НАДО ДОБАВИТЬ задержку на пару секунд, чтоб оператор успел отпустить кнопку
        // Сделайте это сами - это очень просто.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
    
MCUCR=0x30;                         //PowerDown Mode interrupt by level Я РЕЖИМ СНА МОЖНО ИНИЦИАЛИЗИРОВАТЬ ДО БЕСКОНЕЧНОГО ЦИКЛА И БОЛЬШЕ К НЕМУ НЕ ВОЗВРАЩАТЬСЯ
                                //ПРАВДА В ВАШЕМ СЛУЧАЕ ИСПОЛЬЗУЕТСЯ 2 РЕЖИМА СНА И ЭТА СТРОЧКА ТУТ УМЕСТНА. (Согласен)
    
GIMSK=0x40;                         //Enable External Interrupt-0
    #asm("sleep")           //Усыпляем МК  

prosto_andriy вне форума  
Непрочитано 07.03.2015, 22:10  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
Непонятно почему???
Не TCCR0A = (1‹‹WGM1) | (1‹‹WGM0);
надо делать так:
TCCR0A = (1‹‹WGM01) | (1‹‹WGM00);

PS. В проекте у omercury есть ошибка TIMSK0=0x02;//Timer Overflow Interrupt (надо инициализировать число 0x01) иначе не будет прерывания по переполнению.

Последний раз редактировалось МВА; 07.03.2015 в 22:53.
МВА вне форума  
Сказали "Спасибо" МВА
prosto_andriy (07.03.2015)
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
Как правильно отследить импульс sdsrem Микроконтроллеры, АЦП, память и т.д 8 17.08.2010 21:28
[Решено] Третье Послание Человечеству lelkanet Отвлекитесь, эмбеддеры! 201 06.01.2010 00:33


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


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