wie gesat, in C für Controler bin ich net ganz fit und kann nur erahnen was da passiert.

Bei mir ist jeder Poti an einem ADC Pin von 0 bis 3 verunden (logisch).
Die werden in der langen LOW Phase gewandelt und in den Ramadressen 108 - 111 abgelegt.
Jetzt muss ja nicht der Wert vom Pin 0 bis 3 zunehemen - kann ja auch wild durcheinander sein. Also sortier ich sie.
Dabei kommt in die Adresse 100 der kleinste und in 101 der zu dem Wert gehörige Kanal. Diesen kann ich aus der Höhe der Ramadresse ableiten, wo ich den kleinsten Wert gefunden habe. Dann wird diese Adresse mit 255 überschrieben, denn aufgrund meiner Schaltung kann der ADC höchstens 250 sein.
Das passiert dann bis Adresse 107. Wert - Kanal - Wert - Kanal - Wert - Kanal - Wert - Kanal -
Jetzt muss ich schauen, ob es selbe Werte gibt.
Ich lade also den kleinsten Wert und vergleiche ihn mit dem nächsten. Ist er gleich addiere ich noch die Kanäle - die sollen ja dann auch zur selben Zeit ausgeschaltet werden. Diese landen in den Adressen 108 - 115

Nun kommt ein HIGH mit dem Offset 1ms und danach fange ich an die Adressen 108 bis 115 zu laden. Das dauert solange, bis alle PINs LOW sind.
Hier mal der Ker des Programmes, im Simulator des AVR Studio sieht man an den Registern 0 bis 15 ganz gut, was ich meine:
Code:
.include "m8def.inc"

.def tmp = r16
.def lowe = r17
.def lowz = r18
.def highe = r19
.def merker = r20
.def konst = r21
.def pin = r22

.def xlow = r26
.def xhigh = r27
.def ylow = r28
.def yhigh = r29
.def zlow = r30
.def zhigh = r31

ldi xlow,108
ldi lowe,20 ;PIN0 => WENN 1 => BYTEWERT = 1
st x+,lowe
ldi lowe,30 ;PIN1 => WENN 1 => BYTEWERT = 2
st x+,lowe
ldi lowe,30 ;PIN2 => WENN 1 => BYTEWERT = 4
st x+,lowe
ldi lowe,10 ;PIN3 => WENN 1 => BYTEWERT = 8
st x,lowe

ldi konst,4

ldi xlow,100
ldi ylow,108 ;von 108 bis 111 (112)
add ylow,konst ;von 112 bis 116 
ldi tmp,1
st y+,tmp
ldi tmp,2
st y+,tmp
ldi tmp,4
st y+,tmp
ldi tmp,8
st y+,tmp
subi ylow,8
ldi zlow,108

ldi lowe,255


schleife2:

   schleife1:

      ld lowz,y
      cp lowe,lowz
      brlo istkleiner
      mov lowe,lowz
      mov zlow,ylow
      istkleiner:
      inc ylow

   cpi r28,112
   brlo schleife1
   add r30,konst  ;0b10000000 => Bereich 136 bis 139 
   ld merker,Z ;dort ist der PIN Wert gespeichert
   subi r30,4
   
   st x+,lowe
   st x+,merker
   ldi lowe,255
   
   st z,lowe
   ldi ylow,108
   ldi zlow,108

cpi xlow,108
brlo schleife2

ldi r26,100
ld r0,x+;100 zyclus 
ld r1,x+;101 pin
ld r2,x+;102
ld r3,x+;103
ld r4,x+;104
ld r5,x+;105
ld r6,x+;106
ld r7,x+;107
ldi r26,100
ldi r30,108
ldi tmp,0
sorten:

ld lowe,x+
st z+,lowe
ld pin,x+
add pin,tmp
mov tmp,pin
st z+,pin
ld lowz,x

cp lowz,lowe
brne diff
dec r30
dec r30
rjmp gleich
diff:
ldi tmp,0
gleich:
cpi r26,108
brne sorten

ldi r26,108
ld r8,x+;100 zyclus 
ld r9,x+;101 pin
ld r10,x+;102
ld r11,x+;103
ld r12,x+;104
ld r13,x+;105
ld r14,x+;106
ld r15,x+;107
nop 
nop 
nop