www.mikrocontroller.net

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


Autor: Arni Blackcorner. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was spricht dagegen, die Routinen aus dem Tutorial zu nehmen?

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Timmo H. (masterfx)
Datum:

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

Autor: Arni Blackcorner. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Arni Blackcorner. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Arni Blackcorner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Arni Blackcorner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.