www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC-Mega8, Hilfe bitte, Ich komme nicht weiter


Autor: Wilfried H. (willi_2)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lord Ziu (lordziu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fangen wir erstmal mit der Hardware an. Hast du die Versorgungsspannung 
des ADC angeschlossen? Und alle nötigen Abblock-Kondensatoren?

Autor: Peter Z. (hangloose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich tippe mal... falsche Referenz Spannung eingestellt

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Wilfried H. (willi_2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Wilfried H. (willi_2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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])

Autor: Wilfried H. (willi_2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Wilfried H. (willi_2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so, siehst Du sonst noch irgend wo einen bug?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.