Hallo liebe AVR-Gemeinede, ich bin ziemlicher Neuling was den Umgang mit µC’s angeht obwohl ich schon einige Zeit recht intensiv hier im Forum und in den Tutorials unterwegs bin. Ich beschäftige mich mit einem ATmega8 und habe auch schon einige Projekte erfolgreich abgeschlossen. Ich programmiere mit C und AVR-Studio. Zurzeit bin ich dabei mich durch das Thema AD-Wandlung zu wühlen. Ich habe mir ein Projekt gewählt in dem ich die Spannung und damit den Ladezustand einer 12V- Batterie überwachen und anzeigen möchte. Getaktet wird der Mega8 mit internen 8 MHz. Als Referenzspannung habe ich AVCC +5V gewählt und die Mess-Spannung wird über einen Spannungsteiler auf PC0 gelegt. Das Wandlerergebnis wird durch Umwandlungsfunktionen darstellbar gemacht und auf einem 2x16 LCD-Display ausgegeben. Des Weiteren soll über einen Timer-Interrupt auf bestimmte Wandlerergebnisse reagiert werden. Entsprechend soll in der 2.Zeile des Displays eine Nachricht ausgegeben werden. Das alles funktioniert auch alles ganz gut. Aber doch gibt es ein Problem. Der angezeigte Spannungswert stimmt nämlich nicht. Auf meinem Entwicklungsbord habe ich der Einfachheit halber die Versorgungsspannung von 5V über ein 25K Poti als Spannungsteiler als Mess-Spannung benutzt. Es wäre also zu erwarten, das die angezeigte Spannung max. 5V sein wird. Dem ist aber leider so. Tatsächlich wird die 5V-Anzeige schon bei ca. 50% Poti-Stellung erreicht und geht dann über 5V hinaus, was ja eigentlich nicht sein kann. Leider kann ich den Fehler nicht finden. Bitte seht Euch doch mal an was ich da „zusammengebraut“ habe. Vielleicht könnt Ihr mir sagen wo mein Fehler liegt. Ich wäre Euch sehr dankbar. Gruß Wilfried
Fangen wir erstmal mit der Hardware an. Hast du die Versorgungsspannung des ADC angeschlossen? Und alle nötigen Abblock-Kondensatoren?
Ich tippe mal... falsche Referenz Spannung eingestellt
Wilfried H. schrieb: > Das alles funktioniert auch alles ganz gut. Aber doch gibt es ein > Problem. Der angezeigte Spannungswert stimmt nämlich nicht. Auf meinem > Entwicklungsbord habe ich der Einfachheit halber die > Versorgungsspannung von 5V über ein 25K Poti als Spannungsteiler als > Mess-Spannung benutzt. Es wäre also zu erwarten, das die angezeigte > Spannung max. 5V sein wird. Ich kann in deinem Code überhaupt nichts entdecken, wo du den 'Spannungswert' überhaupt ausrechnest. Letzten Endes gibst du einfach nur den ADC Wert, so wie du ihn vom ADC bekommst, an das LCD aus. Du fügst zwar noch ein Komma ein, aber logisch: Wenn du die Zahlenwerte 0 bis 1023 ausgibst, indem du nach der Hunderterstelle ein Komma einfügst, dann stehen auf deinem LCD Zahlenwerte von 0 bis 10,23. Das sind aber trotzdem noch keine Volt sondern nur die ADC Werte anders aufbereitet. Der ADC liefert nicht direkt Volt! Der liefert eine Zahl von 0 bis 1023, die den anliegenden Volt im Bereich 0 bis Referenzspannung entsprechen. 0 .... 0V 1023 .... Referenzspannung Den ADC Wert musst du selber, mit der Kenntnis der Höhe der Referenzspannung in tatsächliche Volt umrechnen.
Hallo Karl Heinz, die Umwandlung des Wandlerergebnisses und die Ausgabe erfolgt in der Interrupr-Service-Routine. Ist das etwas falsch? Lord Ziu, der m8 steckt auf einem Testbord. Es sollte eigentlich alles vorhanden sein. Die Ref-Spannung habe ich mit 100n gegen Masse geblockt. Peter Z., da die Ref.-Spannung gleich der Versorgungsspannung ist kann sie doch eigentlich nicht falsch sein.
Wilfried H. schrieb: > Hallo Karl Heinz, > die Umwandlung des Wandlerergebnisses und die Ausgabe erfolgt in der > Interrupr-Service-Routine. Ist das etwas falsch? Grundsätzlich nicht (*) Aber deine Anzeige zeigt dir nicht die Spannung in Volt an, sondern die Spannung in ADC Einheiten. So hast du das programmiert. Und die sind nun mal 0 bei 0 Volt am ADC Eingang 1023 wenn die Eingangsspannung der Referenzspannung entspricht Wenn du auf der Anzeige Volt haben willst, dann musst du dir die auch ausrechnen. Vom ADC kriegst du die nicht direkt. Wenn deine Eingangsspannung der Hälfte der Referenzspannung entspricht, dann liefert der ADC zb 512. Das sind jetzt aber nicht 5.12 Volt, sondern einfach nur die Hälfte der Referenzspannung (weil 512 die Hälfte von 1024 ist). Die war bei dir 5V, also ist die Hälfte davon 2.5 Volt. Da du das aber nicht ausrechnest, steht bei dir am Display 5,12 (wegen der 512) und nicht 2.5V (weil du die gar nicht ausgerechnet hast) Wenn du dir leichter tust, dann stell dir einfach vor, der ADC liefert dir eine Art 'Prozentzahl': Wie gross, ausgedrückt in 'Prozent' ist die Eingangsspannung im Vergleich zur Referenzspannung? Nur geht der Wertebereich nicht wie bei Prozent von 0 bis 100, sondern von 0 bis 1023. (*) Na ja. Eigentlich schon. Aber das ist jetzt erst mal nicht dein Problem.
Karl Heinz, danke. Jetzt wo Du es sagst fällt es mir auch auf. Ich hab zwar noch keinen Plan wie ich das realisiere. Aber ich muss nun erst mal darüber nachdenken. Oder hast Du da vielleicht noch einen Tipp für mich.
Wilfried H. schrieb: > Karl Heinz, > danke. Jetzt wo Du es sagst fällt es mir auch auf. Ich hab zwar noch > keinen Plan wie ich das realisiere. Aber ich muss nun erst mal darüber > nachdenken. > Oder hast Du da vielleicht noch einen Tipp für mich. Ja: Dreisatz 1024 Äpfel kosten 5 Euro. Wieviel kosten 478 Äpfel? 1024 ...... 5 478 ...... x --------------------- 478 * 5 x = ----------- = 2.33 Euro 1024 Die 478 kriegst du vom ADC :-) Wenn du 2 Nachkommastellen haben willst, solltest du annehmen, dass 1024 Äpfel 500 Euro kosten. Denn dann kosten die 478 Äpfel 233 Euro. Und da du bei der Ausgabe das Komma richtig einschmuggelst, steht dann auf deiner Anzeige 2,33 (Aufpassen, dass du dir während der Berechnung keinen Overflow einhandelst. Eine uint16_t Berechnung läuft über, sobald irgendein Zwischenergebnis größer als 65535 wird [oder werden kann])
Man Karl Heinz, da hätte ich auch selbst drauf kommen müssen, oder ? :-)) Danke für Erste Karl Heinz. Ich arbeite das erst mal ein und teste es aus. Sollte es dann immer noch nicht klappen, darf ich mich sicher nochmal melden? Gruß Wilfried
Ach so, siehst Du sonst noch irgend wo einen bug?
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.