Go Down

Topic: 5 x 7 DOT LED Matrix Verständnisfrage (Read 5362 times) previous topic - next topic

gegy

Hallo Leute.

Seit einer Woche ca. spiele ich nun mit meinem neun Arduino rum und versuche alles zu verstehen, was ich bisher an Schaltungen gebaut habe. Das gelingt mir auch ziemlich gut. Ich arbeite da mit dem Buch vom Oreilly Verlag - Arduino Physical Computing.
Nun bin ich bei dem Ersten Beispiel mit einer LED Matrix angelangt. Ich habe mir diese besorgt und auf eine Lochplatine gelötet.
Das Datenblatt bekommt man hier: http://www.alldatasheet.com/datasheet-pdf/pdf/232968/KINGBRIGHT/TA20-11EWA.html
Das Auflöten war kein Problem. An die PINs 1,2,5,7,8,9,14 habe ich jeweils einen 150Ohm Vorwiderstand gelötet.
PIN 4 und 12 habe ich freigelassen, da diese ja doppelt belegt sind.
So nun steht in meinem Buch, dass die Reihen (die Pins 1,2,5,7,8,9,14) an die Arduino Pins 1-7 angeschlossen gehören und die Spalten an die Arduino Pins 8-12.
Dies widerspricht jedoch dem was ich bisher gelernt habe, das wenn ich eine LED habe Katode an GND angeschlossen gehört. Ich verstehe das ganze nicht und habe etwas angst, dass ich am Arduino etwas zerstöre. Irgendwie muss doch ein Stromfluss zusammen kommen und wie soll das geschehen, wenn ich keinen Anschluss an GND vornehmen, oder können die Digitalen eingänge des Arduinos auch als GND fungieren? Könne mir das jemand vielleicht kurz erklären, bevor ich die Matrix an den Arduino hänge?
Danke!

sth77

Jeder digigitale Pin des Arduino bzw. des verwendeten Mikrocontrollers kann entweder High oder Low ausgeben. Dabei entspricht High nahezu 5V, Low 0V, ist also der Masse gleichzusetzen.
Dass heißt, du kannst von einem Ausgangspin (High) zu einem Ausgangspin auf Low einen Strom fließen lassen.
Mein verwaister Arduino-Blog: http://www.sth77.de/ - letzter Eintrag: Diamex-ISP in der irgendwann mal aktuellen Arduino-IDE 1.6.4

gegy

Oh ok, so in etwa habe ich mir das schon gedacht. War mir nur nicht sicher und wollte nichts zerstören. Vielen Dank für die einfache Erklärung. Schade, dass dies nicht in dem Buch so beschrieben ist.

gegy

Ne frage noch:

Was passiert, wenn ich beispielsweise pin 1 und pin 2 am arduino auf HIGH schalte und beide zusammen schließe? Raucht dann was ab? normal nicht, oder?

gegy

Nun hab ich noch ein Problem mit dem Code. Wenn ich diesen Code aufspiele leuchten alle LEDs der Matrix, es sollten aber nur die LEDs leuchten, die in der 8Bit Variable auf 1 gesetzt sind. Was stimmt denn da nicht?
Code: [Select]
// definiere Zeilen und Spalten als Array vom Typ uint8_t
uint8_t rows[7] = {1, 2, 3, 4, 5, 6, 7};
uint8_t columns[5] = {8, 9, 10, 11, 12};
void setup() {
for (int i = 0; i < 7; i++) {
 pinMode(rows[i], OUTPUT);
}
for (int i = 0; i < 5; i++) {
 pinMode(columns[i], OUTPUT);
 }
}

void loop() {
 showMatrix();
}
// Definiere eine 7x5-Matrix. uint8_t ist eine vorzeichenlose 8-
// Bit-Integer-Variable. Setze das Muster so, dass eine Diagonale
// angezeigt wird.
uint8_t matrix[7][5] = {
{ 1, 0, 0, 0, 0},
{ 0, 1, 0, 0, 0},
{ 0, 1, 0, 0, 0},
{ 0, 0, 1, 0, 0},
{ 0, 0, 1, 0, 0},
{ 0, 0, 0, 1, 0},
{ 0, 0, 0, 0, 1},
};

void showMatrix() {
 // durchlaufe alle fünf Spalten
 for (int x = 0; x < 5; x++) {
   // setze vorherige Zeile auf 0
   // für jede Zeile setze den Wert der Matrix auf den
   //entsprechenden Pin
   for (int y = 0; y < 7; y++) {
     digitalWrite(rows[y], !matrix[y][x]);
   }
 // setze aktuelle Spalte auf 1
 digitalWrite(columns[x], 1);
 delay(1);
 // Lösche aktuelle Spalte
 digitalWrite(columns[x], 0);
}
}


sth77

Ein Fehler im Programm ist mir gerade nicht aufgefallen. Funktioniert deine Matrix rihtig? also wenn du +5V an eine Spalte anlegst und mit 0V (Masse) an die einzelnen Zeilen? Prinzipiell würde ich immer zuerst die Hardware checken...
Mein verwaister Arduino-Blog: http://www.sth77.de/ - letzter Eintrag: Diamex-ISP in der irgendwann mal aktuellen Arduino-IDE 1.6.4

shebu_18

Wenn mann zwei Ausgange, die auf 5v geschaltet sind, beruhrs pasiert nichts.

Bei deinem code mussten rows immer auf LOW, 0V gesetzt sein, da du leds benuntz.

gegy

So hab die Hardware nochmals gecheckt, und einen Kontaktfehler behoben. Leider leuchten noch immer alle LEDs auf und nicht das bild wie in der Matrix Variable.

gegy

#8
Oct 23, 2010, 10:58 pm Last Edit: Oct 23, 2010, 10:58 pm by gegy Reason: 1
So, ich habe nun mal das invert Zeichen (!) aus der Zeile
Code: [Select]
digitalWrite(rows[y], !matrix[y][x]);
entfernt
Code: [Select]
digitalWrite(rows[y], matrix[y][x]);


Jetzt wird auf der Matrix endlich mal was einigermaßen richtiges angezeigt.
Jedoch leuchten alle LEDs die nicht leuchten sollen. Normal sollten jedoch ja nur die LEDs leuchten, deren wert in der Matrix-Variable auf 1 gesetzt sind, oder? Dies sollte ja das Invert ! bewirken.



uwefed

Nein, Du kannst keine Ausgänge des ATmega paralellschließen; so machst Du den Controller kaputt.
Grüße Uwe

gegy

Ähm, worauf bezog sich deine Antwort?

uwefed

Meine Antwort bezog sich auf Reply #3
die Frage:
Quote
Was passiert, wenn ich beispielsweise pin 1 und pin 2 am arduino auf HIGH schalte und beide zusammen schließe? Raucht dann was ab? normal nicht, oder?

Grüße Uwe

LC_Data

@Uwe... verstehe ich nicht...was sollte denn kaputt gehen ???
Es besteht doch keine Potentialdifferenz !?
(mal abgesehen von der grundsätzlichen Fragwürdigkeit die Ports zusammen zu schalten)

dh1ao

#13
Oct 24, 2010, 02:43 am Last Edit: Oct 24, 2010, 02:47 am by dh1ao Reason: 1
wenn man zwei Ausgänge gleichzeitig, absolut gleichzeitig´, auf  HIGH schaltet, kann es gut gehen.

Das digitalWrite braucht einige Zyklen. Die Ausgänge werden mit hoher Wahrscheinlichkeit nicht gleichzeitig gleiches Potential erreichen.

Es wird nicht qualmen... Atmels sterben leise  ;)

Uwe hat da absolut recht! Egal ob push-pull, totem-out oder was auch immer. Ausgänge zusammenschalten ist babba... NO GO... außer zu Silvester

gegy

Quote
(mal abgesehen von der grundsätzlichen Fragwürdigkeit die Ports zusammen zu schalten)


Natürlich ist das nicht sinnvoll, jedoch können ja auch Schaltungsfehler passieren, oder Programmierfehler. Deswegen habe ich mal nachgefragt, weil sowas wird grundsätzlich in keinem Buch erwähnt.

Go Up