Forum: Mikrocontroller und Digitale Elektronik Interrupt beim 2313 mit Taster auslösen


von Paul Baumann (Gast)


Lesenswert?

Hallo Leute!

Weiss jemand, ob es beim AT90S2313 ausser dem Anschluss PD6 noch
eine andere Möglichkeit gibt, mittels Taster einen Interrupt aus-
zulösen?

MfG Paul

von Frank Linde (Gast)


Lesenswert?

Ja, INT0 und INT1 entsprechend PD2 und PD3.

Gruß, Frank

von Paul Baumann (Gast)


Lesenswert?

Danke Frank, das hilft mir sehr. Ich müsste sonst die ganze Platine
umstricken.

MfG Paul

von Peter D. (peda)


Lesenswert?

Ein Mensch ist aus der Sicht des MC eine Schnecke. Er braucht mindestens
300ms um auf etwas zu reagieren und hält eine Taste auch mindestens
300ms gedrückt.

D.h. der MC hat alle Zeit der Welt um jeden beliebigen Portpin in einem
Timerinterrupt abzufragen. Das hat gleichzeitig den riesengroßen
Vorteil, daß man in dem Timerinterrupt die notwendige Entprellung
bequem mit erschlagen kann.


Aber Dir ist ja bestimmt schon die Unmenge an Beiträgen zur
Tastenabfrage in der Codesammlung aufgefallen.


Peter

von Paul Baumann (Gast)


Lesenswert?

@Peter
Ich habe jetzt die Sache mit einem Tastaturinterrupt realisiert.
Den bzw. die beiden Timer will ich mir noch aufheben, da ich im
weiteren noch einen genauen Sekundentakt brauche.
MfG Paul

von Peter D. (peda)


Lesenswert?

"Den bzw. die beiden Timer will ich mir noch aufheben, da ich im
weiteren noch einen genauen Sekundentakt brauche."


Das eine schließt das andere doch nicht aus.
Man darf ruhig die Entprellroutine und die Uhrzeitzählung im selben
Timerinterrupt ausführen (einfach hintereinander aufrufen).


Peter

von Stefan (Gast)


Lesenswert?

Ich habe manchmal auch Taster am Int-Eingang hängen, allerdings nur aus
einem Grund: um den MC aus dem Sleep-Zustand wieder aufwecken zu
können. Die normale Tastenabfrage mache ich immer im Timer-Interrupt.
Das spart viel Ärger, über die Prell-Probleme der Leute hier kann ich
jedesmal nur müde lächeln.

@Peter:
Du bist wohl auch so ein älteres Semester, was? ;-)
Völlig ohne Daddelkiste aufgewachsen, kein Wunder, dass da 300ms
zusammenkommen. Ein Kid von heute hat in der Zeit mindestens schon 3
Monster erlegt ...

Stefan

von Paul Baumann (Gast)


Lesenswert?

@Peter

Ich habe das mal realisiert und die Tasten über einen Timerinterrupt
entprellt und danach mit dem gleichen Timer 1 einen Sekundentakt ge-
bastelt. Folge: Meine Uhr hat eine erhebliche Gangabweichung, die
vorher nicht da war!
Was lehrt mich das? Besser zeitkritische Sachen mit dem Timerinterrupt
machen und die Tasterabfrage über INT0 und INT1. (Das geht Dank Rat von
Frank gut)

.....und ab dafür!!

von Jim (Gast)


Lesenswert?

@Paul:
Mich lehrt das nur, dass Du da offensichtlich einen dicken Fehler
gebaut hast. Der Timer-IRQ wird doch von der Hardware (Quarz, etc.)
erzeugt.

Üblicherweise macht man das mit einem Timer-IRQ, ausser vielleicht bei
extrem stromsparenden Applikationen, wo der MC nur alle paar Tage
gebraucht wird und jahrelang mit einer Batterie laufen muss.

von Peter D. (peda)


Lesenswert?

@Paul

"Meine Uhr hat eine erhebliche Gangabweichung, die
vorher nicht da war!"


