Autor |
Multiplex? Logische Kanäle zusammenfassen! |
|
|
|
|
BID = 436170
x-plosiv Gelegenheitsposter
 
Beiträge: 54
|
|
Hi,
erst mal Kurzes Vorwort. Ich habe vor mir eine Uhr zu bauen die mit Hilfe von 21 LEDs die Zeit im Binärcode anzeigen soll. Ich will das ganze mit einem Atmega 8 und einem Quarz steuern. Soweit so gut.
Nun hätte ich, wenn ich pro LED einen Ausgang verwende 21 Kabel von der Platine zur Anzeige (wenn ich die Masse auf das Gehäuse Lege, was wohl gehen dürfte da es nur 5V sind nur von mir benutzt wird und auch nicht mit in die Dusche kommt).
Das würde ich Dezimieren wenn möglich.
Wäre ich da mit Multiplexverfahren auf dem richtigen Weg? Wenn ja wie Funktioniert das?
Oder findet das vielleicht DeMorgan und Boolesche Algebra anwendung, denn sowas hab ich auch dunkel im Hinterkopf.
Kann mir da jemand helfen, da ich doch ein bisschen ratlos bin.
[ Diese Nachricht wurde geändert von: x-plosiv am 12 Jun 2007 17:27 ] |
|
BID = 436190
Ltof Inventar
     
Beiträge: 9369 Wohnort: Hommingberg
|
|
BID = 436203
DonComi Inventar
     
Beiträge: 8605 Wohnort: Amerika
|
Moin,
Wie von LTof verlinkt, würde ich hier 4 Schieberegister verwenden. Ein Standardschieberegister hat 8 Bits, demnach kommt man auf 24 Ausgänge.
Die SR des Types CD4094 kann man kaskadieren, also den Überlauf des n-ten Schieberegisters mit dem Dateneingang des n+1ten verbinden.
Die Taktleitung und die Latch-Leitung werden parallel geschaltet und kommen jeweils an einen IO-Pin des µCs.
Der taktet beim Initialisieren des Controllers erstmal 24 Nullen raus (oder Einsen, jenachdem, wie die LEDn angeschlossen sind).
Somit sind die Register in einem definierten Zustand.
Anschließend werden dann die Daten seriell eingetaktet, während Latch so konfiguriert ist, dass die Daten nicht am Ausgang erscheinen. Damit ist es möglich, die Daten erst reinzuschieben und dann synchron am Ausgang sichtbar zu machen. Kommen dann die nächsten Daten, stehen diese solange an, bis die neueingetakteten Bits ins Latch geschrieben werden.
Multiplex ist noch was anderes: da werden die LEDn in einer Matrix verschaltet, also in Zeilen und Spalten angeordnet. Der µC selektiert dann eine Spalte und gibt ein Bitmuster für die Zeilen aus. Dann knippst er die Spalte wieder ab, macht die nächste an und gibt wieder ein Bitmuster aus.
Das ganze wird pro Sekunde so schnell wiederholt, dass das träge Auge irgendwann nicht mehr erkennt, dass es sich um kein statisches Bild handelt.
_________________
|
BID = 436215
x-plosiv Gelegenheitsposter
 
Beiträge: 54
|
Danke, das ging ja echt fix
Also das mit den Schieberegistern hört sich gut an. Und vom Programieraufwand ist das auch schön machbar, also steht der Uhr wohl nichts mehr im Weg. außer der Farbauswahl für die LEDs
|
BID = 436218
DonComi Inventar
     
Beiträge: 8605 Wohnort: Amerika
|
In welcher Sprache hattest du vor zu programmieren?
_________________
|
BID = 436221
x-plosiv Gelegenheitsposter
 
Beiträge: 54
|
Hatte vor in Assembler zu schreiben. Ein Freund hat mir zwar geraten das in C zu machen weils wohl einfacher sein soll, aber ich kann kein C somit werd ich bei Assembler bleiben
|
BID = 436230
DonComi Inventar
     
Beiträge: 8605 Wohnort: Amerika
|
Ja, das finde ich gut
Habe das auch mal in Assembler gemacht. Die Routine zum Datenrausschieben ist recht einfach.
Du kannst vier Register als Puffer benutzen, und dann mit rol austakten:
r20-24 enthalten Daten; LSB in r20,0.
Das kann man so machen, da rol und ror über das Carrybit quasi mehr als 8-Bit-Schieberegister sein können.
dann kannst du mit bst und bld das Bit 0 an eine bestimmte Stelle in einem temporären Register packen und dann die Daten ausgeben:
in r16, PORTD ;Port-Werte einlesen
bst r20,0 ;Bit nach T kopieren
bld r16, DATENBITPOSITION (z.b. PortD.4)
out PORTD, r16 ;und Daten bis auf Bit4 unverändert wieder ausgeben.
Das ganze dann in einer Schleife von 0 bis zur gewünschten Bitanzahl wiederholen.
Edit_ Natürlich noch Takt erzeugen.
_________________
[ Diese Nachricht wurde geändert von: DonComi am 12 Jun 2007 21:59 ]
|
BID = 436241
x-plosiv Gelegenheitsposter
 
Beiträge: 54
|
So in der Art hatte ich mir das vorgestellt.
Hab mir bloß noch nichts geschrieben, weil ich erst schauen muss dass ich das in mein Gehäuse reibring. Aber der Ansatz bringt mich glaub ich schon mal n Stück weiter, denn das Datenrausschieben is ja eh das einzige was da wirklich zu machen ist. Denn das weiterzählen und das Stellen per Taster is ja schnell gemacht
|