31.01.2015, 17:59
|
|
Временная регистрация
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Подсветка дисплея на ATtiny13 (как сделать)
Помогите пожалуйста написать программу для управления подсветкой дисплея с такими параметрами:
- пять уровней яркости;
- управление всего одной кнопкой - короткое нажатие ступенчато увеличивают яркость, длинное – выключает подсветку;
- авто-отключение через 15 минут (в том числе переход микроконтроллера в «спячку»)
Подскажите, пожалуйста «чайнику», реально ли это сделать на обычной ATtiny13? Например, по такой схеме:
Насколько я понял, нужно постоянно опрашивать кнопку (произошло нажатие или нет). Значит, для этого придется задействовать прерывание?
Если нажатие зафиксировано, то нужно отследить его длительность! И соответственно либо включить подсветку /увеличить её яркость (если нажатие короткое) или выключить её (если нажатие длинное)!
Для изменения яркости обычно используется PWM(ШИМ)! ATtiny13 его поддерживает, но дело в том, что в ней всего один таймер! В общем, непонятно можно ли всё это делать с его помощью? Если да, то как? Объясните пожалуйста!
|
|
|
Сказали "Спасибо" prosto_andriy
|
|
|
31.01.2015, 18:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Можно конечно... Таймер аппаратно генерирует шим и параллельно по его прерыванию считаем временные интервалы для опроса кнопок. Или можно по прерываниям от вачдога отмерять время задержек
|
|
|
|
31.01.2015, 18:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.12.2004
Адрес: Bернулся в San Jose,CA,USA,Beach BLVD,свой дом,окна на океан-ничего личного,просто бизнес!
Сообщений: 1,098
Сказал спасибо: 22
Сказали Спасибо 423 раз(а) в 316 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Внутри исходник на асме , hex , dsn .... 4 градации , легко доделаете до нужных вам параметров работы
__________________
"Дворяне и их младые отроки должны всегда меж собою говорить на ВЫ и на иностранных языках, дабы тем навыкнуть могли, и чтобы их можно было от других незнающих болванов распознать."
Уложение о поведении (с) царь Пётр I
|
|
|
|
31.01.2015, 20:51
|
|
Временная регистрация
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Наверно я не совсем правильно описал алгоритм – правильнее так:
1. Ожидание нажатия кнопки. Если она нажата – начать отсчет времени, сгенерировать событие «кнопка нажата» и перейти в состояние 2.
2. Отслеживание – проверяем, отпущена кнопка или нет! Если нет, то сравниваем время нажатия с текущим временем!
Если разница больше 0,5 секунд, генерируем событие «короткое нажатие» и переходим в состояние 3. Если кнопка отпущена, генерируем событие «кнопку отпустили» и возвращаемся в состояние 1.
3. Опять отслеживаем состояние кнопки! Если она нажата больше 1 секунды с момента начала отсчета, генерируем событие «длительное нажатие» и переходим в состояние 4. Если кнопка отпущена - генерируем событие «кнопку отпустили» и возвращаемся в состояние 1.
4. … и т.д.
5. Если нажатия кнопки не было 15 минут – перевести микроконтроллер в «спящий» режим!
Проще всего наверно было бы написать такой код на обычном "C/C++" в AVR Studio? Или обязательно использовать ассемблер?
|
|
|
Сказали "Спасибо" prosto_andriy
|
|
|
31.01.2015, 20:53
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Ассемблер обязателен, к сожалению.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
31.01.2015, 21:16
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Сообщение от Easyrider83
|
Ассемблер обязателен, к сожалению.
|
Спорно - IAR (и наверное GCC) Attiny13 поддерживают. Так и зачем тогда ассемблер?
|
|
|
Сказали "Спасибо" _Артём_
|
|
|
31.01.2015, 21:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Сообщение от Easyrider83
|
Ассемблер обязателен, к сожалению.
|
Приколист.
Сообщение от prosto_andriy
|
реально ли это сделать
|
Безусловно.
Тут правда мега.
https://kazus.ru/forums/showthread.p...EE%F2%EA%EE%E5
|
|
|
Эти 2 пользователя(ей) сказали Спасибо omercury за это сообщение:
|
|
|
31.01.2015, 21:55
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Сообщение от prosto_andriy
|
Для изменения яркости обычно используется PWM(ШИМ)! ATtiny13 его поддерживает, но дело в том, что в ней всего один таймер! В общем, непонятно можно ли всё это делать с его помощью?
|
А это не имеет значения. У вас задача прямая и простая как палка, её просто нужно согнуть в обруч. Пусть таймер и рулит PWM, обработку кнопок делайте в вечном цикле, типа конечный автомат. Только в конце цикла сделайте программную задержку на 100мс. Три программных счётчика - нажатие кнопки, отпускание и таймаут с выходом в слип. Высокая точность при опросе кнопки и даром не впарилась, зачем здесь ещё один таймер?
|
|
|
Эти 2 пользователя(ей) сказали Спасибо STM32F0 за это сообщение:
|
|
|
31.01.2015, 22:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Сообщение от STM32F0
|
Высокая точность при опросе кнопки и даром не впарилась, зачем здесь ещё один таймер?
|
А что мешает сделать из него же System Tick ?
|
|
|
Сказали "Спасибо" omercury
|
|
|
31.01.2015, 23:21
|
|
Временная регистрация
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Это что-то вроде функции "millis()" в Arduino?
Согласен с Вами - так проще, но я все-таки хотел бы разобраться с этими таймерами и прерываниями!
..так и не понял, в какой именно момент таймер должен начинать отсчет? В момент касания кнопки? Его нужно настроить на срабатывание по спаду, то есть переходу из 1 в 0 ??
Ведь при нажатии кнопки напряжение на выводе PB0 падает до нуля! Не так ли?
|
|
|
Сказали "Спасибо" prosto_andriy
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:19.
|
|