Atmega 328P-PU: перестает работать внутренний генератор при понижении напряжения питания
- Войдите на сайт для отправки комментариев
Втр, 06/08/2019 - 17:11
С помощью платы Arduino UNO загрузил в Atmega 328P-PU бутлоадер Arduino as ISP. Разные скетчи в схеме Atmega+кварц 16 МГц выполняются при напряжении питания МК 5В, а при переходе на питание от батареек (3В) перестают выполняться. Одна из возможных причин - понижение частоты генерации контроллера при понижении напряжения питания.
Похоже, надо редактировать фьюзы. Нашел программку, которая позволяет редактировать фьюзы - avrdudess, но она, как пишут, работает со спецпрограмматорами.
Есть методы изменить фьюзы в моем случае без спецпрограмматора? Раньше фьюзами не занимался - не было необходимости.
Есть методы изменить фьюзы в моем случае без спецпрограмматора?
Нужен обычный ISP программатор. Также можете воспользоваться другой ардуиной (Arduino ISP), как Вы уже делали ранее с бутлоадером. Более распространённые программы для прошивки МК и изменения фьюзов - SinaProg, AVRDUDE_PROG.
Cadil, прежде чем менять нужно убедиться что проблема действительно из-за fuse. По умолчанию на UNO bodlevel=2,7в И учитывайте, что при частоте 16МГц мк не обязан работать при таких низких напряжениях.
На всякий случай график из даташита:
как написал dimax, atmel не гарантирует нормальную работу чипа на таких скоростях и напряжениях. вам нужна плата на 8MHz, она нормально заводится от 3.3в. если хотите питать ATmega328 от 1.8в до 5.5в нужно менять кварц на 4MHz и перепрошивать bootloader на спецальный (тк arduino официально не работает на таких частотах)
еще вариант взять Blue Pill/STM32F103, она работат на частоте 72MHz при напряжении от 2в до 3.6в
кому лень читать ссылки вот линк на 4MHz загрузчик для ATmega328 (естетвенно с заменой кварца на 4MHz)
p.s. видел тут копипасту из моей статьи про Blue Pill - даже текст и тот сами написать не могут. куда мы кОтемся?
Есть методы изменить фьюзы в моем случае без спецпрограмматора?
Спасибо, просветили! Буду знать на будущее.
Увидев график, я тоже засомневался, что проблема в фьюзах, установленных по умолчанию.
Заменил в схеме кварц 16 МГц на 8 МГц, но, как и раньше, схема при уменьшении напряжения питания с 5В (преобразователь UART) до 2,8В (батарейки АА) перестает работать. Хотя, судя по графику, должна (2,7В - 10 МГц).
Jeka_M, Спасибо за полезный график.
при уменьшении напряжения питания с 5В (преобразователь UART) до 2,8В (батарейки АА) перестает работать.
Это срабатывает система Brown-out Detection (BOD), которая настроена на 2,7В. Попробуйте поменять на 1,8В или вообще выключить. Настраивается фьюзами BODLEVEL.
Cadil - неплохо было бы схему Вашей платы с ардуино выложить. Плата самодельная или готовая?
да не понимает он. поменял кварц, а бутлодер нет. :) теперь там у него со скоростями шим, uart, i2c, isp зоопарк. 5 сообщений о Brown-out Detection, которые он игнорирует тк не знает что это и как его менять.
вот автор Atmel AVR Fuse Calculator. после того как расставите галочки правильно, внизу будут 3 числа\фьюза: Low, High, Extended. берете bootloader для 8MHz кварца и прошиваете его с этими фьюзами.
вот для примера как прошить bootlader под названием optiboot (фьюзы пишутся в поля под цифрой 5). удачи
если нет програматора USBasp, берем uart-usb FTDI FT232R.
Установил программу SinaProg.
Не могу понять, как тут выйти на BODLEVEL и другие фьюзы?
так вот же они - на правой картинке в середине: LowFuse HighFuse
А если вас интересует расчет нужного значения фьюзов по опциям - такой опции в Синапроге, по-моему, нет. Это делается вручную или в так называемом "калькуляторе фьюзов", а в Синапрог уже подставляются готовые значения
Понял. Спасибо!
Вот калькулятор фьюзов. Выбираете там свой микроконтроллер. Там же внизу на странице вписываете вручную считанные значения Low, High, Extended (только не перепутайте). Потом жмете кнопку Apply values. Убеждаетесь, что выше появится Brown-out detection level at VCC=2.7V (так у вас сейчас фьюзы настроены). Вместо этого значения выбираете из списка Brown-out detection level at VCC=1.8V и смотрите внизу как изменились фьюз биты (в частности изменятся фьюзы Extended). Берёте это изменившееся значение и программируете в микроконтроллер.
Я нашел этот калькулятор. Изменить одну строчку и записать новые значения в контроллер - несложно. Но сейчас фьюзы в контроллере (DE FF 05) слишком сильно отличаются от значений по умолчанию в калькуляторе (62 D9 FF).
Я не угроблю контроллер?
Там кроме Brown-out detection level at VCC=1.8V надо менять и другие фьюзы. Например, Watch-dog Timer always on. Сторожевой таймер используется у меня в скетче.
По-моему, надо пересматривать весь перечень да и МК угробить не хочется ...
Я не угроблю контроллер?
К опциям: RESET!!!! и SPI не лезьте. Первая выключена, вторая включена. Хотя, второе вроде не страшно, злые языки утверждают, что через ISP ее не изменить, не пробовал.
Спасибо!
Тут автор пишет о важных фьюзах SPIEN или RSTDSBL, которые нельзя трогать. Короче - буду благодарен за линк с типовой установкой фьюзов для Atmega328P. Предполагаю, что такая гуляет на просторах Интернета, но мне не удается ее найти.
Набросал свой вариант опций (см. картинки). Изменения в калькуляторе подчеркнуты. В конфигурации бит ничего не трогал.
Жду на критику и предложения.

