mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC Messwert auf LCD ausgeben


Autor: Tobias P. (Gast)
Datum:
Angehängte Dateien:

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

Autor: Tobias P. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch der Schaltplan.

Autor: Hartmut Gröger (Gast)
Datum:

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

Autor: Tobias P. (Gast)
Datum:

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

Autor: Tobias P. (Gast)
Datum:

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

Autor: CrashCode (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
rechne mit 250 (oder 25) und bastle das komma in der anzeige zwei (eine)
stellen nach vorne.

Gruß



CrashCode

Autor: Tobias P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich folgendes eingebe, stimmt das Ergebnis:

result = ((2560.0/1023.0)/x)

Aber wie bekomme ich ein Komma in die itoa funktion ?
Dort werden nämlich nur ganze Zahlen angezeigt.

Autor: Henning Schreiber (xtsi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  sprintf_P(buffer, "%4.2", result);

Autor: Tobias P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sprintf_P(buffer, "%4.2", result);

Dieser Befehl erzeugt nur wirre Zeichen auf meinem LCD.

Autor: Henning Schreiber (xtsi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich muss result ein float sein. Hab es nicht getestet.

Autor: Henning Schreiber (xtsi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grr, ohne Edit-Funktion immer wieder ärgerlich
float result;
char buffer[17]; // Nehme an, das LCD hat 16 Spalten ;)

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

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

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

lcd_puts(buffer);

Hab leider nix zum Testen da

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.