Hallo, ich versuche einen Interupt zu Starten. Kann mir jemand dabei helfen? #include <avr/io.h> #include <stdint.h> #include <util/delay.h> #include <avr/wdt.h> #include <avr/interrupt.h> #include <avr/iotn25.h> int8_t Takt; int Schreibe (int8_t Takt, int8_t Fehler1, int8_t Fehler2) { PORTB = (Takt << PB0) | (Fehler1 << PB3) | (Fehler2 << PB4); } ISR(TIMER0_OVF_vect) { if (Takt==1) { Takt=0; } else { Takt=1; } } int main(void) { sei(); wdt_enable (WDTO_2S); int8_t Fehler1; int8_t Fehler2; int8_t Schalter1; int8_t Schalter2; int8_t Ausgang1; int8_t Ausgang2; DDRB= (1 << DDB0) | (0 << DDB1) | (0 << DDB2) | (1 << DDB3) | (1 << DDB4) | (1 << DDB5); Fehler1=0; Fehler2=0; while(1) { wdt_reset(); Ausgang1=1; Ausgang2=1; Schalter1=PINB1; Schalter2=PINB2; Schreibe(Takt,Ausgang1,Ausgang2); return 0; } ich möchte dabei den Takt für die Lichtschranken vorgeben etwa 10 Hz(externe beschaltung).
Wie soll "ISR(TIMER0_OVF_vect)" ausgelöst werden wenn weder der Timer aktiv ist noch das entsprechende "Overflow Interrupt Enable" im TIMSK gesetzt ist??
Zu Return 0; Ich habe ein paar Zeilen auskomentiert. Return 0 mach dabei keine Probleme . Ich bin ein Anfänger. Wie kann ich den Timer und overflow aktivieren? Bzw. Was muss in das Programm eingefügt werden um Interrupt auszulösen. Gruß Eduard
Steht im Datenblatt wie du den Timer aktivierst. Unter Timer steht auch das TIMSK Register beschrieben
Eduard schrieb: > Bzw. Was muss in das Programm eingefügt werden um > Interrupt auszulösen. Wie wäre es denn mit dem vollständigen Programm als Anhang? mfg.
Für TIMSK habe ich folgende Infos. Adresse 0x39 Name TIMSK Bit 7 - Bit 6 OCIE1A Bit 5 OCIE1B Bit 4 OCIE0A Bit 3 OCIE0B Bit 2 TOIE1 Bit 1 TOIE0 Bit 0 - Was kann ich mit diesen Infos anfangen? PS. bei dem Programm fehlen nur ein paar Klammern am ende.
Junge, du sollst ins Datenblatt schauen. Wieso machst du das nicht? Kapitel 11.9 stehen die Register für Timer0 und deren Funktionen genau beschrieben
Und sogar für den Timer http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR
Eduard schrieb: > Was kann ich mit diesen Infos anfangen? Offenbar gar nichts. Eduard schrieb: > PS. bei dem Programm fehlen nur ein paar Klammern am ende. Bei dem Programm fehlt die Initialisierung des Timers. Bist du jetzt wirklich so naiv oder trollst du hier nur rum? Sonst siehe vorigen Post(Timmo). mfg.
Sorry, Ich programmiere in der Regel CodeSys, Step 7, und VBA. C++ habe ich Grundkentnisse. Das ist meine 1 Berührung mit Mikrocontroller. Deswegen stelle ich Fragen die für andere selbstverständlich sind. Bei mir geht es nur darum mit einem Takt PB0 zwei Gabellichtschranken Anzusteuern und falls auf PIN1 bzw. PIN2 keine Rückmeldung kommt Wird PB3 bzw. PB4 auf 1 geschaltet. Etwa so. If (Takt==1 and Schalter1==0) { Fehler1=1; } Else { Fehler1=0; }
Eduard schrieb: > Sorry, > > Ich programmiere in der Regel CodeSys, Step 7, und VBA. > C++ habe ich Grundkentnisse. > Das ist meine 1 Berührung mit Mikrocontroller. > Deswegen stelle ich Fragen die für andere selbstverständlich sind. Und das hindert dich jetzt daran ein Datenblatt zu lesen bzw. Tutorials durchzulesen? Was erwartest du von uns? Das wir dir jetzt den Code schreiben? Du hast es doch fast. Fehlt nur noch ein bisschen Eigeninitiative. Kleiner tipp, du kannst auch in deiner "ISR(TIMER0_OVF_vect)" direkt den Takt auf einen Port geben (toggle)
1 | ISR(TIMER0_OVF_vect){ |
2 | PORTB ^= (1<<PB0); |
3 | }
|
Musst vorher aber noch den Timer initialisieren. Aber das steht ja in den Tutorials und Datenblatt genau beschrieben
Ok. TCCR0B = (1 <<CS00) | (0<<CS01) | (1<<CS02); // Teiler 1024 TIMSK = (1<<TOIE0); // Interrupt bei Timer Overflow So sollte der Timer Arbeiten.
Eduard schrieb: > So sollte der Timer Arbeiten. Ist doch gar nicht so schwer. Jetzt guckst du dir im Tutorial noch den CTC-Mode an. Dann wird's perfekt. Und "Takt" als "volatile" deklarieren. mfg.
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.