Forum: Mikrocontroller und Digitale Elektronik Warum kann ich den AD-Wandler nicht mehr lesen?


von Arni Blackcorner. (Gast)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

Was spricht dagegen, die Routinen aus dem Tutorial zu nehmen?

von Michael Wilhelm (Gast)


Lesenswert?

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

von Timmo H. (masterfx)


Lesenswert?

Also ich warte immer so auf Abschluss der Konvertierung:
1
while ( ADCSRA & (1<<ADSC) );

von Arni Blackcorner. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Johannes M. (johnny-m)


Lesenswert?

Arni Blackcorner. wrote:
> Im Tutorial steht "ADPS2...ADPS0 (ADC Prescaler Select Bits) "
> braucht es diesen Teiler immer?
Der Prescaler gibt dem ADC seinen Takt. Ohne den läuft keine Wandlung.

von Peter (Gast)


Lesenswert?

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...)

von Arni Blackcorner. (Gast)


Angehängte Dateien:

Lesenswert?

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

von Timmo H. (masterfx)


Lesenswert?

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).

von Arni Blackcorner (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

Ich kann mich nur wiederholen:
Du musst das Rad nicht neu erfinden. Warum verwendest du nicht
einfach die Routine aus dem Tutorial. Die funktioniert.

von Timmo H. (masterfx)


Lesenswert?

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...)

von Arni Blackcorner (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.