Вопрос про analogRead
- Войдите на сайт для отправки комментариев
Чт, 11/08/2022 - 15:07
Можно ли функцией analogRead получить значение не с аналогового пина, а источника опорного напряжения 1V1?
Также интересует подключение к встроенному в Arduino датчику температуры.
Спасибо.
Даташит читать не предлагать ?
Можно ли функцией analogRead получить значение не с аналогового пина, а источника опорного напряжения 1V1?
Также интересует подключение к встроенному в Arduino датчику температуры.
Спасибо.
можно для обоих случаев
Отлично! Что написать в скобочках?
analogRead "из коробки" для UNO этого сделать нельзя, т.к. используется маска 7 для каналов.
ADMUX = (analog_reference << 6) | (pin & 0x07);
Надо или править analogRead, или найти альтернативную библиотеку с такой возможностью
можно
нельзя
Спасибо.
ADMUX = (analog_reference << 6) | (pin & 0x07);
А вот это вообще непонятно. Можете объяснить?
Это строчка из реализации штатной analogRead для UNO подобных.
DEL
Это строчка из реализации штатной analogRead для UNO подобных.
И из нее следует невозможность выбрать канал с номером больше 15 без изменения кода analogRead
Опорное напряжение и температура имеют номера 16 и 30 (для UNO и аналогичных)
Спасибо. Как же тогда на практике получают значение источника опорного напряжения?
Просто мысли: полагаю, само значение относительно источника питания будет разным (увеличиваться по мере разряда батарейки).
Я ошибся наверху. Каналы 8 и 14 а ограничение 7
Спасибо. Как же тогда на практике получают значение источника опорного напряжения?
Или читают даташит и пишут свою функцию, или ищут библиотеку с такой возможностью.
можно
нельзя
Спасибо.
В ответе #2 был не прав, не заметил в вопросе "можно ли функцией analogRead()". Коллеги правы, функциями ардуино - нельзя. А вот прямым доступом к регистрам - можно.
Ищите поиском в гугле "секретный вольтметр ардуино"
Или читают даташит и пишут свою функцию, или ищут библиотеку с такой возможностью.
Или убирают нах эту маску и тогда можно обычным analogRead:-)
Или читают даташит и пишут свою функцию, или ищут библиотеку с такой возможностью.
Нашёл вот это https://arduino.ru/forum/apparatnye-voprosy/kak-izmeryat-napryazhenie-avtonomnogo-pitaniya-na-arduino-nano
01
static
inline
void
adcChooseVBG(
void
) { ADMUX = (ADMUX & 0xF0) | 14; }
02
static
inline
void
adcStart(
void
) { ADCSRA |= bit(ADSC); }
03
static
inline
bool
adcInProgress(
void
) {
return
ADCSRA & bit(ADSC); }
04
static
inline unsigned adcGet(
void
) {
return
ADC; }
05
06
07
// Возвращает напряжение питания в десятых долях вольта
08
inline
static
int
getBatteryVoltage(
const
int
internalRefference) {
09
adcChooseVBG();
10
_delay_ms(1);
// пусть "пропитается"
11
adcStart();
// плевать на первый замер
12
while
(adcInProgress());
13
adcStart();
// теперь замеряем
14
while
(adcInProgress());
15
const
int
adc = adcGet();
16
return
(((internalRefference * 1024L + adc / 2) / adc) + 500) / 1000;
17
}
К большому сожалению и такому же большому стыду, первые 4 строчки сразу загнали меня в тупик. А использовать чужой код без понимания не хочется.
Или читают даташит и пишут свою функцию, или ищут библиотеку с такой возможностью.
Или убирают нах эту маску и тогда можно обычным analogRead:-)
заменить на
а затем использовать в коде
?
заменить на
а затем использовать в коде
?
Зачем так "нетрадиционно"? просто убрать "& 0x07" нах. Не заменить на что-то, а совсем убрать.
А как узнали, что у ТС uno-подобная плата? Он же не писал ничего о этом. Я что-то пропустил...
А как узнали, что у ТС uno-подобная плата? Он же не писал ничего о этом. Я что-то пропустил...
когда человек пишет просто "ардуино" - 100% у него Уно/Нано/Про мини или накрайняк, Мега
Или Вавгат. :-)
Или Вавгат. :-)
Или lgt8f328p
А как узнали, что у ТС uno-подобная плата? Он же не писал ничего о этом. Я что-то пропустил...
Предполагается минимальный здравый смысл у ТС - если что-то неклассическое, надо сообщить об этом.
чем больше смотрю на происходящее вокруг тем больше склоняюсь к мысли, что мир сошёл с ума...
Или Вавгат. :-)
Деда, в русской транскрипции языка Морзе это ВАЖГАТ )))
Этот басурманский язык (англиццкий) и не такое может выдавать!!!))
А как узнали, что у ТС uno-подобная плата? Он же не писал ничего о этом. Я что-то пропустил...
Предполагается минимальный здравый смысл у ТС - если что-то неклассическое, надо сообщить об этом.