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

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

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

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

Сообщение rjhaviy »

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

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

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

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

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

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

Сообщение 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

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

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

Сообщение rjhaviy »

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

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

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

Сообщение rjhaviy »

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

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

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

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

Сообщение rjhaviy »

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

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

Сообщение rjhaviy »

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

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

Сообщение rjhaviy »

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

Сообщение kaligari »

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

Сообщение radteh »

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

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

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

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