PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Software Interrupt Atmega 128 löst nicht aus



Fourstroker
15.06.2009, 11:57
Hallo,

ich habe eine Frage zur Software-Interrupt-Programmierung beim Atmega 128 und hoffe, dass ihr mir die Fragen beantworten könnt.

Erst mal mein Verständnis, wie ein Interrupt per SW ausgelöst werden kann:

- Interrupt initialisieren (fallende oder steigende Flanke)
- Pin als Ausgang deklarieren
- Ausgang von Null auf Eins bzw. anders rum setzen

Stimmt das soweit?

Kann man das beim Atmega 128 mit allen Externen Interrupts durchführen also auch mit dem INT06?

Hat mir einer ein Programmbeispiel für diese Anwendung?

In meiner Anwendung löse ich den INT 6 per fallender Flanke durch einen Taster aus. Bei Problemen muss ich aber diese Funktion auch ohne Taster, also per SW auslösen können. Hierfür initialisiere ich den Eingang in einer Funktion zum Ausgang um, erzeuge die Flanke per SW und initialisiere den PORT PE6 wieder als Eingang um. Leider funktioniert das im Moment so nicht, daher meine oben stehenden Fragen.

MFG

Fourstroker

Ceos
15.06.2009, 12:26
das kannst du generell mit jedem int pin machen, falls du den internen pullup verwendest udn mit dem taster nach GND schaltest geht das sogar am einfachsten, dann musst du im programm an der entsprechenden stelle einfach nur den pullup im port register abschalten und in der ISR den pullup wieder an!

besser wäre es, wenn du eine methode schreibst, in der du die auszuführenden befehle aus der ISR reinschreibst und in der ISR dann diese methode ausführst und wenn du möchtest diese methode auch direkt aus dem programm heaus aufrufst ... so sparst du rechentakte beim setzen des PORT register und die rechentakte für das stacken der daten beim aufruf der ISR