Forum: Mikrocontroller und Digitale Elektronik BCD Rückwärtszähler synchron, von 9 bis 0, JK FlipFlop


von David G. (Gast)



Lesenswert?

Hallo. Folgendes Problem: Ich möchte einen Rückwärtszähler realisieren 
der von 90 auf 0 zählt. Dazu verwende ich zwei 7 Segment Anzeigen, sowie 
JK Flips Flops und BCD zu 7 Segment Decoder.

Es geht mir nur um den Schaltungsaufbau, nicht um irgendwelche ICs oder 
Bauteile.

Bis jetzt habe ich es soweit hinbekommen, allerdings fängt er bei 11 an 
zu zählen, geht dann auf 10 09 08 07 ... und dann auf 99 98 97. Ich 
würde gerne einen Taster einbauen, damit ich auf Knopfdruck den Zähler 
starten kann. Im Anfangszustand soll 90 da stehen, wenn ich den Knopf 
drücke, erst nach einem Taktzyklus (bei mir eine Sekunde) auf 89.. Wenn 
er bei 00 angekommen ist soll er einfach stehen bleiben.

Das ganze soll später genau 90 Minuten gehen, ich verwende Sekunden, um 
es zu testen.

In den Screenshots ist auch die Zustandsübergangstabelle. Das Schaltbild 
ist etwas unübersichtlich. Das Programm ist nicht so gut.

Ich habe leider nirgends ein Hinweis gefunden, habe mich deswegen hier 
im Forum registriert.

Vielen Dank im Vorraus.

von H.Joachim S. (crazyhorse)


Lesenswert?

Hat das irgendeinen akademischen Grund, warum du das so realisieren 
willst? Dann, und nur dann lohnt es sich damit zu beschäftigen.

Soll es was tatsächlich prkatisches werden, sind das 30 Zeilen Code in 
einem Tiny2313, geschrieben in ner halben Stunde. Und die Platine ist 
auch viel schneller fertig als mit deinem TTL-Kram.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Nimm Dir einfach die Innenschaltung des 74HC192 als Vorbild.

von Harald W. (wilhelms)


Lesenswert?

H.Joachim Seifert schrieb:

> Hat das irgendeinen akademischen Grund, warum du das so realisieren
> willst? Dann, und nur dann lohnt es sich damit zu beschäftigen.
>
> Soll es was tatsächlich prkatisches werden, sind das 30 Zeilen Code in
> einem Tiny2313, geschrieben in ner halben Stunde.

Ja, aber nur für jemandem der vorher mindestens ein Vierteljahr
µC-Programmierung gelernt hat. Auf jeden Fall liesse sich obiges
Projekt auch recht einfach mit fertigen Zähler-ICs verwirklichen.
Gruss
Harald

von David G. (Gast)


Lesenswert?

In der tat. Also ich wollte bewusst ohne programmieren machen, einfach 
nur um zu wissen, ob ich das machen kann. Ich habe ein Semester 
Digitaltechnik hinter mir, jetzt will ich das in die Praxis umsetzen.

von Harald W. (wilhelms)


Lesenswert?

David G. schrieb:
> In der tat. Also ich wollte bewusst ohne programmieren machen, einfach
> nur um zu wissen, ob ich das machen kann. Ich habe ein Semester
> Digitaltechnik hinter mir, jetzt will ich das in die Praxis umsetzen.

Schau in den Tietze/Schenk. Dort sind solche Zähler gut beschrieben.
(Jedenfalls in meiner zweiten Auflage)

von David G. (Gast)


Lesenswert?

Harald Wilhelms schrieb:
> H.Joachim Seifert schrieb:
>
>> Hat das irgendeinen akademischen Grund, warum du das so realisieren
>> willst? Dann, und nur dann lohnt es sich damit zu beschäftigen.
>>
>> Soll es was tatsächlich prkatisches werden, sind das 30 Zeilen Code in
>> einem Tiny2313, geschrieben in ner halben Stunde.
>
> Ja, aber nur für jemandem der vorher mindestens ein Vierteljahr
> µC-Programmierung gelernt hat. Auf jeden Fall liesse sich obiges
> Projekt auch recht einfach mit fertigen Zähler-ICs verwirklichen.
> Gruss
> Harald

