Arduino-Programmierung - Spielen mit Schieberegistern (a.k.a noch mehr LEDs)

Arduino-Programmierung - Spielen mit Schieberegistern (a.k.a noch mehr LEDs) / DIY

Heute werde ich versuchen, Sie etwas über Schieberegister zu unterrichten. Dies ist ein ziemlich wichtiger Teil der Arduino-Programmierung, im Wesentlichen, weil sie die Anzahl der Ausgänge, die Sie verwenden können, im Austausch für nur 3 Steuerpins erweitert. Sie können auch Schieberegister miteinander verketten, um noch mehr Ausgänge zu erhalten.

Dies ist jedoch ein erheblicher Sprung in der Schwierigkeit gegenüber den vorherigen Tutorials, und ich schlage nachdrücklich vor, dass Sie ein sehr gutes Verständnis für das vorherige Material (Links am Ende dieses Artikels) sowie für das Verständnis der Grundlagen des binären What Is Binary haben. [Technologie erklärt] Was ist binär? [Technologie erklärt] Angesichts der Tatsache, dass Binärdaten für die Existenz von Computern so absolut grundlegend sind, erscheint es merkwürdig, dass wir das Thema noch nie zuvor in Angriff genommen haben. Heute dachte ich, ich würde einen kurzen Überblick darüber geben, welche binären… Read more which Ich habe das letzte Mal geschrieben.

Was ist ein Schichtregister??

Technisch gesehen empfängt ein Ausgangsschieberegister Daten seriell und gibt sie parallel aus. In der Praxis bedeutet dies, dass wir schnell eine Reihe von Ausgabebefehlen an den Chip senden können, um ihn zu aktivieren, und die Ausgänge werden an die entsprechenden Pins gesendet. Anstatt durch jeden Pin zu iterieren, senden wir einfach die erforderliche Ausgabe an alle Pins gleichzeitig, als einzelnes Byte oder mehr Informationen.

Wenn es Ihnen hilft zu verstehen, können Sie sich ein Schieberegister als 'Array' von digitalen Ausgängen vorstellen, aber wir können die üblichen DigitalWrite-Befehle überspringen und einfach eine Reihe von Bits senden, um sie ein- oder auszuschalten.

Wie funktioniert es?

Das verwendete Schieberegister - der 74HC595N, der im Oomlout-Starterkit enthalten ist - benötigt nur 3 Steuerpins. Die erste ist eine Uhr - Sie müssen sich nicht allzu viele Sorgen machen, da die seriellen Arduino-Bibliotheken sie steuern -, aber eine Uhr ist im Grunde nur ein elektrischer Ein / Aus-Impuls, der das Tempo für das Datensignal bestimmt.

Der Latch-Pin wird verwendet, um dem Schieberegister mitzuteilen, wann es seine Ausgänge entsprechend den gerade gesendeten Bits ein- und ausschalten soll, d. H.

Schließlich werden am Daten-Pin die tatsächlichen seriellen Daten mit den Bits gesendet, um den Ein / Aus-Zustand der Ausgänge des Schieberegisters zu bestimmen.

Der gesamte Prozess kann in 4 Schritten beschrieben werden:

  1. Setzen Sie den Daten-Pin für den ersten Ausgangs-Pin des Schieberegisters auf High oder Low.
  2. Takten Sie die Uhr, um die Daten in das Register zu "verschieben".
  3. Setzen Sie das Einstellen der Daten und das Takten der Uhr fort, bis Sie den erforderlichen Status für alle Ausgangspins festgelegt haben.
  4. Betätigen Sie den Latch-Pin, um die Ausgangssequenz zu aktivieren.

Implementierung

Für dieses Projekt benötigen Sie folgende Komponenten:

  • 7HC595N Schieberegisterchip
  • 8 LEDs und entsprechende Widerstände oder was auch immer Sie ausgeben möchten
  • Das übliche Steckbrett, Anschlüsse und ein grundlegendes Arduino

Wenn Sie das Oomlout-Starter-Kit besitzen, können Sie das Breadboard-Layout hier herunterladen.

Hier ist das Montagevideo:

Das Board-Layout:

Und meine zusammengebaute Version:

Ich habe den von Ooolmout gelieferten ursprünglichen Code geändert. Wenn Sie das lieber ausprobieren möchten, können Sie ihn hier vollständig herunterladen. Die Erklärung des Codes ist enthalten. Kopieren Sie das Ganze und fügen Sie es von unten oder aus dem Pastebin ein, um eine Erklärung des Codes zu lesen.

