Страница 1 из 1
Фонарик на Attiny13 не работает
Добавлено: Вт ноя 17, 2015 22:19:36
Санябик
Заинтересовался программированием микроконтроллеров, нацарапал фонарик.
Задумка такая:
одинарное нажатие = включение\отключение с сохранением режима яркости,
двойное нажатие = смена режима яркости.
АЦП хочу использовать для стабилизации тока\напряжения.
Но тут проблема: в Протеусе все работает, в железе - нет.
Проэкт CodeVision & схема в Протеусе прилагаются.
Подскажите, пожалуйста, что делаю не так.
Re: Фонарик на Attiny13 не работает
Добавлено: Вт ноя 17, 2015 23:28:33
rjhaviy
Санябик, а можно схему картинкой, протеуса нет на работе

Re: Фонарик на Attiny13 не работает
Добавлено: Ср ноя 18, 2015 00:34:51
НАПАЛМ
Санябик писал(а):
Но тут проблема: в Протеусе все работает, в железе - нет.
код не открывал, попробую заванговать, антидребезг вы в программе не писали?
Re: Фонарик на Attiny13 не работает
Добавлено: Чт ноя 19, 2015 00:01:09
Санябик
Антидребезг не писал.
Выложил снимок экрана Протеуса
Вместо нижнего вольтметра - светодиод,
вход АЦП - через резистор к плюсу светодиода, или на шунт.
Подключал мелкий светодиод через сопротивление напрямую к МК, если все заработает - будет мощный светик на полевике.
Re: Фонарик на Attiny13 не работает
Добавлено: Пт ноя 20, 2015 04:58:30
rjhaviy
Вот первый баг:
Объявление переменной
Вы ее далее используете в обработчике прерывания, а значит нужно писать:
Ведь компилятор может оптимизировать эту переменную, и запихнуть в регистр общего назначения какой нибудь,
а обработчик прерывания может этот регистр "испортить".
volatile запрещает оптимизацию переменной.
Второй баг:
Объявление переменной в eeprom
Получается, что после каждого нажатия, вы пишете новое значение в eeprom
Код: Выделить всё
if((np==15)&(tap==3)){shift=shift<<1;delay_ms(50);}
Вроде как гарантированных ATMEL 100000 циклов перезаписи eeprom кажется много -
Хватит на год, если щелкать в день по 273 раза.

Понятно, что хочется сохранить последнее значение яркости фонарика.
Можно сделать так:
короткие нажатия - переключение яркости
удержание более одной-двух секунд запись значения яркости в eeprom.
Re: Фонарик на Attiny13 не работает
Добавлено: Вт ноя 24, 2015 14:34:58
Санябик
Rjhaviy, спасибо за советы, но volatile не помогает.
Re: Фонарик на Attiny13 не работает
Добавлено: Вт ноя 24, 2015 14:39:32
rjhaviy
Ну я очень бегло код смотрел.
А чем прошивку в тиньку заливали?
Re: Фонарик на Attiny13 не работает
Добавлено: Ср ноя 25, 2015 23:47:30
Санябик
Прошивал USBASP V2.0 программатором + Khazama AVR Programmer v1.7.0
Re: Фонарик на Attiny13 не работает
Добавлено: Чт ноя 26, 2015 00:24:22
rjhaviy
Fuse bits правильно поставили?
Есть полезный облачность сервис :
http://www.engbedded.com/fusecalc/
Re: Фонарик на Attiny13 не работает
Добавлено: Сб дек 05, 2015 22:01:55
Санябик
Фьюзы скорее всего правильны, в Khazama есть описание настроек.
Re: Фонарик на Attiny13 не работает
Добавлено: Пн дек 07, 2015 21:24:55
rjhaviy
Есть еще Watchdog timer (WDT), который тактируется независимо.
Такой сторожевой пес, охраняющий МК от зависания.
У вас в программе я не нашел его совсем, даже упоминания.

А ведь пес тикает даже в SLEEP и в POWERDOWN.
Дотикал до определенного момента, разбудил МК и сбросил.
Поэтому его нужно самого сбрасывать в конце цикла.
Либо отключить его в самом начале программы,
либо использовать в своих, коварных целях.

Благо Тиньки позволяют это!
(можно генерить не ресет, а прерывание.)
Читайте даташит на ATTINY внимательно:
http://www.atmel.com/images/doc2535.pdf
Re: Фонарик на Attiny13 не работает
Добавлено: Пн дек 07, 2015 21:40:49
rjhaviy
Хотя..., вроде как по умолчанию WDT должен быть выключен

Если только fusebit WDT_ON не включен. (Watch dog timer always on)
WDTON — fuse бит, после установки которого сторожевой таймер WDT включается сразу после подачи питания и не может быть отключен программно. Если бит не установлен, то включением и отключением WDT можно управлять программно.
Re: Фонарик на Attiny13 не работает
Добавлено: Пн дек 07, 2015 22:52:47
rjhaviy
А вообще, прошу прощения, схема стрёмная и сама программа тоже.
Надо примерно так:
В обработчике прерывания запрещаем повторное прерывание GICR=0b00000000, просыпаемся.
Опрашиваем кнопку в основном цикле с антидребезгом и т.д
в конце основного цикла снова разрешим прерывания GICR|=0b01000000
....
Времени мало, схемку нарисовал бы...
Нашел вариант на асме для AT90S1200 для опроса матричной клавы с просыпанием:
http://www.gaw.ru/pdf/Atmel/app/avr/AVR240.pdf
Но там есть блок-схемы.
Re: Фонарик на Attiny13 не работает
Добавлено: Вс окт 02, 2016 11:30:56
kaligari
Вот такой дилетантский вопрос. Подскажите, мощность этого фонарика больше чем у вспышки телефона? У меня сейчас на Андроид телефоне установлена куча
программных фонарей, но они быстро батарею убивают, поэтому ищу замену.
Re: Фонарик на Attiny13 не работает
Добавлено: Пн окт 10, 2016 02:24:31
radteh
Какой светодиод поставишь, такая мощность и будет
Re: Фонарик на Attiny13 не работает
Добавлено: Ср окт 26, 2016 08:35:42
Полосатый
В протеусе вольтметр работает? Светодиод управляется током, причём немаленьким, если это фонарик. По коду ничего не могу подсказать, но источника тока на схеме не вижу.