Forum: Mikrocontroller und Digitale Elektronik 7-Segment und entprellung gleichzeitig?


von Paul (Gast)


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)

von The Daz (Gast)


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 ?

von Paul (Gast)


Angehängte Dateien:

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

von The Daz (Gast)


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.

von Peter D. (peda)


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

von Paul (Gast)


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!

von Christoph W. (christoph)


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)

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.