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

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

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

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

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

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

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

Ответ
Опции темы

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

Непрочитано 29.04.2011, 19:53   #161
oleg_harp
Прописка
 
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
oleg_harp на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от artyomugr Посмотреть сообщение
ни каких проблем нет при быстром нажатии и отпускании
Я рад за Вас. Насчёт того, что Ваш код будет работать через раз, я погорячился, но когда речь идёт о надежности, гиперболы уместны. Ваш код будет работать 99 раз через раз (или что-то около того).
Сообщение от artyomugr Посмотреть сообщение
там все решает задержка delay_ms(100);
Не всё. Смотрите:Нажмите на изображение для увеличения
Название: sample_bounce.gif
Просмотров: 72
Размер:	8.5 Кб
ID:	21149 Допустим, Вы после короткого нажатия отпускаете кнопку перед окончанием delay_ms() в момент, когда на пине 1 из за дребезга. Ваш код фиксирует отпускание кнопки (выполняется соответствующее действие), затем опять короткое нажатие, во время которого ничего не происходит, и после этого уже реальное отпускание кнопки, которое повторяет предыдущее действие. Таким образом одно ложное срабатывание (отпускание кнопки). Если это
Код:
led_2=1;
, как у Вас, то всё работает. А если это изменение состояния (декремент, инкремент, да мало ли что), то это косячок. А это может быть не только дребезг, а помеха-иголка, резкое сотрясение устройства ....
Так что Вам выбирать. Может, для меню и не страшно.
Реклама:
oleg_harp вне форума   Ответить с цитированием
Непрочитано 29.04.2011, 20:26   #162
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Можно так модернезировать код если боимся дребезга по отжатию
Теоретически Вы абсолютно правы, но на практике я никогда не заморачиваюсь с защитой от дребезга по отжатию, и все работает хорошо.
С ув. Артем


if (butt==0){
delay_ms(100);
if (butt==0){// дополнительная защита от дребезга контактов.
flags=1; // ставим флаг если кнопка нажата
tmr++;
if (tmr›40){
led_1=1;
flags=0; // выполнили команду сбрасываем флаг
tmr=0; // и сбрасываем счетчик
}
}
}
if (butt!=0){ // если кнопка отжата и флаг установлен
delay_ms(100);
if (butt!=0){ // если боимся дребезга по отжатию то эта проблема решается так
tmr=0;
if (flags==1){
led_2=1; // выполняем следующую команду
flags=0;
}
}
}
// дополнительная защита от переполнения переменной
if (tmr›100){
tmr=0;
}

Последний раз редактировалось artyomugr; 29.04.2011 в 20:37.
artyomugr вне форума   Ответить с цитированием
Непрочитано 01.02.2015, 16:13   #163
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Мне очень понравился этот код! Я бы до такого не додумался

Действительно, для регулировки яркости светодиодов - это, пожалуй, оптимальный вариант! Думаю, он идеально подошел бы мне для управления подсветкой дисплея!
Остается добавить только отключение подсветки и впадание контроллера в "спячку" (например через 15 минут бездействия)!
Знаю, что это делается командой
Код:
#asm("sleep")
... но куда именно её "прикрутить"?
Нужно добавить в программу ещё одну переменную и еще один счетчик (на основе таймера), который будет считать до записанного в переменную значения?
Если да, подскажите пожалуйста, как правильно это написать? Заранее спасибо!
prosto_andriy вне форума   Ответить с цитированием
Непрочитано 01.02.2015, 19:02   #164
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Организовывается свободнобегущий программный таймер, после любого нажатия кнопки таймер сбрасывается. Если таймер достиг определённого значения (ваши 15мин.), то уход в слип.
STM32F0 вне форума   Ответить с цитированием
Непрочитано 01.02.2015, 21:44   #165
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Если бы я делал это на ATMega, а не на ATtiny13, то конечно можно было бы просто заюзать ещё один таймер и написать примерно так:

Код:
while (1)
      {
             --› запустить таймер 
            if  (KeyEXE)
            {  
                key_scan();
              --› сбросить таймер в этом месте
            }
      }
}
Но в ATtiny13 таймер ведь только один и причём 8-битный!!! Вот я и теряюсь в догадках, как этот код переделать, не задействуя ещё одного таймера?
К сожалению в программинге - "чайник", поэтому решил спросить у опытных форумчан. Подскажите пожалуйста, если не сложно!

Последний раз редактировалось prosto_andriy; 01.02.2015 в 21:59.
prosto_andriy вне форума   Ответить с цитированием
Непрочитано 01.02.2015, 21:59   #166
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

На основе уже использующегося аппаратного таймера сделать таймер программный - то есть инкремент счетных регистров по срабатыванию переполнения аппаратного таймера.
NewWriter вне форума   Ответить с цитированием
Непрочитано 02.02.2015, 02:12   #167
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от STM32F0 Посмотреть сообщение
Организовывается свободнобегущий программный таймер
Сообщение от NewWriter Посмотреть сообщение
На основе уже использующегося аппаратного таймера сделать таймер программный
Ну да, так и есть.

Сообщение от prosto_andriy Посмотреть сообщение
Остается добавить только отключение подсветки и впадание контроллера в "спячку" (например через 15 минут бездействия)!
Да он и так там почти всё время спит, пока его не беспокоят.
Единственное, не понял смысла этого действия...
Зачем нужно постоянно менять яркость подсветки?



P.S.
Чуть не забыл:
При программировании надо снять бит CLKDIV8, а то будет выключаться через 2 часа...
Вложения:
Тип файла: zip t13_PWM+Key.zip (2.4 Кб, 56 просмотров)

Последний раз редактировалось omercury; 02.02.2015 в 02:28.
omercury вне форума   Ответить с цитированием
Сказали "Спасибо" omercury
prosto_andriy (02.02.2015)
Непрочитано 02.02.2015, 14:33   #168
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
Зачем нужно постоянно менять яркость подсветки?
Для экономии батарейки - дело в том, что мультиметр, в который я хочу добавить подсветку, питается от обычной 9В "кроны"!

Конечно менять уровень подсветки можно было бы автоматически, если запихнуть в прибор фоторезистор и подключить его к АЦП микроконтроллера! Но я подумал, что проще "прикрутить" регулировку яркости к кнопке вкл./выкл.

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

Появился ещё один вопрос: как подключить встроенный подтягивающий резистор к выводу кнопки (обозначен как B1)!
Для этого достаточно лишь заменить в коде строку

Код:
PORTB=0x00;
на
Код:
PORTB=0x02;
Или нет? Подскажите пожалуйста!
prosto_andriy вне форума   Ответить с цитированием
Непрочитано 04.02.2015, 01:15   #170
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Подскажите пожалуйста, что означает такое сообщение при прошивке, точнее при верификации!
Миниатюры:
Нажмите на изображение для увеличения
Название: flash_error.jpg
Просмотров: 192
Размер:	47.3 Кб
ID:	75393  
prosto_andriy вне форума   Ответить с цитированием
Ответ


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

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, время: 11:26.


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