Einfachste lösung, auch wenn ich von meine Nachposter erschlagen werde.
Du baust zwischen OCR1A und OCR1B folgendes ein:
Diese schleife macht im Grunde garnichts, außer den µC für ein kurzen
Moment zu beschäftigen. Dannach macht der µC einfach weiter im
Programm...
Vergiss nicht nach
folgende zeile:
in d kannst du ein Wert speichern bis wohin der µC erst zählen muss,
bevor er weiter macht... Kannst auch alternativ d weg lassen und den
Wert direkt hinschreiben.
wie schnell der µC gezählt hat, liegt an seine Frequenz.
(logischerweise)... daher kann man, wenn man die Frq. kennt, genau
bestimmen wie lange er warten soll.
Ach ja... warum ich gleich geschlagen werde:
Du beschäftiges den kompletten µC und der kann wärend der "sinnlosen"
Schleife nichts machen, außer i aufwärts zählen.
EDIT:
1 | #include <avr/io.h>
|
2 |
|
3 | int main()
|
4 | {
|
5 | DDRD = (1 << PD4) | (1 << PD5);
|
6 |
|
7 | TCCR1A = (1<<COM1A1) | (1<<WGM11) | (1<<COM1B1) |(1<<COM1A0);
|
8 | TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10);
|
9 |
|
10 | ICR1 = 9;
|
11 |
|
12 |
|
13 | OCR1A = 4;
|
14 | OCR1B = 4;
|
15 |
|
16 |
|
17 | while( 1 )
|
18 | ;
|
19 | }
|
^^ Irgend eine wichtige Komponente fehlt da noch...
ist zwar eine Schleife, aber du führst dein Programm außerhalb der
Schleife aus... der µC macht also dies nur einmal beim Start und
niewieder. Weiß ja nicht, was der µC genau um großen und ganzen machen
soll.
Soll er das nur einmal beim start machen?