Hallo,
ich verwende die interne Spannungsreferenz (hoffe das es 1,1Volt sind)
zum messen von zwei Spannungen.
Jetzt heißt es das ADC4 und 5 eine Genauigkeit von 8 Bit hätten.
Bedeutet das dass es einen wert zwischen 1 und 256 zurück gibt?
Oder das es bei ADC4 und 5 - wie bei ADC 1 bis 3 1024 sind?
(nur die genauigkeit auf 8 Bit reduziert ist?)
Ich habe in meinen Programm den Spannungswert durch 1024 geteilt.
Was meie Fehler bei der Spannungsmessung nicht wirklich erklärt...
Vielen dank!
Alex
Nun es kann so oder so sein.
Hoffe ist hier der falsche Weg.
Alles steht genau in deinem Datenblatt und dein Programm muss sich auf
dieses Beziehen.
Vielleicht hängst Du es noch an?
1000V Dc schrieb:> Code?
Spielt hier, glaube ich, keine Rolle.
Muss nur wissen ob ich die Konstante für den Spannungsteiler durch 1024
oder 256 teilen muss.
Grüße
Alex
Wenn ich die 'Datasheet Revision History' richtig interpretiere, so gab
es mal ein Missverständnis, vor langer Zeit:
"Changes from Rev. 2486M-12/03 to Rev. 2486N-09/04" : "4. ADC4 and ADC5
support 10-bit accuracy. Document updated to reflect this."
Aber die Auflösung war und ist ganz sicher 10-bit.
Alex Niemer schrieb:> ich verwende die interne Spannungsreferenz (hoffe das es 1,1Volt sind)
Nope. Aber die Hoffnung stirbt zuletzt.
> Jetzt heißt es das ADC4 und 5 eine Genauigkeit von 8 Bit hätten.
Aha, heißt es das. Das Datenblatt sagt dazu:
The ADC generates a 10-bit result which is presented in the ADC Data
Registers, ...
If the result is left adjusted and no more than 8-bit precision is
required, it is sufficient to read
ADCH. Otherwise, ADCL must be read first, ...
Sh... Datenblatt, TLDR.
leo
Alex Niemer schrieb:> interne Spannungsreferenz (hoffe das es 1,1Volt sind)
RTFM!
Alex Niemer schrieb:> Jetzt heißt es das ADC4 und 5 eine Genauigkeit von 8 Bit hätten.> Bedeutet das dass es einen wert zwischen 1 und 256 zurück gibt?> Oder das es bei ADC4 und 5 - wie bei ADC 1 bis 3 1024 sind?> (nur die genauigkeit auf 8 Bit reduziert ist?)
RTFM!
Alex Niemer schrieb:> 1000V Dc schrieb:>> Code?>> Spielt hier, glaube ich, keine Rolle.> Muss nur wissen ob ich die Konstante für den Spannungsteiler durch 1024> oder 256 teilen muss.>> Grüße> Alex
Hängt leider von den Einstellungen, Setup für den ADC ab.
Da kann man auch noch mehr machen, wie im Interrupt den Wandlungswert
abholen, nachdem der µC im Sleepmode verbracht hat.
Oder auch unterschiedliche Refernzspannungsquellen auswählen, bzw.
externe Refernzspannung nutzen.
Mit oder Ohne Kondensator am ARef Anschluss
Auch hier lauern möglicherweise Fehler.
Quelle:
https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet.pdfADMUX -- Table 74. Voltage Reference Selections for ADC
Deine Annahme, ohne Blick ins Datenbatt ist schon mal falsch:
REFS[1,0] = 0b11 Internal 2.56V Voltage Reference with external
capacitor at AREF pin
ADMUX -- MUX[3:0]: Analog Channel Selection Bits
Hier gibt es auch eine Zeitabhängig für die Kanalumschaltung.
Dann muss vorher noch der passende ADC Prescaler gewählt werden.
ADCSRA -- Bits 2:0 – ADPS2:0: ADC Prescaler Select Bits
Der ADC-Wandler arbeitet immer im 10Bit Modus,
Aber über ADLAR = 0 oder ADLAR = 1 lässt sich die Ausrichtung des
Ergebnisses ändern.
Man setzt ADLAR = 1 meistens, wenn man nur die obersten 8 Bit
verwenden möchte.
usw. alles hängt irgendwie zusammen.
Der Atmega8 hat nur einen ADC. ADC4 ist einer von mehreren
gleichwertigen Eingängen des Multiplexers, der zum ADC führt.
Alle Eingänge haben also gleich viele Bits, und zwar 10 bei der
Standardeinstellung.
Nur zur Klarstellung:
in 8 Bit kann man die Werte aus der Menge {0,..,255} speichern.
0dec = 0x00hex = 0b00000000
128dec = 0x80hex = 0b10000000
Oder jede beliebige Zahl A:
A = Summe i=0..7 (ai*2^i)
A = a7*2^7 + a6*2^6 + a5*2^5 + ... + a1*2^1 + a0*2^0
die Koeffizienten ai sind dann genau die binäre Representation der Zahl
A
A = 123dec
A = 0*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0
A = 0b01111011
> ADC4 ist einer von mehreren gleichwertigen Eingängen des Multiplexers
Nicht so ganz:
"Note that ADC input channel 4 uses digital power."
im Gegensatz zu:
"Note that ADC input channel 3 uses analog power."
deshalb wohl diese Korrektur des Datenblattes.
Aber ich denke, alles für Axel Niemer Relevante hat Karl M. übersetzt
und zusammengefasst.
Stefan F. schrieb:> Alle Eingänge haben also gleich viele Bits, und zwar 10 bei der> Standardeinstellung.
und zwar immer 10 Bit!
Ob man sie nun verwenden kann, hängt von der Einstellung zur
ADC-Wandlergeschwindigkeit ab.
Register ADMUX -- Bit 5 – ADLAR: ADC Left Adjust Result
Stefan F. schrieb:> Der Atmega8 hat nur einen ADC.
Danke.
Warum hat es so lange und so viel rumgeeire gebraucht um diese einfache
Frage zu beantworten?
Warum posten hier ertman alle möglichen Honks, die garnicht wissen worum
es geht und erstmal den Code haben wollen und RTFM schreien?
Man ist das Forum schlecht geworden.
Paul schrieb:> Warum posten hier ertman alle möglichen Honks, die garnicht wissen worum> es geht und erstmal den Code haben wollen und RTFM schreien?
Ich denke schon, dass sie sich gut auskennen. Sie wollen eine möglichst
präzise und umfassende Antwort geben, deswegen fragen sie nach.
Halbe Antworten wie meine führen nicht selten zu einem Shitstorm der
Entrüstung, selbst wenn diese Hälfte genau das ist, was der Fragende
gerade braucht.
In diesem Fall war die Frage aber auch unklar. Er schrieb
Alex Niemer schrieb:> Ich habe in meinen Programm den Spannungswert durch 1024 geteilt.> Was meine Fehler bei der Spannungsmessung nicht wirklich erklärt...
Das Problem wird mit Sicherheit nicht vom ADC selbst ausgelöst, denn der
hat ja 1024 Stufen. Hier dem Problem etwas weiter auf den Zahn zu fühlen
ist also durchaus angebracht.
Alles gut Stefan F.!
Er hat sicherlich auch noch nicht die Unterteilung des Messwertes in
Stufen von 1/1024 * VRef "erlebt" und mit den Messungenauigkeiten und
der -Linearität zu tun gehabt.
@Alex Niemer: Dazu gibt es weitere Application Notes "ADC", die man
lesen sollte.
Es ist halt kein DMM mit Rin >=10 MΩ und hoher Auflösung != Genauigkeit.
Hallo,
danke für die hilfe!
Ich habe einen Spannungsteiler für einfach gebaut mit
VCC---==20k==--ADC5--==1,1k==--GND
Da ich dachte die Spannungsreferenz wäre 1,1V hat das ding jetzt
21,1Volt.
Wenn also am ganzen ding 21,1 Volt abfallen müsste am 1,1kO Teil 1,1V
abfallen richtig?
Da jetzt nur weniger als 2 1/3 abfallen max. müsste der Wert doch bei
max. 439/1024stel liegen oder?
Was aber meine Messabweichung von rund 20% bis 30% einfach nicht
erklärt.
2,57 / 1,1 * 21,1 = 49,29 V
Meine Messabweichung liegt aber nur bei rund -20%
Damit komm ich einfach nicht zurecht.
Grüße
Alex
Hallo,
noch mal: keiner kennt dein Programm, keiner weiß, wie du es elektrisch
anstellst, dass dort eine Spannung anliegt
Hast du überhaupt den Eingangswiderstand und die Wandlungsdauer des ADC
beachtet?
Alex Niemer schrieb:> Jetzt heißt es das ADC4 und 5 eine Genauigkeit von 8 Bit hätten.> Bedeutet das dass es einen wert zwischen 1 und 256 zurück gibt?
Der ATmega8 hat nur einen einzigen ADC und der hat 10 Bit (RTFM Fig. 90)
Wie soll eine 8 Bit Wandlungsergebnis übrigens einen Wert von 256
annehem?
Da scheinen noch ein paar Grundlagen zu fehlen.
Alex Niemer schrieb:> ich verwende die interne Spannungsreferenz (hoffe das es 1,1Volt sind)
Na Hoffen ist hier definitiv der falsche Weg. Wie hast du den Atmega
denn konfiguriert, Stichwort Sourcecode
Alex Niemer schrieb:> Ich habe einen Spannungsteiler für einfach gebaut mit
Einen konkreten Schaltplan hast du nicht? Wo also die komplette
Beschaltung des Atmegas drauf ist? Hast du z.B. auch AVCC angeschlossen
gemäß Datenblatt?
Aus Erfahrung kann ich dir sagen, dass man mit dem Atmega ohne große
Anstrengung auf ±(1-3) LSB genau messen kann. Tut er das bei dir nicht
so stimmt entweder deiner Beschaltung nicht oder dein Programm oder es
ist eine Kombination aus beiden.
Daher wäre es wichtig:
Wie sieht die konkrete Schaltung aus, die das Problem zeigt?
Wie sieht das konkrete Programm aus, dass das Problem zeigt?
Liefere uns beides und wir können dir auch besser helfen. Vielleicht
aber fällt dir beim Zusammenstellen dieser Dinge auch selbst der Fehler
auf.
Auch wenn das jetzt schon fast Korinthenkackerei ist, du musst durch
1023 und nicht durch 1024 bei einem 10Bit Wandler teilen, denn bei 1024
Werten ist der Wertebereich 0...1023.
Meiner Erfahrung nach ist die Interne Referenz nicht so sehr genau - und
Unterschiedlich beim mega8, mega88, oder xmega.
> Wenn also am ganzen ding 21,1 Volt abfallen müsste am 1,1kO Teil 1,1V> abfallen richtig?
Ja. 21.1V/(21.1KOhm)*1.1KOhm = 1.1V.
2.7V/1023 = 0.002639V/digit
1.1V/(0.002639V/digit) = ~416 als erwarteter ADC Wert.
Korrektur:
2.56V/1023 = 0.002502V/digit
1.1V/(0.002502V/digit) = ~439 als erwarteter ADC Wert.
Zur Genauigkeit hatte ich mir das mal für ein Projekt durchgerechnet,
bei dem ein Temperatursensur mit einem Widerstand an 5V Vcc hing:
1
/*The bandgap voltage allows measuring the temperature with a higher resolution,
2
unfornutately, the 2.56V reference is not so precise, no exact rage is given
3
in the datasheet. Simly assume 2.4 to 2.6V.
4
So we measure Vcc with +5V and the bandgap voltage
5
and determine the bandgap voltage to have a correct scaling value.
Malte schrieb:> Auch wenn das jetzt schon fast Korinthenkackerei ist, du musst> durch 1023 und nicht durch 1024 bei einem 10Bit Wandler teilen, denn bei> 1024 Werten ist der Wertebereich 0...1023
Nein, laut Datenblatt, s.o., ist der Teiler 1024!
Alex Niemer schrieb:> ich verwende die interne Spannungsreferenz (hoffe das es 1,1Volt sind)
Nicht beim ATMega8.
> Jetzt heißt es das ADC4 und 5 eine Genauigkeit von 8 Bit hätten.
Ein ATMega8 hat nur einen ADC. Und dessen Auflösung (nicht:
Genauigkeit) ist 10 Bit. ADC4 und ADC5 sind Bezeichnungen für µC-Pins,
die man per Analogmultiplexer mit dem (einen) ADC verbinden kann.
> Bedeutet das dass es einen wert zwischen 1 und 256 zurück gibt?
Daß was einen solchen Wert zurückgibt? Wie sprichst du den ADC an? Wir
kennen ja noch nicht mal die Programmiersprache, die du benutzt. Aber
ja, es gibt Programmiersprachen und auch Frameworks, die den Zugriff auf
den ADC kapseln. Mag gut sein, daß die auch den Wertebereich auf 8 Bit
verkürzen. Also: was genau machst du da?
Alex Niemer schrieb:> 1000V Dc schrieb:>> Code?>> Spielt hier, glaube ich, keine Rolle.
Falsch. Das ist das einzig wichtige an dieser Stelle.
Malte schrieb:> Auch wenn das jetzt schon fast Korinthenkackerei ist, du musst durch> 1023 und nicht durch 1024 bei einem 10Bit Wandler teilen, denn bei 1024> Werten ist der Wertebereich 0...1023.
Jedes mal wieder, wenn es um den ADC geht, kommt diese Behauptung. Der
ADC hat 1024 Schritte, daher muss man durch 1024 teilen. Auf den ersten
Blick bedeutet das, dass man den Maximalwert nicht erreichen kann, da
man nur auf 1023/1024 kommt. Das liegt daran, dass jeder ADC-Wert nicht
einer exakten Spannung, sondern einem Spannungsbereich entspricht und
die Berechnung sich auf die untere Grenze dieses Bereichs bezieht. Man
müsste eigentlich noch ein halbes Bit dazuaddieren, um auf die Mitte
dieses Bereichs zu kommen.
Ein Wert von 0 heißt nicht, dass die Spannung 0V ist, sondern dass sie
zwischen 0V und 1/1024*Vref liegt. Der Wert 1023 bedeutet, dass die
Spannung zwischen 1023/1024*Vref und Vref liegt.
Rolf M. schrieb:> Ein Wert von 0 heißt nicht, dass die Spannung 0V ist, sondern dass sie> zwischen 0V und 1/1024*Vref liegt. Der Wert 1023 bedeutet, dass die> Spannung zwischen 1023/1024*Vref und Vref liegt.
Ok, ja ich habe mir mal einen Thread dazu durchgelesen:
Beitrag "Re: 1023 oder 1024"
Der Beitrag zeigt die Vor-und Nachteile recht gut.
Wieder was gelernt :)