Das lehrt nur, daß Du dabei offensichtlich einen Fehler in der
Berechnung der Reloadwerte gemacht hast.


Viel vergessen leider, daß nur durch ganze Zahlen geteilt werden kann.
D.h. man muß immer prüfen, ob bei den Divisionen ein Rest anfällt.

Dann darf man diesen natürlich nicht einfach unter den Tisch fallen
lassen sondern muß ihn bei den nachfolgenden Teilungen mittels Software
wieder hinzurechnen (Rechnen mit gebrochenen Zahlen).


Peter

von Peter D. (peda)


Lesenswert?

@Paul

"und die Tasterabfrage über INT0 und INT1"


Und was machst Du bei 3... Tasten ???



Peter

von Paul Baumann (Gast)


Lesenswert?

@Peter

Die Reloadwerte für die Uhrzeiterzeugung sind Gott sei's getrommelt
und gepfiffen ganzzahlige Werte. Das Problem sind die Tastendrücke,
die in ihrer Zahl nicht absehbar sind!
Ich will es einmal geradeheraus offenlegen: Die Schaltung betreibt
einen Motor und nebenbei soll der Kamerad MC noch einen Betriebstunden
-zähler realisieren.
Mach Du mir doch mal einen Vorschlag, in Form eines Stücks Programm,
was Timer 1 vom at90s2313 in Frieden meinen Sekundenimpuls erzeugen
lässt und nebenbei von mir aus auch nur 2 Taster entprellt.

MfG paul

von thkaiser (Gast)


Lesenswert?

Die Frage ist: Wo schreibst Du den Reload-Wert? Ganz am Ende des
Interrupts wäre es kein Wunder, wenn Abweichungen zustande kommen.
Es gibt auch noch die Möglichkeit, den Timer automatisch zu Reloaden,
das ist die sicherste Methode. Da kannst Du dann Deinen Sekundentakt,
Deine Taster uns weißderTeufelwas abfragen und berechnen, durch
unterschiedliche Laufzeiten der Subroutines gibts keine Abweichungen
(es sei denn, die Subroutines brauchen mehr Zeit, als zwischen zwei
Interrupts übrig ist).
Abweichungen einer Uhr durch Tastaturabfrage -> Fehler in der
Software.
Ich programmiere mir meistens als allererstes eine Zeitbasis von 100
Hz, aus der ich dann alles andere ableite. Funktioniert prima.
Bedenke auch, daß die üblichen Quarze nicht so genau sind, wie man sich
erhoffen mag. Selbst Uhrenquarze können zu Überraschungen führen.

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

@Paul

"Mach Du mir doch mal einen Vorschlag, in Form eines Stücks Programm,
was Timer 1 vom at90s2313 in Frieden meinen Sekundenimpuls erzeugen
lässt und nebenbei von mir aus auch nur 2 Taster entprellt."


Ich sehe da jetzt die Schwierigkeit nicht.

Anbei der Timerinterrupt mit beidem.
Die Sekunden stehen in "second" und die gedrückten Tasten in
"key_press".
Wann Du dann diese Werte im Main ausliest, bleibt Dir überlassen.


Peter

von Paul Baumann (Gast)


Lesenswert?

@Peter
Na, das ist doch mal ein feiner Zug! Ich musste erst mal ein paar
Kompagnons befragen, da ich der Sprache C nicht mächtig bin, aber
jetzt habe ich die Methode, die Du beschrieben hast verstanden.

Nachher setze ich den Ablauf mal in Bascom um und gucke mir das
mal an.

Danke dafür Peter!

MfG Paul

von Paul Baumann (Gast)


Lesenswert?

ES GEHT!!!

Der Rat war gut, Peter!
Ich habe jetzt auch meinen Fehler gefunden. Durch groben Unfug meiner-
seits hatte ich die Tastenzeit mit dem Reloadwert verknotet:-(((

Aber der, der den Fehler macht, sieht ihn zuletzt. (alte
Volksweisheit)

MfG paul

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.