LED Laufleiste mit Arduino steuern

Hallo,
ich habe mal vor ein paar Jahren eine LED Laufleiste erworben (7 LED-Reihen, insgesamt 413 LEDs)
Leider kommte ich den prozessor der dort war nicht einfach umprogrammieren weil das programm irgendwo fest eingebrand war glaube ich.
Nun möchte ich diese Laufleiste versuchen mit dem Arduino zu steuern.
Leider habe ich keinen Schaltplan und weiß nicht wie ich den Arduino anschließen soll. Das kann man nur über die Leiterbahnen ermitteln.

Für die 3 microChips auf der Platine habe ich ein Datasheet defunden.
Schieberegister: M74HC164B1

Transistor: ULN2803A

Wiederstand : MDP1603 470G

Für die LEDs habe ich leider keinerlei Beschriftung gefunden.

Mir ist aufgefallen das der Output Qh von Schieberegister mit dem 8.Pin von Transitor verbunden sind und mit dem Serielen Eingang vom nächsten Register.

Auf der Hülle steht: nova-matic electronic Hergestellt: 4.99; Typ: 2650; Nr.LSSTD5917; Leistung: V: 230V , A: 35VA

Kann ich diese Laufleiste mit dem Arduino ohne weiteres steuern? Oder brauche ich da noch irgend eine Zwischen platine mit externer Stromquele oder sowas?

Wie soll ich jetzt an das Problem am besten rangehen?

Gruß

strohhirn

Das sind wahrscheinlich einfach mehrere 7*8 Matrizen so wie das aussieht. Da kannst du erst mal versuchen eine Matrix zum Laufen zu bekommen.

Bei den Schieberegistern musst du allerdings aufpassen. Die HC161 haben anders als die HC595 keine Latches. Um daher zu verhindern, dass die Ausgabe flackert, musst du glaube ich vor dem Schieben die LEDs ausschalten und erst nach dem Schieben wieder einschalten.

Ein externes Netzteil ist nötig.

Die Transistoren rechts auf der Steuerplatine treiben die Zeilen. Wenn du die Platine wegwirfst, musst du dir einen Ersatz für diese Treiber bauen.

hi,

scheint nicht so kompliziert zu sein.
beschäftige Dich mal mit

damit Du rauskriegst, wie ein schieberegister funktioniert.
die 2803 sind sowas wie kleine relais, damit aus dem kleinen strom der schieberegister ein größerer wird. aufpassen: die 2803 sind am minus der leds.
plus kommt für alle zeilen von der hauptplatine über die transistoren.
ich würde erstmal eine zeile mit plus versorgen (netzteil!), und versuchen, das erste schieberegister mit daten zu versorgen.

gruß stefan

Ein externes Netzteil ist nötig

Was für eins und wo schieße ich es an?

Die Transistoren rechts auf der Steuerplatine treiben die Zeilen.

Also brauche ich diese Transistoren von der alten Steuereinheit um die LED zu steuern,ja?Was meinst du mit treiben? Und wie schließe ich diese transistoren mit dem arduino an die laufleiste an?

hi,

kannst Du messen, welche widerstände da eingebaut sind? das sind diese hellbraunen vielbeiner. welcher widerstand zwischen zwei gegenüberliegenden beinchen?

gruß stefan

Auf der Steuerplatine ist das Netzteil, die Steuerung und die Anoden-Leistungsteil untergebracht. Die Matrix ist 413x7 wobei die Anoden über die 7 Transistoren und die Katoden über die Schieberegister/Treiben angesteuert werden.
Wenn Du jetzt die Steuerung entfernen willst brauchst Du nur die großen ICs entfernen (sind sowieso gesockelt) Siehe Bild. und die Transistoren bzw Schieberegister vom Arduino ansteuern.

Schreib und mal die Nummern der rot einkreisten ICs.

Grüße Uwe

Du hast im Prinzip zwei Möglichkeiten:

1.) Ein neues Netzteil nehmen und eine neue Platine für die Zeilen-Transistoren zu bauen
2.) Wie uwefed beschreibt die nicht benötigten ICs zu entfernen. Dann kann man die bestehende Netzteil verwenden und die Datenleitungen vom Arduino einfach an die Transistoren und die Steuerleitungen der Schieberegister löten.

Option 1.) ist auch nicht schwer, aber 2.) ist billiger und u.U. einfacher

Für 2.) wäre es dann in der Tat gut zu wissen was die anderen ICs machen. Du sind nämlich nicht unbedingt nötig.

hi,

ich würde die steuerplatine erstmal weglassen, und schauen, die schieberegister anzusteuern. plus direkt an eine der zeilen, GND mit den schieberegistern steuern. dazu mußt Du aber wissen, welche widerstände da verbaut sind.
im zwieten schritt das netzteil und die transistoren der steuerplatine nützen.

gruß stefan

kannst Du messen, welche widerstände da eingebaut sind?

Also auf diesen hellbrauen Vielbeinern steht immer 470. Gemessen habe ich mit einem alten Messgerät 48 Ohm und mit einem neuen 52Ohm.

plus direkt an eine der zeilen, GND mit den schieberegistern steuern.

Das werde ich mal versuchen. Reichen dafür die 5V des Arduino?

Die idee die unnötigen ICs zu entfernen und das Netzteil mit den Transitoren weiterzuverwenden gefällt mir.
Hab die rot eingekreisten ICs jetzt auch beschriftet, soll ich die auch entfernen?

75176 -> RS485 interface
74LS04 -> 6 invertierende Treiber um viele Schieberegister ansteuern zu können
74HC00 -> 4 NAND Gatter
74HC373 -> Buffer. Zum Multiplexen des Daten/Adressbus der CPU zu ROM und RTC.
7445 -> BCD-to-Decimal Decoders/Drivers zum Ansteuern der Transistor; zum Verbrauch weniger Ausgänge des CPU

Also Ansteuerung über die Eingänge des 74LS04 (Schieberegister) bzw 7445 (Transistoren).

Grüße Uwe

Ja, der BCD Decoder wäre ganz nett. Damit kann man dann die Transistoren binär mit 3 Leitungen ansteuern und muss das nicht im Programm umsetzen. Ist aber nicht zwingend nötig.

hi,

wenn das 470 ohm sind, kannst Du alles mit 5V anfahren. das erleichtert die sache natürlich. aber unbedingt ein netzteil, und nicht über den arduino. also im datenblatt des schieberegisters suchen, wo vcc und gnd sind sind. diese pins werden an den stecker der platine rausgeführt. mit netzteil verbinden. dann 5V+ an eine der zeilen und versuchen, die schieberegister mit dem arduino anzusteuern. am besten den arduino auch mit dem 5V-netzteil versorgen.

gruß stefan

Eisebaer:
hi,

wenn das 470 ohm sind, kannst Du alles mit 5V anfahren. das erleichtert die sache natürlich. aber unbedingt ein netzteil, und nicht über den arduino. also im datenblatt des schieberegisters suchen, wo vcc und gnd sind sind. diese pins werden an den stecker der platine rausgeführt. mit netzteil verbinden. dann 5V+ an eine der zeilen und versuchen, die schieberegister mit dem arduino anzusteuern. am besten den arduino auch mit dem 5V-netzteil versorgen.

gruß stefan

Das sind nicht 470 Ohm sondern 47 Ohm. Das wären bei 5V und roten LED ca 70mA. Für ein Taktverhältnis von 1 zu 7 ist das annehmbar.

Grüße Uwe

Hab jetzt mal langsam angefangen auszuprobieren.
Dabei habe ich wie empfohlen erstmal nur eine zeile angeschlossen.
Nun wurde ja auch erwähnt das mein schieberegister keinen latch pin hat.

Die HC161 haben anders als die HC595 keine Latches. Um daher zu verhindern, dass die Ausgabe flackert, musst du glaube ich vor dem Schieben die LEDs ausschalten und erst nach dem Schieben wieder einschalten.

Das flackern habe ich bemerkt, aber wie schalte ich denn alle LEDs aus?

Des weiteren ist mir aufgefallen das mit den Anfangssketchen nur die ganze zeile, also alle schieberegister, steuern kann.
Wie steuere ich zB. nur eine Zeile einer Matrix an?

Ich will nicht in frage stellen das ich ein Netzteil benötige, ich möchte nur wissen wozu? die gesamte erste zeile hat ohne probleme hell geleutet(nur mit arduino).

aber wie schalte ich denn alle LEDs aus?

Einfach alle Zeilentransistoren abschalten.

Des weiteren ist mir aufgefallen das mit den Anfangssketchen nur die ganze zeile, also alle schieberegister, steuern kann.

Ja, so funktioniert eine Matrix nun mal. Du schiebst eine ganze Zeile raus, schaltest die Zeile für x ms ein, schiebst die nächste Zeile raus und schaltest den nächsten Zeilentransistor an, etc. Wenn man das schnell genug macht hat man ein stehendes Bild.

Ausschalten müsstest du die vorherige Zeile sowieso, aber wegen der fehlenden Latches muss das vor dem Schieben geschehen.

Siehe hier:
http://www.mikrocontroller.net/articles/LED-Matrix#Multiplexbetrieb
(nur dass da Zeilen und Spalten anders herum sind)

Serenifly:
Ja, so funktioniert eine Matrix nun mal. Du schiebst eine ganze Zeile raus, schaltest die Zeile für x ms ein, schiebst die nächste Zeile raus und schaltest den nächsten Zeilentransistor an, etc. Wenn man das schnell genug macht hat man ein stehendes Bild.

Ausschalten müsstest du die vorherige Zeile sowieso, aber wegen der fehlenden Latches muss das vor dem Schieben geschehen.

genaugesagt:
Du schiebst eine ganze Zeile raus,
schaltest die Zeile für x ms ein,
Schaltest die Zeile wieder aus
schiebst die nächste Zeile raus
und schaltest den nächsten Zeilentransistor an, etc.

Grüße Uwe

Einfach alle Zeilentransistoren abschalten.

Welchen Arduino Befehl muss ich denn dafür geben?

digitalWrite(..., LOW) ?

Die Pin-Nummer hängt davon ab wie du das genau angeschlossen hast. Hast du wenigstens einen der Transistoren schon angeschlossen? Oder erst mal einfach die Zeile so an die Betriebsspannung gehängt? Das ist zum Test auch ok, aber da das funktioniert, ist jetzt der nächste Schritt das erst mal mit mindestens einem Transistor zu machen.

Du gehst dann mit einem Arduino-Pin entweder an die den Basiswiderstands eines Transistors (was vielleicht anfangs zum Testen das Beste ist), oder mit mit drei Pins an ALLE Eingänge des BCD Decoders. Mit diesem brauchst du nur drei Pins um alle 7 Transistoren anzusteuern. Siehe die Wertetabelle auf Seite 2:
http://www.utm.edu/staff/leeb/logic/7445.pdf
Inputs A, B und C. LLL = 0, HHL = 6

Ich würde mich erst mal an den ersten Transistor hängen und damit die Zeile langsam ein-und ausschalten. Wenn das geht kann man einen zweiten Transistor nehmen, oder gleich den BCD Decoder.

Das flackern habe ich bemerkt, aber wie schalte ich denn alle LEDs aus?

Einfach alle Zeilentransistoren abschalten.
Welchen Arduino Befehl muss ich denn dafür geben?

Verzeihung für die dumme frage die antwort ist mir später auch selbst eingefallen. :slight_smile:
Ich hatte zuvor nämlich die Zeile am+5V angeschlossen gehabt, deswegen die frage.

plus direkt an eine der zeilen, GND mit den schieberegistern steuern

Wie steuere ich zB. nur eine Zeile einer Matrix an?

Diese frage ist auch gelöst, man muss nur mehrere bytes hintereinander reinschieben.

Siehe hier:
LED-Matrix – Mikrocontroller.net

Danke für den Hilfreichen link, hat mir geholfen das ganze besser zu verstehen.

Hab ein bisschen rumprobiert und es geschafft ein wellen-muster mit 2 Zeilen zu machen, dabei ist mir aufgefallen das 2 Zeilen weniger hell sind als nur eine Zeile. Deswegen die Treiber Transistoren auf der Steuerplatine nutzen, richtig?

Wie lange sollte man übrigens zwischen dem Schalten der Zeilen warten? Ich habe jetzt 10ms, das klappt ganz gut. Gibt es da eine Idealzeit?

Als nächstes möchte ich die Transistoren von der steuerplatine mitanschließen um alle Zeilen zu steuern.(hab es, wie empfohlen, mit einer Zeile probiert, hab aber wahrsch. falsch angeschlossen.)

Das müssten folgende Transistoren sein: TIP125

An welchen Pin oder Vorwiederstand von diesem Transistor muss ich jetzt was anschließen?

Und dieser BCD Decoders, ist er empfehlenswert? Ich kann doch auch die 7 Transistoren mit 7 Arduino Pins steuern oder nicht?

Gruß

strohhirn

Die Anzeigezeiten richten sich nach der gewünschten Wiederholfrequenz, nach der Anzahl der Zeilen und nach den Totzeiten die es für das umschaten von Zeile zu Zeile braucht.

Also wenn wir zB 50 mal pro Sekunde jede LED einschalten wollen (FPS 50 oder 50Hz Bildwiederholfrequenz), und zB 50µS Totzeit fürs Umprogrammieren haben (ein geschätzter, aus der Luft gegriffener Wert) und eine 8x8 Matrix dann ist jede Zeile jedesmal 2450µS an.

Bei einer 8x8 Matrix ist jede Zeile (LED) etwas weiger als 1/8 der Zeit eingeschatet und darum ca 1/8 so hell, als es dauernd leuchten würde. Mann kann die LED aber mit mehr Strom versorgen da sie 1/8 der Zeit an sind und 7/8 der Zeit aus und darum Zeit haben abzukühlen.

Viele grüße Uwe