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
Danke Frank, das hilft mir sehr. Ich müsste sonst die ganze Platine umstricken. MfG Paul
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
@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
"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
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
@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!!
@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.
@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
@Paul "und die Tasterabfrage über INT0 und INT1" Und was machst Du bei 3... Tasten ??? Peter
@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
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.
@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
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.