Ich will das bevor ich mir Zähler ICs kaufe und das Projekt verdrahte 
und verlöte wissen, ob es möglich ist und wie es funktioniert. Ich will 
das lieber erst mal im Detail wissen.

Außerdem hat mein kleines Simulationsprogramm nicht viel zur Verfügung. 
Es gibt ein Zähler, allerdings asynchron.

von Uwe N. (ulegan)


Lesenswert?

Ist das bislang nur simuliert?
Die Takterzeugung für die 10er-Stelle wird so nicht gehen. Durch 
Laufzeitunterschiede ergibt sich praktisch immer ein Puls zum 
ungewünschten Zeitpunkt und wenn auch nur ein sehr kurzer. Da muss 
zumindest der Takt der ersten Stelle irgendwie mit rein.
Mag in der Simulation noch gehen in der Praxis kaum.
Deer Startwert ist hier eigentlich Zufall.
Und wie zählt er genau? Nach 07 kommt 99? Kann eigentlich nicht sein, 
auch wenn ich mir die Logik nicht ganz genau angesehen habe. Das untere 
Bit sollte sich bei jedem Takt ändern.
Zum Starten auf 90 must du einen auf die J/K-Eingänge entsprechende 
Signale legen und dann einmal takten. Ohne Takt geht bei JK-FFs nichts.
Und die Null musst du erkennen und dann entweder den Takt unterdrücken 
oder deine Zustandstabelle entsprechend erweitern, so dass nach 00 
wieder 00 kommt.

von David G. (Gast)


Lesenswert?

Harald Wilhelms schrieb:
> David G. schrieb:
>> In der tat. Also ich wollte bewusst ohne programmieren machen, einfach
>> nur um zu wissen, ob ich das machen kann. Ich habe ein Semester
>> Digitaltechnik hinter mir, jetzt will ich das in die Praxis umsetzen.
>
> Schau in den Tietze/Schenk. Dort sind solche Zähler gut beschrieben.
> (Jedenfalls in meiner zweiten Auflage)

Ich weiß wie Zähler funktionieren, ich krieg es aber einfach nicht hin. 
Ich weiß nicht, warum mein Zähler bei 11 einfängt, und wie ich das 
ändern kann. Außerdem will ich ja einen Taster einbauen. Ich habe schon 
einiges versucht, es aber einfach nicht hinbekommen.

von Achim S. (Gast)


Lesenswert?

David G. schrieb:
> Ich
> würde gerne einen Taster einbauen, damit ich auf Knopfdruck den Zähler
> starten kann. Im Anfangszustand soll 90 da stehen, wenn ich den Knopf
> drücke,

Um den Startwert festlegen zu können wäre ein Preset und Clear-Eingang 
des FFs praktisch.

http://www.ti.com/lit/ds/symlink/sn74hc112.pdf

Die verbindest du so mit deinem Starttaster, dass der gewünsche 
Startwert eingestellt wird.

von David G. (Gast)


Lesenswert?

Uwe Nagel schrieb:
> Ist das bislang nur simuliert?
> Die Takterzeugung für die 10er-Stelle wird so nicht gehen. Durch
> Laufzeitunterschiede ergibt sich praktisch immer ein Puls zum
> ungewünschten Zeitpunkt und wenn auch nur ein sehr kurzer. Da muss
> zumindest der Takt der ersten Stelle irgendwie mit rein.
> Mag in der Simulation noch gehen in der Praxis kaum.
> Deer Startwert ist hier eigentlich Zufall.
> Und wie zählt er genau? Nach 07 kommt 99? Kann eigentlich nicht sein,
> auch wenn ich mir die Logik nicht ganz genau angesehen habe. Das untere
> Bit sollte sich bei jedem Takt ändern.
> Zum Starten auf 90 must du einen auf die J/K-Eingänge entsprechende
> Signale legen und dann einmal takten. Ohne Takt geht bei JK-FFs nichts.
> Und die Null musst du erkennen und dann entweder den Takt unterdrücken
> oder deine Zustandstabelle entsprechend erweitern, so dass nach 00
> wieder 00 kommt.

