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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren