Forum: Mikrocontroller und Digitale Elektronik Interrupt Tiny12


von Herby01 (Gast)


Lesenswert?

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

von ...HanneS... (Gast)


Lesenswert?

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...

von Herby01 (Gast)


Lesenswert?

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

von ...HanneS... (Gast)


Lesenswert?

Hi...

Ohne Code kann man nur spekulieren (ich bin aber kein Spekulant).
Vielleicht liegt es ja auch nur am Prellen des Tasters?.

...HanneS...

von Herby01 (Gast)


Lesenswert?

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

von ...HanneS... (Gast)


Lesenswert?

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...

von Herby01 (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.