Hallo in die Runde,
ich bin schon längere Zeit stiller Mitleser, jetzt habe ich auch mal
eine konkrete Frage/ ein konkretes Problem:
Bei Versuchen mit einem ATTiny85 versuche ich zu Zeit, PWM zum laufen zu
bringen.
Ich habe Timer 1 auf ~3,9 kHz gesetzt:
cli();
TCCR1 = TCCR1 & 0b11110000 | ((0 << CS13) | (1 << CS12) | (0 << CS11)
| (0 << CS10));
sei();
Nun setzte ich folgend PB4 auf 127 (ca. 50/50 an/aus)
// connect pwm to pin on timer 1, channel B
pinMode(4, OUTPUT);
sbi(GTCCR, COM1B1);
OCR1B = 127; // set pwm duty
Das funktioniert. Ebenso, wenn ich Timer 0 (mit seinen weiterhin 490 Hz)
an PB1 hänge:
pinMode(1, OUTPUT);
sbi(TCCR0A, COM0B1);
OCR0B = 127; // set pwm duty
Das funktioniert auch. Jedoch hätte ich am PB1 lieber den Timer 1
genutzt, diese alternative Belegung ist ja im Datenblatt erläutert.
Entsprechend habe ich folgenden Code:
pinMode(1, OUTPUT);
sbi(TCCR1, COM1A1);
OCR1A = 127; // set pwm duty
Das funktioniert aber nicht. Habt ihr eine Idee warum? Möglicherweise
habe ich noch etwas vergessen.
Danke im Voraus
S. Landolt schrieb:> in C:#include <avr/io.h>> int main(void)> {> TCCR1 = (1<<CTC1)|(1<<PWM1A)|(1<<COM1A0) |(1<<CS12);> DDRB = (1<<PB1);> OCR1A = 127;> while (1)> {> }> }
Mein letzter Beitrag bezog sich auf den vorletzten von Ihnen. Danke, ich
werde das testen und morgen Feedback geben.
Noch ergänzend: bei CTC müsste eigentlich OCR1C zugewiesen werden (um
die Frequenz der PWM einzustellen; folglich größer als OCR1A); dass es
hier trotzdem funktioniert, liegt daran, dass bei Reset OCR1C=255 (0xFF)
gesetzt ist.
Einen schönen guten Morgen,
danke S. Landolt, es funktioniert jetzt. Parallel habe ich den Timer 1B
auch so angepasst, der lief zwar vorher schon, aber jetzt ist es
einheitlich.
Programm jetzt (Arduino IDE):