ADC - Kanalwechsel (mega16, asm)

OP #352720
Lesenswert?
• ▲
▼
Moin,
ich habe zZ. ein ziemliches merkwürdiges Problem mit dem ADC eines
mega16:
Es sollen ch5-7 nacheinander immer wieder eingelesen werden -
allerdings wird momentan als Ergebnis für alle 3 ch das Maximum der
Eingänge genommen. (Bsp.: ch5=2.5V, ch6,7 = GND -> ch5,6,7 = 128 da
8bit)

Ich habe bereits Datasheet, Beispielcodes, ANs und das Forum
durchsucht, leider aber ohne Erfolg.
1
Initialisierung:
2
  ldi  tempL, 0b01100111 ;internal 5V reference, left adjusted, ch7
3
selected
4
  out  ADMUX, tempL
5
  ldi  tempL, 0b11001110 ;start conversion, enable IRQ, prescaler is
6
64
7
  out  ADCSRA, tempL
8
  clr  DMXstate
9

10
ADC-ISR:
11
get_manual:
12
    in    SREGbuf, SREG
13
    push  ZH
14
    push  ZL
15

16
    ldi    ZH, high(manual_table)    ;'switch' in asm ;-) 
17
    ldi    ZL, low(manual_table)    ;get manual process ID
18
    add    ZL, DMXstate        ;abuse DMX state for manual mode
19
    adc    ZH, null
20
    ijmp
21

22
  
23
  gm_focus:
24
    ldi    DMXstate, 0xFF      ;Focus data ready
25
    in    ZL, ADCL
26
    in    ZL, ADCH        ;get data
27
    ldi    ZH, 0b01100111      ;select Pan
28
    out    ADMUX, ZH
29

30
out    OCR1AH, null          ;debug
31
out    OCR1AL, ZL 
32

33
    cpi    ZL, 80
34
    brlo  gm_dec_focus
35
    cpi    ZL, 175
36
    brsh  gm_inc_focus
37
     gm_focus_stop:
38
    sbi    PortC, ON_FOCUS      ;disable focus motor
39
    rjmp  gm_exit
40
    gm_dec_focus:
41
      sts    sFocus, null      ;set Sollwert
42
    rjmp  gm_exit
43
    gm_inc_focus:
44
      ldi    ZL, 0xFF        ;set Sollwert
45
    sts    sFocus, ZL
46
    rjmp  gm_exit
47

48
  gm_pan:
49
    in    ZL, ADCL
50
    in    ZL, ADCH        ;get data
51
    sts    sPan, ZL
52
    ldi    ZL, 0b01100110      ;select Tilt
53
    out    ADMUX, ZL
54
    rjmp  gm_exit
55

56
  gm_tilt:
57
    in    ZL, ADCL
58
    in    ZL, ADCH        ;get data
59
    sts    sTilt, ZL
60
    ldi    ZL, 0b01100101      ;select Focus
61
    out    ADMUX, ZL
62
    rjmp  gm_exit
63

64
  gm_exit_ex:
65
    in    ZL, ADCL
66
    in    ZL, ADCH        ;get data      
67
  gm_exit:
68
    inc    DMXstate
69
    ldi    ZL, 0b11001110      ;start conversion, enable IRQ, prescaler is 64
70
    out    ADCSRA, ZL
71
    pop    ZL
72
    pop    ZH
73
    out    SREG, SREGbuf
74
    reti
75

76
manual_table:
77
    rjmp gm_exit_ex
78
    rjmp gm_pan
79
    rjmp gm_exit_ex
80
    rjmp gm_tilt
81
    rjmp gm_exit_ex
82
    rjmp gm_focus

Falls jmd. von Euch ein Licht aufgeht - ich wäre für jede Hilfe
dankbar!

Viele Grüße, Hendrik

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