|
|
| ||||||||
|
|
|
3853
6
3
0
|
|
Опции темы | Поиск в этой теме |
|
1
|
|
Новичок
Регистрация: 01.09.2013 Последняя активность: 07.04.2014 14:27
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили: 2 раз(а) в 1 сообщении
|
Привет, фонарёвка.
![]() Возможно, это уже где-то было, но я с самого начала хотел сделать прошивку сам. Итак, суть: при включении фонарь плавно загорается, постепенно включая всё больше стабилизаторов(1,2,3,4,5,6,7, . Переход между стабилизаторами плавный за счет ШИМ. Когда яркость вас устраивает, тыкаем кнопку. Следующее включение фонаря будет на этой яркости(ШИМ выключится, то есть останется целое количество стабилизаторов в работе, округление вниз). Потом опять заново будет режим выбора яркости.При этом: на токе до 700 ма ШИМ не будет выключен, чтобы можно было оставить очень низкий уровень света. Как это сделано: Блок стабилизаторов разрезан на блоки по 4+2+1+1(ШИМ). Каждый блок управляется отдельной ножкой контроллера. Один блок управляется ШИМ. Так я могу включать произвольное число стабилизаторов. Как подключать блоки: Тут три разреза, обозначены черно-красной полосой, и три перемычки, обозначены синим. По ножкам: К ШИМ-1блоку цепляем PB0. К 1блоку цепляем PB4. К 2блоку цепляем PB3. К 4блоку уже подцеплена PB1. (Картинка во вложениях) Проблемы: Я никогда не писал на чистом C и код получился явно неоптимальным. Поэтому мне пришлось выкинуть из фонаря всё, кроме светилки. То есть никакой индикации батарейки, контроля температурой. Это всё попросту не помещается в память. Плюс активно используется eeprom-память. Писалось-собиралось всё в avr студии5, для прошивки использовалась arduino nano. Планирую в будущем улучшить прошивку, но не сейчас. В архиве проект для студии. Пароль к архиву fonarevka_sh. |
|
|
|
|
|
2
|
||
|
сволочь фонарёвки
Регистрация: 27.05.2011 Последняя активность: Сегодня 08:11
Сообщений: 40449
Сказал(а) спасибо: 6695
Поблагодарили: 36168 раз(а) в 16709 сообщениях
|
угу. было. смотрю исходники - что-то знакомое больно. дефайны, значения, и, особенно комментарии.
потом в шапку заглянул: "Author: Tamagotchi http://tamagotchi-007.livejournal.com/" ![]() вообще-то хорошим тоном считается указывать на чьей базе сделана прошивка. Цитата:
Цитата:
может такое где и нужно, но для большинства применений удобнее обратный алгоритмм - включение на выбранной яркости, а по короткому клику (хотя бы) - рампинг с запоминанием. |
||
|
|
|
|
3
|
|
Новичок
Регистрация: 01.09.2013 Последняя активность: 07.04.2014 14:27
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили: 2 раз(а) в 1 сообщении
|
galex, Черт. Действительно забыл упомянуть, что использовал код тамагочи как опорный. Настолько боялся забыть это сделать, что забыл.
![]() Да, пожалуй. Просто я очень не люблю, когда после темноты в помещении вдруг появляется источник в 10ватт. Плюс, бывает необходимость включить ночью в машине фонарь. А водители не любят яркий свет в салоне. ![]() Вообще, это был чистый эксперимент. Я в первый раз имел дело со всем этим, поэтому особо не думал. Хотелось за выходные получить результат. Думаю убрать плавность, сделать ступенчатый рампинг стабилизаторами, попытаться докрутить внешнюю кнопку для переключения(а лучше - геркона). Но пока не читал теории - я пишу слишком неоптимальный код. Это всё не поместится. |
|
|
|
|
|
4
|
![]() |
Это на основе старой версии. Там код не оптимален. Самая заоптимизированная версия у меня 2.0 потом я расслабился
Причем в версии 2.0 можно вообще EEPROM не использовать.
|
|
|
|
|
|
5
|
![]() |
И ошибки все мои остались.
ADCSRA &=~ (0<<ADIE | (0<<ADSC)); вот это не правильно |
|
|
|
|
6
|
|
Новичок
Регистрация: 01.09.2013 Последняя активность: 07.04.2014 14:27
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили: 2 раз(а) в 1 сообщении
|
Tamagotchi, каюсь, хотелось, чтобы засветилось как можно быстрее, в вопрос не углублялся.
![]() Для меня это вообще было ужасом. Маленький пример: я пару часов искал баг - фонарь не сохранял состояние; оказалось, я забыл return в функции возврата запомненного режима. Уже сильно привычный мне C# такого бы никогда не позволил... |
|
|
|
|
|
7
|
![]() |
Sht3ch,
Контроль кода тут никакой. Я однажды забыл поместить объявление функции в ххх.h подключил это include xxx.h вызвал функцию, которую забыл не объявить, и ЭТО СКОМПИЛИЛОСЬ!!! Не работало (куда он вообще вызов сделал?) и я этот баг пару часов искал. А потом ВДРУГ перестало компилиться Меня такие чудеса бесят просто, особенно если до этого C# использовать.
|
|
|
|