Как буферизовать ATMEGA для прерывания питания на миллисекундном уровне без странного поведения?

У меня есть Arduino ATMEGA328p-pu со светодиодной схемой + полоса сдвигового регистра, подключенная через SPI. Когда он включается, он увеличивает переменную в EEPROM для улучшения режима отображения.

  • У нас установлен детектор понижения напряжения на уровне 1 (2,7 В).
  • Есть конденсатор на 1500 мкФ, подключенный параллельно к проводам питания, чтобы, надеюсь, удержать Arduino от изменения режимов при физическом воздействии, поскольку клеммы батареи могут немного отключиться на миллисекунду (?) или около того.
  • На положительном выводе колпачка есть диод, чтобы предотвратить разряд колпачка на светодиоды, поэтому он только буферизует Arduino.
  • Кроме того, параллельно крышке имеется резистор на 1000 Ом, чтобы разряжать ее, поскольку она удерживала напряжение, что, как мы предполагаем, было причиной проблемы, когда микросхема иногда не зажигала светодиодную цепь при загрузке.
  • Arduino pro mini и лента рассчитаны на 5 В, но мы обычно запускаем их при напряжении 3,7 В, поэтому они могут питаться от одной литий-ионной батареи.

Иногда после 10 или 15 секунд простоя цепь не загорается. Иногда после отключения аккумулятора и повторного подключения несколько раз подряд он потом загорается.

Может ли кто-нибудь порекомендовать лучший способ обеспечить буфер питания для ATMEGA (но не для светодиодной ленты)? Делаем ли мы это правильно по большей части?

Диаграмма (извините, если она беспорядочна, я могу попросить моего друга переделать ее в Illustrator, если это неясно, это может занять несколько часов):Принципиальная электрическая схема

Можешь нарисовать принципиальную схему ситуации с АРН, блоком питания, резистором, конденсатором, диодом,...
Единственная причина, по которой вам нужен этот «буфер», заключается в том, что клеммы аккумулятора могут слегка отсоединиться при ударе? Если это так, вы должны просто удалить разъем и припаять провода непосредственно к плате.
Повторяя jippie, вы начали с хорошего письменного описания, добавление схемы очень поможет. Если у вас возникли проблемы с публикацией, есть помощь.
Спасибо всем за отзывы, сейчас работаю над схемой. @GarrettFogerlie Использование съемной батареи в терминалах сейчас является требованием дизайна, но я ценю это предложение.
Ваш продувочный резистор малогабаритен и потребляет значительную мощность по сравнению с типичными потребностями в режиме ожидания. Если вы можете обнаружить пропадание в программном обеспечении, настройте программу, которая «подсчитывает» выход UART, начиная с пропадания напряжения, и следите за этим при отключении питания и смотрите, как долго он работает, вычисляя скорость передачи данных. Также остерегайтесь возможности непреднамеренного включения периферийных устройств через линии передачи данных.
Спасибо @ChrisStratton, отличные предложения. Одна вещь, которую мы только что сделали для устранения неполадок, это сняли всю крышку и диодную часть, оставив только прокачку на 1 кОм. Проблема осталась, поэтому я думаю, что мы немного сузили ее. Есть что-то в подключении этого резистора параллельно шинам питания, что вызывает нестабильное поведение между Arduino и светодиодной лентой.
Этого не должно быть, если только светодиодная лента не требует очень близкого расположения к положительной шине, чтобы надежно считывать «высокий уровень», и в этом случае резистор с низким значением может помочь пропустить через диод достаточный ток, чтобы активировать его полное падение напряжения. и сделать «высокий» выход atmega недостаточно высоким напряжением для схемы светодиода. Вы можете попробовать дать светодиодной ленте собственный независимый диод, чтобы обе схемы видели одинаковые напряжения питания. Также, пожалуйста, уточните, является ли это проблемой во время работы или, скорее, проблемой, связанной с ненадежной перезагрузкой при включении питания.
@ChrisStratton Еще раз спасибо, на данный момент это проблема с перезагрузкой при включении. Иногда полоса включается нормально, в других случаях полоса включается с задержкой 5-10 секунд. В крайне редких случаях он вообще не включается (или включается после того, как мы сдались). Мы только что устранили неполадки с проблемным Arduino на другой планке, и результаты были такими же. Небольшой процент ардуино, которые у нас есть, ведут себя таким образом, большинство — нет. Прямо сейчас работаю над большим размером выборки, чтобы понять это.
Может быть, вы можете попытаться дать arduino какой-то независимый выход (последовательный, его собственные дискретные светодиоды), чтобы вы могли сделать небольшую отладочную индикацию, что arduino сброшен, в отличие от его успешного общения со светодиодной лентой. Я предполагаю, что светодиодная лента даже не имеет сброса, отличного от обычного развития ее состояний каждый раз, когда вы к ней обращаетесь?
Все, что я публиковал, вводило в заблуждение, мы исправили это, отключив бит предохранителя BOOTRST. Поймите: p Спасибо за всю помощь, особенно @ChrisStratton.
Проблема @ChrisStratton была совершенно не связана с крышкой, диодом и прокачкой, см. мой комментарий выше. Очень благодарна за вашу помощь :)
Нет, это неправильно. Предохранитель определяет, где начинается выполнение программы. Возможно, прохождение загрузчика замедляет работу, а отказ от этого помогает. Но вы не поняли и не решили настоящую проблему .

Ответы (1)

Вы можете использовать суперконденсатор (1F/5.5v) после диода, подключив его напрямую к VCC и GND. Это поможет вам в буферизации питания.