Hallo zusammen... Ich hoffe, dass ihr mir helfen könnt. Und zwar möchte ich mit dem Atmega8 in C eine Interrupt Routine schreiben. Ich nutze dazu WINAVR. Frage: 1) Wie kann ich meinem C Code mitteilen, dass der Überlauf stattgefunden hat ? Ich glaube ja mit ner Interrupt Routine, aber wie wird sie aufgerufen ? 2) Wie muss mein Programm aussehen, welche Header Dateien brauche ich ? 3)Muss ich noch einen Prototypen definieren ? void main (void) { ... TIMSK |= _BV(TOIE1); //aktivieren des Überlaufinterrupts von Timer1 TCCR1B = _BV(CS12) | _BV(CS10); //Prescaler definieren(aus Datenblatt: 101 cs12,cs11,cs10) = 1024 Prescaler TCNT1 = 55771; //Zählregister vorladen für 10sek. sei (); //Interrupts global zulassen. } // so hier soll jetzt eine Interrupt Routine stehen, diese Lösung habe ich hier aus dem Forum... heißt das jetzt, wenn meine 10 sek. abgelaufen sind, wird dieses Programm aufgerufen ??????? was sollte ich an meinem Code ändern ? danke für die Hilfe interrupt [TIM0_OVF] void timer0_int(void) // { // hier dein Code }
ok...habs mal versucht...sagt mir bitte ob das so richtig ist... 1) sind die header Dateien vollständig dafür ? 2) Ist das define richtig ? mit dem vector 9 ? 3) würde das programm so laufen ? //------------------------------------------------------------- #define TIMER1_OVF_vect _VECTOR(9) //siehe Datenblatt S.44 #define SIG_OVERFLOW1 _VECTOR(9) // Timer Interrupt Routine (ISR) , wird ausgeführt, wenn der Timer überläuft !!????? ISR(TIMER1_OVF_vect) /* veraltet: SIGNAL(SIG_OVERFLOW0) */ { /* Interrupt Code */ } #include <stdlib.h> #include <stdio.h> #include <avr/io.h> #include <avr/iom8.h> #include <avr/interrupt.h> #include <inttypes.h> #ifndef F_CPU #define F_CPU 1000000UL /* Quarz mit 1 Mhz */ #endif #include <util/delay.h> int main (void) { ... TIMSK |= _BV(TOIE1); TCCR1B = _BV(CS12) | _BV(CS10); TCNT1 = 55771; //Zählregister vorladen für 10sek. sei (); //Interrupts global zulassen }
1 | #define TIMER1_OVF_vect _VECTOR(9) //siehe Datenblatt
|
2 | S.44 |
3 | #define SIG_OVERFLOW1 _VECTOR(9)
|
brauchst du nicht. Darum kümmert sich die iom8.h. Und die iom8-h musst du auch nicht manuell includen. Darum kümmert sich die io.h.
Wenn der AVRTyp im Makefile angegeben wird brauchst Du nur die io.h einbinden. Dadurch, das du die interrupt.h einbindest brauchst du den vector nicht selber setzten. sollte eigentlich auch ne warnung geben, oder?
ok..danke für eure antworten... ja tatsächlich gabe es eine warnung.... habe die define´s gelöscht.... kann ich den code denn so verwenden ? ist er so richtig ? vielen dank
1) Lade den Code ins AVR Studio und simuliere ihn. Tip: Prescaler auf kleinere Werte als 1024 setzen. Sonst wartest du dir einen Ast ab. 2) Lade den Code in den Prozessor und probiere ihn aus. Da du Neuling bist empfehle ich dir, dich mit Variante 1) auseinander zu setzen. Du Simulation im AVR-Studio ist dein Freund und du wirst noch viele Stunden mit dem Debugger im AVR-Studio verbringen. Also fang besser gleich damit an, dich mit ihm zu beschäftigen.
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.