/ * ------------------------------------------------ --------- * | Shift Register Tutorial, basierend auf | * | Arduino-Experimentierset CIRC-05 | * | .: 8 Weitere LEDs:. (74HC595-Schieberegister) | * --------------------------------------------- -------- * | Geändert von James @ MakeUseOf.com | * --------------------------------------------- -------- * / // Pin-Definitionen // 7HC595N hat drei Pins int data = 2; // Wo senden wir die Bits zur Steuerung der Ausgänge int clock = 3; // hält die Daten synchron int Latch = 4; // teilt dem Schieberegister mit, wann die Ausgangssequenz aktiviert werden soll void setup () // setzt die drei Steuerpins auf PinMode (data, OUTPUT); pinMode (Takt, AUSGANG); pinMode (Latch, OUTPUT); Serienbeginn (9600); // damit wir Debug-Nachrichten an den seriellen Monitor senden können void loop () outputBytes (); // unsere Basisausgabe, die 8 Bits schreibt, um zu zeigen, wie ein Schieberegister funktioniert. // outputIntegers (); // sendet einen ganzzahligen Wert als Daten anstelle von Bytes und zählt effektiv im Binärformat.  void outputIntegers () für (int i = 0; i<256;i++) digitalWrite(latch, LOW); Serial.println(i); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, i); digitalWrite(latch, HIGH); delay(100);   void outputBytes() /* Bytes, or 8-bits, are represented by a B followed by 8 0 or 1s. In this instance, consider this to be like an array that we'll use to control the 8 LEDs. Here I've started the byte value as 00000001 */ byte dataValues = B00000001; // change this to adjust the starting pattern /* In the for loop, we begin by pulling the latch low, using the shiftOut Arduino function to talk to the shift register, sending it our byte of dataValues representing the state of the LEDs then pull the latch high to lock those into place. Finally, we shift the bits one place to the left, meaning the next iteration will turn on the next LED in the series. To see the exact binary value being sent, check the serial monitor. */ for (int i=0;i<8;i++) digitalWrite(latch, LOW); Serial.println(dataValues, BIN); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, dataValues); digitalWrite(latch, HIGH); dataValues = dataValues << 1; // Shift the bits one place to the left - change to >>, um die Richtungsverzögerung einzustellen (100);  

Bitverschiebung (Funktion OutputBytes)

Im ersten Schleifenbeispiel - outputBytes () - verwendet der Code eine 8-Bit-Sequenz (ein Byte), die dann bei jeder Iteration der for-Schleife nach links verschoben wird. Es ist wichtig zu beachten, dass das Bit einfach verloren geht, wenn Sie sich weiter als möglich verschieben.

Bitverschiebung erfolgt mit << or >> gefolgt von der Anzahl der Bits, um die Sie verschieben möchten.

Schauen Sie sich das folgende Beispiel an und stellen Sie sicher, dass Sie wissen, was passiert:

Bytewert = B00011010 Wert = Wert << 3 // B11010000 val = val << 2 // B01000000, we lost those other bits! val = val >> 5 // B00000010 

Senden von Ganzzahlen stattdessen (Funktion OutputIntegers)

Wenn Sie anstelle eines Bytes eine ganze Zahl an das Schieberegister senden, wird die Zahl einfach in eine binäre Bytefolge umgewandelt. In dieser Funktion (unkommentiert in der Schleife und Upload, um den Effekt zu sehen), haben wir eine for-Schleife, die von 0 bis 255 zählt (die höchste Ganzzahl, die wir mit einem Byte darstellen können) und sendet diese stattdessen. Es zählt im Wesentlichen binär, daher kann die Reihenfolge etwas zufällig erscheinen, es sei denn, Ihre LEDs sind in einer langen Zeile angeordnet.

Wenn Sie zum Beispiel den erläuterten binären Artikel lesen, wissen Sie, dass die Zahl 44 als 00101100 dargestellt wird, sodass die LEDs 3, 5, 6 an diesem Punkt in der Sequenz aufleuchten.

Verkettung von mehr als einem Schichtregister

Das Bemerkenswerte an Schieberegistern ist, dass sie, wenn sie mehr als 8 Bit Informationen erhalten (oder wie groß ihre Registrierung ist), die anderen zusätzlichen Bits wieder herausschieben. Das bedeutet, Sie können eine Reihe von ihnen miteinander verbinden, eine lange Kette von Bits einschieben und sie in jedes Register getrennt verteilen, ohne dass Sie dazu zusätzliche Codierungen vornehmen müssen.

