Freitag, 28. Oktober 2011

Neues von der Superflux-QLOCKTWO

 Inzwischen macht meine QLOCKTWO auf der Basis von Superflux-LEDs und MAX7219-LED-Treiberchips Fortschritte.

Auf den Seiten des Arduino-Projektes gibt es ein gutes Tutorial zu dem Thema.

Links sieht man noch ein paar Komponenten der neuen Variante. Zunächst ein sehr preisgünstiges Einbaunetzteil von Pollin. Mit 2,3 Ampere und stabilen 5 Volt ist es ideal für das Basteln mit Arduinos. Und mit einem Preis von 1,50 € ist es auch unschlagbar günstig.
Dann kommt eine USB-Buchse von Reichelt. Ich möchte gerne die Software der Uhr ändern können, ohne das Gehäuse zu öffnen. Und dann kommt noch die 220 Volt-Buchse für das Netzteil.
 Die Matrix wird von vier MAX7219-LED-Treiberchips angesteuert, je ein Chip für ein Viertel der Matrix. Es gab in den Kommentaren diverse Vorschläge, wie man die Matrix mit weniger Chips ansteuern könnte. Das kann jeder gerne einmal probieren, man muss nur aufpassen, dass ein Chip ja eine Matrix steuert, also die LEDs nicht beliebig aufgeteilt werden kann. Und mann muß danach natürlich auch noch die Software im Griff behalten.
Die Chips sind wie Shiftregister mit Überläufen untereinander verbunden. In der Software gibt es dann eine kleine Umsetzung zwischen der alten Matrix und der geviertelten Matrix: writeMatrix() ruft setPixel() auf...


/**
 * Die Matrix ausgeben
 */
void writeMatrix() {
  for(int y=0; y<16; y++) {
    for(int x=0; x<16; x++) {
      if((matrix[y] & 1 << x) == (1 << x)) {
        setPixel(15-x, y, true);
      } else {
        setPixel(15-x, y, false);
      }
    }
  }
}

... und setPixel() teilt die Koordinaten auf die Chips auf...


/**
 * Einen X/Y-koordinierten Pixel in der Matrix setzen.
 */
void setPixel(int x, int y, boolean state) {
  // 1. MAX7219
  if((x < 6) && (y < 5)) {
    lc.setLed(0, x, y, state);
  } 
  
  // 2. MAX7219
  if((x < 6) && (y > 4) && (y < 10)) {
    lc.setLed(1, x, y-5, state);  
  } 
  
  // 3. MAX7219
  if((x > 5) && (x < 11) && (y < 5)) {
    lc.setLed(2, x-6, y, state);
  } 
  
  // 4. MAX7219
  if((x > 5) && (x < 11) && (y > 4) && (y < 10)) {
    lc.setLed(3, x-6, y-5, state);  
  }
}

Also eigentlich kein Hexenwerk.




 Die Steuerplatine ist unverändert, allerdings habe ich den USB-BUB fest mit dem RBBB verlötet, weil ich ja über die oben erwähnte Buchse einen einfachen Zugriff auf den RBBB haben möchte.

Zur Zeit fehlen noch die Taster und das DCF77-Empfangsmodul sowie der LDR.
 Hier sieht man die Uhr im Betrieb, links und rechts sind jeweils zwei MAX7219-Chips. Das ist übrigens die dunkelste Einstellung, weil ja der LDR noch fehlt, also einen unendlichen Widerstand hat.
Hier sieht man die Rückseite des Ribba-Rahmens. Die LEDs sind in vier Quadranten aufgeteilt. Silberdrähte führen die vier Matrixen auf die andere Seite.

Kommentare:

  1. Kannst du dann trotz der vier Quadranten die Sekunden anzeigen lassen oder entfaellt diese Funktion?

    Ich wollte mich ueber Weihnachten an einen Nachbau machen und wuerde dann evtl. gleich diese Variante nehmen.

    AntwortenLöschen
  2. Klar, die Uhr arbeitet völlig identisch.

    AntwortenLöschen