Фонарик на Attiny13 не работает
Фонарик на Attiny13 не работает
Заинтересовался программированием микроконтроллеров, нацарапал фонарик.
Задумка такая:
одинарное нажатие = включение\отключение с сохранением режима яркости,
двойное нажатие = смена режима яркости.
АЦП хочу использовать для стабилизации тока\напряжения.
Но тут проблема: в Протеусе все работает, в железе - нет.
Проэкт CodeVision & схема в Протеусе прилагаются.
Подскажите, пожалуйста, что делаю не так.
Задумка такая:
одинарное нажатие = включение\отключение с сохранением режима яркости,
двойное нажатие = смена режима яркости.
АЦП хочу использовать для стабилизации тока\напряжения.
Но тут проблема: в Протеусе все работает, в железе - нет.
Проэкт CodeVision & схема в Протеусе прилагаются.
Подскажите, пожалуйста, что делаю не так.
- Вложения
-
- fonar.rar
- (51.76 КБ) 407 скачиваний
Re: Фонарик на Attiny13 не работает
Санябик, а можно схему картинкой, протеуса нет на работе 
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Лом ужасен и велик! Но... хороший проводник!
- НАПАЛМ
- Это не хвост, это антенна
- Сообщения: 1314
- Зарегистрирован: Пт ноя 27, 2009 19:47:13
- Откуда: Казань
Re: Фонарик на Attiny13 не работает
Санябик писал(а):Но тут проблема: в Протеусе все работает, в железе - нет.
код не открывал, попробую заванговать, антидребезг вы в программе не писали?
Re: Фонарик на Attiny13 не работает
Антидребезг не писал.
Выложил снимок экрана Протеуса
Вместо нижнего вольтметра - светодиод,
вход АЦП - через резистор к плюсу светодиода, или на шунт.
Подключал мелкий светодиод через сопротивление напрямую к МК, если все заработает - будет мощный светик на полевике.
Выложил снимок экрана Протеуса
Вместо нижнего вольтметра - светодиод,
вход АЦП - через резистор к плюсу светодиода, или на шунт.
Подключал мелкий светодиод через сопротивление напрямую к МК, если все заработает - будет мощный светик на полевике.
- Вложения
-
- схема 86786.png
- (82.58 КБ) 863 скачивания
Re: Фонарик на Attiny13 не работает
Вот первый баг:
Объявление переменной
Вы ее далее используете в обработчике прерывания, а значит нужно писать:
Ведь компилятор может оптимизировать эту переменную, и запихнуть в регистр общего назначения какой нибудь,
а обработчик прерывания может этот регистр "испортить".
volatile запрещает оптимизацию переменной.
Второй баг:
Объявление переменной в eeprom
Получается, что после каждого нажатия, вы пишете новое значение в eeprom
Вроде как гарантированных ATMEL 100000 циклов перезаписи eeprom кажется много -
Хватит на год, если щелкать в день по 273 раза.
Понятно, что хочется сохранить последнее значение яркости фонарика.
Можно сделать так:
короткие нажатия - переключение яркости
удержание более одной-двух секунд запись значения яркости в eeprom.
Объявление переменной
Код: Выделить всё
unsigned char np;Вы ее далее используете в обработчике прерывания, а значит нужно писать:
Код: Выделить всё
volatile unsigned char np;Ведь компилятор может оптимизировать эту переменную, и запихнуть в регистр общего назначения какой нибудь,
а обработчик прерывания может этот регистр "испортить".
volatile запрещает оптимизацию переменной.
Второй баг:
Объявление переменной в eeprom
Код: Выделить всё
eeprom unsigned char shift=1;Получается, что после каждого нажатия, вы пишете новое значение в eeprom
Код: Выделить всё
if((np==15)&(tap==3)){shift=shift<<1;delay_ms(50);}Вроде как гарантированных ATMEL 100000 циклов перезаписи eeprom кажется много -
Хватит на год, если щелкать в день по 273 раза.
Понятно, что хочется сохранить последнее значение яркости фонарика.
Можно сделать так:
короткие нажатия - переключение яркости
удержание более одной-двух секунд запись значения яркости в eeprom.
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Лом ужасен и велик! Но... хороший проводник!
Re: Фонарик на Attiny13 не работает
Rjhaviy, спасибо за советы, но volatile не помогает.
Re: Фонарик на Attiny13 не работает
Ну я очень бегло код смотрел.
А чем прошивку в тиньку заливали?
А чем прошивку в тиньку заливали?
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Лом ужасен и велик! Но... хороший проводник!
Re: Фонарик на Attiny13 не работает
Прошивал USBASP V2.0 программатором + Khazama AVR Programmer v1.7.0
Re: Фонарик на Attiny13 не работает
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Лом ужасен и велик! Но... хороший проводник!
Re: Фонарик на Attiny13 не работает
Фьюзы скорее всего правильны, в Khazama есть описание настроек.
- Вложения
-
- дддд.png
- (38.18 КБ) 510 скачиваний
Re: Фонарик на Attiny13 не работает
Есть еще Watchdog timer (WDT), который тактируется независимо.
Такой сторожевой пес, охраняющий МК от зависания.
У вас в программе я не нашел его совсем, даже упоминания.
А ведь пес тикает даже в SLEEP и в POWERDOWN.
Дотикал до определенного момента, разбудил МК и сбросил.
Поэтому его нужно самого сбрасывать в конце цикла.
Либо отключить его в самом начале программы,
либо использовать в своих, коварных целях.
Благо Тиньки позволяют это!
(можно генерить не ресет, а прерывание.)
Читайте даташит на ATTINY внимательно:
http://www.atmel.com/images/doc2535.pdf
Такой сторожевой пес, охраняющий МК от зависания.
У вас в программе я не нашел его совсем, даже упоминания.
А ведь пес тикает даже в SLEEP и в POWERDOWN.
Дотикал до определенного момента, разбудил МК и сбросил.
Поэтому его нужно самого сбрасывать в конце цикла.
Либо отключить его в самом начале программы,
либо использовать в своих, коварных целях.
(можно генерить не ресет, а прерывание.)
Читайте даташит на ATTINY внимательно:
http://www.atmel.com/images/doc2535.pdf
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Лом ужасен и велик! Но... хороший проводник!
Re: Фонарик на Attiny13 не работает
Хотя..., вроде как по умолчанию WDT должен быть выключен 
Если только fusebit WDT_ON не включен. (Watch dog timer always on)
WDTON — fuse бит, после установки которого сторожевой таймер WDT включается сразу после подачи питания и не может быть отключен программно. Если бит не установлен, то включением и отключением WDT можно управлять программно.
Если только fusebit WDT_ON не включен. (Watch dog timer always on)
WDTON — fuse бит, после установки которого сторожевой таймер WDT включается сразу после подачи питания и не может быть отключен программно. Если бит не установлен, то включением и отключением WDT можно управлять программно.
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Лом ужасен и велик! Но... хороший проводник!
Re: Фонарик на Attiny13 не работает
А вообще, прошу прощения, схема стрёмная и сама программа тоже.
Надо примерно так:
В обработчике прерывания запрещаем повторное прерывание GICR=0b00000000, просыпаемся.
Опрашиваем кнопку в основном цикле с антидребезгом и т.д
в конце основного цикла снова разрешим прерывания GICR|=0b01000000
....
Времени мало, схемку нарисовал бы...
Нашел вариант на асме для AT90S1200 для опроса матричной клавы с просыпанием:
http://www.gaw.ru/pdf/Atmel/app/avr/AVR240.pdf
Но там есть блок-схемы.
Надо примерно так:
В обработчике прерывания запрещаем повторное прерывание GICR=0b00000000, просыпаемся.
Опрашиваем кнопку в основном цикле с антидребезгом и т.д
в конце основного цикла снова разрешим прерывания GICR|=0b01000000
....
Времени мало, схемку нарисовал бы...
Нашел вариант на асме для AT90S1200 для опроса матричной клавы с просыпанием:
http://www.gaw.ru/pdf/Atmel/app/avr/AVR240.pdf
Но там есть блок-схемы.
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Лом ужасен и велик! Но... хороший проводник!
Re: Фонарик на Attiny13 не работает
Вот такой дилетантский вопрос. Подскажите, мощность этого фонарика больше чем у вспышки телефона? У меня сейчас на Андроид телефоне установлена куча программных фонарей, но они быстро батарею убивают, поэтому ищу замену.
Re: Фонарик на Attiny13 не работает
Какой светодиод поставишь, такая мощность и будет
Re: Фонарик на Attiny13 не работает
В протеусе вольтметр работает? Светодиод управляется током, причём немаленьким, если это фонарик. По коду ничего не могу подсказать, но источника тока на схеме не вижу.
(Аль Котоне, кот ещё тот, Cattus Sapiens)Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)