Время запуска внутренней программы ATMega
устал искать ответ на вопрос, решился спросить - как можно уменьшить время запуска внутреннего кода на ATMega (...duino) ???
запуск идет примерно через 10 секунд после включения питания (или после RESET)
это очень долго, если я хочу собрать некий брелок на ATMege или еще какую автономную систему на батарейках (на аккумуляторе), то каждый раз при включении я должен ждать не менее 10 сек, а все время держать ее включенной или спящей не хочется, чтоб продлить срок жизни батарейки.
Пробовал баловаться фьюзами, большого результата нет, +/-3 сек от тех же 10 секунд.
Пробовал запускать с внутреннего генератора, то же большой разницы не заметил.
Как здесь быть, какие есть решения ? или тут уже не чего не поделать, придется мирится, придется всегда ждать несколько секунд.
Re: Время запуска внутренней программы ATMega
Чтобы понять нужно код исследовать
Re: Время запуска внутренней программы ATMega
Все! разобрался!
вот текст, который все проясняет:
(взято от сюда http://****.blogspot.com/2009_06_01_archive.html)
Подаем питание на устройство, и... ждем 10 секунд, пока появятся мигающие нули. Почему так долго? Это происходит из-за бутлоадера, который был прошит в ATmega8, если вы дали хотя бы раз команду "Burn Bootloader" из Arduino IDE. Кстати, именно он может стать причиной активизации злых аппаратных духов.
Выглядит это так: вы собираете устройство, проверяете один раз его работоспособность, удовлетворенно выключаете и несете на работу - хвастаться. Но не тут-то было - при повторном включении устройство ведет себя странно - индикация замирает навсегда или вообще не включается. Разочарованно несете его домой, три раза перепроверяете и в итоге еще раз перепрошиваете. Все тут же начинает работать, вы снова удовлетворенно его выключаете, снова несете на работу, оно снова не работает и т.д.
На 3-4 итерации я решил внимательно разобраться, в чем же, собственно, дело. Для этого я добился повторения состояния "поломки" таймера, после чего прочитал флеш-память ATmega8: обнаружились отличия в 16 байтах по сравнению с тем, что зашивали изначально. Следовательно, память ATmega была чем-то испорчена. И, как вы уже догадались, это был опрометчиво оставленный в памяти Bootloader.
Рекомендую в готовом изделии выключить бутлоадер и запретить запись в память программ (не путать с возможностью программирования через ICSP) при помощи установки соответствующих fuse-и lock-битов. Если бутлоадер все-таки нужен - как правило, для отладки - советую обязательно включить BOD - Brown-out Detector, встроенный в ATmega и по умолчанию в Arduino выключенный. Корень проблемы в том, что бутлоадер может исполнять SPM-инструкции (Store Program Memory), которые модифицируют код программной секции. В момент включения питания происходит масса переходных процессов: возрастает напряжение питания, разгоняется резонатор. Необходимо дождаться их стабилизации, прежде чем начинать выполнение инструкций, иначе поведение МК может быть непредсказуемым - с чем я и столкнулся. Для нейтрализации этого эффекта применяют стандартные схемы - т.н. "супервизоры" питания, которые следят за уровнем входного напряжения и удерживают сигнал сброса контроллера до тех пор, пока оно не достигнет нормального уровня. Но поскольку в ATmega оно уже есть (BOD), остается просто активировать его через fuse-биты и выбрать напряжение триггера (в нашем случае Vcc = 5В, поэтому выбираем 4В).
Финальные значения fuse-битов: HFUSE = 0xCB, LFUSE = 0x1F.
Re: Время запуска внутренней программы ATMega
Бутлоадер - штука полезная при наличии связи конечного устройства с компьютером. Он позволяет менять прошивку не залезая внутрь устройства, а в ряде случаев - еще и не раскрывая прошивку (если протокол обмена шифрованный).
Ну а Brown-out Detector естественно должен быть включен в конечном устройстве. А уж если устройство использует встроенный в AVR eeprom, Brown-out Detector обязан быть включен.
Приведенные fuse биты на 168-й меге включают встроенную RC цепочку на частоту 1 мегагерц и отключают внешний кварц. В статье 8-я мега, там другие fuse биты.
Вложений: 1
Re: Время запуска внутренней программы ATMega
к сожалению эта статья не помогла, выкладываю архив с подправленным bootloader
В архиве так же bords.text который нужно положить с заменой в папку arduino-1.0.xxx/hardware/arduino
после чего в списке бортов среды появиться ATmega8 16MHz что и следует в последствии выбирать для прошивки контролера из под среды Arduino после заливки bootloadera.
Конфигурация fuse: lfuse 0xDF hfuse 0xCB если есть желание активировать BOD то lfuse 1F
В результате процессор начинает сразу работать после запуска или резета.