Guten Abend :) Erstmal, das ist meine erste Begegnung mit Interrupts und Timer. Ich denke das Prinzip hab ich nach wiederholten Lesen des Tuts und des Forums verstanden, trotzdem happerts. Wollt nur mal eine LED in der ISR dauerhaft anschalten. Da die ISR ja sofort nach 16000000 / 1024 Taktzyklen das erste mal durchlaufen wird (bei 16MhZ CPU, ja, läuft mit externem Quarz, und Prescaler von 1024) müsste sie ja praktisch "immer" leuchten, ausser Reset wird gedrückt gehalten :) Hier mal mein Code: #include <avr/io.h> #include <avr/interrupt.h> int mainvoid){ DDRA = 0xFF; //Port A soll verwendet werden sei(); TIMSK |= (1<<TOIEO); TCCR0 = (1<<CS02) | (1<<CS00); //Presacler 1024 while(1); } ISR (TIMER0_OVF_Vect){ PORTA = |= (1<<0) //ersten Pin des Portes anschalten } Ich durchforste jetz echt scho 3 Stunden das Forum. Bei allen Beiträge die ich finde sieht der Code genauso aus. Im Prinzip müsste doch nach dem flashen sofort die Led an Pin0 Port A dauerhaft leuchten? Wird ja nie wieder auf 0 geschaltet. Vielleicht is heute einfach scho zu spät, sich in Timer und Interrupts einzuarbeiten :) Vielleicht weis ja jemand weiter :) Achja, nochmal als Info: Ich verwende den ATmega16 mit 16Mhz. Der externe Takt wird verwendet, getestet durch Spielereichen mit _delay_ms(); usw.
Sorry, ich hab grad nochmal den Beitrag überflogen. Die Zeile in der ISR lautet natürlich PORTA |= usw... Das zweite "=" ist ein Tippfehler, sowas kommt dabei raus wenn man am ProgrammierPC noch koa Inet hat und den Code abtippt :) Ist aber natürlich richtig in der .c Datei
@Zwitschi (Gast) >Wollt nur mal eine LED in der ISR dauerhaft anschalten. Was nicht sinnvoll ist. Lass sie blinken, auf neudeutsch togglen. >Da die ISR ja sofort nach 16000000 / 1024 Taktzyklen das erste mal >durchlaufen wird (bei 16MhZ CPU, ja, läuft mit externem Quarz, und >Prescaler von 1024) Nöö, der erste Timertakt dauert 1024 CPU Takte. Der Timer überlauf passiert beim Timer 0 (8 Bit) nach 256 Timertakten. Was beim Vorteile von 1024 gleich 262144 CPU Takte sind. >Hier mal mein Code: >Die Zeile in der ISR lautet natürlich PORTA |= usw... >Das zweite "=" ist ein Tippfehler, sowas kommt dabei raus wenn man am >ProgrammierPC noch koa Inet hat und den Code abtippt :) >Ist aber natürlich richtig in der .c Datei Solchen Bullshit kannst du dir sparen. Und vor allem dem Forum! Abtippen von Quelltext ist SINNLOS!!! Ein Funktionierendes Beispiel findest du im Artikel Interrupt. http://www.mikrocontroller.net/articles/Interrupt#Steuersignale_zwischen_ISR_und_Hauptprogramm MFG Falk
Hi >Im Prinzip müsste doch nach dem flashen sofort die Led an Pin0 Port A >dauerhaft leuchten? Wird ja nie wieder auf 0 geschaltet. Kommt darauf an, wie die LED angesteuert wird. Leuchtet sie, wenn du den Pin einfach auf H setzt? MfG Spess
1. Ich lasse sie leuchten und nicht blinken weil ich nur ein zeichen sehen will dass die isr überhaupt durchlaufen wird. Toggeln etc wäre mein nächster schritt. 2. Das tut kenn ich. Damit hab ich mich eingearbeitet. Erstmal musste ich im datenblatt die richtigen registerbezeichnungen finden. Laut x forenbeiträgen stimmen alle. Ich würde keon neues thema aufmachen wenn das tut mir weitergeholfen hätte. Forensuche natürlich auch benutzt, was mich nur bestätigt dass mein code funken müsste. 3. Zum quelltext abtippen: tja anders gehts halt ned. Hab nen alten athlon ausgegraben damit ich ne echte serielle habe, wlan stick is noch ned da. Aber nach 2 stunden drüberschauen kann ich tippfehler ausschliesen. Der code is ja auch ned wirklich lang... 4. Ja, in der whileschleife lässt sich die led richtig ansteuern, weswegen ich vermute dass die isr nicht ausgeführt wird. Grüße und danke für die ersten antworten!
Luge schrieb: > 1. Ich lasse sie leuchten und nicht blinken weil ich nur ein zeichen > sehen will dass die isr überhaupt durchlaufen wird. Toggeln etc wäre > mein nächster schritt. Mach das mal. Lass sie blinken. OK, sie wird ein wenig schnell blinken. Mit 61Hz. Aber darum gehts nicht. ISR (TIMER0_OVF_Vect) { PORTA ^= (1<<0); }
Wegen den 61 Hertz. Nimm 1Mhz internen Takt dann hast du knapp 4Hz
Luge schrieb: > Aber nach 2 stunden drüberschauen kann ich tippfehler > ausschliesen. Tatsächlich? Also ich sehe da zwei weitere Fehler (zusätzlich zum "= |="). Der erste ist ganz sicher nur ein Tippfehler in der "Abtipp-Version", denn der würde dafür sorgen, dass das ganze erst gar nicht kompiliert. Der zweite jedoch würde nur eine Warnung erzeugen und würde exakt zu dem Fehlverhalten führen, dass die ISR nicht ausgeführt wird. Nachtrag: Es gibt sogar noch einen dritten und vierten (also insgesamt vierten und fünften) Fehler, die auch in die Kategorie "ganz sicher Tippfehler in der Forumsversion" fallen. Und das trotz > Der code is ja auch ned wirklich lang... Ein wirklich gutes Beispiel für die Sinnlosigkeit des "Code-Eintippens" hast du da abgeliefert.
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.