INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino Nano ATmega328 LED Madrix
24.12.2014, 01:08
Beitrag #1
Arduino Nano ATmega328 LED Madrix
Hallo zusammen. Bin an einem kleinen Project dran, dabei habe ich eine Arduino Nano mit einem ATmega328 verbaut. Zusätzlich verwende ich 2 mal 2 Schieberegister 595 in Serie (Anschluss D3-D8).
Mit den Schieberegister habe ich eine LED Matrix 15*15 aufgebaut.
Nun mein Problem.. Kann es sein das die Nano zu langsam ist für Multiplexing?
Die LEDs blinken anstelle zu leuchten Huh
Sobald ich dann noch einen Wert über den Serial Monitor beobachte wird es noch schlimmer!
Kann mir jemand helfen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.12.2014, 11:14
Beitrag #2
RE: Arduino Nano ATmega328 LED Madrix
(24.12.2014 01:08)Pascu87 schrieb:  Hallo zusammen. Bin an einem kleinen Project dran, dabei habe ich eine Arduino Nano mit einem ATmega328 verbaut. Zusätzlich verwende ich 2 mal 2 Schieberegister 595 in Serie (Anschluss D3-D8).
Mit den Schieberegister habe ich eine LED Matrix 15*15 aufgebaut.
Nun mein Problem.. Kann es sein das die Nano zu langsam ist für Multiplexing?
Nein, definitiv nicht. Womöglich hast Du irgendwelche delay() im Coding.

Zitat:Sobald ich dann noch einen Wert über den Serial Monitor beobachte wird es noch schlimmer!
Serial.write() braucht auch ein bisschen Zeit, insbesondere wenn Du noch ein paar flush() eingefügt hast.

Zitat:Kann mir jemand helfen?
Nicht ohne Dein Coding.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2014, 18:42 (Dieser Beitrag wurde zuletzt bearbeitet: 27.12.2014 19:40 von Pascu87.)
Beitrag #3
RE: Arduino Nano ATmega328 LED Madrix
So die Feiertage sind vorbei und das Basteln geht weiterWink
Ist hier das erste mal das ich mich an ein Forum richte... wie zum Teufel kann ich eine Datei anhängen?! (peinlich) Wollte eigentlich noch den Schaltplan posten.

Habe den Code aufs min. gekürzt.





const int latchPinR = 3;
const int clockPinR = 5;
const int dataPinR = 4;
const int latchPinC = 6;
const int clockPinC = 8;
const int dataPinC = 7;
int c = 0;
int r = 0;

const int image0[4][15] = {\
{8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,},\
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},\
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},\
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,} };




void setup() {

pinMode(latchPinR, OUTPUT);
pinMode(clockPinR, OUTPUT);
pinMode(dataPinR , OUTPUT);
pinMode(latchPinC, OUTPUT);
pinMode(clockPinC, OUTPUT);
pinMode(dataPinC , OUTPUT);

digitalWrite(latchPinC, LOW); //Alle Schieberegister auf 0
digitalWrite(latchPinR, LOW);
shiftOut(dataPinC, clockPinC, MSBFIRST, 0);
shiftOut(dataPinC, clockPinC, MSBFIRST, 0);
shiftOut(dataPinR, clockPinR, MSBFIRST, 0);
shiftOut(dataPinR, clockPinR, MSBFIRST, 0);
digitalWrite(latchPinC, HIGH);
digitalWrite(latchPinR, HIGH);
Serial.begin(9600);




}

void loop() {

for (c = 0; c <=7 ; c++) // Testlauf nur mit den ersten 8*8 LEDs
{

for (r = 0; r <=7 ; r++) // Testlauf nur mit den ersten 8*8 LEDs
{
digitalWrite(latchPinC, LOW);
digitalWrite(latchPinR, LOW);
shiftOut(dataPinR, clockPinR, MSBFIRST, B00000001<<r);
shiftOut(dataPinR, clockPinR, MSBFIRST, 0);
shiftOut(dataPinC, clockPinC, MSBFIRST, image0[0][c]);
shiftOut(dataPinC, clockPinC, MSBFIRST, 0);
digitalWrite(latchPinR, HIGH);
digitalWrite(latchPinC, HIGH);
Serial.print©;
Serial.print®;
}}

}

Jetzt noch mit dem SchemaBig Grin


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2014, 20:57
Beitrag #4
RE: Arduino Nano ATmega328 LED Madrix
Bei mir lässt sich das gepostete Programm nicht fehlerfrei übersetzen.Rolleyes
Das liegt wahrscheinlich daran dass die Forensoftware eine eigene Version daraus gemacht hat.
Verwende doch bitte #...# für Programmcode.

Das sieht dann so aus:
Code:
//mein Programm
...
...

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2014, 21:12
Beitrag #5
RE: Arduino Nano ATmega328 LED Madrix
okey werde ich das nächste mal machen. Dass Problem liegt beim Script in den letzten 2 Zeilen sollte Serial.print© und Serial.print® sein.

Wenn du jetzt im Array z.B [0][3] zu einer 7 änderst dann fängt meine Anzeige wild an zu blinken.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2014, 23:36 (Dieser Beitrag wurde zuletzt bearbeitet: 27.12.2014 23:37 von Pascu87.)
Beitrag #6
RE: Arduino Nano ATmega328 LED Madrix
So habe nochmals ein Update:




const int latchPinR = 3;
const int clockPinR = 5;
const int dataPinR = 4;
const int latchPinC = 6;
const int clockPinC = 8;
const int dataPinC = 7;
int lc = 0;
int lr = 0;

const int image0[4][15] = {\
{1, 2, 4, 8, 16, 32, 64, 128, 0, 0, 0, 0, 0, 0, 0,},\
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},\
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},\
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,} };


void setup() {

pinMode(latchPinR, OUTPUT);
pinMode(clockPinR, OUTPUT);
pinMode(dataPinR , OUTPUT);
pinMode(latchPinC, OUTPUT);
pinMode(clockPinC, OUTPUT);
pinMode(dataPinC , OUTPUT);

digitalWrite(latchPinC, LOW); //Alle Schieberegister auf 0
digitalWrite(latchPinR, LOW);
shiftOut(dataPinC, clockPinC, MSBFIRST, 0);
shiftOut(dataPinC, clockPinC, MSBFIRST, 0);
shiftOut(dataPinR, clockPinR, MSBFIRST, 0);
shiftOut(dataPinR, clockPinR, MSBFIRST, 0);
digitalWrite(latchPinC, HIGH);
digitalWrite(latchPinR, HIGH);
Serial.begin(9600);




}

void loop() {

for (lc = 0; lc <=7 ; lc++)
{


for (lr = 0; lr <=7 ; lr++)
{

digitalWrite(latchPinR, LOW);
digitalWrite(latchPinC, LOW);
shiftOut(dataPinC, clockPinC, MSBFIRST, B00000001<<lr);
shiftOut(dataPinC, clockPinC, MSBFIRST, 0);
shiftOut(dataPinR, clockPinR, MSBFIRST, image0[0][lr]);
shiftOut(dataPinR, clockPinR, MSBFIRST, 0);
digitalWrite(latchPinR, HIGH);
digitalWrite(latchPinC, HIGH);


Serial.println(lc);
Serial.println(lr);
}}

}


-----------------------------------
Habe noch einen Anfängerfehler in dem alten Code gefunden.
Jedoch auch hier flackern die Leds anstatt zu leuchten.

(27.12.2014 20:57)ardu_arne schrieb:  Bei mir lässt sich das gepostete Programm nicht fehlerfrei übersetzen.Rolleyes
Das liegt wahrscheinlich daran dass die Forensoftware eine eigene Version daraus gemacht hat.
Verwende doch bitte #...# für Programmcode.

Das sieht dann so aus:
Code:
//mein Programm
...
...

Gruß
Arne


das mit dem #...# habe ich nicht hinbekommen, sorry
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2014, 01:04
Beitrag #7
RE: Arduino Nano ATmega328 LED Madrix
Kurz nochmal zum #...#.
Oben im Eingabefenster für einen neuen Beitrag gibt es eine Reihe von Icons.
Dabei ist in der unteren Zeile das 3. Zeichen von rechts ein #.

Dieses Zeichen klickst du an.
Im Eingabefeld erscheint dann [ code]
dahinter kopierst du deinen Programmcode. (Copy and Paste)
Mit dem Cursor gehst du dann zu Ende des Programmcodes.
Dann klickst du erneut auf das #-Zeichen.
Im Eingabefeld erscheint dann [/code]
Alles was zwischen [ code] und [/code] steht wird dann als Code formatiert gepostet.

Nun zu deinem Programm:
Im Prinzip hab ich erst mal keine Fehler gefunden.
Unglücklich ist aber, dass du die Daten für die Spalten immer auch bei der Ausgabe für die Reihe mit ausgibst. Das ist eigentlich unnötig weil sich an den Spaltendaten nichts ändert. Es kostet einfach nur wertvolle Zeit.

Probiere mal folgende Version:
Code:
const int latchPinR = 3;
const int clockPinR = 5;
const int dataPinR = 4;
const int latchPinC = 6;
const int clockPinC = 8;
const int dataPinC = 7;
int lc = 0;
int lr = 0;

const int image0[4][15] = {\
{1, 2, 4, 8, 16, 32, 64, 128, 0, 0, 0, 0, 0, 0, 0,},\
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},\
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},\
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,} };


void setup() {

pinMode(latchPinR, OUTPUT);
pinMode(clockPinR, OUTPUT);
pinMode(dataPinR , OUTPUT);
pinMode(latchPinC, OUTPUT);
pinMode(clockPinC, OUTPUT);
pinMode(dataPinC , OUTPUT);

digitalWrite(latchPinC, LOW); //Alle Schieberegister auf 0
digitalWrite(latchPinR, LOW);
shiftOut(dataPinC, clockPinC, MSBFIRST, 0);
shiftOut(dataPinC, clockPinC, MSBFIRST, 0);
shiftOut(dataPinR, clockPinR, MSBFIRST, 0);
shiftOut(dataPinR, clockPinR, MSBFIRST, 0);
digitalWrite(latchPinC, HIGH);
digitalWrite(latchPinR, HIGH);
Serial.begin(115200);




}

void loop() {

for (lc = 0; lc <=7 ; lc++)
{
digitalWrite(latchPinC, LOW);
shiftOut(dataPinC, clockPinC, MSBFIRST, lc);
shiftOut(dataPinC, clockPinC, MSBFIRST, 0);
digitalWrite(latchPinC, HIGH);  

for (lr = 0; lr <=7 ; lr++)
{
digitalWrite(latchPinR, LOW);
shiftOut(dataPinR, clockPinR, MSBFIRST, image0[0][lr]);
shiftOut(dataPinR, clockPinR, MSBFIRST, 0);
digitalWrite(latchPinR, HIGH);

//Serial.print(lc);
//Serial.print(" - ");
//Serial.println(lr);
}}

}

Ich verstehe auch nicht was B00000001<<lr in der Zeile
Code:
shiftOut(dataPinC, clockPinC, MSBFIRST, B00000001<<lr);
machen soll.
Da gehört doch
Code:
shiftOut(dataPinC, clockPinC, MSBFIRST, lc);
hin, oder nicht?

Ich kann das alles nicht wirklich testen.
Habe zwar auch einen Arduino Nano mit einem ATmega328 zum probieren, aber keine Umgebung mit LED Madrix und den Schieberegistern.
Mit einem einfachen Oszilloskop kann ich sehen dass an den Ausgängen etwas heraus kommt was die Schieberegister beschreiben soll, ob aber daran angeschlossene LEDs evtl. blinken kann ich so nicht feststellen.

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2014, 10:24
Beitrag #8
RE: Arduino Nano ATmega328 LED Madrix
(28.12.2014 01:04)ardu_arne schrieb:  ...
Ich verstehe auch nicht was B00000001<<lr in der Zeile
Code:
shiftOut(dataPinC, clockPinC, MSBFIRST, B00000001<<lr);
machen soll.
Da gehört doch
Code:
shiftOut(dataPinC, clockPinC, MSBFIRST, lc);
hin, oder nicht?
...

Hi Arne,
also das B0... heist Bit-Format und das << Shift Left aber DAS weist du ja sicherlich, nur ob das auch Logisch ist an der Stelle kann ich nicht beurteilen.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Ardunio Nano 3,3V Mathias 5 117 24.11.2016 22:38
Letzter Beitrag: Tommy56
  Arduino NANO mit zwei 1.8 SPI-tfts Thandor 2 99 15.11.2016 23:18
Letzter Beitrag: Thandor
  Arduino Nano - VIN Mathias 16 683 22.09.2016 21:39
Letzter Beitrag: ardu_arne
  Arduino Nano und SD Card emjott 3 327 09.09.2016 12:15
Letzter Beitrag: Bitklopfer
  Atmega328 Pin A6 und A7 Mathias 4 293 10.08.2016 21:37
Letzter Beitrag: hotsystems
  Arduino Nano. Externe Stromversorgung reimundko 1 610 26.06.2016 13:44
Letzter Beitrag: hotsystems
  Arduino Nano - RGB LED Controller MasT3r-A 13 824 29.04.2016 11:43
Letzter Beitrag: hotsystems
Photo 2 RC-Kanäle am Arduino Nano Clone do1xxy 1 443 04.04.2016 21:10
Letzter Beitrag: hotsystems
  Arduino Nano + Funkmodul nRF24L01+ luxusl 1 811 26.02.2016 17:05
Letzter Beitrag: arduinopeter
  Raspberry Pi mit Arduino Nano ein- und auschalten Genderman2 7 876 18.02.2016 21:12
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste