PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM mit Atmega8



Kümi
29.05.2010, 17:03
Hallo,

ich möchte an meinem Atmega8 die PWM-Funktion für OC1B aktivieren.
Ich habe mir das hier durchgelesen: http://www.rn-wissen.de/index.php/Timer/Counter_%28Avr%29
Von da hab ich den Code auch größtenteils übernommen, nur einbisschen angepasst.
Hier mein Code:


int main (void)
{
int wert;


Init ();


while (1)
{
DDRB |= (1 << PB5);

DDRB |= (1 << PB4);

PORTB &= ~(1 << PB5);
PORTB |= (1 << PB4);

TCCR1B |= (1<<CS12);

TCCR1A |= (1<<WGM10);
TCCR1B |= (1<<WGM12);

TCCR1A |= (1<<COM1A1) | (1<<COM1B1);

OCR1A = 255;
OCR1B = 255;

DDRB |= (1 << PB2);

}

return 0;
}

Leider tut sich nichts wenn ich den Wert bei OCR1B ändere.
Kann mir jemand sagen was ich falsch gemacht habe?

Gruß Robin

syn_error
29.05.2010, 18:13
int main (void)
{
/------------------------
/ hardware initialisierung
/-------------------------
int wert;
Init ();

DDRB |= (1 << PB5); / port init
DDRB |= (1 << PB4);
PORTB &= ~(1 << PB5);
PORTB |= (1 << PB4);
TCCR1B |= (1<<CS12);
TCCR1A |= (1<<WGM10);
TCCR1B |= (1<<WGM12);
TCCR1A |= (1<<COM1A1) | (1<<COM1B1);
DDRB |= (1 << PB2);

/------------------------
/ programm schleife
/-------------------------
while (1)
{
delay_ms(1000); / pwm jede sekunde inkrementieren
OCR1A =OCR1A+1;
OCR1B = OCR1B+1;
}



return 0; /wird nie erreicht
}


ist schon länger her mit c aber der grund sollte passen ohne jetzt auf die richtige initialisierung der pwm hardware zu achten da ich kein bock auf datenblatt gereade hab.
wie gesagt programm bitte überprüfen da es eventuell nicht läuft da ich schon den c syntax nicht mehr draufhab nach so viel assembler. :)