Hi, ich habe ein problem mit dem Interrupt beim Tiny12. Leider ist im Studio die Interruptsimu buggy?? funktioniert anscheinend verkehrt herum! Nun zu meinem Problem. Habe am PB1 einen Taster, der meinen Int. auslösen soll, Pullup am portb,pin1 ist gesetzt, so das am pin bei offenem Taster 5V anstehen, Im MCUCR sin die beiden Bits auf 10 gesetzt, das bei tastendruck ein Interrupt ausgelöst wird, tut er auch, dann folgt eine Warteschleife von ca 10 Sec, (weil ich gleichzeitig feststellen will ob kurzer oder Langer Tastendruck) danach wird mit sbic pinb,pb1 abgefragt ob der Taster noch 0 ist. wenn nein, = kurzer tastendruck verlasse Intterupt. Wenn noch 1 dann langer tastendruck,und warten bis pb1 =0 . Dann Interrupt verlassen. Auf dem 1200 funzt die Routine, Aber auf dem 12er wird unmittelbar danach ein 2. Int. ausgelöst. Frage: Ist ein Unterschied in den beiden IR Handlern (1200 TINY12)? Gruß Herbert
Hi... Passiert das in real oder nur im Simulator? Denn im Simulator sind Bugs, einerseits wird der Int vom falschen Pin ausgelöst, und wenn ich mich nicht irre, wird im Sim das Flag im GIFR nicht zurückgesetzt. Müsstest du (nur für SIM) per Prog machen (schadet aber in real nicht, falls es drin bleibt). Es ist eben nicht alles perfekt... ...HanneS...
Hallo hannesS,
das passiert in real, im Simu habe ich es wegen des o.A. Bugs
aufgegeben. Lustig ist nur das die Routine auf dem 1200.er läuft.
Werde heute mal mit den Parametern rumspielen, denke das ich dann
dahinterkommen werde. Dachte nur das hier im Forum jemand das seltsame
Verhalten eines 12.er kennt und mir einen Tip geben könnte.
Hätte mir evtl. einige graue Haare ersparen können. Nagut, dann wollen
wir mal das Hirn einschalten (den letzten vorhandenen Rest zumindest)
und sehen was dabei herauskommt.
>............nicht alles ist perfekt............
Ich auch nicht!
Herbert
Hi... Ohne Code kann man nur spekulieren (ich bin aber kein Spekulant). Vielleicht liegt es ja auch nur am Prellen des Tasters?. ...HanneS...
Hi HanneS, Ich denke nicht, es wird nach dem eintreten des interrups eine Warteschleife von ca. 10 S. ausgeführt. Dann sollte doch der schlechteste Taster endgültig geschlossen sein, oder? Habe heute leider noch keine Zeit gefunden um der Sache endgültig auf den Grund zu gehen. Werde später noch den Code anhängen. Herbert
Hi... Wo ist die Warteschleife? Doch nicht etwa in der ISR?? Trotzdem setzt das Prellen des Tasters sofort wieder das Int-Flag, auch wenn du noch so lange in der ISR verweilst. Du könntest das Int-Flag auch per Programm während der ISR löschen, aber ein sauberer Stil ist das vermutlich nicht... Ich würde in der ISR lediglich ein Flag (in einem Register) setzen, das in der Hauptschleife abgefragt wird und zur Abarbeitung des Tastendrucks verzweigt. Dieses Flag wird dann erst nach Ablauf der Warteschleife vom Hauptprogramm gelöscht. Daher juckt es dann niemanden, wenn die ISR bei jedem Tastenprellen das (noch gesetzte) Flag erneut setzt... Weitere Spekulationen kann ich mir mangels Programmcode nicht erlauben. ...HanneS...
Hi HanneS, Endlich habe ich es geschafft, Auszüge aud dem Assmbler anzuhängen. Zu der Frage, "Doch nicht in der ISR?" Warum nicht? MC wird sowieso angehalten. Kurzbeschreibung des Projektes: MC lädt nach dem Einschalten die Pausenzeit bis er was machen soll aus dem EEprom. Ist diese Zeit abgelaufen gibt er Akustisches und Optisches Signal aus. Der Anwender soll 1. die möglichkeit haben das Teil abzuschalten bis es das nächste mal eingeschaltet wird. 2 kurze Tastendrücke hindereinander suf den Knopf innerhalb 30 Sek. lassen den MC. in den Sleep Mode wandern. 2. Die möglichkeit die Wartezeit bis zun 1. Al. zu verändern. Hierzu versetzt ein Langer Tastendruck > 10 S. das Pgm in einen Programmiermodus. jeder weitere kurze Tastendruck erhöht die Wartezeit um eine bestimmten Betrag. Mit einem anschließendem langen Tastendruck wird die eingestellte WZ im Eprom abgelegt, der Pogrammiermodus beendet und das Gerät neu gestartet. Das alles funktioniert auch so auf einem 1200.er. Habe das jetzt auf den T12 umgestellt (Platzgründe, 12er recht alle mal für die Anw. Habe gestern abend auch noch meinen Fehler gefunden. Hatte in MCUCR einne fallende Flanke eingestellt, wie blöd. Als ich das auf 0 umstellte funzte es. Der 1200er mute eine 10 im MCUCR haben das es funktionierte. Naja anderer MC andere Probs. Ich danke dir esrtmal für deine Hilfe, und wenn du eine Idee haben soltest wie man es besser machen kann. so bin ich für jede Hilfestellung sehr dankbar. Es ist immerhin mein 1. Projekt mit einem MC. .... Herbert..
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.