Фонарик на Attiny13 не работает

Обсуждаем контроллеры компании Atmel.
Ответить
Санябик
Родился
Сообщения: 5
Зарегистрирован: Вт ноя 17, 2015 20:23:39

Фонарик на Attiny13 не работает

Сообщение Санябик »

Заинтересовался программированием микроконтроллеров, нацарапал фонарик.
Задумка такая:
одинарное нажатие = включение\отключение с сохранением режима яркости,
двойное нажатие = смена режима яркости.
АЦП хочу использовать для стабилизации тока\напряжения.
Но тут проблема: в Протеусе все работает, в железе - нет.
Проэкт CodeVision & схема в Протеусе прилагаются.
Подскажите, пожалуйста, что делаю не так.
Вложения
fonar.rar
(51.76 КБ) 407 скачиваний
Аватара пользователя
rjhaviy
Опытный кот
Сообщения: 762
Зарегистрирован: Чт мар 04, 2010 12:38:27

Re: Фонарик на Attiny13 не работает

Сообщение rjhaviy »

Санябик, а можно схему картинкой, протеуса нет на работе :)
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Аватара пользователя
НАПАЛМ
Это не хвост, это антенна
Сообщения: 1314
Зарегистрирован: Пт ноя 27, 2009 19:47:13
Откуда: Казань

Re: Фонарик на Attiny13 не работает

Сообщение НАПАЛМ »

Санябик писал(а):Но тут проблема: в Протеусе все работает, в железе - нет.

код не открывал, попробую заванговать, антидребезг вы в программе не писали?
Санябик
Родился
Сообщения: 5
Зарегистрирован: Вт ноя 17, 2015 20:23:39

Re: Фонарик на Attiny13 не работает

Сообщение Санябик »

Антидребезг не писал.
Выложил снимок экрана Протеуса
Вместо нижнего вольтметра - светодиод,
вход АЦП - через резистор к плюсу светодиода, или на шунт.

Подключал мелкий светодиод через сопротивление напрямую к МК, если все заработает - будет мощный светик на полевике.
Вложения
схема 86786.png
(82.58 КБ) 863 скачивания
Аватара пользователя
rjhaviy
Опытный кот
Сообщения: 762
Зарегистрирован: Чт мар 04, 2010 12:38:27

Re: Фонарик на Attiny13 не работает

Сообщение rjhaviy »

Вот первый баг:
Объявление переменной

Код: Выделить всё

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.
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Санябик
Родился
Сообщения: 5
Зарегистрирован: Вт ноя 17, 2015 20:23:39

Re: Фонарик на Attiny13 не работает

Сообщение Санябик »

Rjhaviy, спасибо за советы, но volatile не помогает.
Аватара пользователя
rjhaviy
Опытный кот
Сообщения: 762
Зарегистрирован: Чт мар 04, 2010 12:38:27

Re: Фонарик на Attiny13 не работает

Сообщение rjhaviy »

Ну я очень бегло код смотрел. :oops:
А чем прошивку в тиньку заливали?
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Санябик
Родился
Сообщения: 5
Зарегистрирован: Вт ноя 17, 2015 20:23:39

Re: Фонарик на Attiny13 не работает

Сообщение Санябик »

Прошивал USBASP V2.0 программатором + Khazama AVR Programmer v1.7.0
Аватара пользователя
rjhaviy
Опытный кот
Сообщения: 762
Зарегистрирован: Чт мар 04, 2010 12:38:27

Re: Фонарик на Attiny13 не работает

Сообщение rjhaviy »

Fuse bits правильно поставили?

Есть полезный облачность сервис :
http://www.engbedded.com/fusecalc/
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Санябик
Родился
Сообщения: 5
Зарегистрирован: Вт ноя 17, 2015 20:23:39

Re: Фонарик на Attiny13 не работает

Сообщение Санябик »

Фьюзы скорее всего правильны, в Khazama есть описание настроек.
Вложения
дддд.png
(38.18 КБ) 510 скачиваний
Аватара пользователя
rjhaviy
Опытный кот
Сообщения: 762
Зарегистрирован: Чт мар 04, 2010 12:38:27

Re: Фонарик на Attiny13 не работает

Сообщение rjhaviy »

Есть еще Watchdog timer (WDT), который тактируется независимо.
Такой сторожевой пес, охраняющий МК от зависания.
У вас в программе я не нашел его совсем, даже упоминания. :)
А ведь пес тикает даже в SLEEP и в POWERDOWN.
Дотикал до определенного момента, разбудил МК и сбросил.
Поэтому его нужно самого сбрасывать в конце цикла.
Либо отключить его в самом начале программы,
либо использовать в своих, коварных целях. :) Благо Тиньки позволяют это!
(можно генерить не ресет, а прерывание.)

Читайте даташит на ATTINY внимательно:
http://www.atmel.com/images/doc2535.pdf
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Аватара пользователя
rjhaviy
Опытный кот
Сообщения: 762
Зарегистрирован: Чт мар 04, 2010 12:38:27

Re: Фонарик на Attiny13 не работает

Сообщение rjhaviy »

Хотя..., вроде как по умолчанию WDT должен быть выключен :)
Если только fusebit WDT_ON не включен. (Watch dog timer always on)

WDTON — fuse бит, после установки которого сторожевой таймер WDT включается сразу после подачи питания и не может быть отключен программно. Если бит не установлен, то включением и отключением WDT можно управлять программно.
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
Аватара пользователя
rjhaviy
Опытный кот
Сообщения: 762
Зарегистрирован: Чт мар 04, 2010 12:38:27

Re: Фонарик на Attiny13 не работает

Сообщение rjhaviy »

А вообще, прошу прощения, схема стрёмная и сама программа тоже.
Надо примерно так:
В обработчике прерывания запрещаем повторное прерывание GICR=0b00000000, просыпаемся.
Опрашиваем кнопку в основном цикле с антидребезгом и т.д
в конце основного цикла снова разрешим прерывания GICR|=0b01000000
....
Времени мало, схемку нарисовал бы...
Нашел вариант на асме для AT90S1200 для опроса матричной клавы с просыпанием:
http://www.gaw.ru/pdf/Atmel/app/avr/AVR240.pdf
Но там есть блок-схемы.
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
kaligari
Родился
Сообщения: 1
Зарегистрирован: Вс окт 02, 2016 11:28:47

Re: Фонарик на Attiny13 не работает

Сообщение kaligari »

Вот такой дилетантский вопрос. Подскажите, мощность этого фонарика больше чем у вспышки телефона? У меня сейчас на Андроид телефоне установлена куча программных фонарей, но они быстро батарею убивают, поэтому ищу замену.
Аватара пользователя
radteh
Друг Кота
Сообщения: 3087
Зарегистрирован: Пт мар 09, 2007 15:01:52
Откуда: Биробиджан

Re: Фонарик на Attiny13 не работает

Сообщение radteh »

Какой светодиод поставишь, такая мощность и будет
Аватара пользователя
Полосатый
Друг Кота
Сообщения: 3151
Зарегистрирован: Чт мар 26, 2009 04:35:04
Откуда: Москва

Re: Фонарик на Attiny13 не работает

Сообщение Полосатый »

В протеусе вольтметр работает? Светодиод управляется током, причём немаленьким, если это фонарик. По коду ничего не могу подсказать, но источника тока на схеме не вижу.
Изображение (Аль Котоне, кот ещё тот, Cattus Sapiens)
Усы и хвост - мои документы.
Кот - авторитет! Скажет "Мяу!" - не поспоришь. (скажи мне "мяу" и я скажу кто ты)
Ответить

Вернуться в «AVR»