Ist alles nur simuliert.

Nach 07 kommt 06 05 04 03 02 01 00 99 98,...
Die zweite Zahl, also die Zehner, hatte ich davon abhängig gemacht, wenn 
die andere Zahl 0 wird.

von David G. (Gast)


Lesenswert?

Achim S. schrieb:
> David G. schrieb:
>> Ich
>> würde gerne einen Taster einbauen, damit ich auf Knopfdruck den Zähler
>> starten kann. Im Anfangszustand soll 90 da stehen, wenn ich den Knopf
>> drücke,
>
> Um den Startwert festlegen zu können wäre ein Preset und Clear-Eingang
> des FFs praktisch.
>
> http://www.ti.com/lit/ds/symlink/sn74hc112.pdf
>
> Die verbindest du so mit deinem Starttaster, dass der gewünsche
> Startwert eingestellt wird.

Das habe ich auch schon gelesen, Problem ist, ich kenne nur die normalen 
JK FlipFlops und mein Simulationsprogramm auch.

von David G. (Gast)


Lesenswert?

Also erst mal vielen Dank für die schnellen Antworten, ich denke die 
Sache wird komplizierter als ich dachte (mein Digitaltechnik wissen 
reicht bei weitem nicht aus).

Die Pläne von TI von den ICs sind für einen Neuling schwierig.

Ich dachte, ich kann meinen Schaltplan einfach um ein paar Drähte 
erweitern und schon würde alles stimmen.

Ich denke, das kann ich nicht mit meinem Logik Simulator realisieren.

Gibt es noch eine andere Möglichkeit, zwei Segmentanzeigen von 90 auf 0 
zählen zu lassen, wenn es geht erst mal ohne programmieren. Wenn das 
allerdings zu aufwendig ist, werde ich es programmieren, aber damit 
kenne ich mich zu wenig aus (außer Arduino).

Kann man aus jedem JK FlipFlop ein JK FlipFLop mit CLR Eingang erzeugen 
oder sind das spezielle FlipFlops?

von David G. (Gast)


Lesenswert?

Harald Wilhelms schrieb:
> H.Joachim Seifert schrieb:
>
>> Hat das irgendeinen akademischen Grund, warum du das so realisieren
>> willst? Dann, und nur dann lohnt es sich damit zu beschäftigen.
>>
>> Soll es was tatsächlich prkatisches werden, sind das 30 Zeilen Code in
>> einem Tiny2313, geschrieben in ner halben Stunde.
>
> Ja, aber nur für jemandem der vorher mindestens ein Vierteljahr
> µC-Programmierung gelernt hat. Auf jeden Fall liesse sich obiges
> Projekt auch recht einfach mit fertigen Zähler-ICs verwirklichen.
> Gruss
> Harald

Was wäre denn so ein fertiger Zähler IC? Ich kenn mich damit noch zu 
wenig aus. Gibt es da ein Link? Wie verdrahte ich dann die Zähler 
zusammen? In meinem Schaltbild habe ich ja auch zwei Zähler. Oder ist 
das ein Zähler, der von 90 auf 0 zählt als fertiges Bauteil?

von Poster (Gast)


Lesenswert?

Da müsste ein 74HCT190 passen. Einer pro Stelle.

von David G. (Gast)


Lesenswert?

Poster schrieb:
> Da müsste ein 74HCT190 passen. Einer pro Stelle.

Ok. Und für den Takt? Soll ja alle minute was passieren. Und der soll 
erst starten, wenn ich den Taster drücke. Und dann bei 90. wie 
verschalte ich die ICs hintereinander? Soll der Takt dann von dem 
anderen IC abhängen, oder sollen die den gleichen Takt haben?

von Poster (Gast)


Lesenswert?

Oh je, das ist jetzt locker 30 Jahre her das ich mit so was rumgebastelt 
habe.
Habe die Zähler früher für Knightrider Lauflichter verwendet :)

Der Takt geht auf den "Einer" Zähler. Der produziert einen Überlauf der 
auf den "Zehner" Zähler geht.

Zum Takt findest du hier bestimmt tolle Schaltungen mit dem 555.

