Also ich hab hier jetzt mal die übliche Variante angewendet.
in

ich starte den ADC mit Kanal 0
und lese das ein, wenn die Conversion fertig ist.

das läuft dann vier mal, jedes mal mit dem nächsten ADC Kanal und einem anderen Register zum speichern.

dann ca.8ms verzögern

dann 1 ms verzögern

und dann in eine schleife bis PORTD = 0 ist und danach warten bis auch die zweite ms vorbei ist.

Das seltsame ist, ich beeinflusse alle AD Werte mit allen Potis?!!?

Das register "pause" stellt sicher, dass der Port nicht schon während der ersten ms bearbeitet wird. Sieht man auch in der ISR.

hier der Code:
Code:
.include "m8def.inc"

.def tmp = r16
.def k0 = r17
.def k1 = r18
.def k2 = r19
.def k3 = r20
.def zyclus = r21
.def kanal = r22
.def pause = r23
.org 0x000
  rjmp reset

.org OC2addr	; OCR2 Interrupt Vector Address
    rjmp hitvalue


  
reset:
   ;Stack wird bei Interrupts benötigt! 
   ldi r16,HIGH(RAMEND) 
   out SPH,r16 
   ldi r16,LOW(RAMEND) 
   out SPL,r16
ldi tmp,0b00000010
out TCCR0,tmp

ldi tmp,0b00100000
out DDRC,tmp
ldi tmp,0b01010101
out DDRD,tmp
ldi tmp,0b011000000
out ADMUX,tmp
ldi tmp,30
out OCR2,tmp

nop 
nop 
nop


sei
main:

ldi kanal,0b01100000
out ADMUX,kanal
ldi tmp,0b11000101    ;PRESCALER 32
out ADCSRA,tmp
kanal0:
in tmp,ADCSRA
sbrs tmp,4
rjmp kanal0
in k0,ADCH



ldi kanal,0b01100001
out ADMUX,kanal
ldi tmp,0b11000101    ;PRESCALER 32
out ADCSRA,tmp
kanal1:
in tmp,ADCSRA
sbrs tmp,4
rjmp kanal1
in k1,ADCH



ldi kanal,0b01100010
out ADMUX,kanal
ldi tmp,0b11000101    ;PRESCALER 32
out ADCSRA,tmp
kanal2:
in tmp,ADCSRA
sbrs tmp,4
rjmp kanal2
in k2,ADCH


ldi kanal,0b01100011
out ADMUX,kanal
ldi tmp,0b11000101    ;PRESCALER 32
out ADCSRA,tmp
kanal3:
in tmp,ADCSRA
sbrs tmp,4
rjmp kanal3
in k3,ADCH


ldi tmp,0
out TCNT0,tmp

;_________________18ms Pause_____________-
waita:
   in tmp,TCNT0
   cpi tmp,252
   brlo waita
   ldi tmp,0
   out TCNT0,tmp
   inc r26
   cpi r26,74
brlo waita
;________________________________________-


ldi tmp,0b00001001 ;RPESCALER 1
out TCCR2,tmp

ldi tmp,0
out TCNT2,tmp



ldi tmp,0b01010101
out PORTD,tmp
ldi tmp,0b10000000  
out TIMSK,tmp
ldi zyclus,0
ldi r26,0

;*******************1ms Offset*****************
warten1:
cpi zyclus,250
breq wigger

rjmp warten1
wigger:
;**********************************************

sbi PORTC,5
ldi zyclus,0
out TCNT2,zyclus
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ldi pause,1

pulse:
   
in tmp,PORTD
   cpi tmp,0
brne pulse

warten:
cpi zyclus,249
brsh ende
rjmp warten
ende:
cbi PORTC,5

ldi zyclus,0
out TCCR2,zyclus
ldi pause,0
ldi kanal,0b01100000
out ADMUX,kanal
rjmp main




;**********************************
;speichert den ADC Wert in die 
;Vektoradresse und schaltet auf den 
;nächsten ADC Kanal
;**********************************


hitvalue:
cpi pause,0
breq null

cp zyclus,k0
brne ka
cbi PORTD,0
ka:

cp zyclus,k1
brne kb
cbi PORTD,2
kb:

cp zyclus,k2
brne kc
cbi PORTD,4
kc:

cp zyclus,k3
brne kd
cbi PORTD,6

kd:

null:
inc zyclus
reti
The Man