Seltsames Verhalten beim Spannung messen mit attiny85

Hallo,

ich bin gerade dabei ein bisschen Elektronik für eine LED Beleuchtung zu bauen bzw. bin ich eigentlich relativ schon fast fertig. Der attiny85 regelt das alles.

Er bekommt das HIGH oder LOW vom Schalter.
Er steuert den MOSFET für die LEDs.
Er prüft ob ein USB Ladekabel angeschlossen ist und schaltet in dem Fall die LEDs ab.
Er hat einen Ausgang für eine Zustands LED.

Und bis hierhin funktioniert alles tadellos .

Der Pin 2 (A3) wird als analoger Eingang verwendet und soll direkt die 18650er messen. Fällt die Spannung, geht die Status LED an, fällt sie weiter blinkt die LED.

Zum testen und um die Spannung ändern zu können, wird alles mit dem Netzteil betrieben und nicht mit dem Akku.

Das Problem ist, dass es fast egal ist, was ich im Sketch für einen Wert eintrage damit die Bedingung erfüllt ist . Es ist momentan so, das bei 500 zwar die Bedingung erfüllt ist aber etwa bei 525 schon wieder nicht mehr. Und das im Bereich zwischen 2,8V - 5,2 V. Das ist totaler Schwachsinn.

Wenn ich aber nun den attiny85 direkt vom Akku versorge und anstelle des Akkus das angeschlossene Netzteil selber messe, also gemeinsames Ground und Plus vom Netze über Spannungsteiler an den Eingangspin hänge, funktioniert alles perfekt und der Attiny misst absolut genau.

Warum aber funktioniert das nicht in dem Moment, wenn er seine eigene Betriebsspannung messen soll? Kann das am fallendem Versorgungspegel liegen das die Werte so ein Unsinn ergeben? Normal sollte der Attiny85 mit 1,8 V (2,7V) auskommen glaub ich.

Zeige uns doch mal Deinen kompilierbaren Sketch (der Spannungsmessteil genügt).
Wie hast Du das verschaltet?

Gruß Tommy

Edit: Du kannst Dir die Messung der eigenen Betriebsspannung auch hier mal anschauen.

Der ADC liefert 1023 bei VCC. Es handelt sich daher um eine relative Messung zu VCC. Dies ist der Standardzustand. Alternativ sind Messungen mit einer Referenzspannung möglich. Einen Einblick gibt analogReference() und "ADC Voltage Reference" im Datenblatt.

Danke erst mal für die Antwort.
Wie ich das in dem link verstehe, geht es ja da um eine hohe Messgenauigkeit mittels der ermittelten Referenzspannung zu erlangen wenn die Betriebsspannung sich ändert. In meinem Fall ist sie ja dauerhaft am fallen. Und bei mir kommt nichts ungenaues sonder nur Schrott raus. Was irgendwie an der Schaltung liegen könnte. Denn das Netzteil als Akku Ersatz gemessen, stimmt für meinen Genauigkeitsbedarf perfekt. Dann klappt alles wie es soll.

Oder muss das am Ende wirklich so kompliziert berechnet werden, das er sich das bei fallendem Pegel berechneen muss. Hätte ich zwei Netzteile könnte ich das testen.

Ich habe bis jetzt immer ganz simpel die Spannung über einen Spannungsteiler eingelesen und den reinen Wert 0-1023 letztlich mittelst des Multimeter im Sketch angepasst. Ohne auf V umzurechnen.

Also ein einfaches Einlesen und die Ausgabe von 0-1023 in einer if Abfrage verglichen. Fertig.

Akku > plus auf 10K > auf Eingangspin > Eingangspin über 10K auf GND.

Habe leider noch große Lücken.

Tommy56:
Edit: Du kannst Dir die Messung der eigenen Betriebsspannung auch hier mal anschauen.

Die Formel sollte korrigiert werden. Man muss durch 1024 teilen. Der Grund ist, der ADC Wert liefert nicht den konkreten Spannungswert sondern gibt nur den Bereich an in dem der Messwert liegt. Je höher die ADC Auflösung umso feiner seine Abstufungen.

Ob 1023 oder 1024 halte ich für ein eher philosophisches Problem.
Fur mich gilt beim Maximalwert = 1023 die Division durch 1023 als mathematisch sinnvoll.
weil 5V = 1023 Messwert.

Damit 5V / 1023 * 1023 ergibt 5V während 5V / 1024 * 1023 eben nicht 5V ergibt.

Wer es anders Rechnen will, kann das durchaus tun, ich tue es nicht.

Gruß Tommy

Standardmäßig vergleicht der uC den gemessenen Wert mit der Versorgungsspannung. Somit kann da nix brauchbares rauskommen, wenn du eine von der Versorgungsspannung (Ausgang Spannungsteiler) abhängigen Spannung mit der Versorgungsspannung vergleichst.

Hallo,

du kannst natürlich rechnen wie du möchtest. Nur entspricht 1023 nicht exakt 5,000V bzw. Ub. Das ist dem Messverfahren, der A/D Wandlung geschuldet. Dadurch bedingt gibt es Abweichungen. Das ist nun einmal so.

Das solltest Du mal exakt begründen, wieso Vollausschlag nicht bedeutet U-Mess == U-Ref.
Das würde mich jetzt echt interessieren.

Gruß Tommy

Commodore-64:
Akku > plus auf 10K > auf Eingangspin > Eingangspin über 10K auf GND.

Und Akku an VCC.

  • Akku = VCC = 5 V: Du misst einen Wert von irgendwie 512.
  • Akku = VCC = 4 V: Du misst einen Wert von irgendwie 512.
  • Akku = VCC = 3 V: Du misst einen Wert von irgendwie 512.

