www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit AD-Wandler im ATmega


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein Problem mit dem AD-Wandler in ATmega8 und 32 (gleicher 
Fehler). Was mich schon wundert: Egal ob AVCC und GND von AD-Wandler 
angeschlossen sind oder nicht kommt das gleiche raus. Für was gibt es 
dann überhaupt diese Anschlüsse?

Zu dem eigentlichen Problem:
Ich bekomme total falsche Werte! Lege ich den Eingang auf AREF (5V) habe 
ich Werte um 600. Lege ich den Eingang auf Masse kommen Werte von ca. 
300.

Hier der C-Code:
    ADMUX |= (1<<MUX0);
    ADCSRA |= (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);
    ADCSRA |= (1<<ADSC);
    
    while ( ADCSRA & (1<<ADSC) ) {
     ;
     }
  
  lcd_init();
  
  float spannung = 0;
  
  while(1)
  {
        
        ADCSRA |= (1<<ADSC);
        while ( ADCSRA & (1<<ADSC) ) {
        ;
        }
        
    spannung = ADCL;
    spannung += (ADCH<<8);    
    
    
    spannung = (int) (spannung);
    

    lcd_clear();
    lcd_zahl(spannung);

//1 Sekunde warten
    _delay_ms(100);
    _delay_ms(100);
    _delay_ms(100);
    _delay_ms(100);
    _delay_ms(100);
    _delay_ms(100);
    _delay_ms(100);
    _delay_ms(100);
    _delay_ms(100);
    _delay_ms(100);
    
  }

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Code sieht auch nicht unbedingt toll aus.
float spannung = 0;
 ist schonmal ziemlich unklug. Nimm als Datentyp einen int. Ich vermute 
sogar, dass deine Routine "lcd_zahl" gar keine float-Datentypen 
verarbeiten kann.
spannung = (int) (spannung);
  hilft vielleicht in MATLAB, aber aufm µC kann das doch nur schief 
gehen, wenn spannung als float deklariert ist.

MfG
Marius

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVCC ist die Spannungsversorgung den PortC beim Mega8 oder PortA beim 
Mega16. Welchen ADC-Eingang verwendest du.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe einen float benutzt, weil ich damit noch mehr vor hatte. Das 
ganze mit der Ausgabe funktioniert. Hab ich auch schon bei anderen 
Programmen so gemacht.

Als Eingang verwende ich ADC0 (MUX0).
Die Versorgungsspannung hab ich wie im Datenblatt angeschlossen:

Mega8:
AVCC: Pin 20
AREF: Pin 21
GND: Pin 22
ADC0: Pin 23

Mega32:
AVCC: Pin 30
GND: Pin 31
AREF: Pin 32
ADC0: Pin 40

Autor: Gregor L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

Versuch mal mit ADMUX=0; deine Register in einen klar definierten 
Zustand zu bringen.


z.B:

    ADCSRA |= (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);
    ADMUX = 0;
    ... hier  ADMUX einstellen

    ADCSRA |= (1<<ADSC);


lg,
Gregor

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit ADMUX |= (1<<MUX0); hast du ADC1 eingestellt.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum hab ich da ADC1 eingestellt?

Ich dachte das geht nach dem Prinzip MUX0=ADC0, MUX1=ADC1 usw.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank schrieb:
> Egal ob AVCC und GND von AD-Wandler
> angeschlossen sind oder nicht kommt das gleiche raus.

Mit bisschen Pech hast du den AVR damit bereits kaputt geschossen,
wenn du ihn jemals ohne AVcc betrieben hast.

> Ich dachte das geht nach dem Prinzip MUX0=ADC0, MUX1=ADC1 usw.

Datenblatt lesen ist hier besser als denken.  Insbesondere beim
ATmega32 wirst du dann nämlich sehr schnell feststellen, dass der
deutlich mehr kann, als nur jeden ADC-Eingang selbst 1:1 abzutasten.
Schon dadurch kann deine Logik gar nicht aufgehen.

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du das Bit0 im ADMUX setzt, das hast du mit ADMUX |= (1<<MUX0); 
getan, dann hast du den ADC1 aktiviert. Schau dir das im Datenblatt 
Mega8, Seite 206 an.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Hilfe. Ich hab mir schon gedacht, dass ich einen 
ganz dummen Fehler gemacht hab.
Ich berichte dann, wenn ich es ausprobiert hab.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem richtigen Eingang funktioniert es! Und bei meinen Versuchen das 
Ding zum laufen zu bringen ist auch nichts kaputt gegangen :-)

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.