Показано с 1 по 5 из 5
  1. #1
    Новичок
    Регистрация
    23.01.2011
    Возраст
    48
    Сообщений
    2
    Вес репутации
    0

    По умолчанию Время запуска внутренней программы ATMega

    устал искать ответ на вопрос, решился спросить - как можно уменьшить время запуска внутреннего кода на ATMega (...duino) ???

    запуск идет примерно через 10 секунд после включения питания (или после RESET)

    это очень долго, если я хочу собрать некий брелок на ATMege или еще какую автономную систему на батарейках (на аккумуляторе), то каждый раз при включении я должен ждать не менее 10 сек, а все время держать ее включенной или спящей не хочется, чтоб продлить срок жизни батарейки.

    Пробовал баловаться фьюзами, большого результата нет, +/-3 сек от тех же 10 секунд.

    Пробовал запускать с внутреннего генератора, то же большой разницы не заметил.

    Как здесь быть, какие есть решения ? или тут уже не чего не поделать, придется мирится, придется всегда ждать несколько секунд.

  2. #2
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,376
    Вес репутации
    10

    По умолчанию Re: Время запуска внутренней программы ATMega

    Чтобы понять нужно код исследовать

  3. #3
    Новичок
    Регистрация
    23.01.2011
    Возраст
    48
    Сообщений
    2
    Вес репутации
    0

    По умолчанию 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.

  4. #4
    Модератор
    Регистрация
    06.07.2008
    Возраст
    45
    Сообщений
    414
    Вес репутации
    435

    По умолчанию Re: Время запуска внутренней программы ATMega

    Бутлоадер - штука полезная при наличии связи конечного устройства с компьютером. Он позволяет менять прошивку не залезая внутрь устройства, а в ряде случаев - еще и не раскрывая прошивку (если протокол обмена шифрованный).

    Ну а Brown-out Detector естественно должен быть включен в конечном устройстве. А уж если устройство использует встроенный в AVR eeprom, Brown-out Detector обязан быть включен.

    Приведенные fuse биты на 168-й меге включают встроенную RC цепочку на частоту 1 мегагерц и отключают внешний кварц. В статье 8-я мега, там другие fuse биты.

  5. #5
    Модератор Аватар для XsanderS
    Регистрация
    05.05.2008
    Возраст
    41
    Сообщений
    829
    Вес репутации
    389

    По умолчанию Re: Время запуска внутренней программы ATMega

    к сожалению эта статья не помогла, выкладываю архив с подправленным bootloader
    В архиве так же bords.text который нужно положить с заменой в папку arduino-1.0.xxx/hardware/arduino
    после чего в списке бортов среды появиться ATmega8 16MHz что и следует в последствии выбирать для прошивки контролера из под среды Arduino после заливки bootloadera.

    Конфигурация fuse: lfuse 0xDF hfuse 0xCB если есть желание активировать BOD то lfuse 1F

    В результате процессор начинает сразу работать после запуска или резета.
    Вложения Вложения
    Последний раз редактировалось XsanderS; 09.12.2014 в 15:36.
    хороший модем должен качать пиво!
    Мой проект

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •