Easyelectronics.ru

Электроника для всех
Текущее время: 22 янв 2021, 21:56

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Attiny13 пробуждение по удержанию кнопки.
СообщениеДобавлено: 15 окт 2019, 12:46 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 янв 2014, 23:53
Сообщения: 82
Откуда: Казань
Всех приветствую, в очередной раз нуждаюсь в вашем совете. Дома имеется Китайский ночник, в виде ангела,10 белых светодиодов 3,5 мм соединенных параллельно, питается напрямую (без ограничительных резисторов) от двух элементов АА. Когда батарея новая, свет очень яркий и детям спать неприятно.

Хочу, используя Attiny 13, сделать драйвер, на подобии тому, что используются в фонарях.

Тинька будет питаться от Li-ion АКБ, ток на светодиоды будет ограничиваться NSI45020, шимить буду через n канальный полевик IRLML2803, используя опорное напряжение, при помощи АЦП, буду мерить напряжение и по достижению заданного порога уходить в Сон в PowerDown. Уходить в сон, так же собираюсь: через 2 или 4 часа после включения (будет настраиваться программно) и по длинному (более 1.5 сек) нажатию кнопки. Просыпаться хочу так же по длинному нажатию, так как короткие нажатия, будут менять яркость.

Вот с пробуждением у меня затык, не знаю как обработать, уходить по удержанию кнопки могу: перед уходом, инициализирую внешнее прерывание INT0 по спаду. Выходит из сна по короткому нажатию, всю голову сломал, но допереть не могу, как проснутся по удержанию.

Помогите пожалуйста советом.
Show


Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 пробуждение по удержанию кнопки.
СообщениеДобавлено: 15 окт 2019, 13:10 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Проснулись по прерыванию - выставляем флаг, что в режиме пробуждения. В основном цикле при поднятом флаге начинаем читать кнопку, можно таймером, но смысла нет, можно и на обычных задержках. Пока кнопку не отпустят или не пройдет 1.5с. Флаг убираем. Ну и соб-но если прошло больше 1.5с - запускаем что нам нужно, если меньше - снова в сон просто.

PS:
Цитата:
при помощи АЦП, буду мерить напряжение и по достижению заданного порога уходить в Сон

А это зачем?

PPS: Это CVAVR что-ли? Не в тему конечно, но сразу предложил бы на avr-gcc переделать и освоить. CVAVR морально устарел.

ЗЗЗЫ: В .h кода функций не должно быть, так не делается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 пробуждение по удержанию кнопки.
СообщениеДобавлено: 15 окт 2019, 13:16 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 янв 2014, 23:53
Сообщения: 82
Откуда: Казань
Акб не имеет встроенной защиты, по этому, чтобы ее не угробить нужно отключить.

Переходить скорее всего, нужно уже на стм. CVAVR был для меня очень удобен для начинания, привык к нему тоже, но его удобствами почти не пользуюсь. Стараюсь писать на чистом Си.

Попробую описанный Вами способ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 пробуждение по удержанию кнопки.
СообщениеДобавлено: 15 окт 2019, 13:26 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
https://github.com/N-Storm/flashlight/b ... ashlight.c - вот если что можете глянуть, писал для фонарика и простенького пика прошивку (обсуждение: viewtopic.php?f=17&t=33749&hilit=yunmai&start=175)
Там вообще прерываний нет (в железе). В main крутятся 2 функции в цикле - timed_step(), где соб-но и происходит в т.ч. опрос кнопки. Там распознается 3 ситуации - дребезг, короткое нажатие и длинное нажатие. Ставится соотв. флаг. А fsm_routine() - обработка конечного автомата. Есть текущие состояния и переходы между ними, когда прошлая функция установила флаг кнопки в короткое или длинное нажатие.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 пробуждение по удержанию кнопки.
СообщениеДобавлено: 15 окт 2019, 13:40 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7239
Зачем в схеме Q1/2? Это которые NSI45020? Источник тока делается не так.
Посмотрите ДШ на NSI45020, в частности - figure2. В автономных фонариках от 1 банки, интегрированные ИТ применять нельзя. (уточнение - такие ИТ)
ИТ делается с помощью npn транзистора и резистора в истоке, по "классической" схеме. Стабилизация от 0.6В.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 пробуждение по удержанию кнопки.
СообщениеДобавлено: 15 окт 2019, 13:52 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 янв 2014, 23:53
Сообщения: 82
Откуда: Казань
u37, понял Вас, про источники тока почитаю, дш глянул, Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 пробуждение по удержанию кнопки.
СообщениеДобавлено: 15 окт 2019, 14:12 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7239
https://www.rlocman.ru/i/Image/2012/01/29/Fig_2_Rus.gif


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 пробуждение по удержанию кнопки.
СообщениеДобавлено: 15 окт 2019, 17:57 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 янв 2014, 23:53
Сообщения: 82
Откуда: Казань
Всем спасибо, все получилось.
Вместо стабилизатора тока, применю пока резисторы, переписанный и рабочий код выглядит так :
Show


