Hallo, ich möchte ein PWM Signal mit einem Atmega644 erzeugen.
Mit Hilfe ISR1 und OCR1A möchte ich die Periodendauer und die
ON(OFF)Zeit ändern.
Wenn ich Programm laufen lasse, wird Fast PWM, 10-bit erzeugt,
Die ISR1 und OCR1A Einstellungen haben keine Wirkung.
Was mache ich falsch?
Kann mir da jemand helfen?
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 |
|
4 | int main(void)
|
5 | {
|
6 | // OC1A auf Ausgang
|
7 | DDRD =(1<<PD5);
|
8 | // Ausgang definiert auf null setzen
|
9 | PORTD = 0x00;
|
10 | /* Fast PWM, Top von ICR1
|
11 | Mode 14: WGM13 WGM12 WGM11 WGM10
|
12 | 1 1 1 0
|
13 | Timer1 Vorteiler clk/1024
|
14 | CS12 CS11 CS10
|
15 | 1 0 1
|
16 | Steuerung des Ausgangsport:set OC1A at BOOTTOM,
|
17 | clear OC1A on Compare Match (non-inverting mode)
|
18 | COM1A1 COM1A0
|
19 | 1 0
|
20 | */
|
21 | TCCR1A = (1<<COM1A1)|(1<<WGM11);
|
22 | TCCR1B = (1<<CS12)|(1<<CS10)|(1<<WGM13)|(1<<WGM12);
|
23 |
|
24 | /*den Endwert (TOP) für den Zähler setzen und
|
25 | der Zähler zählt bis zu diesem Wert
|
26 | */
|
27 |
|
28 | ICR1H = 0x03;
|
29 | ICR1L = 0xE8; //1000
|
30 | /*der Compare Wert. Wenn der Zähler diesen Wert erreicht wird mit
|
31 | obiger Konfiguration der OC1A Ausgang abgeschaltet. Sobald der Zähler
|
32 | wieder auf 1 gesetzt. Durch Verändern dieses Wertes, werden die
|
33 | unterschiedlichen PWM Werte eingestellt.
|
34 | */
|
35 |
|
36 | OCR1AH = 0x00;
|
37 | OCR1AL = 0xC8; //200
|
38 | TIMSK1 = (1<<OCIE1A);
|
39 | sei();
|
40 |
|
41 | while(1){}
|
42 | return 1;
|
43 |
|
44 | }
|