Obwohl der Prozess und die Schemata hier nicht detailliert beschrieben werden, können Sie das Projekt von der offiziellen Arduino-Site hier ausprobieren, wenn Sie mehr als ein Schichtregister haben.

Andere Artikel der Serie:

  • Was ist Arduino und was können Sie damit machen Was ist Arduino und was können Sie damit machen? Was ist Arduino und was können Sie damit machen? Das Arduino ist ein bemerkenswertes kleines elektronisches Gerät, aber wenn Sie noch nie eines benutzt haben, was genau sind sie und was können Sie damit machen? Weiterlesen ?
  • Was ist ein Arduino Starter Kit und was enthält es? Was ist in einem Arduino Starter Kit enthalten? [MakeUseOf erklärt] Was ist in einem Arduino Starter Kit enthalten? [MakeUseOf erklärt] Ich habe die Arduino-Open-Source-Hardware hier bereits auf MakeUseOf vorgestellt, aber Sie benötigen mehr als nur den eigentlichen Arduino, um etwas daraus zu bauen und tatsächlich loszulegen. Arduino "Starter-Kits" sind… Lesen Sie mehr
  • Weitere coole Komponenten, die Sie mit Ihrem Starter-Kit kaufen können 8 Weitere coole Komponenten für Ihre Arduino-Projekte 8 Weitere coole Komponenten für Ihre Arduino-Projekte Sie denken also über ein Arduino-Starter-Kit nach, fragen sich jedoch, ob es einige grundlegende LEDs und Widerstände gibt genug, um dich für das Wochenende zu beschäftigen? Wahrscheinlich nicht. Hier sind weitere 8… Read More
  • Erste Schritte mit Ihrem Arduino Starter Kit Treiber installieren und Board & Port einrichten Erste Schritte mit Ihrem Arduino Starter Kit - Treiber installieren und Board & Port einrichten Erste Schritte mit Arduino Starter Kit - Treiber installieren & Board & Port einrichten Sie haben sich also selbst gekauft ein Arduino-Starter-Kit und möglicherweise einige andere coole Komponenten - was nun? Wie fangen Sie eigentlich an, dieses Arduino-Ding zu programmieren? Wie richten Sie es ein? Lesen Sie mehr
  • Fritzing, ein kostenloses Tool zum Zeichnen von Schaltplänen Fritzing - Das ultimative Werkzeug für das Skizzieren von Elektronikprojekten [Cross Platform] Fritzing - Das ultimative Werkzeug für das Skizzieren von Elektronikprojekten [Cross Platform] Obwohl Fritzing wie ein Alcopop klingt, ist Fritzing tatsächlich ein unglaubliches Stück Eine kostenlose Software, mit der Sie Schaltungs- und Komponentendiagramme für den Einsatz mit Rapid-Prototyping-Elektronikplatinen erstellen können, z. B. das fantastische Open-Source-Programm Arduino… Read More
  • Ein genauerer Blick auf die Struktur einer Arduino-App und das Beispiel-Blink-Programm
  • Arduino Xmas Tree Lights-Projekt Ein Arduino-Projekt: Wie man auffällige Weihnachtslicht-Ornamente macht Ein Arduino-Projekt: Wie man auffällige Weihnachtslicht-Ornamente macht Dies ist der nächste Teil unserer Arduino-Lernserie. Dieses Mal werden wir Arrays kennenlernen und verwenden ein kleines Christbaumschmuck mit verschiedenen blinkenden Sequenzen. Dies wäre ein… Weiterlesen (AKA, das sich mit Arrays beschäftigt)
  • Was ist binär Was ist binär? [Technologie erklärt] Was ist binär? [Technologie erklärt] Angesichts der Tatsache, dass Binärdaten für die Existenz von Computern so absolut grundlegend sind, erscheint es merkwürdig, dass wir das Thema noch nie zuvor in Angriff genommen haben. Heute dachte ich, ich würde einen kurzen Überblick darüber geben, welche binären… Read More

So weit gehen wir heute mit den Schichtregistern, da ich denke, dass wir eine Menge abgedeckt haben. Wie immer möchte ich Sie dazu ermutigen, mit dem Code zu spielen und ihn anzupassen, und Sie können jederzeit Fragen stellen, die Sie möglicherweise in den Kommentaren haben, oder sogar einen Link zu Ihrem fantastischen Schichtregister-Projekt freigeben.

Erfahren Sie mehr über: Arduino.