dein Problem ist, dass du die Aus-zeit zwar immer verlängerst, aber die
An-Zeit nicht verkürzt. Deine Zykluszeit wird also immer größer.
dein Code sieht ziemlich unstrukturiert aus.
Ein Zyklus hat 2 Parameter:
- die Länge
- das Tastverhältnis
dieser Zyklus wird einfach mehrmals wiederholt, bis man irgendwann die
Parameter ändert.
1 | int anzahl_Zyklen_je_Wert = 5000:
|
2 | int dauer_Zyklus_gesamt_us = 1500;
|
3 |
|
4 | for( int dauer_an = 0; dauer_an < dauer_Zyklus_gesamt_us; ++i)
|
5 | {
|
6 | int dauer_aus = dauer_Zyklus_gesamt_us - dauer_an;
|
7 |
|
8 | for( int i=anzahl_Zyklen_je_Wert; i; --i)
|
9 | {
|
10 | PORTB = (1<<PB4);
|
11 | mydelay(dauer_an);
|
12 | PORTB &= ~ (1<<PB4);
|
13 | mydelay(dauer_aus);
|
14 | }
|
15 | }
|
mydelay muss ne schleife um _delay_us sein, da da nur konstante werte
reindürfen. Der schleifencode versaut natürlich das Timing massiv, da
eine µs nicht wirklich viel ist, im vergleich zu der schleife.
vielleicht sollte man also eine schleife über _delay_us(10) oder so
implentieren.
Das lässt aber auch offensichtlich werden, dass es nicht sinnvoll ist
eine PWM mittels delay zu bauen.