Warum wandelt mein AD-Wandler nur 1x

Gast #238018
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
Angehängte Dateien:
Gast
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.
Gast
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.
Gast
> 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.
Gast
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.