1 | //limit counter for 12,5kHz
|
2 | if (counter==8)
|
3 | counter=0;
|
4 |
|
5 | if (counter<=1)
|
6 | PORTC|=(1<<PC0);
|
7 |
|
8 | if (counter>1)
|
9 | PORTC&=~(1<<PC0);
|
Beim Programmieren ist es oft auch hilfreich, sich nicht nur auf
Intuition zu verlassen, sondern sich auch eine Zeichnung zu machen
1 | //limit counter for 12,5kHz
|
2 | if (counter==8)
|
3 | counter=0;
|
Der Counter zählt also ständig 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4
In welchen Perioden davon schaltest du den Ausgang auf 1 und wann auf 0
1 | if (counter<=1)
|
2 | PORTC|=(1<<PC0);
|
3 |
|
4 | if (counter>1)
|
5 | PORTC&=~(1<<PC0);
|
Mal sehen
Conter 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1,
Ausgang 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
Zähl nach. Das ist ein 2:6 Verhältnis und kein 1:7
Und dann noch
1 | if (counter<=1)
|
2 | PORTC|=(1<<PC0);
|
3 |
|
4 | if (counter>1) // na was soll er denn sonst sein?
|
5 | // wenn counter NICHT kleiner gleich 1 ist, dann
|
6 | // muss er größer als 1 sein
|
7 | PORTC&=~(1<<PC0);
|
->
1 | if (counter < 1)
|
2 | PORTC|=(1<<PC0);
|
3 | else
|
4 | PORTC&=~(1<<PC0);
|
Das geht erstens schneller und verhindert zweitens einen Fehler, wenn du
das Länge des Highpulses anpasst. Der Highpuls wird nur noch an 1 Stelle
eingestellt und nicht an 2, was die Gefahr eines Fehlers bei einer
Änderung drastisch verringert.