Werbung
Heute werde ich versuchen, Ihnen ein wenig über Schieberegister beizubringen. Dies ist ein ziemlich wichtiger Teil der Arduino-Programmierung, im Grunde genommen, weil sie die Anzahl der Ausgänge erhöhen, die Sie verwenden können, im Austausch für nur 3 Steuerpins. Sie können Schieberegister auch hintereinander schalten, um noch mehr Ausgänge zu erhalten.
Dies ist jedoch ein bedeutender Schwierigkeitsgrad gegenüber früheren Tutorials, und ich empfehle Ihnen dringend, einen zu haben wirklich gutes Verständnis für das vorherige Material (Links am Ende dieses Artikels) sowie Verständnis das Grundlagen der Binärdatei Was ist binär? [Technologie erklärt]Angesichts der Tatsache, dass Binärdateien für die Existenz von Computern so grundlegend sind, erscheint es seltsam, dass wir uns noch nie mit diesem Thema befasst haben. Daher hätte ich heute gedacht, ich würde einen kurzen Überblick darüber geben, welche Binärdateien ... Weiterlesen was ich letztes Mal geschrieben habe.
Was ist ein Schieberegister?
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, ihn aktivieren können und die Ausgänge an die entsprechenden Pins gesendet werden. Anstatt jeden Pin zu durchlaufen, senden wir einfach die erforderliche Ausgabe als einzelnes Byte oder mehr an alle Pins gleichzeitig.
Wenn es Ihnen das Verständnis erleichtert, können Sie sich ein Schieberegister als ein „Array“ digitaler Ausgänge vorstellen. Wir können jedoch die üblichen digitalWrite-Befehle überspringen und einfach eine Reihe von Bits senden, um sie einzuschalten oder aus.
Wie funktioniert es?
Das von uns verwendete Schieberegister - der 74HC595N, der im Oomlout-Starterkit enthalten ist - benötigt nur 3 Steuerstifte. Die erste ist eine Uhr - Sie müssen sich darüber keine Sorgen machen, da die seriellen Arduino-Bibliotheken steuern es - aber eine Uhr ist im Grunde nur ein elektrischer Ein / Aus-Impuls, der das Tempo für das Datensignal festlegt.
Der Latch-Pin wird verwendet, um dem Schieberegister mitzuteilen, wann es seine Ausgänge gemäß den gerade gesendeten Bits ein- und ausschalten soll - d. H., Um sie an Ort und Stelle zu verriegeln.
Schließlich haben wir 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:
- Setzen Sie den Daten-Pin für den ersten Ausgangs-Pin im Schieberegister auf High oder Low.
- Pulsieren Sie die Uhr, um die Daten in das Register zu verschieben.
- Stellen Sie die Daten weiter ein und pulsieren Sie den Takt, bis Sie den erforderlichen Status für alle Ausgangspins eingestellt haben.
- Drücken 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 einfaches Arduino
Wenn Sie das Oomlout-Starter-Kit haben, können Sie das Steckbrett-Layout hier herunterladen.
Hier ist das Montagevideo:
Das Board-Layout:
Und meine zusammengesetzte Version:
Ich habe den von Ooolmout bereitgestellten Originalcode geändert. Wenn Sie dies jedoch stattdessen versuchen möchten, können Sie ihn hier vollständig herunterladen. Eine Erklärung des Codes ist enthalten, also kopieren Sie das Ganze von unten oder fügen Sie es ein Pastebin um eine Erklärung des Codes zu lesen.
/ * * | Schichtregister-Tutorial, basierend auf | * | Arduino Experimentierkit CIRC-05 | * |.: 8 weitere LEDs:. (74HC595 Schieberegister) | * * | Geändert von James @ MakeUseOf.com | * * / // Pin-Definitionen. // 7HC595N hat drei Pins. int data = 2; // wo wir die Bits senden, um die Ausgänge zu steuern int clock = 3; // hält die Daten synchron. int latch = 4; // teilt dem Schieberegister mit, wann die Ausgangssequenz aktiviert werden soll void setup () {// setze die drei Steuerpins auf AusgangspinMode (Daten, AUSGABE); PinMode (Clock, OUTPUT); PinMode (Latch, OUTPUT); Serial.begin (9600); // damit wir Debug-Meldungen an den seriellen Monitor senden können. } void loop () {outputBytes (); // unsere Basisausgabe, die 8-Bit schreibt, um zu zeigen, wie ein Schieberegister funktioniert. //outputIntegers(); // sendet einen ganzzahligen Wert als Daten anstelle von Bytes und zählt effektiv binär. } void outputIntegers () {for (int i = 0; i <256; i ++) {digitalWrite (Latch, LOW); Serial.println (i); // Debuggen, Ausgabe an den seriellen Monitor senden shiftOut (Daten, Uhr, MSBFIRST, i); digitalWrite (Latch, HIGH); Verzögerung (100); }} void outputBytes () {/ * Bytes oder 8-Bit werden durch ein B gefolgt von 8 0 oder 1s dargestellt. Betrachten Sie dies in diesem Fall als ein Array, mit dem wir die 8 LEDs steuern. Hier habe ich den Bytewert als 00000001 * / byte dataValues = B00000001 gestartet; // ändere dies, um das Startmuster anzupassen / * In der for-Schleife ziehen wir zunächst den Latch mit der Funktion shiftOut Arduino auf low Sprechen Sie mit dem Schieberegister, senden Sie ihm unser Byte an Datenwerten, die den Status der LEDs darstellen, und ziehen Sie dann die Verriegelung nach oben, um diese einzuschließen Ort. Schließlich verschieben wir die Bits um eine Stelle nach links, was bedeutet, dass die nächste Iteration die nächste LED in der Reihe einschaltet. Überprüfen Sie den seriellen Monitor, um den genauen gesendeten Binärwert zu sehen. * / for (int i = 0; i <8; i ++) {digitalWrite (Latch, LOW); Serial.println (dataValues, BIN); // Debuggen, Ausgabe an den seriellen Monitor senden shiftOut (data, clock, MSBFIRST, dataValues); digitalWrite (Latch, HIGH); dataValues = dataValues << 1; // Verschiebe die Bits um eine Stelle nach links - wechsle zu >>, um die Richtungsverzögerung (100) anzupassen; } }
Bitverschiebung (OutputBytes-Funktion)
Im ersten Schleifenbeispiel - outputBytes () - verwendet der Code eine 8-Bit-Sequenz (ein Byte), die er dann bei jeder Iteration der for-Schleife nach links verschiebt. Es ist wichtig zu beachten, dass das Bit einfach verloren geht, wenn Sie weiter als möglich verschieben.
Die Bitverschiebung erfolgt mit << oder >> 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 verstehen, was passiert:
Byte-Wert = B00011010. val = val << 3 // B11010000. val = val << 2 // B01000000, wir haben diese anderen Bits verloren! val = val >> 5 // B00000010.
Stattdessen Ganzzahlen senden (OutputIntegers-Funktion)
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 (Kommentar in der Schleife auskommentieren und hochladen, 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 diese stattdessen sendet. Grundsätzlich zählt es binär, daher kann die Reihenfolge etwas zufällig erscheinen, es sei denn, Ihre LEDs sind in einer langen Reihe angeordnet.
Wenn Sie beispielsweise den binär erläuterten Artikel lesen, wissen Sie, dass die Nummer 44 als 00101100 dargestellt wird, sodass die LEDs 3,5,6 an diesem Punkt in der Sequenz aufleuchten.
Daisy Chaining mehr als ein Schichtregister
Das Bemerkenswerte an Schieberegistern ist, dass sie, wenn sie mehr als 8-Bit-Informationen erhalten (oder wie groß ihre Registrierung auch sein mag), die anderen zusätzlichen Bits wieder herausschieben. Dies bedeutet, dass Sie eine Reihe von Bits miteinander verbinden, eine lange Kette von Bits einschieben und diese separat auf jedes Register verteilen können, ohne dass Sie zusätzliche Codierung benötigen.
Obwohl wir den Prozess oder die Schaltpläne hier nicht detailliert beschreiben, können Sie das Projekt auf der offiziellen Arduino-Website hier ausprobieren, wenn Sie mehr als ein Schieberegister haben.
Andere Artikel in der Reihe:
- Was ist Arduino und was kann man 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 verwendet haben, was genau sind sie und was können Sie mit einem tun? Weiterlesen ?
- Was ist ein Arduino Starter Kit und was enthält es? Was ist in einem Arduino Starter Kit enthalten? [MakeUseOf erklärt]Ich habe die Open-Source-Hardware von Arduino bereits hier auf MakeUseOf vorgestellt, aber Sie benötigen mehr als nur das eigentliche Arduino, um daraus etwas aufzubauen und loszulegen. Arduino "Starter Kits" sind ... Weiterlesen
- Weitere coole Komponenten, die Sie mit Ihrem Starter-Kit kaufen können 8 weitere coole Komponenten für Ihre Arduino-ProjekteSie denken über ein Arduino-Starter-Kit nach, fragen sich aber, ob einige grundlegende LEDs und Widerstände ausreichen, um Sie für das Wochenende zu beschäftigen? Wahrscheinlich nicht. Hier sind noch 8 ... Weiterlesen
- Erste Schritte mit Ihrem Arduino Starter Kit? Installieren von Treibern und Einrichten von Board und Port Erste Schritte mit Ihrem Arduino Starter Kit - Installieren von Treibern und Einrichten von Board und PortSie haben sich also ein Arduino-Starter-Kit und möglicherweise einige andere zufällige coole Komponenten gekauft - was nun? Wie fangen Sie eigentlich mit der Programmierung dieser Arduino-Sache an? Wie stellst du es ein ... Weiterlesen
- Fritzing, ein kostenloses Werkzeug zum Zeichnen von Schaltplänen Fritzing - Das ultimative Werkzeug zum Skizzieren von Elektronikprojekten [Plattformübergreifend]Obwohl Fritzing wie ein Alkopop klingt, ist es tatsächlich ein unglaubliches Stück freier Software, mit der Sie erstellen können Schalt- und Komponentendiagramme zur Verwendung mit Rapid-Prototyping-Elektronikplatinen wie dem fantastischen Open Source Arduino ... Weiterlesen
- Ein genauerer Blick auf die Struktur einer Arduino-App und das Beispiel-Blink-Programm Erste Schritte mit dem Arduino: Ein genauerer Blick auf die Leiterplatte und die Struktur eines ProgrammsAls ich Sie das letzte Mal verlassen habe, haben Sie Ihr Arduino für die Arbeit mit Mac oder Windows eingerichtet und eine einfache Test-App hochgeladen, die die integrierte LED blinkt. Heute werde ich den Code erklären ... Weiterlesen
- Arduino Xmas Baum Lichter Projekt Ein Arduino-Projekt: Wie man auffällige Weihnachtslicht-Ornamente machtDies ist der nächste Teil unserer Arduino-Lernserie. Dieses Mal lernen wir Arrays kennen und verwenden sie, um ein kleines Christbaumornament mit verschiedenen blinkenden Sequenzen herzustellen. Dies wäre ein ... Weiterlesen (AKA lernt etwas über Arrays)
- Was ist Binär? Was ist binär? [Technologie erklärt]Angesichts der Tatsache, dass Binärdateien für die Existenz von Computern so grundlegend sind, erscheint es seltsam, dass wir uns noch nie mit diesem Thema befasst haben. Daher hätte ich heute gedacht, ich würde einen kurzen Überblick darüber geben, welche Binärdateien ... Weiterlesen
So weit werden wir heute mit Schieberegistern gehen, da wir meiner Meinung nach viel abgedeckt haben. Wie immer möchte ich Sie dazu ermutigen, mit dem Code zu spielen und ihn anzupassen. Sie können auch Fragen stellen, die Sie möglicherweise in den Kommentaren haben, oder sogar einen Link zu Ihrem großartigen Schichtregister-basierten Projekt teilen.
James hat einen BSc in künstlicher Intelligenz und ist CompTIA A + und Network + zertifiziert. Er ist der Hauptentwickler von MakeUseOf und verbringt seine Freizeit mit VR-Paintball und Brettspielen. Er baut seit seiner Kindheit PCs.