PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM Frage



Martin.
21.07.2008, 17:13
Ich hab ein kleines Problem, da bei meinem Atmega32 der OCR1B kanal nichts ausgibt. Den Chip hab ich schon mit nem BASCOM Programm getestet. Er funktioniert wunderbar. Der Fehler liegt mal wieder an meinem Progam. Da dieses ziemlich umfangreich ist, hab ichs mal aufs notwendige reduziert. Auch hier gehts noch nicht. Bei OCR1A kommt das PWM Signal (soll übrigens ein Signal mit Clock / 1024 und 10bit sein, keine FAST PWM sondern die normale Standard) Im datenblatt ist es der Modus #3 (auf Seite 109). Also wer kann mir sagen, warum sich bei PinD4 nichts tut!

Vielen Dank schonmal im Voraus!!!



DDRD = (1 << PD4);
DDRD = (1 << PD5);
TCCR1A = (1<<COM1B1)|(1<<COM1A1)|(1<<WGM11)|(1<<WGM10);
TCCR1B = (1<<CS12)|(1<<CS10);
OCR1A = 50;
OCR1B = 50;
while (1) { ; }
return 0;

oberallgeier
21.07.2008, 17:30
Muss da nicht irgendwo TIMSK bedient werden?

sternst
21.07.2008, 17:37
Also wer kann mir sagen, warum sich bei PinD4 nichts tut!
Weil du den Pin als Eingang definiert hast.
Denk mal über diese beiden Codezeilen ein wenig nach:
DDRD = (1 << PD4);
DDRD = (1 << PD5);

Martin.
21.07.2008, 17:46
Vielen Dank! Da hat sich auf mikrokontroller.net Tutorial ein fehler eingeschlichen

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#PWM_.28Pulsweitenmodulation.29

sternst
21.07.2008, 18:33
Da hat sich auf mikrokontroller.net Tutorial ein fehler eingeschlichen
Wo denn, ich sehe da auf die Schnelle keinen.
Oder meinst du etwa die Zeile "DDRB = (1 << PB1 );"?
Die ist doch richtig.

kater
22.07.2008, 06:11
Es ist das richtig:

DDRD = (1 << PD4);
DDRD |= (1 << PD5);

oder besser:

DDRD |= (1 << PD4) | (1 << PD5);

Martin.
22.07.2008, 16:01
Ach jetzt fällts mir wie schuppen von den Augen! Dankeschön!