Ansteuern von 48 LEDs


Gepostet Februar 2017, Kategorie: Elektronik


Ansteuern von 48 LEDs

Im Gymnasiums wurde ein Vulkan mit 48 LEDs gebaut, welcher über den Arduino angesteuert werden soll. Zum schnellen Testen von Programmen, habe ich die sichtbare Platine erstellt.


Inhaltsverzeichnis


    Versuchsaufbau

    Platine

    In den folgenden Bildern kann der grobe Aufbau der Platine in EAGLE gesehen werden. Eingezeichnet sind nicht die SHCP- und STCP-Verbindungen. Ein genaueren Überblick sollte das Bild der Rückseite der Platine schaffen. Als Vorwiderstände der LEDs wurden 820 Ohm genutzt, sodass in der Summe maximal 100mA fließen, wenn alle LEDs an sind.

    Schaltplan (für 16 LEDs) Vorlage der Platine für 16 LEDs
    Rückseite der Platine

    Testprogramm

    Das nachfolgende Testprogramm sendet ein bestimmtes Muster jede halbe Sekunde an die Schieberegister. Das Muster wird in einen Array von Type byte mit sechs Elementen gespeichert. Durch den Aufruf der Funktion sendData mit dem Array als Übergabeparameter werden die Schieberegister geladen. Die Pinbelegung des Arduino kann in den ersten drei Zeilen beliebig variiert werden.

    const byte latchPin = 9;   // stcp
    const byte clockPin = 10;  // shcp
    const byte dataPin = 11;  // ds
     
    byte data[] = {0x11, 0x22, 0x44, 0x88, 0xff, 0xaa};
     
    void setup() {
      pinMode(latchPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      pinMode(dataPin, OUTPUT);
    }
     
    void loop() {
      sendData(data);
      delay(500);
    }
     
    void sendData(byte data[]) {
      digitalWrite(latchPin, LOW);
      for (int i=5; i>=0; i--) {
        shiftOut(dataPin, clockPin, MSBFIRST, data[i]);
      }
      digitalWrite(latchPin, HIGH);
    }

    Beobachtungen mit Hilfe eines Logikanalysators

    Im nächten Schritt habe ich bei laufenden Testprogramm mein Bitscope angeschlossen. Logic 0 ist an STCP, Logic 1 an SHCP und Logic 2 an DS angeschlossen. Getriggert wurde auf die fallenden Flanke von SHCP, da dies siehe Programm der Beginn der Datenübertragung ist. Auf dem Datenkanal zeichnet sich das Bild der LEDs nur spiegeldreht ab. Zu erkennen ist, dass für die Übertragung 1,110 Millisekunden benötigt werden. Dies sollte man beachten, wenn man versucht PWM-Signale zu erzeugen. Im zweiten Bild kann man erkennen, dass 23 Mikrosekunden benötigt werden, um 1 Bit zu übertragen. Dies entspricht CPU-Zyklen des Arduino. Vielleicht gibt es hier schneller Übertragungsmöglichkeiten als der Befehl shiftOut.

    Gesamter Signalverlauf Senden eines Bytes

    Wetterdaten Eilenburg
    Temperatur: 6.4 °C
    Luftdruck: 1005.2 hPa
    Luftfeuchte: 79 %
    [mehr]