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
Was spricht dagegen, die Routinen aus dem Tutorial zu nehmen?
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
Also ich warte immer so auf Abschluss der Konvertierung:
1 | while ( ADCSRA & (1<<ADSC) ); |
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.
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.
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...)
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
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).
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
Ich kann mich nur wiederholen: Du musst das Rad nicht neu erfinden. Warum verwendest du nicht einfach die Routine aus dem Tutorial. Die funktioniert.
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...)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.