ADC Messwert auf LCD ausgeben

Gast #210959
Lesenswert?
• ▲
▼
Folgendes Problem hab ich:
Also ich möchte gerne eine Spannung mithilfe des im Mega8 integrierten
ADC messen und auf einem 2x16 LCD ausgeben.
Die Ansteuerung des LCD funktioniert wunderbar. (Peter Fleury's LCD
lib)
Aber der ADC will nicht so richtig.
Ich verwende die int. Ref Spannung von 2,56 V die ich auch am AREF Pin
messen kann. Die zu messende Spannung von 2 V die über einen
Spannungsteiler erzeugt wird, liegt am ADC5 an.
Auf dem LCD erscheint immer 0.
Mir ist schon klar, dass ich den Wert, der mir der ADC liefert schon
noch umrechnen muss, da der ACD nur einen Wert zw. 0 und 1023 liefert.

Da ich noch Anfänger bin, was die speziellen Funktionen eines AVR
betriff, bin ich jedem sehr dankbar, der mir irgendwie weiter helfen
kann.

Das AVR Tutorial hab ich auch schon durch, sieht man viellicht am Code.
Angehängte Dateien:
Gast #210961
Lesenswert?
• ▲
▼
Hi

Wenn du keinen Wert messen kannst gibt es folgende Moglichkeiten:

-ADEN nicht gesetzt
-ADC nicht gestartet ->ADSC
-ADIE nicht gesetzt (wenn Du Interrupt benutzt)
-Falscher Vorteiler ,ADC arbeitet nur in einem bestimmten
 Frequenzbereich
-Eingangsmultiplexer auf falschen Eingang

Mfg HG
Gast #210962
Lesenswert?
• ▲
▼
Die Einstellungen hab ich schon überprüft. Einen anderen AVR hab ich
auch schon ausprobiert.
Wie schon gesagt, ich bin noch Anfänger was die "Sonderfunktionen"
eines µC betrifft.
Deswegen hab ich mal meinen Code und den Schaltplan gepostet.
Gast #210963
Lesenswert?
• ▲
▼
Hab meinen Fehler gefunden:

lcd_puts(" ATmega 8  V1.3\n");
ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADFR) | (1<<ADPS2) | (1<<ADPS1);
ADMUX |= (1<<REFS1) | (1<<REFS0) | (1<<MUX2) | (1<<MUX0);

_delay_ms (10); // hier war der Fehler
x = ADC;
itoa(x,buffer,10);
lcd_puts("ADC:");
lcd_puts(buffer);

Nach dem Messen muss ich ja erst warten bis das Ergebniss im Register
liegt. Die Rohdaten kann ich nun anzeigen.

Problem Nr. 2
zum Umrechnen in einen Spannungswert muss ich ja folgendes Rechnen:

result = ((2560/1023)/x)

Problem ist nur, dass 2560/1023 2,50 ergibt, aber der µC mit 2 rechnet.
Wie kann ich denn mit Kommazahlen rechnen ?
#210969
Lesenswert?
• ▲
▼
Grr, ohne Edit-Funktion immer wieder ärgerlich
1
float result;
2
char buffer[17]; // Nehme an, das LCD hat 16 Spalten ;)
3

4
lcd_puts(" ATmega 8  V1.3\n");
5

6
ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADFR) | (1<<ADPS2) | (1<<ADPS1);
7
ADMUX |= (1<<REFS1) | (1<<REFS0) | (1<<MUX2) | (1<<MUX0);
8

9
_delay_ms (10); // hier war der Fehler
10

11
result = ((2560.0/1023.0)/(float)ADC);
12

13
sprintf_P(buffer, "ADC:%4.2f", result);
14

15
lcd_puts(buffer);

Hab leider nix zum Testen da

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.