Mega88 adc Memory Mapped

Gast #1852434
Lesenswert?

Hallo,

habe gerade einen Mega88 auf dem STK500 und bin am probieren den ADC in 
Betrieb zu nehmen.
Ein 22k Poti ist mit dem Schleifer am adc0 angeschlossen, die beiden 
aüsseren Pins des Poti sind an +5V und an GND angeschlossen.
Der Analogwert soll an PortD ausgegeben werden.
PortD ist mit den 8 LEDs auf dem STK verbunden.

Mein Code (Basierend auf 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC) läuft soweit, 
jedoch habe ich Änderungen vorgenommen damit ich auf die jetzt (Mega88) 
Memory Mapped ADC-Register zugreifen kann.
1
.include "m88def.inc"
2
.def temp1     = r16         ; allgemeines temp Register, zur kurzfristigen Verwendung
3
.def temp2     = r17         ; Register für 24 Bit Addition, Lowest Byte
4
.def temp3     = r18         ; Register für 24 Bit Addition, Middle Byte
5
.def temp4     = r19         ; Register für 24 Bit Addition, Highest Byte
6

7

8
 
9
    ldi     temp1, LOW(RAMEND)                  ; Stackpointer initialisieren
10
    out     SPL, temp1
11
    ldi     temp1, HIGH(RAMEND)
12
    out     SPH, temp1
13
     ldi        temp1,0xff
14
    out        ddrd,temp1
15
;    clr        temp1
16
    out        portd,temp1
17

18
 
19
; ADC initialisieren: ADC0, Vcc als Referenz, Single Conversion, Vorteiler 128
20
 
21
    ldi     temp1, (1<<REFS0) |(1<<ADLAR)          ; Kanal 0, interne Referenzspannung 5V, Analogwerte Linksbündig
22
    sts     ADMUX, temp1
23
    ldi     temp1, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)
24
    sts     ADCSRA, temp1
25

26

27

28
sample_adc:
29
     ldi        temp1,1<<adsc|1<<aden
30
    sts     ADCSRA,temp1        ; den ADC starten
31
 
32
wait_adc:
33

34
    lds        temp1,adcsra
35
    andi    temp1,adsc
36
    brne    wait_adc
37

38
;    sbic    ADCSRA, ADSC        ; wenn der ADC fertig ist, wird dieses Bit gelöscht
39
;   rjmp    wait_adc
40

41
    lds      temp1, ADCL         ; immer zuerst LOW Byte lesen
42
    lds      temp1, ADCH        ; danach das mittlerweile gesperrte High Byte
43
    out        portd,temp1
44
    rjmp    sample_adc

Frage: Geht das auch eleganter, oder muss ich statt out immer mit LDS - 
STS arbeiten ?

Grüsse

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren