Hallo erstmal. Ich habe ein Problem mit meinem Atmega 8L. Ich habe alle Parameter eingestellt für den 8 Bit Timer/Counter0, aber die angeschlossene Leuchtdiode will nicht angehen. Ich verwende den internen clock und noch nicht einen Quarz. Oder liegt es vielleicht daran? Richtig angeschlossen ist alles an dem Atmega 8L. Hier erstmal das Programm: #include <stdint.h> #include <stdlib.h> #include <avr/eeprom.h> #include <avr/interrupt.h> #include <avr/io.h> #include <avr/pgmspace.h> #include <avr/sleep.h> #include <avr/wdt.h> int main (void) { DDRC=1; //Daten Direction Register->PCO als Ausgang Schalten TCCR0=00000101; //Prescaler einstellen-> Division von 1024 TIMSK=1; //Interrupt für Overflow counter aktiviert TCNT0=0; //counter auf 0 setzen PORTC=1; //PC0 auf 1 setzen->Diode aus sei(); //Atkivierung des Global Interrupt while(1); //unendlichschleife return 0; } ISR(TIMER0_OVF_vec) //ISR von 8 Bit Timer/Counter0 { PORTC=0; //PCO-> wird zu null->LED sollte angehen }
Hab dies noch geändert, aber es läuft immer noch nicht TCCR0=00000101; ->TCCR0=0b00000101;
#include <avr/interrupt.h> #include <avr/io.h> Die Reihenfolge der #includes ist nicht egal - pack mal das #include <avr/io.h> ganz nach oben. Da sind die prozessorabhängige Defines drin, die in anderen headern gebraucht werden. Oliver
hab ich gemacht. geht nicht. hab mich übrigens oben mit dem Kommentaren vertan, mit der Led-> das muss natürlich andersrum sein
Klär bitte erst einmal, ob die LED nun bei 1 oder 0 leuchtet, und ob sie überhaupt irgendwann mal leuchtet. Beim STK500 beispielsweise leuchten die Dinger bei 0.
PS: Was sinnvoll sein kann: PORTC ^= 1 im Interrupt, dann blinkt die LED. Wenn der Mega8 wie ab Werk mit 1MHz arbeitet, dann kann man das noch sehen.
sie leuchtet bei 0. übrigens ich benutze kamavr und ponyprog um die hex rüberzuschieben. Der Compiler zeigt ab und an eine Warnmeldung an: TIMER0_OVF_vec appears to be misspelled signal handler
Ist jetzt wengstens die Meldung weg? Gibt's noch andere "unwichtige" Meldungen?
So hab das Programm mal berichtigt und die anderen includes auch mal weggemissen, aber geht so immer noch nicht #include <avr/io.h> #include <avr/interrupt.h> int main (void) { DDRC=1; //Daten Direction Register->PCO als Ausgang Schalten TCCR0=0b00000101; //Prescaler einstellen-> Division von 1024 TIMSK=1; //Interrupt für Overflow counter aktiviert TCNT0=0; //counter auf 0 setzen PORTC=0; //PC0 auf 1 setzen->Diode an sei(); //Atkivierung des Global Interrupt while(1); //unendlichschleife return 0; } ISR(TIMER0_OVF_vect) //ISR von 8 Bit Timer/Counter0 { PORTC=1; //PCO-> wird zu null->LED sollte aus gehen }
na ja, aber Simulator ist halt nicht die Realität. ich kann es mir beim besten willen nicht erklären. Die led leuchtet vor sich hin, aber aus geht sie nicht. Hab die led an einen 100 ohm widerstand gehängt.
So hab jetzt das Programm mal geändert und so geht die led aus. Das heisst, der counter zählt auf jeden fall, aber ich komme nicht in die ISR #include <avr/io.h> #include <avr/interrupt.h> int main (void) { DDRC=1; //Daten Direction Register->PCO als Ausgang Schalten TCCR0=0b00000101; //Prescaler einstellen-> Division von 1024 TIMSK=1; //Interrupt für Overflow counter aktiviert TCNT0=0; //counter auf 0 setzen PORTC=0; //PC0 auf 1 setzen->Diode an sei(); //Atkivierung des Global Interrupt while(1) //unendlichschleife { if(TCNT0==255) PORTC=1; } return 0; } ISR(TIMER0_OVF_vect) //ISR von 8 Bit Timer/Counter0 { PORTC=1; //PCO-> wird zu null->LED sollte aus gehen }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.