Hallo liebe Experten,
Ich möchte mit einem ATMEGA88A ein Rechtecksignal mit 50% Duty-Cycle und
einer variablen Frequenz von 50kHz bis 220kHz mit zwei Ausgängen A und
!A ( also ein 0° Signal und eins invertiert ) erzeugen. Die Frequenz
soll in kleinen Schritten ( ca. 1kHz ) änderbar sein.
Dazu habe ich den Timer0 in CTC mode laufen, die Ausgänge OC0A und OC0B
auf Toggle gestellt und kann mir mit OCR0A = OCR0B = Wert die
gewünschte Frequenz einstellen.
Jedoch scheitere ich daran, dass ich die Ausgänge nicht invertiert
zueinander einstellen kann. Ein vorheriges Setzen des Port auf 1, dann
die Datenrichtung auf Ausgang hat nicht geholfen. Im FastPWM ist eine
invertierte Ausgabe natürlich möglich, jedoch kann ich hier nicht die
Frequenz änderbar machen.
Gibt es doch eine Möglichkeit im CTC mode die Ausgänge invertiert
zueinander einzustellen? Oder gibt es eine andere Möglichkeit meine
Signale mit dem ATMEGA88A zu erzeugen?
Vielen Dank für Tips und Tricks :-)
Karsten
1 | int
|
2 | main(void) {
|
3 |
|
4 | PORTD |= (1 << PD5);
|
5 | DDRD |= (1 << PD6) | (1 << PD5);
|
6 |
|
7 | // Init 8 Bit Timer0 COMP CTC mode every 62.5ns on 16.000000 MHZ
|
8 | TCCR0A = (1 << WGM01) | (1 << COM0A0) | (1 << COM0B0);
|
9 | TCCR0B |= (1 <<CS00); // No prescaling tic is 62.5ns
|
10 | OCR0A = 100;
|
11 | OCR0B = 100;
|
12 |
|
13 |
|
14 | while(1);
|
15 |
|
16 | return(0);
|
17 |
|
18 | }
|