Warum kann ich den AD-Wandler nicht mehr lesen?

Gast #890914
Hallo Leute

Ich bin Einsteiger und möchte mit einem ATMega32 (16MHz) und WinAVR 2 
AD-Kanäle auslesen. Es ist mir schon gelungen leider habe ich den Code 
so verändert dass es nicht mehr geht.
Ich möchte ihn nicht im Free Running Modus laufen lassen. Sondern so 
lange Warten bis die Wandlung abgeschlossen ist.

Trotz vielen Experimenten ist es mir nicht mehr gelungen den AD-Wandler 
wieder zu laufen zu bringen.

Was mache ich falsch?
Hier mein letzter Stand.


Gruss

Arni Blackcorner
Angehängte Dateien:
Gast
Nach der Initialisierung des AD-Wandlers versaust du dir mit dem 
Überschreiben des ADCSRA Registers dein Speed.
Besser: erst Initialisieren
        das Flag abfragen
        das Flag löschen
        Wert auslesen
        ADMUX setzen
        ADCSRA = ADCSRA | 1 << ??? Wandlung starten

MW
Gast
Ich habe alles in eine Funktion geschrieben damit es besser benutzt 
werden kann. Einiges habe ich abgehändert. Leider geht immer noch 
nichts.

Im Tutorial steht "ADPS2...ADPS0 (ADC Prescaler Select Bits) "
braucht es diesen Teiler immer?

Gruss

Arni Blackcorner.
Angehängte Dateien:
Gast
Den Prescaler musst Du so setzen, dass der ADC einen Takt von ca. 
50kHz..200kHz kriegt. Im weiteren musst Du noch die ReferenzSpannung für 
den Wandler wählen (Vcc, Interne VRef, Externe VRef...)
Gast
So nun habe ich einen kleinen Teilerfolg.
Immerhin kommen jetzt Daten raus. Leider wandelt das Ding wie verrückt 
und die Daten die rauskommen stimmen nicht und schwanken total verrückt 
umher.

Laut Datenblatt habe ich mit ADPS(2...0)den Teiler 128 gewählt.
Bei 16MHz komme ich nun auf 125kHz

Da ich nun REFS1 und REFS0 nicht aktiviert habe sollte nun die Interne 
Referenzspannung gelten.

Das Board ist ein STK500. Der Jumper AREF ist gesetzt.

Sieht jemand den Fehler?


Gruss
Arni Blackcorner
Angehängte Dateien:
Das die letzten Bits zappeln ist völlig normal. Abhilfe: Lese den Port 
mehrmals ein und Bilde den Mittelwert. Zudem solltest du für eine 
möglichst genaue Messung auch die AD-Schaltung aus dem Atmel Datenblatt 
nehmen (Kondensator parallel, Spule in Reihe).
Gast
Hallo Timmo

Ich weiss dass durch das Rauschen die unteren Werte ein bisschen hin und 
her springen. Nur im Moment springen einfach alle. Also total 
unbrauchbare Werte. Da kann bekommte ich auch mit einem Mittelwert 
nichts brauchbares.

Ich habe irgendwie das Gefühl dass gar nicht so lange gewartet wird bis 
die Wandlung abgeschlossen ist.

Gruss

Arni Blackcorner
Wenn sie wie verrückt springen kann das eigentlich nur drei Gründe 
haben:
1. Du misst ein unsauberes Signal (z.B. kein C und kein L dran, bzw. 
keine Gleichspannung)
2. Die Pins sind potentialfrei
3. Der ADC hat kein Potential (GND, AREF...)
Gast
Alle OK. Ich habe den Fehler gefunden. Der Fehler war, dass ich einen 2. 
Stockel zwischen STK-Board und mc gesteckt habe um den uc schneller 
welchseln zu können. Dazu kam es zu einer unsauberen Verbindung.

Die "Funktion funktioinert"

Danke für die Hilfe an alle.


Gruss

Arni Blackcorner

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.