Go Down

Topic: Grundlagen zu einer 8x8 LED Matrix (Read 2 times) previous topic - next topic

volvodani

Um die ganze Sache mit dem Shiftout zu beschleunugen kann man auch die SPI Schnittstelle nehmen die ist mindestens um Faktor 5 schneller als das "normale Shifout". Das alles in eine Funktion geschrieben und dann wird das alles auch noch übersichtlicher
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

uwefed


Um die ganze Sache mit dem Shiftout zu beschleunugen kann man auch die SPI Schnittstelle nehmen die ist mindestens um Faktor 5 schneller als das "normale Shifout". Das alles in eine Funktion geschrieben und dann wird das alles auch noch übersichtlicher


Da idl0r jedes LED einzeln über den Ausgang der Schieberegister ansteuert und nicht multiplext ist die Übertragungsgeschwindigkeit kein Problem.
Grüße Uwe

idl0r

#12
Oct 27, 2011, 03:28 pm Last Edit: Oct 27, 2011, 03:36 pm by idl0r Reason: 1


Du mußt die einzelnen Bits des Matrixarrays setzen und dann alle 8 Werte des Arrays IMMER gemeinsam auf einen Rutsch verschicken.

Grüße Uwe



Verstehe ich das jetzt richtig, dass ich ein bit array mit 64 stellen machen soll, sprich für jede LED ein bit, oder soll ich weiterhin mit dem 8 byte array arbeiten? Weil dann verstehe ich nicht ganz was du meinst mit "einzelne bits setzen",weil das tue ich doch indem ich bytes reinschiebe oder?
Und wie kann ich denn ein gesamtes Array auf einen "Rutsch" verschicken/ausgeben? Das geht doch nur über eine Schleife, was dann wieder nicht auf einen rutsch wäre, sondern durchgang für durchgang oder?
MfG: idl0r

uwefed

Code: [Select]
void Snake(){
  int RunterZaehlen = 128;
  for(int i = 0; i< 8;i++){
      digitalWrite(latchPin, LOW);
      Matrix1[1] = RunterZaehlen;
      RunterZaehlen = RunterZaehlen / 2;
      if(millis()>time[i]){
      shiftOut(dataPin, clockPin, MSBFIRST, Matrix1[1]);
      digitalWrite(latchPin, HIGH);
      delay(1000);
      }
     
  }

Hier änderst Du ein Bit und überträgst 1 Byte nicht die ganzen 8 Byte der Matrix.
Die Schieberegister stellen immer die letzten 8 übertraggenen Byte dar!!!!
Grüße Uwe 

idl0r

Hallo uwefed,
ich verstehe jetzt aber nicht ganz wie Sie das meinen mit dem Übertragen des ganzen Arrays. Ich kann doch immernur pro durchlauf einen Byte übertragen oder gibt es hier einen Befehl/"trick", welcher das gesamte
Array überträgt?
Wäre Ihnen für ein Codebeispiel sehr dankbar, da dies meist verständlicher und anschaulicher ist.
Herzlichen dank schonmal für die Hilfe,
idl0r

Go Up