Делитель на 8, если из каких-то соображений, собак, вроде не требуется, начало бут, отожрет 4К флэша, у вас такой загрузчик? Может более продвинутые поправят.
Мил человек! Поясни, словами на клавиатуре, что ты хочешь. Без отсылок к уже где-то написанному.
1. Какое питание у твоего устройства?
2. Какая частота работы?
3. Есть ли и нужен ли внешний кварц?
4. Что ты хочешь от вочдога?
5. Нахера тебе вообще загрузчик в изделии? То есть, ты не можешь "прошивать" по SPI, потому что уже так спроектировал прибор? Если еще не поздно, то лучше переделать. Загрузчик вредная вещь для изделия, он для отладки. Объясню почему: при ресете или просто включении, МК начинает работать с загрузчика, ждет примерно секунду и потом переходит к коду. В изделии это неудобно, а удобства програмирования добавляет ТОЛЬКО для плат с USB. Во всех остальных случаях тебе все равно подключать доп. устройство. Так какая разница - USD-UART или USB-ASP?
=====================
Короче - ответь и я тебе понятно объясню: какие и где тебе фьюзы поставть.
ну вот до автора начало доходить немного. зачем вы используете SinaProg? он престал обновляться в 2000-х годах и не поддерживает новые камни.
я же вам давал ссылки, вы их читали? там есть информация о AVRDudess. он намного свежее SinaProg.
там же ссылка с объяснениями о всех fuse. еслиб вы прочитали, то поняли, CKDIV8 уменьшит частоту процессора в 8 раз!!! если у вас кварц на 8MHz, то тактовая частота камня будет 1MHz.
вы хотите разобраться в вопросе или вам надо тяп-ляп и в продакшн?
1. Какое питание у твоего устройства?
2. Какая частота работы?
3. Есть ли и нужен ли внешний кварц?
4. Что ты хочешь от вочдога? ...
=====================
Короче - ответь и я тебе понятно объясню: какие и где тебе фьюзы поставть.
1. 1,8В-3,2В.
2. Частота генератора - 8МГЦ или 16МГц.
3. Внешний кварц есть и нужен.
4. Не хочу, а сделал. Ватчдог отправляет в сон МК и периферию после ими выполнения своих функций.
Разобрался.
Для тех, кто столкнется с подобной проблемой - LOW: 0xFF, HIGH: 0xDE, EXT: 0x07.
Благодарю всех, кто откликнулся.
BODLEVEL отключили полностью, здря. ИМХО.
Разобрался.
Для тех, кто столкнется с подобной проблемой - LOW: 0xFF, HIGH: 0xDE, EXT: 0x07.
Благодарю всех, кто откликнулся.
молодец, что сам! Я только проснулся... шабат и все эти вещи! ;)))
1. low=FF нормально, лишние такты на запуск нужны при медленном старте генератора. И/или неустойчивом питании на старте. FF это по умолчанию и это нормально.\
2. hi=DE. D - понятно, а минимальный бутсайз - по моему совету - вообще не использовать бутлоадер? разумно, больше места для кода.
3. бодлевел отключить - не знаю... при быстром старте - вполне нормально. Старт с бод - быстрее обычного и для этого он и нужен - быстрее встать в работу, после возвращения питания. При быстром старте в low фьюзе - можно и без него.
===============
Еще раз: молодец, что сам разобрался.
2. hi=DE. D - понятно, а минимальный бутсайз - по моему совету - вообще не использовать бутлоадер? разумно, больше места для кода.
3. бодлевел отключить - не знаю... при быстром старте - вполне нормально. Старт с бод - быстрее обычного и для этого он и нужен - быстрее встать в работу, после возвращения питания. При быстром старте в low фьюзе - можно и без него.
Спасибо! Учту!
Разобрался.
Для тех, кто столкнется с подобной проблемой - LOW: 0xFF, HIGH: 0xDE, EXT: 0x07.
Благодарю всех, кто откликнулся.
1. low=FF нормально, лишние такты на запуск нужны при медленном старте генератора. И/или неустойчивом питании на старте. FF это по умолчанию и это нормально.\
2. hi=DE. D - понятно, а минимальный бутсайз - по моему совету - вообще не использовать бутлоадер? разумно, больше места для кода.
3. бодлевел отключить - не знаю... при быстром старте - вполне нормально. Старт с бод - быстрее обычного и для этого он и нужен - быстрее встать в работу, после возвращения питания. При быстром старте в low фьюзе - можно и без него.
Вкратце напомню историю вопроса. У меня не работал контроллер Atmega328P, 16 MHz при понижении напряжения питания с 5В до 2,7...2,8В (старые батарейки).
С учетом Ваших предложений переустановил заводские фьюзы на следующие - L: FF, H: DE, E: 06 (бодлевел для мониторинга 1,8В). Контроллер заработал.
Сейчас хочу перейти на кварц 8 МГц. Предполагаю, что новые фьюзы будут - L: FF, H: D9, E: 06.
Я не ошибаюсь? Проверьте, пожалуйста.
Заранее благодарю за помощь.
Что хочу от устройства:
- Atmega328p ̶н̶а̶ ̶в̶н̶у̶т̶р̶е̶н̶н̶е̶м̶ ̶г̶е̶н̶е̶р̶а̶т̶о̶р̶е̶ ̶(̶б̶е̶з̶ ̶к̶в̶а̶р̶ц̶е̶в̶ ̶и̶ ̶R̶C̶)̶ ̶п̶р̶и̶ ̶1̶M̶H̶z̶ внешний кварц. резонатор 8MHz, тактовая частота Атмеги 1MHz
- питание 2.3V
- WDT с таймаутом 8 сек
- наличие загрузчика
Вопросы:
- какой bootloader лучше выбрать, optiboot или uno?
- какие правильные фьюзы под такой вариант?
- какие нужны правки чтоб скетчи правильно "чувствовали" время при такой тактовой частоте?
- будет ли работать Serial на скорости до 57600 включительно?
vlad072
зачем bootloader?
зачем serial?
vlad072, внутренний генератор и бутлоадер вещи не совместимые.
dimax, понял. Ок, задача та же, но пусть будет внешний кварц 8MHz. Подскажите по остальным вопросам?
- какой bootloader лучше выбрать, optiboot или uno?
- какие правильные фьюзы под такой вариант?
- какие нужны правки чтоб скетчи правильно "чувствовали" время при такой тактовой частоте?
- будет ли работать Serial на скорости до 57600 включительно?
(1) Uno==оптибут.
(2) Low: FF, High: DE, Ext: FE
(3) создать свой блок в boards.txt , тут намедни о этом же речь шла.
(4) при 8МГц тактовой будет
Загрузчик любой - они оба с wdt работают, uart работать на такой скорости будет, вопрос для чего он? Обмен с внешним устройством? Если просто для загрузки скетче то нафиг не надо
(4) при 8МГц тактовой будет
Т.е. на 8 делить частоту не нужно? Вернее если её поделить то Serial работать не будет?
и то и другое
и то и другое
если я правильно понял задачу это будет переносное устройство для работы с каким либо прибором, в этом случае вы же не на постоянке с ним будете работать а какое то время минуты часы.....тогда и разницы между 8 и 16 МГЦ в энерго потреблении не сильно заметите
с другой стороны если постоянно быть подключенным некоему прибору - почему бы питание от прибора не получить
vlad072, если кварц на 8 то не надо делить. Если на 16 то надо. Сериал с кварцем всегда работает (при разумных тактовых), ограничение будет в макс. скорости.
dimax, короче задача максимально снизить частоту для получения максимальной экономичности. НО! требуется Serial порт со скоростью 57600. Точность временнЫх интервалов и быстродействие контроллера в целом не критичны, поэтому и хотел упразднить внешнюю обвязку. Что посоветуете?
andycat, устройство - автосигнализация. Питание - ионистор с "подзараядкой" от step-down'a. Свзяь с модемом по Serial через ждамперы, сняв которые и накинув колодку можно было бы закидывать и скетч в Атмегу и прошивку/аудиофайлы в модем.
мне понравился загрузчик из пакета miniCore (все клоны 328 камня), ватчдог работает, проверял этой прогой, ну и естественно широкие возможности тактирования и напряжений питания
vlad072, Управляйте тактовой частотой программно ( Clock Prescale Register). Нужно что-то передать в сериал -тактовую в максимум и передаёте. Передали -тактовую поделить /256, и не спеша делаете что ему нужно делать при простое, либо вообще вздремнуть, если есть возможность. Это будет экономия. А просто снизить до 8Мгц - ни о чём.
при 1МГц тактовой (исходя из даташита) можно и 115200
vlad072, Управляйте тактовой частотой программно ( Clock Prescale Register). Нужно что-то передать в сериал -тактовую в максимум и передаёте. Передали -тактовую поделить /256, и не спеша делаете что ему нужно делать при простое, либо вообще вздремнуть, если есть возможность. Это будет экономия. А просто снизить до 8Мгц - ни о чём.
Дмитрий, может примерчик какой скинешь?
А у меня самодельная ардуина при 3.3в и на 24мгц работала с кварцем. Не по даташиту конечно, но там не ответственное применение, даже если зависнет не страшно, хотя не замечал такого насколько помню.
ua6em, http://arduino.ru/forum/programmirovanie/kak-vremenno-izmenit-chastotu-mk ?
Не вариант. Дело в том что сериал постоянно нужно "слушать". Или даже при таких частотах в буфер будут попадать данные из RX?
при изменении частоты думаю придется и UART инициализировать, но смысла нет, т к модем даже в полуспящем режиме кушает сильно больше МК на максимальной частоте - множество тем и эксперименов с замерами потребления тут же на форуме есть....
ua6em, http://arduino.ru/forum/programmirovanie/kak-vremenno-izmenit-chastotu-mk ?
с возвратом назад что-то не задалось )))
Кто что подскажет?
даже в полуспящем режиме кушает сильно больше МК на максимальной частоте
Да, я в курсе, просто хотелось бы выжать по максимуму. На данный момент прототип на основе Nano-5V-16MHz показывает следующие результаты:
- модем SIM800C всегда активен и в "спокойном состоянии" и выключенном трансивере bluetooth ~25-30mA
- ардуина ~7-8mA
Токи потребления с учётом понижающих стабилизаторов, т.е. по 12 вольтам.
Так что в принципе смысл скроить на потреблении атмеги есть. С учётом что "вся остальная машина" после 20 мин. простоя потребляет ~50mA, для сигналки почти столько же - бесстыдно много.