Duty Cycle?

Also hier der Code für die PWM:
ATMega128 @ 16Mhz
Code:
#define PORTASET(x)    PORTA |= (1<<x)
#define PORTACLR(x)     PORTA &= ~(1<<x)
#define PORTBSET(x)    PORTB |= (1<<x)
#define PORTBCLR(x)     PORTB &= ~(1<<x)

unsigned char richtung=1;
unsigned char wertA[8];
unsigned char wertB[8];
unsigned char max=100;
unsigned char zaehler=0;
unsigned char temp=0;

int main()
{
    sei();
    
    PORTA=0x00;
    DDRA=0xFF;
    PORTB=0x00;
    DDRB=0xFF;

    temp = max / 8;

    wertA[0] = temp * 1;
    wertA[1] = temp * 2;
    wertA[2] = temp * 3;
    wertA[3] = temp * 4;
    wertA[4] = temp * 5;
    wertA[5] = temp * 6;
    wertA[6] = temp * 7;
    wertA[7] = temp * 8;

    wertB[0] = temp * 1;
    wertB[1] = temp * 2;
    wertB[2] = temp * 3;
    wertB[3] = temp * 4;
    wertB[4] = temp * 5;
    wertB[5] = temp * 6;
    wertB[6] = temp * 7;
    wertB[7] = temp * 8;
    
    for(;;)
    {
        zaehler++;
        for(unsigned char i=0;i<8;i++)
        {
            if(zaehler == wertB[i])
            {
                PORTBCLR(i);
            }
            else if(zaehler == max)
            {
                PORTBSET(i);
            }
            if(zaehler == wertA[i])
            {
                PORTACLR(i);
            }
            else if(zaehler == max)
            {
                PORTASET(i);
            }
        }
        if(zaehler == max)
        {
            zaehler=0;
        }
    }
}
Treiber ist wie gesagt ULN2803
längere Leitungen hab ich nicht - hab das ganze mit 4 Krokokabeln verbunden.

Ich kann mir schon vorstellen, dass eine Induktivität besser wäre, jedoch habe ich ein Platzproblem - es sollten also nicht unbedingt Transformatoren oder ähnliche große Gebilde vorhanden sein.