Forum: Compiler & IDEs PWM Signal mit einem Atmega644


von Wladimir G. (grom)


Lesenswert?

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
}

von Karl H. (kbuchegg)


Lesenswert?

TIMSK1 = (1<<OCIE1A);


Du gibst einen Interrupt frei, hast aber keine ISR dafür.
Ein absolutes No-No.

von Wladimir G. (grom)


Lesenswert?

Danke! Ich habe es korrigiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.