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

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

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

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

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

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

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

 
Опции темы
Непрочитано 12.02.2015, 02:12  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
Интересно, через сколько микросекунд стек затрёт регистры?
Значит эта программа не будет работать из за рекурсии даже если прототипы функций правильно объявлены?

Именно об этом предупреждает компилятор, говоря:
Функция "I_Want_sleep" не используются при расчете использования стека данных из-за положительных рекурсивных вызовов

Что же тогда делать? Нужно переделывать функцию "void led_on_off(void)" так, чтобы в ней не было функции засыпания??? Но как же тогда отправлять контроллер в спячку сразу же после выключения подсветки?
Реклама:
prosto_andriy вне форума  
Непрочитано 12.02.2015, 04:43  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
Что же тогда делать? Нужно переделывать функцию "void led_on_off(void)" так, чтобы в ней не было функции засыпания??? Но как же тогда отправлять контроллер в спячку сразу же после выключения подсветки?
А сразу сказать нельзя было?
Вложения:
Тип файла: zip t13_PWM+Key.zip (2.5 Кб, 61 просмотров)
omercury вне форума  
Сказали "Спасибо" omercury
prosto_andriy (12.02.2015)
Непрочитано 12.02.2015, 17:59  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Всем доброго времени суток.
Есть у меня экспериментальная плата, которую я делал, когда учил ассемблер на сайте Сергея Соколова. Только в ней включенное состояние светодиода - низкий уровень на выходе порта. Попытался я применить вашу задачу под нее, но на Си++, что то ничего не получается. Казалось бы и кода ничего, а память на триста с лишним процентов занимает и не компилируется, а если включаю оптимизатор ужимает от 40 - до 15, но пробовал дизасемблировать, то полный бред. Логики не пойму. В общем, я сделал все на много проще.
1. Режим сна - это выключено
2. Если включено, то только сканирование кнопки и в зависимости от длительности управление регистром сравнения таймера.
3. Если длительность нажатия короткая - то сон.
Все проверил на плате, все отлично работает. При просыпании зажигается с тем уровнем, с которым засыпал. При желании можно в прерывании INT0, при просыпании задать какой-то постоянный уровень. Запрещаю только прерывания INT0 во время работы. Менять режимы сна не стоит, так как МК заснет только после команды Sleep, а биты разрешения сна или запрещения рекомендуют менять на всякий случай.
И не забудьте, в проекте включение светодиода идет низким уровнем на выходе. Проект выполнен в AVR Studio 4
Всем удачи.
Вложения:
Тип файла: rar Press_Key.rar (7.4 Кб, 24 просмотров)

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

omercury, большое спасибо за Ваш код! Но теперь получается, что короткое нажатие включает подсветку только на время удержания кнопки - стоит её отпустить, светодиод тут же гаснет и контроллер засыпает!
А вот от длинного нажатия, которое начинает менять яркость, контроллер просыпается нормально и подсветка гаснет по таймауту!!!
Насколько я понял, за включение/выключение в этом коде отвечает флаг «PWM_on»!Но в нём ли причина такого странного глюка?
prosto_andriy вне форума  
Непрочитано 12.02.2015, 22:03  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
omercury, большое спасибо за Ваш код! Но теперь получается, что короткое нажатие включает подсветку только на время удержания кнопки - стоит её отпустить, светодиод тут же гаснет и контроллер засыпает!
А вот от длинного нажатия, которое начинает менять яркость, контроллер просыпается нормально и подсветка гаснет по таймауту!!!
Насколько я понял, за включение/выключение в этом коде отвечает флаг «PWM_on»!Но в нём ли причина такого странного глюка?
Всем добрый вечер.
В коде, который я выкладывал на асме, у меня та-же самая проблема. это потому-что засыпание идет по признаку короткого нажатия. Я тут за пару минут подправил код(у меня этот бит называется Long, я просто дописал три строчки и искусственно установил его в прерывании INT0 (при просыпании) и он не засыпает опять. Может тебе сделать это в коде от omercury? пример изменения в моем коде я прилагаю. На С++ это должно вылиться в одну строчку, которую нужно прописать в прерывании INT0
Вложения:
Тип файла: rar Press_Key2.rar (7.5 Кб, 22 просмотров)
МВА вне форума  
Сказали "Спасибо" МВА
prosto_andriy (12.02.2015)
Непрочитано 12.02.2015, 22:35  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Посмотрел, в коде для обработки прерывания написано так:
PHP код:
interrupt [EXT_INT0void ext_int0_isr(void)
{
    
GIMSK=0x00;  //Disable External Interrupt-0    
    
MCUCR=0x20//Idle Mode interrupt by level
    
TCCR0A=0xC3//Fast PWM (Mode 3) Set OC0B on Compare Match, clear OC0B at TOP
    
TCCR0B=0x03//CLK/64 Enable Timer  
    
clr_var();   //Сброс переменных 
    
PWM_on 0;
    
led_on_off();

Я просто поменял местами два последние строчки, то есть стало так:
PHP код:
interrupt [EXT_INT0void ext_int0_isr(void)
{
    
GIMSK=0x00;  //Disable External Interrupt-0    
    
MCUCR=0x20//Idle Mode interrupt by level
    
TCCR0A=0xC3//Fast PWM (Mode 3) Set OC0B on Compare Match, clear OC0B at TOP
    
TCCR0B=0x03//CLK/64 Enable Timer  
    
clr_var();   //Сброс переменных 
    
led_on_off();
    
PWM_on 0;

И оно заработало нормально только вот почему, я толком и не понял

Последний раз редактировалось prosto_andriy; 12.02.2015 в 22:57.
prosto_andriy вне форума  
Непрочитано 12.02.2015, 23:05  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

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

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

Да нормально! Я вот сейчас ещё думаю, как прикрутить запоминание (сохранение её в EEPROM) уровня яркости!
Там две переменных: tmpPWM и PWM_start.
Нужно записывать tmpPWM в момент отпускания кнопки после длительного нажатия?

И ещё подскажите, пожалуйста, что делать, если длительность нажатия не помещается в переменную longkey, то есть превышает значение 0xFF
Нужно менять частоту таймера?

Последний раз редактировалось prosto_andriy; 13.02.2015 в 00:44.
prosto_andriy вне форума  
Непрочитано 13.02.2015, 01:20  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
Да нормально!
Странно, должно быть наоборот.

Сообщение от prosto_andriy Посмотреть сообщение
Там две переменных
Там одна переменная и одна константа.

Сообщение от prosto_andriy Посмотреть сообщение
И ещё подскажите, пожалуйста, что делать, если длительность нажатия не помещается в переменную longkey, то есть превышает значение 0xFF
Это тоже константа.

Сообщение от prosto_andriy Посмотреть сообщение
Нужно менять частоту таймера?
146 герц ещё нормально, можно предделитель увеличить, а можно изменить тип счётчика циклов таймера.
omercury вне форума  
Сказали "Спасибо" omercury
prosto_andriy (13.02.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, время: 22:54.


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