Zum starten kannst du dir bestimmt was einfallen lassen mit einen FF das 
durch den Taster gesetzt wird und durch den Zähler zurück wenn er 00 
erreicht.

von David G. (Gast)


Lesenswert?

Poster schrieb:
> Oh je, das ist jetzt locker 30 Jahre her das ich mit so was rumgebastelt
> habe.
> Habe die Zähler früher für Knightrider Lauflichter verwendet :)
>
> Der Takt geht auf den "Einer" Zähler. Der produziert einen Überlauf der
> auf den "Zehner" Zähler geht.
>
> Zum Takt findest du hier bestimmt tolle Schaltungen mit dem 555.
>
> Zum starten kannst du dir bestimmt was einfallen lassen mit einen FF das
> durch den Taster gesetzt wird und durch den Zähler zurück wenn er 00
> erreicht.

Ok vielen Dank. Letzte Frage: der Überlauf wäre doch dann so, wie in 
meinem schaltbild, oder nicht? Also wenn alle Leitungen 0 sind, dass 
dann der zweite Zähler startet.

von Poster (Gast)


Lesenswert?

Schau mal in das Datenblatt, da sind Beispiele dabei wie man die 
verschaltet.
Je nach Zählrichtung wird da eine Ausgabe gemacht bei 0->9 oder 9->0

http://www.digchip.com/datasheets/parts/datasheet/364/74HCT190-pdf.php

von Max (Gast)


Lesenswert?

... bei den Inputs (zumindest dem clock Input) auf genügende 
Flankensteilheit und ein prellfreies Signal achten.
Das erreichst Du am einfachsten mit einem Schmitt Trigger, z.B dem 
74HC14 oder 74HC132 mit einem vorgeschalteten RC.

... ausserdem einen Aufbau mit sauberer Masseführung und die Speisung 
bei jedem IC mit einem 100n abblocken.

von Axel S. (a-za-z0-9)


Lesenswert?

David G. schrieb:

>> Da müsste ein 74HCT190 passen. Einer pro Stelle.

Wohl eher 74x192

> Ok. Und für den Takt? Soll ja alle minute was passieren.

Dann brauchst du irgendwas, das dir einen Minutentakt erzeugt. Wie genau 
solls den sein? Reicht Netzfrequenz (50Hz) geteilt durch 3000? Sonst 
halt ein Quarz und viele Teiler.

> Und der soll erst starten, wenn ich den Taster drücke.

Dann brauchst du ein Flipflop, das du mit dem Taster setzt und das 
seinerseits den Zähler sperrt oder freigibt.

> Und dann bei 90.

Der '192 hat einen Ladeeingang und Daten-Eingänge A-D. Den kannst du so 
auf jeden beliebigen Startwert setzen.

Für eine Ein-Knopf-Bedienung würde man aus dem entprellten Tastersignal 
einen kurzen Impuls ableiten (Monoflop) der den Vorteiler rücksetzt 
(damit der nach genau einer Minute den ersten Zählimpuls abgibt) und mit 
diesem Impuls auch die Zähler laden. Den Startwert von 90 kann man ja 
fest verdrahten.

> wie verschalte ich die ICs hintereinander? Soll der Takt dann von dem
> anderen IC abhängen, oder sollen die den gleichen Takt haben?

Mit dem '192 hast du einen dezidierten Eingang zum Abwärtszählen und 
einen ebenso dezidierten Ausgang zum Kaskadieren mehrerer Zähler.

Aber wie Vorredner schon bemerkten, ist sowas heute wesentlich einfacher 
mit einem µC zu erledigen. Erst recht, wenn du noch eine Zeitbasis 
brauchst.


XL

von David G. (Gast)


Lesenswert?

Axel Schwenke schrieb:

> Aber wie Vorredner schon bemerkten, ist sowas heute wesentlich einfacher
> mit einem µC zu erledigen. Erst recht, wenn du noch eine Zeitbasis
> brauchst.
>
>
> XL

Danke erst mal für den ausfürlichen Beitrag.
Da ich bis jetzt nur Arduinios mit C programmiert habe, habe ich keine 
Ahnung von weiteren µC. Erst recht nicht, wie man diese programmiert. Da 
brauch man bestimmt irgendeine Vorrichtung, damit man die vom Computer 
programmiert.

