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?
Es gibt sogar eine übersetzte Version von der Tu-Chemnitz hier: https://www-user.tu-chemnitz.de/~heha/viewchm.php/hs/ATmegaX8.chm/24.htm Ich denke ich sehe mal wieder den Wald vo lauter Bäumen nicht. Grüße Alex
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.pdf ADMUX -- 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.
Beitrag #6082903 wurde vom Autor gelöscht.
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
Ich kann dir nicht folgen. Welche Spannung hast du angelegt und welchen Messwer hat der ADC dafür geliefert?
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. |
6 | Vcc can be in the range 4.9V to 5.1V. |
7 | So the scaling can be in the range |
8 | 2.6V/4.9V = 140/490 = 0.531 |
9 | 2.4V/5.1V = 115/510 = 0.470 |
10 | */ |
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.
:
Bearbeitet durch User
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 :)
Wenn der ADC bei den Atmegas(zumindest bei ATMEGA328P gemessen) genau sein soll, ist auf die Entkopplung der Versorgungsspannungsanschlüsse zu achten. Siehe: Beitrag "Re: Arduino Nano / ATMEGA328P interne 1,1 V Referenz nicht stabil" Ist übrigens ein Mangel bei allen Arduino-Breakout-Boards die ich kenne. Gerhard
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.