mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt Tiny12


Autor: Herby01 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Herby01 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi...

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

...HanneS...

Autor: Herby01 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Herby01 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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..

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.