Hi,
ich habe meine ersten Versuche einer PWM gemacht. Es scheint zu funktionieren. Ändere ich z.B. den Vergleichswert, so werden meine Rechtecksignale größer bzw. kleiner.
Code:
#include <avr/io.h> // Namen der IO Register
#include <util/delay.h> // Funktionen zum warten
// Achtung, damit delay richtig funktioniert muß mit Optimierung compiliert werden
int main(void)
{
DDRC = (1 << 0); // Nur PC0 als output, _BV(0) = (1<<0) = 1
PORTC = 0b11111110; // Pullups auf allen anderen Pins
DDRD = (1 << 5);
TCCR1A = (1<<COM1A1) | (1<<COM1A0) | (1<<WGM11);
TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10) | (1<<CS10);
ICR1 = 0x8FFF;
OCR1A = 0x1FFF;
while (1)
{
PORTC &= 0b11111110; // 0 auf Bit 0 Ausgeben, Rest so lassen
_delay_ms(10); // 100 ms Warten
PORTC |= 0b00000001; // 1 auf Bit 0 Ausgeben, Rest so lassen
_delay_ms(10);
}
}
Insgesamt erscheint mir das Signal aber ziemlich verrauscht. Was sagt ihr dazu? (Bild am Anhang)
Mfg Moebius
Lesezeichen