Всем Доброго Времени суток!
В рамках проекта имею часть программы - простенькая задача измерения напряжения на аккумуляторе 12В. Напряжение от аккумулятора подается на делитель на двух резисторах - 5.1 кОм и 10 кОм, затем подается на аналоговый порт А0 Ардуинки. Затем значение с АЦП переводим в шестнадцатиричную систему и посылаем по UDP на сервер.
В итоге, на делителе при напряжении аккумулятора 12 В на делителе имеем 4.01 В. А на сервер приходит почему-то 3ff, что на десятичной - 1023. Идет зашкал. Вырезку из программы представил ниже.
Посоветуйте пожалуйста, куда копать?
Заранее спасибо!
04 | pinMode(analogInput, INPUT); |
08 | String batchar=String(analogRead(analogInput),HEX); |
09 | Serial .println( "BC" +batchar); |
99.9% за то, что ты перепутал резисторы. Нарисуй, а лучше сфотографируй то, что сделал.
Если сразу не сообразишь - положи фотку сюда.
(вставить картинку, выбор на сервере, загрузить)
Ну вы уж меня не за того держите =)))
Пожалуйста, измерение между "нулем" и А0.
От какой опоры делает прербразование ардуина?
Ну вообще AREF висит в воздухе. А зачем оно, если analogReference() не применяется?
Ну вообще AREF висит в воздухе. А зачем оно, если analogReference() не применяется?
тем не менее...
подай на вход 0,5 - 2 вольта с какого-нибудь потенциометра.
А если на A1 поправить, была у меня nano моросила по A0
И строку 4 выбросьте. Не думаю, чтобы мешала, но не помогает точно.
И строку 4 выбросьте. Не думаю, чтобы мешала, но не помогает точно.
Это не помогло, увы
Ну вообще AREF висит в воздухе. А зачем оно, если analogReference() не применяется?
тем не менее...
подай на вход 0,5 - 2 вольта с какого-нибудь потенциометра.
Ради интереса, подал 5 В с dc-dc преобразователя и - о чудо, он выдал 382! Очень странная логика замера у Ардуино, очень....
Ради интереса, подал 5 В с dc-dc преобразователя и - о чудо, он выдал 382! Очень странная логика замера у Ардуино, очень....
Странная логика - это когда на вход АЦП подают неизвестно что (а импульсные преобразователи именно это и выдают).
1. подай на вход 0,5 - 2 вольта с какого-нибудь потенциометра/делителя, прицепленного к 5в или 3,3в ардуины. хотя бы свой делитель вместо аккумулятора перецепи на ардуину.
2. отправь в сериал результат int analogRead без предварительных извращений со строками.
3. попробуй то же на других аналоговых входах.
Добавлено: измерь сопротивления резисторов своего делителя.
SLKH, дополню. Если после подачи собственной напруги через делитель на А0 обнаружится фигня, то порт не рабочий. У меня такая же фигня (видимо непропай лапки в МК) на А3 у одной из нанок. Что хошь подавай, на выходе имеем все что угодно, кроме настоящих значений. При этом все остальные ноги работают как надо.
А невозможно отсюда судить о том, что у вас применяется, а что нет, т.к. "иллюстрирующий" код вы писали явно "от фонаря". Об этом свидетельствует хотя бы
pinMode(analogInput, INPUT);
и
analogRead(analogInput)
Вы в курсе, что эти две функции выполняют действия с разными пинами?
раз тут такая бестолковая задача, может напряжение питание проца стоит измерить ?
А невозможно отсюда судить о том, что у вас применяется, а что нет, т.к. "иллюстрирующий" код вы писали явно "от фонаря". Об этом свидетельствует хотя бы
pinMode(analogInput, INPUT);
и
analogRead(analogInput)
Вы в курсе, что эти две функции выполняют действия с разными пинами?
Эту ошибку я понимаю. А все-таки, в некоторых примерах ПинМод присутствует... Например тут - http://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D1%81%D0%B2%D0%B5%D1%82%D0%B8%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA-%D1%81-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC%D0%BE%D0%B9-%D1%8F%D1%80%D0%BA%D0%BE%D1%81%D1%82%D1%8C%D1%8E.
Насчёт наскоро накиданного исходника - вот вам вырезки из него.
01
#include <Wire.h>
02
#include <SoftwareSerial.h>
03
04
<...>
05
06
07
SoftwareSerial dbgSerial(3, 2);
/* RX:D3, TX:D2 */
// объявляем пины для UART
08
char
inputString[5];
// объявляем массив для приёма
09
int
n, receive;
10
char
inChar;
11
12
int
i, z=0;
// повторение посылки если не принято ничего
13
int
z0, z10 ;
14
String logger[10];
15
16
const
int
analogInput = 0;
// объявляем пин для аккума
17
18
void
setup
() {
19
<...>
20
}
21
22
23
String addZeroes(
const
String& src,
byte
pad)
24
{
25
if
(src.length() >= pad)
26
return
src;
27
28
String result;
29
byte
add = pad - src.length();
30
while
(add--)
31
result +=
"0"
;
32
33
result += src;
34
return
result;
35
}
36
37
void
loop
() {
38
String time_ev0=String(time_ev,HEX);
// добавление нулей к времени пересечения
39
String str = addZeroes(time_ev0,8);
//
40
41
}
42
43
<...>
44
45
void
serialEvent() {
46
if
(
Serial
.available()) {
// если есть принятый символ,
47
receive =
Serial
.read();
// то читаем его и сохраняем в val
48
if
(receive ==
'B'
) {
// если принят символ 'B' (Battery)...
49
String z10=String(z, DEC);
50
String z0=addZeroes(z10,3);
51
String batchar=String(analogRead(analogInput),HEX);
52
String batchar0=addZeroes(batchar,8);
53
Serial
.println(
"BC"
+batchar0);
54
}
55
<...>
56
}
Теперь вопрос - сейчас у меня нет "AnalogReference", но на пин AREF подается 5В. Посылки более менее нормальные (приходит 820, 822, 825), но иногда проскакивают нереальные значения (только что например, 401 и 425). Вопрос - откуда? И как правильно вообще устроить измерение напряжения с делителя?
При этом, при отключении питания с AREF и присваивании "AnalogReference(DEFAULT)" измеритель уходит в зашкал (прилетает 1023).
Теперь вопрос - сейчас у меня нет "AnalogReference", но на пин AREF подается 5В. Посылки более менее нормальные (приходит 820, 822, 825), но иногда проскакивают нереальные значения (только что например, 401 и 425). Вопрос - откуда? И как правильно вообще устроить измерение напряжения с делителя?
При этом, при отключении питания с AREF и присваивании "AnalogReference(DEFAULT)" измеритель уходит в зашкал (прилетает 1023).
Подавать на аналоговый вход напряжение выше напряжения питания не стоит
SLKH, дополню. Если после подачи собственной напруги через делитель на А0 обнаружится фигня, то порт не рабочий. У меня такая же фигня (видимо непропай лапки в МК) на А3 у одной из нанок. Что хошь подавай, на выходе имеем все что угодно, кроме настоящих значений. При этом все остальные ноги работают как надо.
Так предлагал товарисчу это, молчит... у меня кстати тоже такое было...
SLKH, дополню. Если после подачи собственной напруги через делитель на А0 обнаружится фигня, то порт не рабочий. У меня такая же фигня (видимо непропай лапки в МК) на А3 у одной из нанок. Что хошь подавай, на выходе имеем все что угодно, кроме настоящих значений. При этом все остальные ноги работают как надо.
Так предлагал товарисчу это, молчит... у меня кстати тоже такое было...
К сожалению не имею возможности - плата уже разведена...
Подавать на аналоговый вход напряжение выше напряжения питания не стоит
Так я и не подаю!
Uпит = 5 В
Uдел <= 4.1 В
1 - какое значение Vcc ? (может оно 4.1В, тогда все правильно выдает)
2 - поставь "делай" в "лупе"... (мне такое когда-то помогло с глюками при измерении напряжения)
1. 5.01-5.09 В (идет с DC-DC преобразователя)
2. Спасибо за совет! Вечером попробую
SLKH, дополню. Если после подачи собственной напруги через делитель на А0 обнаружится фигня, то порт не рабочий. У меня такая же фигня (видимо непропай лапки в МК) на А3 у одной из нанок. Что хошь подавай, на выходе имеем все что угодно, кроме настоящих значений. При этом все остальные ноги работают как надо.
Так предлагал товарисчу это, молчит... у меня кстати тоже такое было...
К сожалению не имею возможности - плата уже разведена...
Подавать на аналоговый вход напряжение выше напряжения питания не стоит
Так я и не подаю!
Uпит = 5 В
Uдел <= 4.1 В
14,5 *5,1 /15.1 = 4,8973
14,5 *5,1 /15.1 = 4,8973
Откуда вы взяли значение 14.5В? =)
14,5 *5,1 /15.1 = 4,8973
Откуда вы взяли значение 14.5В? =)
Напряжение на полностью заряженном свинцовом аккумуляторе с загущенным электролитом 14.5 вольта
Подавать на аналоговый вход напряжение выше напряжения питания не стоит
Тыкать что попало в AREF - тоже.
И врать нехорошо:
1. "... AREF висит в воздухе."
2. "...на пин AREF подается 5В."
Напряжение на полностью заряженном свинцовом аккумуляторе с загущенным электролитом 14.5 вольта
Я специально довел до 12 вольт его сейчас для эксперимента.
И врать нехорошо:
1. "... AREF висит в воздухе."
2. "...на пин AREF подается 5В."
Уважаемый, я пробую разные комбинации. Пробую и так и так.
И навесить паяльником перемычку на свободный пин для меня не проблема.
Напряжение на полностью заряженном свинцовом аккумуляторе с загущенным электролитом 14.5 вольта
Я специально довел до 12 вольт его сейчас для эксперимента.
в разряженном аккумуляторе кислота внутри пластин, сожрёт )))
Индийские допускали разряд на одну банку до 1.7 вольта, другие 1.8
SLKH, дополню. Если после подачи собственной напруги через делитель на А0 обнаружится фигня, то порт не рабочий. У меня такая же фигня (видимо непропай лапки в МК) на А3 у одной из нанок. Что хошь подавай, на выходе имеем все что угодно, кроме настоящих значений. При этом все остальные ноги работают как надо.
Все же попробовал ваше решение, хоть и пришлось всё нафиг разобрать, перекинул всё на А3 - и о чудо, приходят верные значения! Спасибо вам большое!