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

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

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

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

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

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

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

 
Опции темы

Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Непрочитано 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.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
Но, если в прерывании будем инициализировать TCNT значениями больше чем регистр сравнения, то и совпадения не будет никогда. Кстати, я могу это сейчас прогнать в AVR Studio
PS. Только что прогнал в AVR Studio свои предположения по инициализации. Все подтвердилось - ШИМ пропадает.
"Прощёлкайте" пожалуйста ещё один цикл таймера в симулякре.
omercury вне форума  
Непрочитано 05.03.2015, 21:42  
МВА
Гражданин KAZUS.RUN
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 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.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
Если честно, я не понял, что я должен был увидеть
То, что ШИМ не щёлкнет только один раз, в следующем цикле уже всё будет нормально. Но для того он и сбрасывается, чтоб не выйти за пределы, правда делать это надо до включения таймера.
omercury вне форума  
Непрочитано 07.03.2015, 02:19  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
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.RUN
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 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.RUN
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 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.RUN
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 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, время: 08:33.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.