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

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

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

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

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

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

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

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

Сообщение от МВА Посмотреть сообщение
После инкремента, если условие не выполняется, тогда выполняется else и переменная снова сбрасывается. Поэтому она не должна никогда достигнуть своего значения.
Всё правильно, пока идёт дребезг кнопки, счётчик времени нажатия и должен сбрасываться, это уже когда всё устаканится он начнёт считать. То же самое и с таймаутом, только наоборот, пока кнопка нажата, он сбрасывается, отпустили - пошел обратный отсчёт.
Сообщение от МВА Посмотреть сообщение
И если отпускаем кнопку, то сразу выполняется команда, без предварительной подготовки #asm("sleep")
А что не так?
При пробуждении установлен режим сна Idle, отслеживается только длинное нажатие.
Делать ему больше нечего и он с чистой совестью отправляется спать.

Сообщение от МВА Посмотреть сообщение
Только что прогнал пошагово в AVR Studio, правда для этого пришлось переделать кучу инициализаций
Как бы нам Андрея согнать с этого глюкавого CVAVR...
Реклама:

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

Сообщение от omercury Посмотреть сообщение
А что не так?
При пробуждении установлен режим сна Idle, отслеживается только длинное нажатие.
Делать ему больше нечего и он с чистой совестью отправляется спать
А когда же она достигнет нужного значения, если при нажатой кнопке, после инкремента сразу идет декремент? Ведь так условие никогда не выполнится. И в симуляторе отсутствует дребезг.
Наверное потому у Prosto Andriy компилятор и ругался, что функция BACKLIGHT_on_off(); не выполнится.

PS. Кстати, перед переходом в режим Idle неплохо бы было запретить прерывания по переполнению, потому что достаточно того, что работает ШИМ и ни к чему в каждом цикле таймера проходить программу до следующего погружения в сон. Ведь как мы знаем для кроны и пол миллиампера хлеб.

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

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

Сообщение от omercury Посмотреть сообщение
Декремент (а после него сразу идёт инкремент) начнётся, когда счетчик уже достигнет нужного значения. Ну посмотрите ж Вы наконец условие. К тому же эта часть работает.

Можно, но только при условии, что кнопка не нажата.
Перед функцией if(count›longKey) идет инкремент. Если условие выполнится, тогда идет функция включения подсветки и декремент. Если не выполнилась - счетчик сбросится в 0. Не пойму, как он достигнет условия?
Выкладываю переделанный под AVR Studio проект попробуйте сами погонять.

PS. Насчет прерываний я был неправ. Их запрещать нельзя потому, что не будет работать тайм аут подсветки.
Вложения:
Тип файла: rar Press_butt.rar (22.1 Кб, 23 просмотров)

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

Халтура, конечно, но так хотя бы работает...
Вложения:
Тип файла: zip Press_butt.zip (43.6 Кб, 32 просмотров)
omercury вне форума  
Сказали "Спасибо" omercury
prosto_andriy (09.03.2015)
Непрочитано 08.03.2015, 21:42  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

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

Сообщение от МВА Посмотреть сообщение
Кстати, я никогда не пользовался инструкцией (_BV). Это что-то вроде маски? Я не видел ее в списках инструкций AVR.
Стандартная винавээровская.

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

Сообщение от omercury Посмотреть сообщение
Стандартная винавээровская.
Я уже посмотрел апноуты с WinAVR похоже, что это макроопределение.
_BV(n) тоже самое, что 1‹‹n
Я ведь только поставил WinAVR на AVR Studio чтобы можно было программы на С++ просматривать. А до этого я больше по ассемблеру юзал.

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

Сообщение от omercury Посмотреть сообщение
При таком раскладе достаточно нулевого режима, но я верю в Андрея.
Боюсь, правда, что такими темпами не доживу...
Я уже почти разобрался с предыдущим кодом - наконец-то понял, зачем нужен флаг опроса кнопки, который устанавливается в прерывании - упрощая код, я случайно удалил

omercury, большое спасибо Вам за код, но мне непонятен вот этот кусочек

PHP код:
struct{
    
u8 KeyEXE:1;        //флаг опроса кнопок
    
u8 BACKLIGHT_on:1;    //Флаг признака включения подстветки
    
u8 bit2:1;
    
u8 bit3:1;
    
u8 bit4:1;
    
u8 bit5:1;
    
u8 bit6:1;
    
u8 bit7:1;
M
Похоже на какой-то массив из 8-ми бит ??? Или нет?
Подскажите пожалуйста, по какому запросу это погуглить? Что там в конце за буква M со значком ";"?

И ещё почему-то нету спящего режима - сама подсветка не выключается! Может дело в том, что я просто неправильно открыл проект в AVR Studio? Открыл файл "Press_but.aps"! Посмотрел, что там ещё есть заголовочный файл "Function.h" (добавил его в проект вручную).

Пробовал и с подключенным заголовочным файлом и без него - все равно автоотключение не работает!!!
Миниатюры:
Нажмите на изображение для увеличения
Название: AVR.jpg
Просмотров: 153
Размер:	20.4 Кб
ID:	76523  

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

Сообщение от prosto_andriy Посмотреть сообщение
omercury, большое спасибо Вам за код, но мне непонятен вот этот кусочек

Доброго времени суток всем.
Совершенно верно, Андрей. Такой массив, еще, называют битовым полем. Для того, чтобы не задействовать целый байт для битовых переменных. Этот массив писал я потому, что AVR Studio не работает с такими переменными, как bit, А omercury исправлял программу. А буква М в конце структуры - это название структуры, в моем случае от слова Merker. Там может стоять хоть целое слово или какой нибудь индекс.... в общем это такая метка. А вызов бита Вы наверное уже догадались идет (имя структуры)(точка)(имя бита).
Кстати, последняя цифра в структуре, после двоеточия - это количество бит в переменной. Я часто использовал в меню трех битные переменные, когда меню не очень большое, а остальные биты как меркеры. Тот файл, Function.h, к проекту не относится. Это я смотрел, при дизассемблировании, во что выливается после компиляции простая функция задержки.
И еще, только что закончилась симуляция проекта. МК заснул через 13,5 секунд. Правда частота 8Мгц. так, как в симуляторе 9, 6 Мгц нет.

PS. Только что заметил, что по истечении тайм аута, отсутствуют строчки сброса меркера включения/выключения и строчка выключения светодиода. Поэтому МК засыпает с включенным светодиодом, а когда просыпается - выключает его. Наверное, omercury не досимулировал программу.

Последний раз редактировалось МВА; 09.03.2015 в 11:39.
МВА вне форума  
 

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

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

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:25.


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