Pages: [1]   Go Down
Author Topic: LED-Cube 3³ - Probleme mit Multiplexing  (Read 722 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Full Member
***
Karma: 2
Posts: 171
... has much to learn
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo!
Ich komme zurück auf meinen 3er Würfel.
Ich hab jetzt eine Software geschrieben, die das macht, was ich möchte. Allerdings tut sie es dann doch nicht so wie ich möchte und ich weiss nicht recht, woran das liegt. Ob hier ein elektrotechnisches Problem vorliegt oder ein softwareseitiges.

Und zwar ist im folgenden das Bitmuster so, dass nur die letzte LED der obersten Ebene leuchten sollte. Das funktioniert auch, wenn ich mir die Bildmatrix über Serial.print ausgeben lassen, die Anzeige ist allerdings anders.

Dort leuchtet die erste LED jeder Ebene, die letzte LED der untersten Ebene und die letzte LED der obersten Ebene (allerdings deutlich dunkler als die anderen). Das wirkt für mich irgendwie so, als läge hier nicht unbedingt ein softwareseitiges Problem vor, sondern die technische Seite will nicht.

Im folgenden der relevante Teil des Quellcodes:
Code:
// Definition der Pins des Arduino, an denen der Wuerfel haengt
const int ebenen[] = {10,11,12};
const int saeulen[] = {1,2,3,4,5,6,7,8,9};

// Forward-Deklaration /////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////

void zeichneFrame(long, int);

void setup() {
// Pins als Outputs definieren
  // Ebenen
  for (int i=0; i<3; i++) { pinMode(ebenen[i], OUTPUT); }
  // Saeulen
  for (int i=0; i<9; i++) { pinMode(saeulen[i], OUTPUT); } 
}

void loop() {
  // Do cool stuff here... ;-D
  long test = 0b00000000000000000000000000100000;
  //            |||   |||   |||   |||   |||
  zeichneFrame(test, 50);
}

// bild (long) enthaelt (die ersten) 27 Bits mit Bildinformation, am Schluss 5 leere Bits
// dauer (int) enthaelt die Anzeigedauer in ms, muss noch mit 10 multipliziert werden
void zeichneFrame(long bild, int dauer=5) {
  // Array of Boolean um Matrixbilder der einzelnen Ebenen zu speichern...
  // 3 x 9 Bit des uebergebenen long-Wertes
  boolean bildmatrix[3][9];
 
  // Zaehlvariable um mit bitRead() links zu starten
  int bitOffset = 31;
 
  // Uebergebenen long-Wert bitweise abarbeiten und in das Array schreiben
  // Die ersten 9 Bit definieren die unterste Ebene, beginnend mit der ersten LED, dann 2. Ebene 
  for(int i=0; i<3; i++) {
    for(int j=0; j<9; j++) {
      bildmatrix[i][j] = bitRead(bild, bitOffset);
      bitOffset--;
    }
  }   
 
  // Laufdauer des Wuerfels speichern, benoetigt fuer Vergleich wg. Bildanzeigezeit
  long max_dauer = millis();
  long spielzeit = 0;
 
  // Anzeige starten und dabei multiplexen, was das Zeug haelt... ;-D
  while(spielzeit < (dauer*10))
  {
    for(int i=0; i<3; i++) {
     
      digitalWrite(ebenen[i], HIGH);
     
      for(int j=0; j<9; j++) {
     
        ((bildmatrix[i][j] == 1) ? digitalWrite(saeulen[j], HIGH) : digitalWrite(saeulen[j], LOW));
        //((bildmatrix[i][j] == 1) ? Serial.println("AN") : Serial.println("AUS"));
      }
     
      digitalWrite(ebenen[i], LOW);
     
    }     
  // Benoetigte Zeit fuer diesen Durchlauf ermitteln und speichern
  spielzeit = millis() - max_dauer;
 
  }

}

Wär schön, wenn sich das mal einer anschaut und vielleicht was findet. Ich find nix mehr, vielleicht hab ich allerding auch zu lange drauf geschaut... ;-D

Danke!
Logged

Beste Grüße
Florian

http://www.flomei.de

Weinsberg, Germany
Offline Offline
God Member
*****
Karma: 3
Posts: 773
A Coder's Tale
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Verdrahtungsplan?
Logged

Germany
Offline Offline
Full Member
***
Karma: 2
Posts: 171
... has much to learn
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gibts nicht... ;-D

Die Anoden sind säulenweise (0.0, 1.0, 2.0) zusammengelötet und gehen direkt auf Arduino-Pins.

Kathoden sind ebenenweise (0.0, 0.1, 0.2, ...) verlötet und gehen über BC 337 Transistoren auf Masse. Gesteuert über Arduino-Pins... ;-)

Danke!
Logged

Beste Grüße
Florian

http://www.flomei.de

Germany
Offline Offline
Full Member
***
Karma: 2
Posts: 171
... has much to learn
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

nAbend!
Hat denn keiner eine Idee was damit sein könnte?

Ein 3er Würfel ist doch noch wahrlich übersichtlich, das muss sich doch machen lassen... ;-D

Danke!

P.S.: Verdrahtungsfehler kann ich ausschließen, mit den Programmen anderer Würfelbauer läuft er auch ohne Probleme...
Logged

Beste Grüße
Florian

http://www.flomei.de

Pages: [1]   Go Up
Jump to: