Forum: Mikrocontroller und Digitale Elektronik ADC Testen / Problem


von Dextrose (Gast)


Lesenswert?

Hallo zusammen,
ich würde gerne der ADC meines atmega8 testen.
Dazu habe ich wie im Tutorial ein 500k Poti zwischen 5V und GND 
geschaltet. Der wiper geht an den PC0 Eingang also ADC0.

Mein Hauptproblem ist, dass ich nicht so recht weiß wie ich den ADC 
konfigurieren soll. Deshalb habe ich jetzt einfach mal die Konfiguration 
aus dem Beispielcode geklaut. Hier ist der Code wie ich ihn gerade 
stehen habe:

1
.def temp = r16
2
clr temp
3
4
ldi temp, 0xFF
5
out DDRD, temp
6
7
ldi temp, (1<<REFS0)
8
out ADMUX, temp
9
10
ldi temp, (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0)
11
out ADCSRA, temp
12
13
sbi ADCSRA, ADSC
14
15
loop:
16
17
18
in temp, ADCL
19
;in temp, ADCH
20
out PORTD, temp
21
22
rjmp loop

Also so habe ich das eingestellt, dass die interne Referenz benutzt 
wird.
Grundsätzlich ist der ADC eingeschaltet und der Prescaler ist auf 8 
gesetzt, da ich den internen Oszillator benutze (1MHz).

Mein Ziel ist es jetzt einmalig einen Wert auszulesen und den in Binär 
an PORTD auszugeben.
Das funktioniert allerdings nicht. Ich lese nur ADCL aus, da die anderen 
2 Bits für mich erst mal uninteressant sind.
Was habe ich vergessen zu beachten?

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Dextrose schrieb:
> Was habe ich vergessen zu beachten?

1. Das Datenblatt
2. Das Tutorial
   (siehe 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC#Die_Ergebnisregister_ADCL_und_ADCH)

von Dextrose (Gast)


Lesenswert?

Also muss ich neben dem ADCL auch das ADCH auslesen, da ich sonst keinen 
Zugriff mehr auf die Register habe.
Allerdings komme ich immer noch nicht so ganz weiter.

Ich habe Das ADCH Bit hinzugefügt und den Loop in folgendes geändert:
1
loop:
2
3
in temp2, ADCL
4
in temp, ADCH
5
out PORTD, temp2
6
7
rjmp loop

Die LEDs an meinem STK500 sagen mir, dass das ADCL Byte komplett auf 1 
steht, egal wie das Poti steht.

von Dextrose (Gast)


Lesenswert?

Oh mein Gott,
ja es hat sich erledigt, ich habe das Poti auf dem Breadbord falsch 
aufgebaut.
Habe mich mit Senkrecht und Waagerecht geirrt m(.

Danke für die Hilfe!

von Detlef K. (adenin)


Lesenswert?

Dextrose schrieb:
> Was habe ich vergessen zu beachten?

Im Datenblat steht: When ADCL is read, the ADC Data Register is not 
updated until ADCH is read.

Ups, wiedermal zu langsam.

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Was habe ich vergessen zu beachten?

Du hast vergessen auf das Ende der ADC-Wandlung zu warten.
1
     sbi ADCSRA, ADSC
2
3
aaa:  sbic ADCSRA,ADSC
4
      rjmp aaa
5
6
      in temp, ADCL
7
      out PORTD, temp
8
      in temp, ADCH
9
      ....

MfG Spess

von Uwe (Gast)


Lesenswert?

Hallo,

Und man sollte den Eingangsstrom des ADC beachten.
D.h. den Innenwiderstand deiner Stromquelle, siehe Datenblatt.

von Magic S. (magic_smoke)


Lesenswert?

Der Innenwiderstand der Stromquelle ist für den Test nicht so wichtig. 
Ich hab das vor Jahren mit einem Kondensator am sonst offenen Eingang 
geprobt, der lief dann beim AVR nach Entladung langsam nach oben weg. 
Ein 500k Poti sollte also schon einen recht brauchbaren Pegel für den 
Test liefern.

von Uwe (Gast)


Lesenswert?

Ja ist klar, aber die Nachwelt denkt dann nicht mehr daran, deshalb ist 
der Hinweis im Regelbetrieb sehr wichtig.

von Detlef K. (adenin)


Lesenswert?

spess53 schrieb:
> Du hast vergessen auf das Ende der ADC-Wandlung zu warten.

Im Prinzip ja, aber das fällt hier nicht auf, weil bis die nächste 
Konverierung beendet ist einfach der letzte Wert wiederholt ausgelesen 
wird.

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.