hallo Ich bin Anfängerin und beschäftige mich erst seit einigen Wochen mit dem Thema µC.Ich habe mir auch schon das Tutorial über den Timer/Counter durchgelesen und bin mir nicht sicher ob ich es auch verstanden hab. Ich hab auch schon ein kleines LED-Blicklicht hingekriegt nun wollte ich eine LED einfach nur 5s lang leuchten lassen :( Ich hoffe ihr könnt mir helfen: #include <avr/io.h> #include <avr/interrupt.h> unsigned char t= 5; int main(void) { DDRC|= (1<<PC5); TCCR1B|= (1<<WGM12); TIMSK|= (1<<OCIE1A); sei(); OCR1A = 15624; TCCR1B|= (1<<CS10)|(1<<CS11); for(;;) { } } ISR(TIMER1_COMPA_vect) { t--; if(t==5) { counter= 0; PORTC^= (1<<PC5); } }
Hallo. Was funktioniert denn nicht? daniela schrieb: > unsigned char t= 5; mach mal ein "volatile unsigned char" daraus, weil in der Interruptroutine t verändert wird. Siehe AVR-GCC-Tutorial. daniela schrieb: > ISR(TIMER1_COMPA_vect) > { > t--; > if(t==5) > { > counter= 0; > PORTC^= (1<<PC5); > > } > } Problem2: die Variable t wird nur ein einziges mal bei Programmstart auf 5 gesetzt. Ich würde vorschlagen:
1 | ISR(TIMER1_COMPA_vect) |
2 | {
|
3 | t--; |
4 | |
5 | if(t==0) |
6 | {
|
7 | t = 5; |
8 | PORTC ^= (1<<PC5); |
9 | }
|
10 | }
|
Die Timer-Initialisierung hab ich jetzt nicht auf Korrektheit überprüft. mfg mf
naja ich wollt eigentlich eine LED 5Min lang leuchten lassen und habe als Muster diese 5sekunden gewählt. Nun warte ich 5sekuden und dann geht die LED erst an aber die LED soll gleich an gehen und 5 Sekunden lang leuchten :( Ich habs abgeändert es funktioniert auch danke aber troztdem müsste ich dann 5min warten bis die LED in den Rhythmus kommt. #include <avr/io.h> #include <avr/interrupt.h> volatile unsigned char t= 5; int main(void) { DDRC|= (1<<PC5); TCCR1B|= (1<<WGM12); TIMSK|= (1<<OCIE1A); sei(); OCR1A = 15624; TCCR1B|= (1<<CS10)|(1<<CS11); for(;;) { } } ISR(TIMER1_COMPA_vect) { t--; if(t==0) { t = 5; PORTC^= (1<<PC5); } }
daniela schrieb: > naja ich wollt eigentlich eine LED 5Min lang leuchten lassen und habe > als Muster diese 5sekunden gewählt. Nun warte ich 5sekuden und dann > geht die LED erst an aber die LED soll gleich an gehen und 5 Sekunden > lang leuchten :( Warum schaltest du sie dann nicht einfach gleich ein? Also vor deiner Endlosschleife ein
1 | PORTC |= (1<<PC5); |
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.