von David G. (Gast)


Lesenswert?

Ich werde das vermutlich mit dem Arduino Nano machen und zwei BCD zu 7 
Segment Decoder. Dann brauch ich am Arduino 8 pins für die beiden 
Decoder, und einen für den Taster. Ich denke das ist das einfachste, in 
C kann man das relativ leicht programmieren denke ich.

Mit FlipFlops und Gatter Logik ist das schon ziemlich aufwändig.

Das ganze dann an ne 9V Batterie und fertig.

Kann man BCD Decoder ohne weiteres direkt an den Adruino anschließen? 
Ich würde dann jeweils 4 Ausgänge vom Arduino im BCD Code ausgeben, und 
den Decoder den Rest machen lassen. Geht das?

von H.Joachim S. (crazyhorse)


Lesenswert?

Wofür Dekoder? Kannst die Anzeigen doch direkt vom Arduino ansteuern. 
Die Siebensegmentdekodierung machst du im Prozessor. Braucht zwar 14 
Ausgänge, aber die hast du ja.

von Jens (Gast)


Lesenswert?

nimmst 2 Transistoren, und einen ULN2803. Dann brauchst du nur 9 Pins 
und multiplext das ganze...ist günstiger, du kannst alle Segmente 
ansteuern wie du willst und brauchst keine spezifischen ICs...

Wenn du das garnicht willst, nimmst halt nur einen BCD 7.Segm. Dekoder 
und die 2 Transistoren, dann brauchst nur 6 Pins und ein IC weniger als 
bei deinem Vorhaben...

JJ

von David G. (Gast)


Lesenswert?

H.Joachim Seifert schrieb:
> Wofür Dekoder? Kannst die Anzeigen doch direkt vom Arduino ansteuern.
> Die Siebensegmentdekodierung machst du im Prozessor. Braucht zwar 14
> Ausgänge, aber die hast du ja.

Ja aber dann brauch ich ja noch einen für den Taster, un der ist dann 
nicht mehr Übrig. Außerdem habe ich nicht so eine große 
Programmiererfahrung, und wenn ich einen BCD zu 7 Segment Decoder kaufen 
kann, brauch ich ihn nicht programmieren.

von Jens (Gast)


Lesenswert?

vielleicht magst auch mal hier rein schauen:

https://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige

JJ

von Jens (Gast)


Lesenswert?

>>Außerdem habe ich nicht so eine große
Programmiererfahrung,

Dann ist deine Lösung schon gut und auch umsetzbar ´wie du beschrieben 
hast...

Welchen Decoder wolltest denn nehmen?

JJ

von David G. (Gast)


Lesenswert?

Jens schrieb:
> vielleicht magst auch mal hier rein schauen:
>
> https://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige
>
> JJ

Danke, die Seite habe ich auch schon entdeckt. Vielleicht ist es ohne 
BCD Decoder doch besser, mal sehen.

von David G. (Gast)


Lesenswert?

Jens schrieb:
>>>Außerdem habe ich nicht so eine große
> Programmiererfahrung,
>
> Dann ist deine Lösung schon gut und auch umsetzbar ´wie du beschrieben
> hast...
>
> Welchen Decoder wolltest denn nehmen?
>
> JJ

Irgendeinen vom Conrad. Ich kenn mich da nicht aus, aber z.b. den:

http://www.conrad.de/ce/de/product/169196/Low-Power-Schottky-TTL-SN-74-LS-XXX-Texas-Instruments-SN74LS47-Gehaeuseart-DIP-16-Ausfuehrung-BCD7-Segment-DekTreiber?ref=searchDetail

von Jens (Gast)


Lesenswert?

http://www.blitzlogic.com/7seg_90.htm

was auch hilft:

gehe mal bei google auf die Bildersuche und gebe als Suchwort:

"7 segment avr" ein und schaue dich mal um...

JJ

von David G. (Gast)


Lesenswert?

kenn ich denn die analogen Ausgänge als digitale Eingänge verwenden? 
Beim Arduino?

Weil dann hätte ich ja genügend Anschlüsse, und könnte ohne einen 
externen Decoder auskommen, der nimmt ja auch zusätzlich Platz weg.

