www.mikrocontroller.net

Forum: Compiler & IDEs Warum wandelt mein AD-Wandler nur 1x


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Steige gerade mit WinAVR ein und bin noch Anfänger
Ich will mit einem ATMega16 den AD-Wandler lesen und auf  Port den
Low-Wert ausgeben. Mit Assembler habe ich das erreicht nur mit C
nicht.

Er wandelt nur 1x. Jedesmal wenn ich den Controller resete zeigt er den
aktuellen Wert an.


Gruss


MidasX

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ADSC steht für single conversion ...

Entweder du stößt ständig neue Wandlungen an oder du benutzt den
Free-Running Mode.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ADSC steht nicht für "single conversion", sondern für "start
conversion".

Auch im "free running mode" muß die erste Konvertierung per ADSC
angestoßen werden.

@MidasX: Warum hast du den ADC-Interrupt eingeschaltet? Du hast keinen
Handler dafür definiert.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, da hast du recht.

Allerdings aktiviert man den Interrupt via ADIE, er setzt
unsinnigerweise lediglich das Flag.

Abgesehen davon fehlt das sei(), welches erst für kurioses Verhalten
sorgen würde. Sonst würde nichts passieren.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Allerdings aktiviert man den Interrupt via ADIE, er setzt
> unsinnigerweise lediglich das Flag.

Auch nicht ganz. Eigentlich löscht er das Flag ("Alternatively, ADIF
is cleared by writing a logical one to the flag").

> Abgesehen davon fehlt das sei(), welches erst für kurioses
> Verhalten sorgen würde.

Och, was heißt "kurioses Verhalten"? Wenn keine ISR definiert ist,
wird per Default das Programm von vorne gestartet.Es würde dann
zufälligerweise das machen, was MidasX wollte, nämlich immer wieder
neue Konvertierungen starten.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ADIF allerdings nach einem Reset per default gelöscht ist, setzt er
das Flag.

Genug der Haarspalterei?

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

Bewertung
0 lesenswert
nicht lesenswert
> Da ADIF allerdings nach einem Reset per default gelöscht ist, setzt
> er das Flag.

Nein, ADIF ist eins von den Flags, die man nicht selbst setzen kann
(das kann nur die Hardware), und die durch Schreiben einer 1 gelöscht
werden.

Autor: MidasX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Zuerste mal danke für die vielen Antworten.

Aber ein bisschen überfordert bin ich nun schon.
Ich habe nun den Code geändert.
Das Programm läuft jetzt.
Ist dan nun richtig oder kann man es besser machen.
Free Running will ich nicht machen.


Gruss

MidasX

while (1)
  {


    //Warten bis die AD-Wandlung abgeschloßen ist
    //while(!(ADCSRA & (1<<ADIF)));
    ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIF);
    while(!(ADCSRA & (1<<ADIF)));


    //AD-Wert auslesen
    //buffer = (ADCH<<8) | ADCL;

    ValLo = ADCL;
    ValHi = ADCH;

    //buffer = buffer / 4;
    //ValLo  = buffer;

    PORTB = ValLo;
  }

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.