> void timer_init(void)
> {
>
> sei();
einen sei macht man erst dann, wenn alles fertig eingerichtet ist.
Also alle Hardwarekomponenten sind konfiguriert, alle Variablen haben
ihre initialien Werte. Am besten kommt der sei in main() und zwar als
letzte Anweisung vor die obligate Hauptschleife
> SREG |= 0b10000000;
Das SREG lässt du mal schön in Ruhe. Dieses Register geht dich nichts
an. Darum kümmert sich der Compiler bzw die Funktionen sei() und cli()
> TCCR0A |= ((1<<COM0A1) | (1<<COM0A0) | (1<<COM0B1) | (1<<COM0B0) |
(1<<WGM01) | (1<<WGM00)); //COM0A1 COM0A0 COM0B1 COM0B0 WGM01 WGM00
Schau: Der Kommentar hier bringt dir genau gar nichts.
Was ist an dieser Stelle für den Leser des Codes interessant:
Welcher Modus wird am Timer eingestellt und wie schnell soll der Timer
laufen. Auch was du mit den Ausgangspins vor hast. Sollen die vom Timer
geschaltet werden? Wenn ja wie?
Das sollst du kommentieren.
Wenn du ganz lieb bist, dann schreibst du eventuell noch im Kommentar
dazu, aufgrund welcher Tabelle im Datenblatt (Seitenangabe) du die
Einstellung gemacht hast. Dann kann jemand anderer (oder du) das
schneller verifizieren, ob du da irgendwo einen Fehler gemacht hast.
> TCCR0B |= ((0<<WGM02) | (1<<CS02) | (1<<CS01) | (1<<CS00)); //FOC0A FOC0B
WGM02 CS02 CS01 CS00 letzten drei Bits für den Teiler
> TIFR0 |= ((1<<OCF0B) | (1<<OCF0A) | (1<<TOV0));
kann man machen. muss man aber nicht. In deinem speziellen Fall sind
keine INterrupts beteiligt. Der Timer erzeugt die PWM ganz von alleine.
Man muss ihm da nicht mit einem Interrupt unter die Arme greifen.
>Y TIMSK0 |= ((1<<OCIE0B) | (1<<OCIE0A) | (1<<TOIE0));
No. Man gibt keine Interrupts frei, für die man keine Handler-Funktion
hat. Niemals!
Du brauchst ausserdem keine Interrupts. Der Timer erzeugt die PWM ganz
alleine. Völlig ohne Hilfe einer Interrupt-Funktion.
> }
> void timer_interrupt(void)
So geht das nicht. Du kannst nicht einfach eine Funktion hernehmen und
glauben, die würde Interrupts behandeln. Eine Interrupt Funktion muss
einen speziellen Aufbau/Namen haben.
Aber wie gesagt: Du brauchst sie gar nicht.
AVR-GCC-Tutorial