7-Segment und entprellung gleichzeitig?

Gast #256124
Lesenswert?

n'abend zusammen!

Habe hier gerade ein für mich unlößbares Problem.
In einer Routine wird je nach Tastenabfrage eine Variable inkremen-
bzw. deprementiert. Gleichzeitig soll das jedoch auf einem 7-Segment
Display angezeigt werden, welches über ein Schieberegister
angeschlossen ist.
Die Tasten sollten dabei entprellt werden.
Welche Möglichkeit gibt es denn sowas am elegantesten zu realisieren
(wenn möglich in C, weil ich mich mir asm noch nicht so sehr auskenne)
Gast #256125
Lesenswert?

Aeh, hast du mal die Suchfunktion mit dem Ausdruck 'entprellen'
ausprobiert. Allein zu dem Thema kommen ZIG Threads. Zum Thema
7-Segment per Schieberegister : poste mal dir Schaltung. Ach ja, eins
noch : welchen C-Compiler nutzt du ?
Gast #256126
Lesenswert?

Naja, die Schaltung existiert leider erstmal nur auf einem Steckbrett.
Das wichtigste habe ich eben in eagle zusammengebaut. Ich will hoffen,
dass hilft.
Wie das entprellen funktioniert ist schon klar. Das Ansteuern der
7-Segment Anzeige ist auch klar. Beides funktioniert auch schon. Das
Problem das sich ergibt ist nur folgendes: Entprellung funktioniert ja
mittels delay. In der Zeit wird bei mir leider nix auf der Anzeige
dargestellt :(
Als Compiler benutze ich WinAVR
Angehängte Dateien:
Gast #256127
Lesenswert?

Peter Daneggers Entprell-Routine funktioniert ohne Delays um benutzt den
Timer-Interrupt. Das gleiche kann fuer deine Display-Routine gelten.
Dein Hauptprogramm laeuft in ner loop un wartet auf Ergebnisse der
Entprell-Routine. Dies modifiziert dann den Display-String, den du in
einer globalen Variable der interrupt getriebenen Display-Routine zur
Verfuegung stellst.
#256128
Lesenswert?

"In der Zeit wird bei mir leider nix auf der Anzeige
dargestellt"


Warum denn nicht ?

Die Multiplexanzeige erfolgt doch im Timerinterrupt, was wärend dessen
im main passiert, ist egal.

Und das Entprellen und Flanken erkennen macht man dann bequemer Weise
auch gleich im Timerinterrupt.

In der Codesammlung sind Beispiele für beides.


Peter
Gast #256129
Lesenswert?

okey, danke! Bisher läuft alles sequentiell (naja, Anfänger halt). Ich
werde mir die Beipsiele die ich gefunden habe mal genauer ansehen.
Teilweise sind die für Anfänger ja nicht so ganz leicht
nachzuvollziehen (vorallem deine Tastenentprellroutine Peter) ;)
Besten Dank für die Hilfe. Ich werde mir die Sachen dann mal angucken
und mein Programm wohl oder übel umstricken müssen.
Besten Dank!
#256130
Lesenswert?

Ich klemme die Taster immer über Dioden an die Leitungen, die deine
Transistoren ansteuern. Die "andere Seite der Taster" lasse ich immer
an einen Port laufen.

Nun kannst du sofort in einem Interrupt die Taster auslese. Mal
angenommen, du hast eine Zeilenfrequenz von 64 Hertz, dann wird jeder
Taster alle 15,6ms ausgelesen. Ist er beim ersten Fragen noch am
Prellen, so kann er entweder offen oder geschlossen sein. In beiden
Fällen ist dies kein Problm, da er spätestens nach 31ms, wenn er das
nächste mal ausgelesen wird, definitiv geschlossen oder offen ist.

Da ich bisher noch keinen Taster hatte, der langsamer prellt kannst du
das Prellen von Tastern im Matrixbetrieb eigentlich ausschließen. Und
bedenke : Nicht auf die Timerfrequenz kommt es an, sondern auf die
Frequenz mit der du effektiv deine Taster ausliest. Ich mache dies
immer so (schon 3 Projekte mit Matrixgesteuerten 7-Segment Anzeigen)
und habe noch nie Prell-Probleme gehabt.

Du kannst dir in der Codesammlung mal meinen Belichter anschauen - der
funktioniert genau nach dem Prinzip einwandfrei. ("Selbstbau
Belichtungsgerät" oder "Belichter" oder so ähnlich)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren