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
Fehler gefunden:
ungetestete Ch waren scheinbar floating -> der Mux hat einen fiesen
Signalabstand -> höchster Wert setzt sich auf allen ch durch.
...das dauerte jetzt >4h - seid also bitte schlauer!
Grüße, Hendrik
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|