von Harald W. (wilhelms)


Lesenswert?

Axel Schwenke schrieb:

> Wohl eher 74x192

Ja, steht ja schon im driiten Posting. Wenn man sich ein älteres
Datenblatt des 74192 sucht, findet man dort auch meist die Innen-
schaltung, die man durchaus aus Einzelflipflops und Gattern nach-
bauen kann. Nur MS-Flipflops nur aus Gattern zu bauen wird schwierig.
Gruss
Harald

von H.Joachim S. (crazyhorse)


Lesenswert?

Na gut...
Es ist immer gut, wenn man die volle Kontrolle über jedes einzelne 
Segment hat, das entfällt natürlich bei der Dekoderlösung.

Auch ne Überlegung wert: 2x 4026, eigentlich ein Zähler mit Dekoder.
Zähler löschen, gewünschte Anzahl von Takten ausgeben, fertig. Kommt mit 
2 Leitungen aus.

von Jens (Gast)


Lesenswert?

kenne mich mit dem Teil nicht aus...

Wenn du das Suchwort bei google mal um 7447 erweiterst ist das 6te Bild:

http://www.mikrocontroller.net/attachment/1485/595_7448.JPG

dann bist du hier unterwegs:

Beitrag "Re: Achtung, Newbie, LED-Ansteuerung"

JJ

von Axel S. (a-za-z0-9)


Lesenswert?

David G. schrieb:
> Ich werde das vermutlich mit dem Arduino Nano machen und zwei BCD zu 7
> Segment Decoder. Dann brauch ich am Arduino 8 pins für die beiden
> Decoder, und einen für den Taster. Ich denke das ist das einfachste

Dann halte dich aber ran. BCD-zu-7-Segment Decoder werden zunehmend 
schwerer erhältlich. 74x47 ist der Klassiker. Aber den würde man an 
einem Arduino stilecht nur als 74HC oder 74HCT verwenden wollen und da 
wurde letztens in einem anderen Thread festgestellt, daß der schwer 
erhältlich ist. 74LS gibts noch. Aber da braucht ein Decoder für sich 
allein schon mehr Strom als der ganze Arduino.

Wenn ein µC im Spiel ist, bietet es sich natürlich an, die Dekodierung 
auch gleich in Software zu machen. Wenn man Pins sparen will, kann man 
die zwei Stellen ja multiplexen.


XL

von David G. (Gast)


Lesenswert?

Axel Schwenke schrieb:
> David G. schrieb:
>> Ich werde das vermutlich mit dem Arduino Nano machen und zwei BCD zu 7
>> Segment Decoder. Dann brauch ich am Arduino 8 pins für die beiden
>> Decoder, und einen für den Taster. Ich denke das ist das einfachste
>
> Dann halte dich aber ran. BCD-zu-7-Segment Decoder werden zunehmend
> schwerer erhältlich. 74x47 ist der Klassiker. Aber den würde man an
> einem Arduino stilecht nur als 74HC oder 74HCT verwenden wollen und da
> wurde letztens in einem anderen Thread festgestellt, daß der schwer
> erhältlich ist. 74LS gibts noch. Aber da braucht ein Decoder für sich
> allein schon mehr Strom als der ganze Arduino.
>
> Wenn ein µC im Spiel ist, bietet es sich natürlich an, die Dekodierung
> auch gleich in Software zu machen. Wenn man Pins sparen will, kann man
> die zwei Stellen ja multiplexen.
>
>
> XL

Ich werde es mit einem Arduino Nano versuchen, ohne Decoder. Ich hatte 
gedacht, dass das in Software schwieriger zu lösen sei, als wenn ich 
einen externen decoder nehme, aber ich glaube das ist nicht so schwer. 
Ich muss mir ja nur einmal aufschreiben, wie die einzelnen Zahlen als 0 
und 1 an den verschiedenen Ausgängen aussehen, aber da war ja hier auch 
schon ein link.

Ich denke das bekomme ich hin, und da der Arduino Nano ziemlich klein 
ist, ist das insgesamt kleiner als wenn ich das alles mit IC Zählern 
machen würde.

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.