NStorm с Вашим кодом, обязательно разберусь и вникну.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 пробуждение по удержанию кнопки.
СообщениеДобавлено: 15 окт 2019, 18:43 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7239
Есть еще один прием, может пригодиться. Если вы измеряете напряжение батареи (вообще-то, обязаны), то ИТ можно не делать как "ИТ", а поставить просто "резистор". По большому счету, нужно, ведь, стабилизировать _яркость_, а не ставить именно постоянный ток. Если вы знаете напряжение батареи и предположить, что на светодиодах будет падать 3В, то сила тока может быть вычислена как (Vbat-3)/R. Т.к. Vbat меняется, то вы можете сходным образом регулировать скважност ШИМ, чтобы видимая яркость не менялась.
Например, номинальный ток 100 мА. Минимальное напряжение батареи 3.3В. Если предположить на светодиодах 3В (что, вообще, не верно, но и не существенно), то на резисторе будет падать 0.3В, или 3.3 Ом. Полностью заряженная банка дает 4.2В, что означает ток (4.2-3)/3.3=0.36А, в 3.6 раза больше целевого. Не проблема, ставите ШИМ с скважностью 1/3.6=0.27. В результате, средний ток из батареи ( =яркость ) останется неизменным. Меняя скважность по мере разряда батареи, можно поддерживать неизменную яркость. ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 пробуждение по удержанию кнопки.
СообщениеДобавлено: 15 окт 2019, 20:04 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 янв 2014, 23:53
Сообщения: 82
Откуда: Казань
u37 Спасибо, обязательно попробую.

Спасибо всем тем кто откликнулся, очень радует ваше отношение к молодым, в сравнении с аналогичными по тематике форумами, где неопытных хотят растоптать, здесь не жалея своего времени и опыта, делятся советами...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 пробуждение по удержанию кнопки.
СообщениеДобавлено: 15 окт 2019, 21:51 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1659
Откуда: Курск
Я б на стабилизацию тока поставил PT4115. Там для управления и вход есть, ШИМь на здоровье


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 пробуждение по удержанию кнопки.
СообщениеДобавлено: 18 окт 2019, 19:57 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3693
Откуда: Новосибирск
Так как пробуждение МК по внешнему прерыванию, то единственный выход - контроль состояния пина кнопки.
Для начала, нужно четко понимать, что есть дребезг контактов. И что это такое на физическом уровне. Смотрим на картинку.
Вложение:
drebezg-kontaktov-1.jpg
drebezg-kontaktov-1.jpg [ 20.05 Кб | Просмотров: 568 ]

Отсюда алгоритм опроса кнопок.
1 - Установка внешнего прерывания, запуск сна. Спим.
2 - Проснулись по внешнему прерыванию, значит считаем, что кнопка вроде нажата, отключаем внешнее прерывание. Ставим таймер на 20-40 мс (зависит от типа контактов).
2 - Вышло время:
А) Кнопка еще нажата. С этого момента опять же ветвление алгоритма, если требуется обработка длительного нажатия кнопки. К примеру: запуск таймера на время длительного нажатия кнопки, пусть 1000 мс. Переход к пункту 3.
Б) Не нажата (помеха, дребезг), переход к пункту 1.
3 - Продолжаем следить за состоянием кнопки и состоянием таймера. Если кнопка отпущена до срабатывания таймера, переход к пункту 4. Если вышло время, переход к пункту 5.
4 - Обработка дребезга контактов. Если время вышло и кнопка отпущена, установка события короткого нажатия кнопки и переход к пункту 1. Если не отпущена, считается дребезгом, переход к пункту 3.
5 - Установка события длительного нажатия кнопки и ожидание отпускания кнопки с учетом дребезга.

Весь этот алгоритм легко составляется на конечном автомате и программных таймерах. Независимо от языка написания программы.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB