Forum: Mikrocontroller und Digitale Elektronik Mit RS232 128 LEDs ein- und ausschalten


von Peter U. (e-schock)


Lesenswert?

Hallo,

ich habe nur beschränkte Elektronikkenntnisse, da ich eigentlich eher 
aus der Software komme, habe allerdings schonmal als kleines Kind paar 
Schaltungen aus Büchern nachgelötet und in der Ausbildung mit 
TTL-Technik gearbeitet.
Jetzt wollte ich privat für meine Modeleisenbahnanlage per Computer 
(RS232 Schnittstelle oder USB) 128 LEDs ein- und ausschalten können.
Mein Plan wäre folgender:

(* 1) USB-Schnittstelle -> 2) USB/RS232 TTL Converter ) -> 3) RS232 
8-Bit -> 4) Demultiplexer 4-zu-128 -> 5) Flipflops -> 6) 128 Stück LEDs

*optional

Für 2) würde ich folgendes einsetzen: 
http://www.virtualvillage.de/usb-rs232-konverter-ttl-pegel-f-virtuelles-com-port-003602-010.html?utm_source=googlebase&utm_medium=shcomp 
, falls ich auch noch TTL-Schaltungen hinterbauen will und die benötigte 
5V brauch.

Wenn ich vom Rechner z.B. das Bitmuster 00001000 rausschicke, soll z.B. 
LED Nr. 8 angehen (und auch anbleiben, deswegen dachte ich an einen 
Flipflop). Wenn ich nochmal 00001000 rausschicke soll die LED wieder 
ausgehen.

Ist meine Schaltungsidee so richtig oder benötige ich noch weitere 
Bauteile? Kann mir jemand sagen ob es so ein Demultiplexer 4-zu-128 
gibt? Oder muss ich mich über mehrere Demuxes hintereinandergeschaltet 
bedienen?
Außerdem wäre es schön zu wissen welche genauen Bezeichnungen die 
Bauteile haben, damit ich mir die bei Reichelt/Conrad/... zusammenkaufen 
kann.

: Verschoben durch Moderator
von Route_66 (Gast)


Lesenswert?

Hallo!

Mal mir bitte mal die Logiktabelle eines

> Demultiplexer 4-zu-128

auf. Ich bin gerade etwas blind. wie soll die Eingangsbelegung z.B. für 
LED 78 aussehen?

von Hc Z. (mizch)


Lesenswert?

Der Knackpunkt heißt 4).  Da scheinst Du Dir etwas Falsches 
vorzustellen.

Eine RS-Schnittstelle liefert die Daten seriell an.  Das sind also 8 
Bits, zeitlich nacheinander, auf einer einzigen Leitung und dazu noch 
eingebettet in Start-und Stopbits.  Das Gegenstück, das daraus wieder 
irgendwelche parallel verarbeitbare Daten macht, heißt nicht 
4-zu-irgendwas-Demultiplexer, sondern (meist) UART.

von Chris R. (hownottobeseen)


Lesenswert?

Hi,

wahrscheinlich ein totaler overkill, aber vielleicht ist es was für 
dich:

http://hobbyelektronik.org/w/index.php/USBLotIO

Damit sparst du dir die USB-UART-Bridge.

Einziges Problem: Du brauchst geeignete Hardware, um den AVR zu 
programmieren, da der Reset-Pin deaktiviert ist.
Lässt du allerdings die Lesemöglichkeit weg (habe noch nicht getestet, 
ob es mit der gleichen Firmware geht), reicht etwas STK200-kompatibles 
zum "Brennen".

Togglen der Bits kannst du direkt über das Konsolenprogramm machen.


Ansonsten: Mux ist unfug, da du nur eine LED gleichzeitig leuchten 
lassen kannst. Besser ist es, Schieberegister zu verwenden. Damit ist es 
zwar etwas komplizierter, die Ausgänge zu togglen (entweder alle 
Register nochmal durchtakten, Werte einlesen und zu verarbeiten oder 
gleich in der Software die Zustände merken).

HTH

von Peter U. (e-schock)


Lesenswert?

@Route_66:

Oh, da hast du leider Recht, habe ganze Zeit den Demuxer falsch 
berechnet.
So müsste er aber richtig aussehen:

Eingänge: s0, s1, s2, s3
Daten: x0, x1, x2, x3
Ausgänge: y0, y1, y2, ... , y61, y62, y63
1
s3 s2 s1 s0 ; x3 x2 x1 x0 ; y63 y62 y61 y60 ... y7 y6 y5 y4 y3 y2 y1 y0 ; LED Nr.
2
---------------------------------------------------------------------------------
3
0  0  0  0  ; 0  0  0  1  ; 0   0   0   0   ... 0  0  0  0  0  0  0  1  ; 1
4
0  0  0  0  ; 0  0  1  0  ; 0   0   0   0   ... 0  0  0  0  0  0  1  0  ; 2
5
0  0  0  0  ; 0  1  0  0  ; 0   0   0   0   ... 0  0  0  0  0  1  0  0  ; 3
6
...
7
0  0  0  0  ; 1  0  0  1  ; 0   0   0   0   ... 0  0  0  0  1  0  0  0  ; 1 und 4
8
...
9
0  0  0  1  ; 0  0  0  1  ; 0   0   0   0   ... 0  0  0  1  0  0  0  0  ; 5
10
0  0  0  1  ; 0  0  1  0  ; 0   0   0   0   ... 0  0  1  0  0  0  0  0  ; 6
11
...
12
0  0  0  1  ; 0  1  1  0  ; 0   0   0   0   ... 0  1  0  0  0  0  0  0  ; 6 und 7
13
...
14
0  0  0  1  ; 1  0  0  0  ; 0   0   0   0   ... 1  0  0  0  0  0  0  0  ; 8
15
...
16
1  1  1  1  ; 0  0  0  1  ; 0   0   0   1   ... 0  0  0  0  0  0  0  1  ; 61
17
1  1  1  1  ; 0  0  1  0  ; 0   0   1   0   ... 0  0  0  0  0  0  1  0  ; 62
18
1  1  1  1  ; 0  1  0  0  ; 0   1   0   0   ... 0  0  0  0  0  1  0  0  ; 63
19
1  1  1  1  ; 1  0  0  0  ; 1   0   0   0   ... 0  0  0  0  1  0  0  0  ; 64

Komme mit 4 Eingängen und 4 Dateneingängen nur auf 64 Ausgänge. Das doch 
richtig oder? Halt 16 (s) x 4(x) ;-)

Natürlich könnte ich auf mehr kommen falls ich mit einem Dateneingang 
wie:
1
x3 x2 x1 x0 ; LED Nr.
2
---------------------
3
0  0  0  0  ; 1
4
0  0  0  1  ; 2
5
0  0  1  0  ; 3
6
0  0  1  1  ; 4
7
0  1  0  0  ; 5
8
0  1  0  1  ; 6
9
0  1  1  0  ; 7
10
0  1  1  1  ; 8

die LEDs adressieren könnte, wobei das erste glaube ich einfacher ist. 
64 LEDs werden mir aber auch reichen.


@mizch: Danke, habe noch nie mit UARTs gearbeitet bzw. gesehen, werde 
mich da mal ein wenig reinlesen was das genau ist. Evtl. ist ja das die 
Lösung die ich suche :-)


@hownottobeseen: Ja, an so eine AVR-Lösung denke ich auch dauernd, 
wollte aber die Kosten und den Aufwand dafür sparen :-)
Wegen der Sache dass nur eine LED leuchten kann, damit wäre ich 
zufrieden. Aber so wie ich das in meiner Demux-Schalttafel aufgemalt 
habe geht das nicht? z.B. LED 6 und 7 leuchten bei:
1
s3 s2 s1 s0 ; x3 x2 x1 x0 ; y63 y62 y61 y60 ... y7 y6 y5 y4 y3 y2 y1 y0 ; LED Nr.
2
---------------------------------------------------------------------------------
3
0  0  0  1  ; 0  1  1  0  ; 0   0   0   0   ... 0  1  0  0  0  0  0  0  ; 6 und 7


Schon mal vielen Dank euch für die Denkanregungen!

von Reinhard Kern (Gast)


Lesenswert?

Peter Uhlmann schrieb:
> Wenn ich vom Rechner z.B. das Bitmuster 00001000 rausschicke, soll z.B.
> LED Nr. 8 angehen (und auch anbleiben, deswegen dachte ich an einen
> Flipflop). Wenn ich nochmal 00001000 rausschicke soll die LED wieder
> ausgehen.

Hallo,

das wird so nicht funktionieren - du bzw. der Rechner weiss nicht, ob 
die LED aktuell an ist oder aus. Synchronisieren durch gleichzeitigen 
Neustart ist nur Murks. Du brauchst einen Befehl zum Einschalten und 
einen zum Ausschalten, das ist aber bei 128 LEDs kein Problem.

Gruss Reinhard

von Jens (Gast)


Lesenswert?

Im goßen und ganzen ist das kein Problem. Du schickst Befehle via 
RS232/USB zu einem µC und dieser steuert deine LEDs! Habe sowas 
ähnliches mal mit einem PIC16F877 gemacht.

von Peter U. (e-schock)


Lesenswert?

Achso, würde das irgendwie gehen wenn ich das Bitmuster 0000 (x0...x3) 
an alle Schalteingänge sende um die LEDs alle auszuschalten?

Dachte an so ein "State triggered, transparent Flip-Flop (Latch)", wie 
er unter der Java-Simulation bei 
http://www-ihs.theoinf.tu-ilmenau.de/~sane/projekte/flipflop/embed_flipflop.html 
gezeigt wird. Da habe ich ja eine Set/Reset Leitung, allerdings muss für 
den Reset Spannung anliegen, was ja bei einem Bit 0 schlecht geht und 
Bit 1 soll ja die LED einschalten.

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

Hallo,
schau dir doch mal http://www.light-at-night.com/ an. Wir haben im 
Modellbahnklub solche Dinger im Einsatz. Ein einfaches Prinzip und zeigt 
einen möglichen Ansatz um soetwas selber zu bauen.

mfg Rene

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ich würde hier einfach ein Byte übertragen und die Bits aufteilen:
Bit  7   --> 1=LED on / 0=LED off
Bits 6-0 --> LED-Adresse (0...127)

Allerdings wird das mit den Muxen und den Flipflops etwas schwierig, 
weil du ja die Information speichern willst. Da mußt du irgendwoher noch 
ein Datenübernahmesignal für ein einzelnes FF erzeugen.
Zudem wirst du bei einer Baudrate von z.B. 9600 dann ca. 130 ms 
brauchen, um alle LEDs umzuschalten.


Die bessere Möglichkeit wäre, ähnlich wie bei DMX-512 die Bits einfach 
nacheinander in 16 Bytes (16*8Bit) zu packen, und diese als Paket 
loszuschicken. So würde ich das machen.

von Peter U. (e-schock)


Lesenswert?

Der Zeitverbrauch wäre egal, also wäre ich auch mit 130ms zufrieden :-) 
Naja, sollte nicht länger als 1sek dauern.

Hätte nicht gedacht dass es so aufwendig wird, deshalb reduziere ich das 
auf eine 8x8 LED-Matrix. Dann brauche ich nebenbei eh noch 64 Schalter, 
die ich separat bediene, die wollte ich seriell (RS232) per Polling 
abchecken ob die geschaltet sind oder nicht und per Software auf dem 
Rechner resultierend einige LEDs schalten.
Für die LED-Matrix gucke ich mir grad dies hier an: 
http://www.mikrocontroller.net/articles/LED-Matrix , da gibt es so ein 
MAX72xx Treiber, allerdings werde ich wohl auch noch so ein Atmega8 
uController/Programmer/... brauchen, oder? Da komme ich ja schon locker 
auf Kosten von mehr als 50-70 Euro wenn ich richtig gucke, was meint 
ihr?

Neue Idee:

Für die LED-Matrix:
1) Rechner USB/RS232 -> 2) Atmega8 -> 3) MAX72xx -> 4) LED-Matrix

Für die Schalter-Matrix analog:
1) Rechner USB/RS232 -> 2) Atmega8 -> 3) MAX72xx -> 4) Schalter-Matrix

Bei der Schaltermatrix ist der Kommunikationsweg nur andersrum, da 
werden die Schalterstellungen halt ausgelesen und an den die RS232/USB 
Schnittstelle übertragen.

Evtl. eignet sich da sogar ein Atmega16 mehr? Weil 8bit für LED-Matrix 
und 8bit für Schalter-Matrix und ich so nur ein Bauteil verwende?

von Martin V. (oldmax)


Lesenswert?

Hi
Nun, wenn du noch nicht ausgestattet bist, was µC betrifft, ja, das 
läppert sich. Allerdings dürfte für dich das Pollin Board interessant 
sein. Du kannst es gleich für deine Anwendung benutzen und brauchst 
lediglich die Platine zur Ansteuerung deiner Matrix. Die 5 V Erzeugung 
ist nicht ganz so leistungsstark, aber Pollin hat auch nette Netzteile 
für billig, die obendrein auch genügend Power haben. z.B. bekommst du 
für 5 € ein Netzteil 5 V, 12 V  und 24 V Wenn du 100 LED mit 20mA 
betreibst, kommst du auch auf 2 A und das könnte dir ein einfacher 5V 
Festspannungsregler schon gewaltig übel nehmen. Ok, an den Rest der 
Gemeinde, bevor hier wieder das STK empfohlen wird. Pollin ist ein 
Billiganbieter und sein Board ist nix tolles, aber für das Geld, ich 
hab's ja schonmal geschrieben, kann man die Platine gleich als Anwendung 
mit verplanen und nicht als reine Programmierstation sehen. Die 15€ sind 
da nich zu viel für. Die Signale holt man sich überein altes IDE-Kabel 
auf eine separate Platine, wo dann die Relaistreiber und exteren 
Schaltkreise verwurschtelt werden. Da das Pollin-Board auch eine RS 232 
Schnittstelle hat, kann ein Rechner locker die Steuerung einer alten 
Eisenbahnanlage übernehmen. Wird übrigends eines meiner nächsten 
Projekte sein, mittels einer µC-Karte und einem PC-Programm ähnlich 
Siemens CFC beliebige Steuerungsaufgaben zu erledigen....Falls interesse 
besteht, einfach nachfragen.
Gruß oldmax

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hast du die 128 LEDs denn alle an einer Stelle?  Ansonsten wird das
ja ein heftiger Drahtverhau, da wäre es eigentlich günstiger, den
Adressraum auf mehrere Clients aufzuteilen, die dann untereinander
nur drei Drähte (Masse, 5 V oder 12 V, serielles Signal) benötigen.
Jeder decodiert dann nur noch "seinen" Teilbereich.

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.