Atmega88 ADU Problemme

Gast #1412272
Hallo liebes Forum Team.
Ich habe ein kleines Problem ich versuche schon seit zwei Tagen den ADC 
in gang zu gekommen aber meine versuche scheitern immer.

Vorab mein Code zum init. der ADU
1
lds temp1,ADMUX
2
  cbr temp1, (1 << REFS1)  //Interne AVcc 
3
     sbr temp1, (1 << REFS0)  
4
     sbr temp1, (1 << ADLAR)  
5
     cbr temp1, (1 << MUX3) //ADU 0 
6
     cbr temp1, (1 << MUX2)  
7
     cbr temp1, (1 << MUX1)  
8
     cbr temp1, (1 << MUX0) 
9
  sts ADMUX, temp1
10

11
  lds temp1, ADCSRA
12
     sbr temp1, (1 << ADEN) 
13
     cbr temp1, (1 << ADATE) 
14
     cbr temp1, (1 << ADIE) 
15
    sbr temp1, (1 << ADPS2) //128bit Pres.
16
     sbr temp1, (1 << ADPS1) 
17
     sbr temp1, (1 << ADPS0) 
18
  sts ADCSRA, temp1

nun lese ich die werte wie folgt aus.
1
lds temp1, ADCSRA
2
  sbr temp1, (1 << ADSC) // Conv. Starten
3
  sts ADCSRA, temp1 
4

5
adu_read_in_wait:
6
  lds temp1, ADCSRA
7
  sbrc temp1, ADSC
8
  rjmp adu_read_in_wait //Warten bis ferig
9
        ldi temp1, ADCL  
10
  ldi temp2, ADCH
11
        ... Auswertung
Ich habe an derm ersten Kannel ein Poti dran der als Spannungsteiler 
arbeitet. Das Signal kommt auch am MCU an. Des weiteren habe ich laut 
Datenblatt als minimalbeschaltung ein 100nF am Aref Pin. AVcc hängt an 
Vcc.

Nun das Problem, ich kann an dem Poti drehen wie ich will es kommt immer 
der gleiche Wert aus der ADU...

Da ich jetzt schon so lange auf den Code gucke sehe ich warscheinlich 
den Fehler nicht mehr. Daher die Frage habt ihr eine Idee was schief 
laufen könnte???

Gruß TNTBC
Gast
Du lädst nicht den Inhalt des Registers nach temp1/temp 2, sondern der 
"Adresswert" vom ADCL/ADCH.
Du darft nicht "LDI" sondern mußt "LDS" schreiben, dann sollte es 
funktionieren.

LDI temp1,Konstante = lade sofort Konstante in temp1
LDS temp1,Speicherstelle = lade den Inhalt der Speicherzelle in temp1

Gruß

Seppl
Gast
Danke Seppl für die Antwort.

Das war sicherlich ein fehler aber leider nicht meine lösung ich habe 
immernoch das Problem. jetzt gibt er immer FF im High register aus.

Also immernoch das Problem :(

Gruß TNTBC
Gast
Ist das Includefile mit den Definitionen korrekt? Das File heißt 
"m88def.inc", wenn ich mich nicht irre.

Ich würde mal das Ergebnis der Wandlung zur Probe "rechts adjusted" 
(ADLAR-Bit=0) ausgeben, dann müßten die oberen 6 Bit = 0 gesetzt sein.

Ist der ADC0-Pin als Analog-Input definiert?

Gruß

Seppl
Gast
Hallo Seppl,

ich danke dir für deine Unterstützung. ich habe  den fehler gefunden 
jedoch nicht im Programm. Auf der Platine war ein Kurzschluss zwischen 
GND und ARef. Daher konnte es nicht gehen. Aber jetzt geht alles. Also 
Danke noch einmal

Gruß TNTBC

Antwort schreiben

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