Hallo liebe Mikrocontroller-Community,
ich stehe noch relativ am Anfang im Umgang mit Mikrocontrollern.
Aktuell versuche ich PWM auf einem ATTiny441 zu nutzen. Durch
Datenblatt, Ausprobieren und Google bin ich nun an einem Punkt, an dem
mein Vorhaben fast funktioniert, aber eben nur fast :D
Hier der Code (Nochmal in Schön im Anhang):
#define F_CPU 16000000UL
#include <avr/io.h>
int main(void)
{
// Pin direction setup (PA2, PA5, PA7, PB2 as output pins)
DDRA = 0b10100100;
DDRB = 0b00000100;
// Timer 1: Fast-pwm mode 14, non-inverting mode, prescale 8
TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << WGM11);
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11);
// Timer 2: Fast-pwm mode 14, non-inverting mode
TCCR2A = (1 << COM2A1) | (1 << COM2B1) | (1 << WGM21);
TCCR2B = (1 << WGM23) | (1 << WGM22) | (1 << CS21);
// Pin routing:
// PA2 - TOCC1 - OC0A
// PA5 - TOCC4 - OC0B
// PA7 - TOCC6 - OC1B
// PB2 - TOCC7 - OC1A
TOCPMSA1 = (1 << TOCC7S0) | (1 << TOCC6S0);
// Enable pwm-pins
TOCPMCOE = (1 << TOCC7OE) | (1 << TOCC6OE) | (1 << TOCC4OE) | (1 <<
TOCC1OE);
// Define top values (2500)
ICR1 = 5000 - 2;
ICR2 = 5000 - 2;
// Compare values
OCR1A = 2500;
OCR1B = 1250;
OCR2A = 2500;
OCR2B = 1250;
while (1)
{
}
}
1. An den Pins PA7 und PB2 liegt das gewünschte Signal an, an PA2 und
PA5 will das ganze nicht so recht. Hättet ihr einen Tipp, wo der Fehler
liegen könnte?
2. Wenn ich mein Oszi an einen der PWM-Pins hänge, ist ein
Spannungsüberschuss von ca. 1V an der steigenden Flanke einer Schwingung
zu beobachten (siehe Bild im Anhang). Lässt sich dies beheben?
Vielen Dank euch schonmal ;)