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

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

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

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

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

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

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

 
Опции темы
Непрочитано 29.04.2011, 19:53  
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  
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  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

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

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

Организовывается свободнобегущий программный таймер, после любого нажатия кнопки таймер сбрасывается. Если таймер достиг определённого значения (ваши 15мин.), то уход в слип.
STM32F0 вне форума  
Непрочитано 01.02.2015, 21:44  
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  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

На основе уже использующегося аппаратного таймера сделать таймер программный - то есть инкремент счетных регистров по срабатыванию переполнения аппаратного таймера.
NewWriter вне форума  
Непрочитано 02.02.2015, 02:12  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
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  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

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

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

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

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

Код:
PORTB=0x00;
на
Код:
PORTB=0x02;
Или нет? Подскажите пожалуйста!
prosto_andriy вне форума  
Непрочитано 04.02.2015, 01:15  
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, время: 19:15.


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