Forum: Mikrocontroller und Digitale Elektronik ADC Ergebnis als 8 BIT Zahl auf LEDs ausgeben


von Andy11 (Gast)


Lesenswert?

Die Ergebnisse einer ADC Wandlung landen beim Atmega 16 in den Registern
ADCH und ADCL.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC

im Tutorial steht unter "Die Ergebnisregister ADCL und ADCH" bei ADLAR = 
1 (2te Möglichkeit), dass man das Ergebnis als 8 Bit Zahl interpretieren 
kann.

Dazu mein Programm:
1
 
2
;**********************************Header**************************************
3
;Projektname:
4
;Name des Erstellers:
5
;Zuletzt aktualisiert:
6
;
7
;*****************************Initialisierungen********************************
8
.include "m16def.inc" ;Definitionsdatei des Mega16
9
10
;Stackpointer-init***********
11
  ldi r16, High(Ramend)
12
  out SPH, r16
13
14
  ldi r16, Low(Ramend)
15
  out SPL, r16
16
17
;ADC-init***********
18
  ldi r16, 0x24    ;Externe Referenz, Ergebnis linksbündig, Kanal 4
19
  out ADMUX, r16    ;Ausgabe
20
21
  ldi r16, 0x81    
22
  out ADCSRA, r16
23
24
;*****************Deklarierete Funktionen und
25
Subroutinen**********************
26
27
;*************************Variablendeklarationen*******************************
28
29
;*****************************Ein-Ausgänge*************************************
30
  ser r16      ;Setze Registerinhalt auf 255 (ldi r16, 255)
31
  out DDRB, r16   ;Portb als Ausgabeport
32
33
;*****************************Hauptprogramm************************************
34
35
Hauptprogramm:
36
  sbi ADCSRA, ADSC   ;Starte ADC  
37
  in r16, ADCH    ;Lade Ergebnis in r16
38
  neg r16        ;Drehe 0ler und 1ser um (für STK500)
39
  out PORTB, r16    ;Gebe Ergebnis an PORTB aus
40
jmp Hauptprogramm

wenn ich jedoch am Potentiometer drehe, der an PinA4 hängt tut sich nur 
manchmal was oder halt garnichts

ist der Fehler in der Software?
Ich benutze das STK 500

von AVRuser (Gast)


Lesenswert?

Hallo,

>Hauptprogramm:
>  sbi ADCSRA, ADSC   ;Starte ADC
>> ... (da fehlt was!)
>  in r16, ADCH    ;Lade Ergebnis in r16
>  neg r16        ;Drehe 0ler und 1ser um (für STK500)
>  out PORTB, r16    ;Gebe Ergebnis an PORTB aus
>jmp Hauptprogramm

So kann das nicht gehen. Man muss nach Start der Wandlung schon warten, 
bis sie fertig ist. (Genaueres siehe Datenblatt des Controllers unter 
ADC.)

von AVRuser (Gast)


Lesenswert?

Nachtrag: Im genannten ADC-Tutorial steht es richtig ...

von Andy11 (Gast)


Lesenswert?

cool danke

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.