Forum: Mikrocontroller und Digitale Elektronik Atmega88 ADU Problemme


von tntbc (Gast)


Lesenswert?

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

von Seppl (Gast)


Lesenswert?

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

von tntbc (Gast)


Lesenswert?

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

von Seppl (Gast)


Lesenswert?

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

von tntbc (Gast)


Lesenswert?

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

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.