Hallo,
Ich möchte mit dem Mega 8 den 16-Bit Timer verwenden, um am Port LEDs blinken zu lassen um später mehr mit dem Code zu machen.
Sieht bei meinem bisherigen Code zufällig jemand auf einen Blick was da noch fehlt oder was falsch ist? Ich möchte einen stinknormalen Overflow haben und keinen PWM- und kein Comparemist. Einfach einen stinknormalen Timer der überläuft und eine Interruptroutine auslöst, welche vorerst nur die Bits invertiert. Das funktioniert mit unten aufgeführten Code nicht.
viele Grüße, Markus
PS: Und ja ich habe schon im Datenblatt alles bei den Timern durchgelesen. Damit komme ich aber nicht weiter.
#define F_CPU 8000000UL
#include #include #include
// ab avr-libc Version 1.2.0 möglich und empfohlen: #include // veraltet: #include
ISR( TIMER1_OVF_vect ) { PORTD ^= 0xFF; //PORTD = ~PORTD; }
int main (void) {
//Portkonfiguration
DDRD = 0b11111111; // Datenrichtung des Ports Bit im Register gesetzt //76543210 // (1) für Ausgang, Bit gelöscht // (0) für Eingang. Als Ausgang 0=GND 1=VCC
PORTD = 0b11101010; // Ausgang einiger Bits wird auf Masse gezogen (LED's eingeschaltet)
//16 Bit Timer // Die Bits: COM1a1 COM1a0 NA NA NA NA PWM11 PWM10 TCCR1A = 0b00000000; //PWM11 und PWM10 = 0 => PWM-Betriebsart nicht aktiviert - Timer1 arbeitet als normaler Timer/Zähler //COM1a1 und COM1a0 = 0 => OC1 wird nicht angesteuert
// Die Bits: ICNC1 ICES1 NA NA CTC1 CS12 CS11 CS10 // CTC1 CS12 CS11 // 0 0 0 angehalten // 0 0 1 CPU-Takt // 0 1 0 1/8 // 0 1 1 1/64 // 1 0 0 1/256 // 1 0 1 1/1024 TCCR1B = 0b00000001;
// Die Bits: TOIE1 OCIE1A NA NA TICIE NA TOIE0 NA TIMSK = 0b10000000; //TOIE1 = 1 => Timer Overflow 1 Interrupt wird ausgelöst
sei(); //Interrupts aktivieren
while(1) { //Hier später in Sleepmodus setzen so dass Interrupts aufwecken }
/* wird nie erreicht */ return 0; }