www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe Fehler beim ADC


Autor: olaf (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
kann mir jemand sagen was ich bei meinem 3x MUX ADC falsch mache?!?!?

will 3 spannungswerte aufnehmen und über rs 232 weg senden (klappt 
schon)

wenn ich ihn laufen lasse und am adc0 was anschließe ändern sich alle 
drei werte. bei pin adc1 bzw. adc2 ändert sich gar nix

kann mir da bitte jemand weiter helfen

ps: anfänger

Autor: olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso at mega 128 habe ich mit 16mhz

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man muß den AD auch starten und wandeln lassen.

Schau mal hier:

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

 while(1)
  {
     sbi(ADCSRA,ADSC);

     ADMUX=(ADMUX & 0b01100000);// | 0b01000000);
     adc_result0 = ((ADCL) | ((ADCH)<<8));

     ADMUX=(ADMUX & 0b01100001);// | 0b01000000);
     adc_result1 = ((ADCL) | ((ADCH)<<8));

     ADMUX=(ADMUX & 0b01100010);// | 0b01000000);
     adc_result2 = ((ADCL) | ((ADCH)<<8));

     printf( "%d %d %d\n", adc_result0, adc_result1, adc_result2);
  }

was erwartest Du, was hier passieren soll?

Du startest EINE Messung, drehst dann an den MUX-Werten und liest 
irgendwie ADCH und ADCL...

Du wartest nicht auf das Ende der Messung und startest auf einer anderen 
MUX-Einstellung auch keine neue.

PS: die Reihenfolge, in der ADCH und ADCL gelesen werden müssen, steht 
im Datenblatt. Man kann aber das Problem auch dem C-Compiler überlassen 
und einfach ADC lesen.

Warum setzt Du wahllos diverse Flags im ADCSRA?
Du solltest Di die Bedeutung dieser mal im Datenblatt anschauen.

Gruß aus Berlin
Michael

Autor: olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael U.

Warum wahllos? bei der init wird einmal der adc initialisiert. Bei dem 
teil den du raus kopiert hast möchte ich das er nach einander die mux 
eingänge wandelt und in die entsprechenden adc_result speichert, um sie 
später dann auszugeben.

Anscheind ist meine lösung falsch wie müsste ich das den machen? wie 
kann ich sagen warte auf umwandlung?

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
olaf schrieb:
> @Michael U.
>
> Warum wahllos? bei der init wird einmal der adc initialisiert.
  sbi(ADCSRA,ADEN); ADC einschalten
  cbi(ADCSRA,ADFR); FreeRunning ausschalte (war sowieso nach Reset aus)

(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|(1<<ADIF)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|
(1<<ADEN) hast Du doch oben gerade, doppelt hält besser?
(1<<ADPS0);
Du kennst die Bedeutung der Flags?
(1<<ADIE) wozu gibst Du den Interrupt frei?
(1<<ADIF) wozu löschst Du das Interrupt-Flag?
(1<<ADFR) Du gibst FreeRunning frei, ist ungünstig, wenn man mehrere 
Eingänge samplen will
(1<<ADSC) StartConversion ist auch unsinng bevor MUX und Format gesetzt 
sind.

> Bei dem
> teil den du raus kopiert hast möchte ich das er nach einander die mux
> eingänge wandelt und in die entsprechenden adc_result speichert, um sie
> später dann auszugeben.

Wie im Datenblatt eben oder im Turtorial...
 {
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
    while ( ADCSRA & (1<<ADSC) ) {
      ;   // auf Abschluss der Konvertierung warten
    }
    result = ADCW;

Dann MUX umschalten, schauen, was das Datenblatt da zu Wartezeiten sagt, 
bis bis man starten kann usw. usw.
>
> Anscheind ist meine lösung falsch wie müsste ich das den machen? wie
> kann ich sagen warte auf umwandlung?

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Gruß aus Berlin
Michael

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.