Forum: Mikrocontroller und Digitale Elektronik ESP8266 analogRead für VCC


von Bernhard S. (b_spitzer)


Lesenswert?

Hallo zusammen,
ich versuche gerade mit dem internen AD-Wandler des ESP8266 die interne 
Versorgungsspannung zu lesen.
Ein extern beschaltetes Poti liefert bei
1
ADWert = analogRead(A0);
2
Serial.println(ADWert);
die erwarteten Werte im Bereich 0-1024 (nicht 1023!?!). Ist 1024 (11. 
Bit gesetzt) ein Overflow-Hinweis?
Wie dem auch sei, gemäß der Arduion-Referenz
http://esp8266.github.io/Arduino/versions/2.0.0/doc/reference.html#analog-input
sollte es mit der Angabe ADC_MODE(ADC_VCC); möglich sein, die interne 
Versorgungsspannung zu messen. Dabei erhalte ich aber als Ergebnis nur 
den Wert 65535 (bzw. -1 bei signed int).
Hat das schon mal jemand erfolgreich probiert? Zur Not kommt extern halt 
ein Spannungsteiler 330k/100k dran. Die 10µA machen es auch nicht aus.

tschuessle
Bernhard

: Bearbeitet durch User
von Heinz (Gast)


Lesenswert?

Also das geht aufjedenfall das hatte ich auch mal gemacht. Allerdings 
Arduino und ich habe es verworfen weil ich einen 3 Volt Spannungsregler 
eingebaut habe und das an einer Li Zelle hängt.

von Chr. M. (snowfly)


Lesenswert?

Hast du es schonmal mit unbeschalteten A0 versucht?

Bei mir hat es immer auf anhieb funktioniert.

von Bernhard S. (b_spitzer)


Lesenswert?

Ich kann auf dem Board den A0 nicht abtrennen. Dazu müsste ich das Poti 
auslöten... ich teste mal mit einem NodeMCU.

von Bernhard S. (b_spitzer)


Lesenswert?

habe es nochmal mit einem NodeMCU (Rev.1.2) getestet. Hier ist der 
Analogeingang A0 definitiv unbeschaltet.
Gleiches Ergebnis, bei
analogRead(A0) kommt nur -1, bei
analogRead(1) kommt immer 0, bei
analogRead(A1) kommt ein Compilerfehler....

Arduino-Version 1.6.7, ESP-Board-Version 2.4.0-RC2 (ohne KRACK-Bug).

von schufti (Gast)


Lesenswert?

Nein, bei einem nodemcu ist der A0 pin nicht unbeschalten.
Trotzdem sollte aber etwas anderes, nämlich etwa 2950 als Ergebnis 
kommen.
(Gerade selbst getestet)

von G. H. (schufti)


Lesenswert?

sorry, sehe gerade dass du eine veraltete Version der Doku verwendest.

hier die aktuelle Version:
http://arduino-esp8266.readthedocs.io/en/2.4.0-rc1/index.html

Für Vcc muß nicht nur
   ADC_MODE(ADC_VCC);
vorhanden sein, sonder der Wert natürlich auch mit
   int VCC = ESP.getVcc();
gelesen werden.

von G. H. (schufti)


Lesenswert?

äh, nochmal ich

auf NodeMCU Boards ist der "ADC"pin für 3.3V ausgelegt mit 
Spannungsteiler 220k/100k.

Die gelesenen Werte sind für int/ext Fälle als 1/1023V (1024? da ist die 
Doku variabel) zu interpretieren

von Bernhard S. (b_spitzer)


Lesenswert?

Ok, mit ESP.getVcc(); geht es.
Allerdings bekomme ich jetzt bei 3,25V Versorgungsspannung Werte von 
2980-3000 zurück. Ich liebe stabile Bibliotheken...

Beim NodeMCU ist auch der "nackte" ADC-Pin rausgeführt. Der Pin ADC_EX 
(J1.1) geht über besagten Spannungsteiler (hier würde ich für einen 
LiIo-Akku eher nochmal 100k in Reihe schalten, damit der Messbereich bis 
4.3V geht). Der Pin nebendran (J1.2) ist direkt mit ADC verbunden (auf 
einigen NodeMCU ist der aber mit RSV beschriftet).

von G. H. (schufti)


Lesenswert?

nein, der nackte A0 pin ist nicht hinausgeführt !!!!
Der 100k gegen Masse ist immer dran !!!

glaub's doch endlich, dass das mit NodeMCU und getVcc() nichts wird

das mit der Erweiterung ist der Weg mit NodeMCU.

: Bearbeitet durch User
von Bernhard S. (b_spitzer)


Lesenswert?

G. H. schrieb:
> nein, der nackte A0 pin ist nicht hinausgeführt !!!!
> Der 100k gegen Masse ist immer dran !!!
Der nackte Pin ist zumindest verfügbar. Wenn ich den 100k-Widerstand 
auslöte ist der komplett offen.
Layout Seite 8, Pinbezeichnung ist RSV, aber eindeutig der 2. Pin am 
ESP-12E:
https://github.com/nodemcu/nodemcu-devkit-v1.0/blob/master/NODEMCU_DEVKIT_V1.0.PDF

Ich nehme mal an, dass der bisher vorhandene 100k gegen Masse die 
interne Messung verfälscht. Mit
1
ADWert=ESP.getVcc();
2
serial.print(ADWert/912.0);
3
serila.println(" Volt");
bekomme ich schonmal einigermassen den mit dem Multimeter gemessenen 
Wert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.