1.Versuch Matrix

Hallo Leute

Ich habe mir eine kleine Platiene gebastelt, mit einer 9x9 Matrix von 3mm LED. Die Lötarbeiten habe ich fertig und muss nur noch die Anschlüsse verdrahten, Widerstände einlöten. Jetzt habe ich eine Frage , da ich noch nie ein Programm geschrieben habe für eine Matrix, hätte vielleicht einer einen kleinen Sketch für mich den ich mir für meinen Versuch kopieren könnte und eventuell abändern könnte. Ich möchte wenn es geht entweder Buchstaben anzeigen oder eine Laufschrift Da die Platine an meine UHR anzeigen soll ob es Tag oder Nacht ist, also PM oder AM, Ich bräuchte nur einen kleinen Anstoß um überhaupt zu verstehen wie ich die Matrix über den Arduino ansteuern kann.

l.G.Jürgen

hi, jürgen,

hast Du Dir schon mal aufgezeichnet, wie Du AM oder PM auf einer 9x9er matrix anzeigen willst?

gruß stefan

Hi Stefan

Ja ich habe einmal eine Zeichnung gemacht wie ich mir das vorstelle. Die matrix soll auf meiner Uhr im Unterenbereich links angebracht werden und sie soll lediglich um 18 Uhr wechseln auf AM und um 6 UHR auf PM. Ist ja im Grunde nur ein Geck, ich könnte ja auch aus dem Fenster Gucken um zu sehen ob es Tag oder Nacht ist :slight_smile: aber es wäre schon schön wenn ich das hin bekäme mit eventuell noch ein wenig Bewegung in der Matrix oben und Unten eventuell einen laufenden Balken. Aber mir gehts im wesentlichen darum das ich eine Vorgabe habe wie man die Matrix ansteuert mit dem Arduino, wenn ich sowas habe bekomme ich alle anderen Änderungen so wie ich es haben möchte schon hin. Ich hänge Dir einmal ein Bild an von der Zeichnung.

l.G.Jürgen

hi,

ich wollte nur sicher sein, daß Dir klar ist, daß man auf einer 9x9er-matrix keine 2 buchstaben vernünftig anzeigen kann. deswegen nimmst Du ja auch 9x5 für die zeichen.
die obersten und untersten balken könntest Du ja zb. im sekundentakt "auf und ab springen" lassen.

gruß stefan

Ja Stefan, sowas habe ich mir ungefähr vorgestellt, nur ich kenne mich mit der Ansteuerung von Matrix überhaupt nicht aus, gut ich lese in den Tutorials nach aber da ist vieles für mich wie Bömische Dörfer, die sind alle so kompliziert geschrieben. Naj ich werde schon was finden, damit ich wenigstens den Anfang finde, Bis jetzt ist mir das andere ja auch alles gelungen, aber es dauert eben etwas.

l.G.Jürgen

hi,

weißt Du, wie eine matrixansteuerung im prinzip funktioniert?

gruß stefan

Ich weis nur das ich jedesmal wenn ich eine LED leuchten lassen möchte die Koordinaten eingeben müsste, wie bei einem Schachbrett, also um oben links die Led an zu schalten , schalte ich die linke Reihe auf HIGH und die Oberste Reihe auf LOW. So müsste es gehen und mit den anderen LED das ist mir im Prinzip schon klar. Aber wenn ich das Programm so gestalten würde würde es natürlich Ellen Lang. Also denke ich mir das ich 2 Arrays anlegen muß 1 mit den x Koordinaten und 1 mit den y Kordinaten, So stelle ich mir das zumindest Theoretisch vor. Ob es so geht weis ich nicht.

l.G.Jürgen

Nur zur Info Jürgen, AM/PM schaltet sich nicht um 18 bzw 6Uhr um :wink:

0 ... 12 -> 0 ... 12AM
12 ... 0 -> 0 ... 12 PM

hi,

nein, jürgen, ich glaube, so ganz hast Du das noch nicht.

bei einer matrix schaltet man jeweils alle leds einer reihe (ich geh's mal von den reihen aus an) nach bedarf ein oder eben nicht. in Deinem fall des AM würdest Du zuerst alle minus-beinchen der obersten reihe (nur der obersten) mit GND versorgen und gleichzeitig die plus-beinchen der spalten 1, 2, 3, 5 und 9 mit +.
dann GND weg von der obersten reihe, GND auf die zweite reihe und die spalten 1, 3, 5, 6 , 8 und 9 auf + .
gnd weg von der zweiten reihe, GND auf die dritte reihe und + auf die spalten 1, 2, 3, 5, 7, und 9.

usw bis alle reihen durch sind und wieder von vorn beginnen. das ganze so schnell, das das auge es nicht sieht.

mit schieberegistern hast Du ja schon gearbeitet, Du kennst sie also. wenn Du also ein SR hast, bei dem Du 9 (blöde zahl) anschlüsse auf GND schalten kannst und ein zweites SR, mit dem Du 9x plus liefern kannst, ist es nur noch eine frage der programmierung.

gruß stefan

sschultewolter, Danke für die Nachricht ich war echt der Überzeugung das um 18 Uhr gewechelt würde :slight_smile:

Eisbaer, Ok das habe ich soweit Kapiert, Danke dann werde ich mir einmal ein paar Neue SR besorgen und die Sache angehen. :slight_smile:

l.G.Jürgen

Nur zur Info Jürgen, AM/PM schaltet sich nicht um 18 bzw 6Uhr um :wink:

Nein, es ist viel schlimmer:
Bei AM/PM gibt es keine 0 Uhr.

01 = 1 AM ( soweit richtig, sschultewolter )
..
11 = 11 AM
12 = 12 PM (!)
13 = 1 PM
..
23 = 11 PM
00 = 12 AM (! Geisterstunde !)

wobei das mit dem Gleichheitszeichen so eine Sache ist, denn die benutzen auch andere Zeitzonen und die Amerikaner schalten sogar die Sommerzeit an einem anderen Datum um.

( Wenn es nur um Jürgens Anzeige ginge: Man kann mit einem 5V Arduino-Pin 2 rote LED in Serie gemeinsam schalten und den Rest fest verdrahten. Fertig ist die AM/PM Umschaltung ohne multiplexen. Dann bräuchte man auch keine 81 LED, von denen die meisten nie an sind. :wink:

Multiplexen heisst für mich als Laien: n*m Led mit n+m Pins steuern , also 18 Pins für 81 LED.
9 Bit SR sind tatsächlich echt schwer zu finden :wink:

BlinkenLight-Udo steuert seine 20 Leds mit allen 20 vorhandenen Pins an.
Für 18 Pins bräuchtest du nicht unbedingt ein SR.
Oder rechne mit einem SR für 8*11 = 88 Led, brauchst du 11 + 3 Pins

kleine Platiene gebastelt, mit einer 9x9 Matrix von 3mm LED. Die Lötarbeiten habe ich fertig und muss nur noch die Anschlüsse verdrahten

Bis dahin sollte dir das mit dem Multiplexen aber klar sein. Klare Reihen/Spalten - Geometrie ist natürlich einfacher :wink:

hi,

Wenn es nur um Jürgens Anzeige ginge: Man kann mit einem 5V Arduino-Pin 2 rote LED in Serie gemeinsam schalten und den Rest fest verdrahten.

klar, der einzige unterschied sind ja die 2 leds vom A. da hast Du besser mitgedacht als ich.

ich könnte mir aber vorstellen, daß jürgen das mit dem multiplexen lernen will.
die reine anzeige für die würde ich aber wirklich mit einem 74HC595 und einem ULN2003 erledigen. reicht auch mit für's blinken und braucht nur drei pins.

gruß stefan

Aus unseren Konjunktiven "könnte" und "ginge" ist zu sehen, dass wir nicht wirklich unterschiedlicher Meinung sind. :wink:

Würdest du das " mit einem 74HC595 und einem ULN2003 "
mit jeweils 3 machen (also für eine max 1212 oder 1014 Matrix ) ???

Oder wie geht das mit einem Schieberegister und 3 Pins ?

hi,

nein, ich dachte daran, einen 595er und einen 2003 oder 2803 hintereinander zu schalten, dann kann ich 8mal bis zu 200mA schalten (nicht auf einmal).
einmal die 2 vom A, einmal die 9 oben und einmal die 9 unten. das würde auch ohne 595er gehen mit drei beinchen vom arduino, aber so kann jürgen mit den "überschüssigen" 2 reihen oben und unten und den 5 zusätzlichen schaltbaren kanälen ein wenig spielen 8) .

gruß stefan

Die Platiene mit der Verdrahtung für PM und AM wo beim A lediglich die 2 Unteren rechten LED weg geschaltet werden die habe ich schon lange hier fertig liegen und die Abfrage für Tag und nacht schon im Programm, aber darum ging es mir nicht. Mich interessiert es wie das mit einer Matrix geht und wie schon betont, wenn ich wissen wollte ob es Tag oder Nacht ist schaue ich aus dem Fenster :slight_smile: Nur ich habe mir im Inet soviele Matrix und Laufschriften an gesehen die mir echt Gut gefallen haben und mit irgendwas muss ich ja anfangen um das zu lernen. Da habe ich mir gedacht warum nicht bei der UHR. Aber leib das Ihr Euch so viele Gedanken macht. Ich finde es Toll , mit jedem Tipp komme ich weiter und das freut mich. So ich muss mich sputen muss zum Wohnwagen für einen Bekannten ein paar Türen lackieren. Schönes Wochenende .

l.G.Jürgen

Hallo Leute

Ich habe da noch einmal eine Frage zu der Matrix ansteuern. Als Beispiel nehme ich einmal eine Matrix von 3x5 und möchte da ein A abbilden.
X X X
X X
X X X
X X
X X
So ungefähr. Mit der Erklärung von Eisbaer komme ich da nicht zurecht. Da habe ich immer alle LED an.

digitalWrite (led18,LOW) // GND 1. Reihe an
analogWrite (led1,255) // Plus 1.Spalte
analogWrite (led2,255) // Plus 2.Spalte X X X
analogWrite (led3,255) // Plus 3.Spalte
digitalWrite (led18,HIGH) // GND 1.Reihe aus

digitalWrite (led17,LOW) // GND 2. Reihe an
analogWrite (led1,255) // Plus 1.Spalte X X
analogWrite (led3,255) // Plus 3.Spalte
digitalWrite (led18,HIGH) // GND 2.Reihe aus

digitalWrite (led16,LOW) // GND 3. Reihe an
analogWrite (led1,255) // Plus 1.Spalte
analogWrite (led2,255) // Plus 2.Spalte X X X
analogWrite (led3,255) // Plus 3.Spalte
digitalWrite (led16,HIGH) // GND 3.Reihe aus

digitalWrite (led15,LOW) // GND 4. Reihe an
analogWrite (led1,255) // Plus 1.Spalte X X
analogWrite (led3,255) // Plus 3.Spalte
digitalWrite (led15,HIGH) // GND 4.Reihe aus

digitalWrite (led14,LOW) // GND 5. Reihe an
analogWrite (led1,255) // Plus 1.Spalte X X
analogWrite (led3,255) // Plus 3.Spalte
digitalWrite (led14,HIGH) // GND 5.Reihe aus

und das Zeitlich in einer Schleife laufen lassen und die Geschwindigkeit anpassen.

Ich weis nicht ob ich es so richtig erklärt habe , da ich mit der Logik da nicht zurecht komme. bei mir läuft zwar das GND reihenweise durch also AN undAUS der LED, jedoch bekomme ich das A nicht hin ich habe immer den ganzen Block beleuchtet. Ich versuche das schon die ganze zeit auf einen Arduino UNO ans laufen zu bringen aber es klappt nicht. Ich weis das ich es auch anders machen könnte um das A darzustellen mit festes verdrahten, aber mir geht es ja gerade darum das zu lernen mit so einer Matrix .

l.G.Jürgen

hi,

Du setzt led1 bis led3 nie auf 0 zurück,

gruß stefan

digitalWrite (led17,LOW) // GND 2. Reihe an 
analogWrite (led1,255) // Plus 1.Spalte               X   X

analogWrite (led3,255) // Plus 3.Spalte 
digitalWrite (led18,HIGH) // GND 2.Reihe aus

Du muß das nichtleuchtende LED irgendwann ausschalten
es fehlt im obrigen Kode

analogWrite (led2,0) // Minus 3.Spalte

Entweder Schaltest Du nach jeder angesteuerten Reihe alle LED wieder aus oder bei jeder Reihe alle LED ein bzw aus.
Auch ist es besser led 17 auf LOW zu legen und dann wieder led 17 auf High

Grüße Uwe

Hallo Ihr Lieben, :slight_smile:

Ich habe es geschafft, ich war der Meinung wenn ich durch digitalWrite(xxx,HIGH); GND abgeschaltet habe dann wäre das in Ordnung.

Danke noch einmal für Eure Hilfe, jetzt kann ich entlich experimentieren , Hier ein Link zum Video:

http://www.vidup.de/v/BXYo7/

l.G.jürgen