Запись в ADMUX на 3,7 В от микросхемы перезапуска батареи
Дано: Arduino nano (atmega328P) с nrf24l01. Что я пытаюсь сделать: Измерить разряд батареи. Что я делаю для этого. Поэтому я провел небольшое исследование того, как можно измерить напряжение батареи без использования каких-либо дополнительных контактов (уже распечатал плату и вдруг понял, что было бы неплохо также измерить разряд батареи). И нашел примеры с почти всегда похожим кодом:
long readVcc() {
long result;
// Чтение ссылки 1,1 В относительно AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Подождите, пока Vref установится
ADCSRA |= _BV(ADSC); // Конвертировать
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1126400L / result; // Обратный расчет AVcc в мВ
return result;
}
Это работает нормально, когда у меня заряжены батареи, но как только оно достигает 3,7 вольт, запись в ADMUX, похоже, приводит к сбою всей программы и перезапуску чипа. Однако до этой операции все остальное работает нормально.
Несколько вопросов:
- Кто-нибудь может объяснить мне, почему происходит сбой?
- Как это предотвратить?
- Поможет ли перепрошивка загрузчика и настройка генератора на 8 МГц решить эту проблему?
@user10160994, 👍0
Обсуждение0
Смотрите также:
- Самая низкая мощность, возможная в Arduino
- Как запрограммировать чип ATmega328 au tqfp32 (SMD)?
- Использование Arduino Nano для программирования (как ISP) автономного 328p
- Кнопка сброса работает без питания?
- Разница в загрузчике между Atmel328p (сквозное отверстие) и Atmel328p au (smd)
- Arduino Nano ATmega328P не засыпает ни с <LowPower>, ни с <avt/sleep.h>
- Процедура изменения частоты Нано или аналогичной
- Аналоговый вывод Arduino nano/uno
добавьте код отладки... программа может не давать сбоев... она может попасть в бесконечный цикл... строка
пока
может быть бесконечным циклом, @jsotolaЯ почти уверен, что это крах. Потому что он перезагружается и снова отправляет данные с помощью nrf24l01. Я проверил это, отправив счетчик, который я увеличиваю в каждом цикле. И когда он падает, это всегда 0. Так что он падает., @user10160994
может быть блок питания отключается, когда NRF24L01 активирует радио, @jsotola
Не совсем уверен, как это возможно. При чуть большей мощности все работает нормально. Также если я подключаю датчик температуры, все работает нормально. Он не работает именно при записи в ADMUX., @user10160994
Как вы выяснили, что именно при записи в ADMUX произошел сбой?, @Fahad
@Фахад довольно легко. Я просто оставил эту операцию и проверил поведение., @user10160994