Du bekommst immer einen Wert von 50% der Akkuspannung, weil Du immer relativ zu VCC misst.

Um VCC tatsächlich zu ermitteln, benötigst Du den Vergleich mit einer absoluten Größe, einer Referenzspannung. Diese könntest Du mit einer Diode erzeugen oder mit der eingebauten Referenz.

PS: Die Diskussion 1023 oder 1024 halte ich für dieses Thema wenig zielführend. Hier geht es um das grundsätzliche Verständnis.

Genau darum ging es in dem von mir verlinkten Beitrag.

Da die interne Referenz (1,1V nominell) durch Fertigungstoleranzen schwankt, muss man für den konkreten MC erst mal deren Wert bestimmen.
Danach kann man auf dieser Basis die konkrete Betriebsspannung (= Defaultreferenz) bestimmen und diese in die Berechnung einfließen lassen.

Extreme Änderungen der Chiptemperatur sind dabei nicht berücksichtigt.

Gruß Tommy

Das leuchtet mir ein mit dem festen Spannungsteiler. Theoretisch hatte ich die ganze Geschichte ohne Spannungsteiler und ohne 10k auf GND. Weil es liegt immer etwas an und es liegen immer nur max 5V an. So habe ich bei 5V theoretisch auch 1023 bei 2,5 halt die Hälfte. Ob das genau ist, ist nicht in meinem Interesse.

Jetzt muss ich mir also überlegen, wie ich doch noch eine Messung vornehmen kann.

Tommy56:
Das solltest Du mal exakt begründen, wieso Vollausschlag nicht bedeutet U-Mess == U-Ref.
Das würde mich jetzt echt interessieren

Stell dir einen 1bit ADC vor:
V < Vref/2 -> 0
V > Vref/2 -> 1
Wenn eine 1 rauskommt, hast du einen Wert von mindestens Vref/2. ( Du teilst durch 2, wenn du genau aufpasst. )

Nun stell dir einen 2bit ADC vor:
[... deine Aufgabe, weil es dich ja echt interessiert...]
Nach dem Verfahren solltest du Vref / 4 rechnen um Werte zwischen 0 und 3 zu erhalten.

Bei einem 10bit ADC sollte man also in Schritten von Vref/1024 rechnen und einem Ergebnis von z.B. 1023 (0x3FF) ansehen, dass da mindestens 4,995V von 5V anlagen, wenn nicht sogar erheblich mehr :slight_smile:

Übrigens ist /2 , /4 , ... , /1024 usw. gar keine richtige Division, sondern etwas, was Controller richtig gut können. Das weiß sogar der Compiler. Wohingegen einer Rechnung mit x/1023 jeder ansehen kann, dass da was faul ist.

Hast Du Dir die Sketche in dem verlinkten Beitrag angeschaut?

Da brauchst Du überhaupt kein Pin an Betriebsspannung zu legen, das kann man intern umschalten.
Das wird auch für den Attiny85 unterstützt. Gerade für den Kleinen ist man doch froh über jeden freien Pin.

Gruß Tommy

Tommy56:
Hast Du Dir die Sketche in dem verlinkten Beitrag angeschaut?

Gruß Tommy

Ja aber ich versteh leider fast nur Bahnhof.

Ich könnte doch theoretisch ein StepUp Wandler nehmen, der macht mir noch aus 2V stabile 5V. Das. kosten zwar etwas mehr an Leistung aber der Attiny zieht ja auch nicht viel.

@michael_x: das bedeutet im Umkehrschluss aber auch, dass bei 5V Referenz und 5V Messpannung der Messwert auf 4,995... als Ergebnis raus kommt, also eigentlich immer falsch ist?
(inhaltlich Messwert ist >(=?) 4,995...)

Richtig verstanden? Das ist übrigens eine gute Erklärung von Dir.

Dann wäre die Rechnung /1023 zwar vom Messverfahren her falsch, liefert aber die von der Anwendung her logischeren Messwerte.

Auch richtig?

Man kann sich also zwischen 2 Fehlern entscheiden.
Wobei die Division /1024 schon schneller geht, als durch 1023. Das sehe ich ein.

Gruß Tommy

Commodore-64:
Ja aber ich versteh leider fast nur Bahnhof.

Ich könnte doch theoretisch ein StepUp Wandler nehmen, der macht mir noch aus 2V stabile 5V. Das. kosten zwar etwas mehr an Leistung aber der Attiny zieht ja auch nicht viel.

Probiere es doch einfach mal aus.

Was hat der Stepup mit der Spannungsmessung zu tun? Die war doch Dein Ziel.

Gruß Tommy

"Im Umkehrschluss" kann man einer digitalen Zahl nur ungefähr ansehen, welche Spannung wohl anlag.

Alles über Vref / 1024 * 1023 ergibt 0x3FF (alle bits gesetzt). ( Immer noch vereinfacht )

Im optimalen Fall deckt jedes der 1024 möglichen Ergebnisse einen gleich großen Spannungsbereich ab. Besser geht nicht, und selbst das ist nur annähernd richtig.

Denk an meinen 1bit ADC (oder deinen mit 2 Bit (0 .. 3) )

Ja, schon verstanden, dass es gleich große Intervalle sind und in dem Intervall ist es halt nicht bestimmt.
Danke für die Erklärung.

Gruß Tommy

Tommy56:
Probiere es doch einfach mal aus.

Was hat der Stepup mit der Spannungsmessung zu tun? Die war doch Dein Ziel.

Gruß Tommy

Das trotz messbarer fallender Akkuspannung, die Betriebsspannung gleich bleibt, um so die Problematik des Messen bei fallender Betriebsspannung zu umgehen.

Ich weiß sonst nicht wie ich bei fallendem Pegel ein Ergebnis herausziehen kann.