Ошибка загрузки при более низкой мощности

У меня есть обычная плата Arduino ATMega328, которая обычно работает на частоте 5 В @ 8 МГц (с использованием профиля Arduino Pro 3.3V 8MHz и загрузчика). Основная причина, по которой я использую эту настройку, заключается в том, что я могу поставить плату в режим сна, когда основное питание отключено, и начинает работать от батареи (3 В от ячейки монеты). Источники 5V и 3V являются диодом OR'ed вместе, а вход 5V привязан к INT0. В коде, когда он обнаруживает, что INT0 упал до минимума, он инициализирует спящий режим, и все отключается, за исключением таймера сторожевого таймера, который поддерживает цикл 1 Гц, чтобы сохранить внутренний счет и проверить его, чтобы чип должен был разбудить резервную копию. Это работает красиво , когда сначала подается напряжение 5 В, затем вставлена ​​батарея, , затем отключается 5 В. Он ложится спать, и когда 5V возвращается, он просыпается, и я вижу, что он не потерял счет.

Однако проблема возникает, когда 3V применяется first . Я честно не уверен, что он даже загружается. Но то, что он должен делать, это загрузить, проверьте, не установлен ли INT0 (Digital 2), и если да, перейдите в режим сна. Наблюдая за текущей ничью, я вижу, что она заряжается до нескольких мА в течение пары секунд, а затем опускается до 0,3 мА (еще выше, чем в режиме сна). Но когда я повторно применяю 5V, ничего . Вывод мощности возвращается, но он не отвечает (по серийному протоколу FTDI).

Возможно, что-то мне не хватает, что он не может быть загружен на 3V ... теоретически он должен работать нормально.

Обновление: Я сбросил светодиод на D13 и попробовал мигающий эскиз. Прекрасно работает при старте от 3V или 5V. Однако, когда я запускаю свою прошивку и запускаю ее с 3V, светодиод начинает вспыхивать дико. Я понятия не имею, что вызывает его, поскольку я даже не устанавливаю D13 как что-либо в своем коде. Но это заставляет меня думать, что это как-то связано с загрузчиком ...

9 голосов | спросил Adam Haile 13 MaramThu, 13 Mar 2014 06:17:11 +04002014-03-13T06:17:11+04:0006 2014, 06:17:11

4 ответа


6

Итак ... оказалось, что все происходит в коде. Оказывается, что я инициализировал прерывание на INT0, когда оно было низким, в самом начале моего кода. Проблема заключалась в том, что когда он запускался с резервной мощностью 3 В, INT0 всегда был низким, потому что INT0 привязан к линии 5V (как он знает, чтобы идти спать). Поскольку INT0 был низким и прерывание запускалось на низком уровне, это вызывало постоянное прерывание, поэтому никогда не оставляло остальную часть программы в любое время. Включено, чтобы включить это прерывание только после того, как я ввел режим полного бодрствования, и теперь он отлично работает.

ответил Adam Haile 20 MarpmThu, 20 Mar 2014 22:57:59 +04002014-03-20T22:57:59+04:0010 2014, 22:57:59
3

То, что происходит и почему не может быть определено на основе объема предоставленной информации. Тем не менее, я вижу по крайней мере одну потенциальную проблему, которая, по крайней мере, частично объясняет описанные симптомы.

Вы сказали, что используете диоды для выбора напряжения питания, а одно питание - 3В. Если вы используете стандартные диоды, которые опускаются на ~ 0,6 В, напряжение питания на MCU составляет всего ~ 2,4 В. Если вы используете диоды Шоттки с падением напряжения между 0,15-0,45, напряжение питания может быть настолько низким, как 2,5 В. У вас есть напряжение BOD, равное 2,7 вольта, поэтому теоретически MCU никогда не будет загружаться с батареей.

Что касается того, почему вы можете начать его с 5v, перейдите на 3v и верните его снова - я не уверен. Вы можете отключить BOD в коде ... возможно ... Не знаете, почему это работает, но, скорее всего, он не будет работать.

Я настраиваю схему диодного переключателя с 5v и 3.3v, чтобы увидеть, как он выглядит на моем осциллографе при переключении напряжения. Когда при переключении 3,3 В до 5 В напряжение сначала начинает колебаться довольно немного. Это может вызвать некоторые проблемы, когда MCU пытается выйти из сна. Помещение крышки между VCC и GND сглаживало сигнал очень красиво. При переключении с 5в на 3,3 В действительно не было никакого колебания, просто чистого падения.

Из этой информации кажется, что вы должны опустить порог BOD или отключить BOD, а также установить развязку между VCC и GND. Вероятно, вы также должны убедиться, что у вас имеется понижающий резистор на INT0, и прочитайте разделы спецификаций MCU, объясняющие различные режимы сна, все соображения для сна и бодрствования - это очень привлекательно. Приветствия

ответил imjosh 20 MarpmThu, 20 Mar 2014 22:03:24 +04002014-03-20T22:03:24+04:0010 2014, 22:03:24
2

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

Когда Arduino запускается, загрузчик, получающий несколько задач, таких как поиск последовательного хоста или загрузка данных программы из флешки, будет потреблять гораздо больше энергии, чем спящий Arduino.

Я думаю, причина, по которой ваш Arduino не запускается, заключается в том, что загрузчик требует точного источника синхронизации, но применение 3v к нему испортит эти часы, и это, возможно, приведет к сбою или ожиданию 3.3v для применения к стабильному источнику .

Глядя на техническое описание:

copyright ATMEL

Мы видим, что текущий розыгрыш при пробуждении (запуск загрузчика), вероятно, будет около 2 мА, а ток сна составляет 0,8 микроампер . Это может привести к отключению при запуске без соответствующего тока.

Возможно, вы должны включить его только с мощностью 5 В, или, возможно, вам понадобится батарея с более высоким напряжением и более высоким напряжением.

ответил TheDoctor 16 MarpmSun, 16 Mar 2014 19:18:53 +04002014-03-16T19:18:53+04:0007 2014, 19:18:53
-5

Попробуйте перезагрузить свой ардуино, перейдя в Tools> Запустить загрузчик

ответил DeveloperACE 21 MarpmFri, 21 Mar 2014 20:33:37 +04002014-03-21T20:33:37+04:0008 2014, 20:33:37

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132