Moebius
08.11.2010, 20:07
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.
#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
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.
#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