Guten Abend zusammen
Ich programmiere nun schon den ganzen Abend am Timer, doch aus unerklärlichen Gründen funktioniert das ganze nicht. Was ich machen will: Eine LED in (vorerst beliebigen Takt) blinken zu lassen.
Folgende ausgangslage: Atmega168, interne Frequenz (8 Mhz, ausser ich hätte die Fusebits falsch gesetzt, ich glaube aber nicht).
LED an PD2.
Zuerst habe ich versucht, es nach dem Wiki von Roboternetz (und auch noch anderen Tutorials) zu programmiere, da bekam ich aber immer die Meldung vom Compiler, er kenne TCCR nicht.
Also habe ich das Datenblatt zur Hand genommen und gesucht. Da habe ich andere Registernamen gefunden, mit denen funktioniert zwar das Compilieren, aber die LED bleibt auf AN.
Hier noch der Code. Ich nehme an, dass der Interrupt nicht (richtig) startet.Code:#include <avr/interrupt.h> #include <avr/io.h> #define F_CPU 8000000 volatile unsigned int counter0; ISR(SIG_OVERFLOW1) //ISR { counter0++; //counter erhöhen } void init_interrupts(void) //interrupt initialisieren { TCCR1B |= (1<<CS00); //prescaler auf 64 TCCR1B |= (1<<CS01); //prescaler sei(); TIMSK1 |= (1<<TOIE1); //interrupts starten } inline void sleepms(uint16_t msec) { uint16_t i; for(i=0; i<msec; i++) { sleep(100); } } inline void sleep (uint8_t t) { counter0 = 0; while (counter0 < t); } int main(void) { while(1) { DDRD |= (1<<PD2); PORTD |= (1<<PD2); //LED einschalten sleepms(1000); PORTD &= ~(1<<PD2); //LED ausschalten sleepms(1000); return 0; } }
Ach ja, ich arbeite mit avr-gcc (falls es noch andere avr-c-compiler gibt, wüsste ich jetzt gar nicht) und avrdude unter Linux.
Im voraus Danke, falls mir jemand helfen kann...
Gruss Dave
Lesezeichen