Arduino-Porterweiterung für Tasten. So erhöhen Sie die Anzahl der digitalen Pins auf Arduino mithilfe eines Port-Expanders. Auswahl eines Erweiterungsmoduls für Arduino

Dreizehn digitale Leitungen und sechs analoge Eingänge sind alles, was Arduino als Ein-/Ausgabemöglichkeiten zu bieten hat. In manchen Fällen (insbesondere bei Projekten mit einer großen Anzahl von Peripheriegeräten) reicht ein solcher Satz von Portleitungen jedoch nicht aus.



In diesem Zusammenhang stellt sich die Frage nach der Machbarkeit einer Erweiterung der Anzahl der Ein-/Ausgabeleitungen. Dieses Material zeigt ein Beispiel einer solchen Erweiterung mit dem MCP23017-Chip.


Sie wissen vielleicht, dass die 6 analogen Pins auch auf diese Weise als digitale I/O-Pins verwendet werden können:


Analogeingang 0 = Zeile 14
Analogeingang 1 = Leitung 15
Analogeingang 2 = Leitung 16
Analogeingang 3 = Leitung 17
Analogeingang 4 = Leitung 18
Analogeingang 5 = Leitung 19

Wir können den Analogeingang 5 also tatsächlich als digitale Leitung wie folgt bezeichnen: digitalWrite(19,HIGH). Ein solcher Befehl schreibt eine logische Eins auf Port 19, also die analoge Leitung 5.


Technisch gesehen können wir serielle TX/RX-Portleitungen verwenden. In manchen Fällen ist dies jedoch äußerst schwierig, insbesondere wenn der Code Funktionen wie Serial.begin() verwendet, die für den Betrieb der seriellen Schnittstelle erforderlich sind. Die Gesamtzahl der dem Benutzer zur Verfügung stehenden Kontakte beträgt also immer noch 17. Aber ist es möglich, mit siebzehn Pins eine große Anzahl von LEDs oder Servomotoren anzusteuern? In diesem Fall ist es besser, spezielle externe Mikroschaltungen zu verwenden. Für diese Zwecke wird häufig ein Schieberegister wie das 74HC595 verwendet. Für die Steuerung sind jedoch drei zusätzliche Leitungen erforderlich, und es ist nicht möglich, alle Leitungen gleichzeitig zu „erweitern“. Display-Treiber wie der MAX7219 „erweitern“ tatsächlich auch die Anzahl der Pins. Aber der MAX7219 ist ein teurer Chip. Daher ist es günstiger und rationeller, den Port-Expander-Chip MCP23017 zu verwenden. Dieser Chip ist für 16 Leitungen ausgelegt, verfügt über einen weiten Betriebsspannungsbereich von 1,8 bis 5,5 V und wird über die I2C-Schnittstelle gesteuert.


Der MCP23017 verwendet 2 Arduino-Pins und bietet 16 I/O-Leitungen. Technisch gesehen können Sie also 8 Stück MCP23017 verwenden, um ein 16-Pin-Arduino auf 16 x 8 = 128 Pins zu erweitern. Arduino verfügt über eine Bibliothek für den I2C-Bus namens Wire.h, sodass die Anbindung an den MCP23017 sehr einfach sein wird. Unten ist das Verbindungsdiagramm zwischen Arduino und MCP23017.




#include "Wire.h" void setup() ( Wire.begin(); // den I2C-Bus aktivieren // die Leitungen auf den Ausgang setzen Wire.beginTransmission(0x20); Wire.write(0x00); // IODIRA-Register Wire.write (0x00); // Alle Leitungen von Port A auf Ausgabe setzen Wire.endTransmission(); ) void loop() ( Wire.beginTransmission(0x20); Wire.write(0x12); // Bank A Wire adressieren. write((byte )0xAA); // gesendeter Wert – alle Zeilen im Protokoll. 1 Wire.endTransmission(); delay(500); Wire.beginTransmission(0x20); Wire.write(0x12); // Adressbank A Wire .write(( byte)0x55); // gesendeter Wert – alle Zeilen im Protokoll. 1 Wire.endTransmission(); Verzögerung(500); )

Einer der Hauptvorteile der Arduino-Plattform ist ihre Beliebtheit. Die beliebte Plattform wird von Herstellern elektronischer Geräte aktiv unterstützt und produziert spezielle Versionen verschiedener Platinen, die die Grundfunktionalität des Controllers erweitern. Solche Boards, logischerweise Erweiterungsboards genannt (anderer Name: Arduino Shield, Shield), dienen der Erfüllung verschiedenster Aufgaben und können das Leben eines Arduino-Betreibers deutlich vereinfachen. In diesem Artikel erfahren wir, was eine Arduino-Erweiterungsplatine ist und wie sie für die Arbeit mit einer Vielzahl von Arduino-Geräten verwendet werden kann: Motoren (Motortreiber-Abschirmungen), LCD-Bildschirme (LCD-Abschirmungen), SD-Karten (Datenlogger), Sensoren (Sensorschild) und viele andere.

Lassen Sie uns zunächst die Begriffe verstehen. Eine Arduino-Erweiterungsplatine ist ein komplettes Gerät, das bestimmte Funktionen ausführen soll und über Standardanschlüsse mit dem Hauptcontroller verbunden wird. Ein weiterer beliebter Name für das Erweiterungsboard ist das englischsprachige Arduino Shield oder einfach Shield. Alle notwendigen elektronischen Komponenten sind auf der Erweiterungsplatine installiert und die Interaktion mit dem Mikrocontroller und anderen Elementen der Hauptplatine erfolgt über Standard-Arduino-Pins. Meistens erfolgt die Stromversorgung des Shields auch über die Hauptplatine des Arduino, obwohl es in vielen Fällen auch möglich ist, es aus anderen Quellen zu versorgen. In jedem Schild gibt es mehrere freie Pins, die Sie nach Belieben verwenden können, indem Sie beliebige andere Komponenten daran anschließen.

Das englische Wort Shield wird mit Schild, Bildschirm, Bildschirm übersetzt. In unserem Kontext ist darunter etwas zu verstehen, das die Controller-Platine abdeckt und so eine zusätzliche Schicht des Geräts bildet, einen Bildschirm, hinter dem sich verschiedene Elemente verbergen.

Warum brauchen wir Arduino-Schilde?

Alles ist ganz einfach: 1) damit wir Zeit sparen und 2) jemand damit Geld verdienen kann. Warum sollten Sie Zeit damit verschwenden, etwas zu entwerfen, zu platzieren, zu löten und zu debuggen, das Sie bereits zusammengebaut nehmen und sofort verwenden können? Gut gestaltete Erweiterungskarten, die auf hochwertigen Geräten montiert sind, sind in der Regel zuverlässiger und nehmen im endgültigen Gerät weniger Platz ein. Dies bedeutet nicht, dass Sie vollständig auf die Selbstorganisation verzichten müssen und dass Sie das Funktionsprinzip bestimmter Elemente nicht verstehen müssen. Schließlich versucht ein echter Ingenieur immer zu verstehen, wie das, was er verwendet, funktioniert. Aber wir werden in der Lage sein, komplexere Geräte herzustellen, wenn wir das Rad nicht jedes Mal neu erfinden, sondern unsere Aufmerksamkeit auf das richten, was bisher nur wenige Menschen gelöst haben.

Natürlich muss man für Chancen bezahlen. Fast immer sind die Kosten für die endgültige Abschirmung höher als der Preis der einzelnen Komponenten; Sie können eine ähnliche Option immer günstiger machen. Aber hier liegt es an Ihnen, zu entscheiden, wie wichtig der Zeit- oder Geldaufwand für Sie ist. Unter Berücksichtigung aller möglichen Hilfen der chinesischen Industrie sinken die Kosten für Platinen ständig, so dass man sich meist für die Verwendung vorgefertigter Geräte entscheidet.

Die beliebtesten Beispiele für Abschirmungen sind Erweiterungsplatinen für die Arbeit mit Sensoren, Motoren, LCD-Bildschirmen, SD-Karten, Netzwerk- und GPS-Abschirmungen sowie Abschirmungen mit eingebauten Relais zum Anschluss an die Last.

Anschließen von Arduino Shields

Um die Abschirmung anzuschließen, müssen Sie sie lediglich vorsichtig auf die Hauptplatine „aufsetzen“. Typischerweise werden die Kontakte des Kammschirms (männlich) einfach in die Anschlüsse des Arduino-Boards eingesteckt. In manchen Fällen ist es notwendig, die Pins sorgfältig anzupassen, wenn die Platine selbst nicht richtig verlötet ist. Dabei kommt es vor allem darauf an, vorsichtig vorzugehen und keine übermäßige Gewalt anzuwenden.

In der Regel ist ein Shield für eine ganz bestimmte Version des Controllers gedacht, obwohl beispielsweise viele Shields für Arduino Uno ganz gut mit Arduino Mega-Boards funktionieren. Die Pinbelegung auf dem Mega ist so gestaltet, dass die ersten 14 digitalen Pins und die Pins auf der gegenüberliegenden Seite der Platine mit der Pinbelegung auf dem UNO übereinstimmen, sodass problemlos ein Arduino-Shield hineingesteckt werden kann.

Arduino Shield-Programmierung

Das Programmieren einer Schaltung mit einer Erweiterungsplatine unterscheidet sich nicht von der normalen Arduino-Programmierung, denn aus Sicht des Controllers haben wir unsere Geräte einfach an seine regulären Pins angeschlossen. In der Skizze müssen Sie die Pins angeben, die im Schirm mit den entsprechenden Kontakten auf der Platine verbunden sind. In der Regel gibt der Hersteller die Zuordnung der Pins auf dem Schirm selbst oder in einer separaten Anschlussanleitung an. Wenn Sie die vom Board-Hersteller selbst empfohlenen Skizzen herunterladen, ist dies nicht einmal erforderlich.

Das Lesen oder Schreiben von Schildsignalen erfolgt ebenfalls auf die übliche Weise: mit den Funktionen und anderen Befehlen, die jedem Arduino-Benutzer bekannt sind. In einigen Fällen sind Kollisionen möglich, wenn Sie an ein bestimmtes Anschlussschema gewöhnt sind und der Hersteller ein anderes gewählt hat (z. B. haben Sie den Knopf auf den Boden und auf der Abschirmung auf die Stromversorgung gezogen). Hier ist nur Vorsicht geboten.

Dieses Erweiterungsboard wird in der Regel in Arduino-Bausätzen geliefert und ist daher bei Arduino-Ingenieuren am häufigsten anzutreffen. Das Shield ist recht einfach aufgebaut – seine Hauptaufgabe besteht darin, bequemere Anschlussmöglichkeiten an das Arduino-Board bereitzustellen. Dies erfolgt über zusätzliche Strom- und Erdungsanschlüsse auf der Platine zu jedem der analogen und digitalen Pins. Außerdem finden Sie auf der Platine Anschlüsse zum Anschluss einer externen Stromquelle (zum Umschalten müssen Sie Jumper installieren), eine LED und eine Neustarttaste. Schirmmöglichkeiten und Anwendungsbeispiele finden Sie in den Abbildungen.




Es gibt verschiedene Versionen des Touch-Erweiterungsboards. Sie unterscheiden sich alle in der Anzahl und Art der Anschlüsse. Die beliebtesten Versionen sind heute Sensor Shield v4 und v5.

Dieses Arduino-Shield ist in Roboterprojekten sehr wichtig, weil... ermöglicht den gleichzeitigen Anschluss von Normal- und Servomotoren an die Arduino-Platine. Die Hauptaufgabe des Shields besteht darin, Geräte zu steuern, die einen Strom verbrauchen, der hoch genug für ein normales Arduino-Board ist. Ein weiteres Feature der Platine ist die Funktion zur Steuerung der Motorleistung (mittels PWM) und zur Änderung der Drehrichtung. Es gibt viele Arten von Motorschutzplatinen. Allen gemeinsam ist das Vorhandensein eines leistungsstarken Transistors im Stromkreis, über den eine externe Last angeschlossen wird, Kühlelemente (normalerweise ein Kühler), ein Stromkreis zum Anschließen einer externen Stromversorgung, Anschlüsse zum Anschließen von Motoren und ein Stift zum Anschließen der Arduino.



Die Organisation der Netzwerkarbeit ist eine der wichtigsten Aufgaben in modernen Projekten. Für den Anschluss an ein lokales Netzwerk über Ethernet steht eine entsprechende Erweiterungskarte zur Verfügung.




Erweiterungsplatinen für das Prototyping

Diese Platinen sind recht einfach aufgebaut – sie verfügen über Kontaktpads für Montageelemente, eine Reset-Taste und die Möglichkeit, eine externe Stromversorgung anzuschließen. Der Zweck dieser Abschirmungen besteht darin, die Kompaktheit des Geräts zu erhöhen, wenn sich alle erforderlichen Komponenten direkt über der Hauptplatine befinden.





Arduino LCD-Schild und TFT-Schild

Diese Art von Abschirmung wird für die Arbeit mit LCD-Bildschirmen in Arduino verwendet. Wie Sie wissen, ist der Anschluss selbst des einfachsten 2-Zeilen-Textbildschirms alles andere als eine triviale Aufgabe: Sie müssen 6 Bildschirmkontakte gleichzeitig korrekt anschließen, die Stromversorgung nicht mitgerechnet. Viel einfacher ist es, das fertige Modul in das Arduino-Board einzubauen und einfach die entsprechende Skizze hochzuladen. Beim beliebten LCD Keypad Shield sind 4 bis 8 Tasten gleichzeitig auf der Platine verbaut, wodurch Sie sofort eine externe Schnittstelle für den Benutzer des Geräts organisieren können. Auch TFT Shield hilft



Arduino-Datenlogger-Schild

Eine weitere Aufgabe, die sich nur schwer eigenständig in Ihren Produkten umsetzen lässt, ist das Speichern der von Sensoren empfangenen Daten mit Zeitbezug. Mit der fertigen Abschirmung können Sie nicht nur Daten speichern und die Uhrzeit von der eingebauten Uhr abrufen, sondern auch Sensoren in praktischer Form durch Löten oder auf einer Leiterplatte anschließen.




Kurze Zusammenfassung

In diesem Artikel haben wir nur einen kleinen Teil der riesigen Auswahl an verschiedenen Geräten betrachtet, die die Funktionalität von Arduino erweitern. Mit Erweiterungskarten können Sie sich auf das Wichtigste konzentrieren – die Logik Ihres Programms. Die Hersteller der Schilde haben für eine korrekte und zuverlässige Installation und die notwendige Stromversorgung gesorgt. Jetzt müssen Sie nur noch das gewünschte Board mithilfe des beliebten englischen Wortschilds finden, es an den Arduino anschließen und die Skizze hochladen. Typischerweise besteht jede Schildprogrammierung darin, einfache Aktionen durchzuführen, um die internen Variablen eines vorgefertigten Programms umzubenennen. Das Ergebnis ist eine einfache Bedienung und Verbindung sowie eine schnelle Montage fertiger Geräte oder Prototypen.

Der Nachteil der Verwendung von Erweiterungskarten sind ihre Kosten und ein möglicher Effizienzverlust aufgrund der in ihrer Natur liegenden Universalität von Schilden. Für Ihre schmale Aufgabe oder Ihr Endgerät sind möglicherweise nicht alle Schutzfunktionen erforderlich. In diesem Fall sollten Sie die Abschirmung nur in der Prototypen- und Testphase verwenden und bei der Erstellung der endgültigen Version Ihres Geräts darüber nachdenken, sie durch ein Design mit Ihrer eigenen Schaltung und Ihrem eigenen Layouttyp zu ersetzen. Die Entscheidung liegt bei Ihnen, Sie haben alle Möglichkeiten, die richtige Wahl zu treffen.

Jeder liebt preiswerte Arduino-Boards, aber oft braucht ein Projekt nur ein oder zwei freie Ports! Und manchmal gibt es genügend Anschlüsse, aber Sie möchten nicht viele Kabel zu einem anderen Teil der Struktur ziehen. Nehmen wir an, Sie müssen mehrere Tasten und LEDs auf der Vorderseite des Geräts platzieren. Es ist zuverlässiger und einfacher, sie mit nur zwei Datenbuskabeln an die Hauptplatine anzuschließen, statt mit einem Kabel oder Kabelbaum, nicht wahr?

Für solche Situationen sind verschiedene Arduino-Port-Expander konzipiert.

Normalerweise implementieren Mikrocontroller-Pins mehrere unterschiedliche Funktionen, daher gibt es verschiedene Expander:

  1. Standard-GPIO-Port-Expander
  2. PWM-Ausgangserweiterung
  3. Analoge Eingangserweiterungen – Multiplexer und externe ADCs

Unabhängig davon sind Digital-Analog-Wandler (DACs) und Adressraum-Expander des I2C-Busses zu erwähnen. Diese Geräte duplizieren nicht direkt die Funktionen von Ports, sondern erweitern die Fähigkeiten von Mikrocontrollern.

Im ersten Artikel der Serie sprechen wir über die einfachsten und nützlichsten Expander, die als digitale I/O-Ports fungieren. Dies sind Mikroschaltungen und . Sie sind in Design und Funktion absolut identisch und unterscheiden sich lediglich in der Anzahl der Ports.

Auswahl eines Erweiterungsmoduls für Arduino

Das beliebteste und kostengünstigste Modul wird auf dem PCF8574-Chip hergestellt (Abb. 1).

Reis. 1. Beliebtes PCF8574-Port-Erweiterungsmodul

Vorteile:
  • Niedriger Preis.
  • Module können in einer Kette verbunden werden, indem einfach die Stecker eines Moduls in die Buchsen des vorherigen gesteckt werden. Vergessen Sie nicht, Jumper auf unterschiedliche Moduladressen zu setzen!
Mängel:
  • Es kann nicht direkt in ein Steckbrett eingesetzt werden (ich empfehle, den Anschlussstecker auf der Rückseite anzulöten).
  • Insgesamt acht Ports in einem Modul.

Wenn Sie Lust auf ernsthaftere Projekte haben, bestellen Sie ein 16-Bit-PCF8575-Modul bei Aliexpress. Ich empfehle dringend das in Abb. gezeigte Modul. 2.

Reis. 2. PCF8575 Port-Expander-Modul

Vorteile:
  • Doppelt so viele Ports.
  • Eingebautes 3,3-Volt-Netzteil, kann andere Module mit Strom versorgen.
  • Integrierte Logikpegelanpassung für den I2C-Bus bei unterschiedlichen Versorgungsspannungen.
  • Praktisches Format für Prototyping-Boards.
Mängel:
  • Höherer Preis.

Funktionsprinzip des GPIO-Port-Expanders PCF8574/PCF8575

Der Datenaustausch erfolgt über den I2C-Bus. Für die Verbindung zum Arduino-Board sind nur vier Drähte inklusive Strom erforderlich. Die Erweiterungsadresse wird über drei Jumper an den Eingängen A0...A2 eingestellt, sodass Sie gleichzeitig acht identische Chips an den Bus anschließen können und maximal 8*8=64 zusätzliche Ports mit PCF8574 oder 8*16=128 mit PCF8575-Chip erhalten .

Um Daten an den Port auszugeben, schreiben Sie ein Datenbyte an die Moduladresse auf dem I2C-Bus. Um Daten von einem Port zu lesen, lesen Sie ein Byte an derselben Adresse. Ein Byte wird immer als Ganzes geschrieben und gelesen, einzelne Bits werden programmgesteuert behandelt.

Die Ausgänge der Mikroschaltung sind gleichzeitig Eingänge, und es gibt kein Dienstregister, das den Zweck des Ausgangs bestimmt. Es gibt lediglich ein Latch-Register, in das das Ausgangsbyte geschrieben wird. Wie ist das möglich?

Die Ports arbeiten nach einem ähnlichen Open-Collector-Prinzip und sind mit internen Pull-up-Widerständen ausgestattet. Wird eine logische Null auf den Ausgang geschrieben, dann öffnet der Ausgangstransistor, wodurch der Ausgang zwangsweise auf Masse gezogen wird. Beim Lesen von einem solchen Port wird immer Null zurückgegeben.

Seien Sie vorsichtig, wenn Sie an einen Pin eine direkte Versorgungsspannung anlegen, die niedrig ist oder wenn der Strom überschritten wird. 50mA Du wirst den Chip ruinieren!

Um einen Port als Eingang zu verwenden, schreiben Sie eine Eins hinein. In diesem Fall wird der interne Transistor ausgeschaltet und das Leseergebnis wird durch den am Pin angelegten externen Logikpegel bestimmt. Der freie Pin wird über einen eingebauten Widerstand mit der Stromversorgung verbunden.

Um vor jedem Schreiben eines Datenbytes in den Expander gleichzeitig einige der Ports als Eingänge und einige als Ausgänge zu verwenden, ist es notwendig, mithilfe der „Logik“-Funktion eine Einsenmaske auf die Bits anzuwenden, die den Eingängen entsprechen ODER“-Operation. Das ist alles)))

Interrupt-Generierung

PCF857*-Port-Expander erzeugen einen Interrupt-Impuls niedriges Niveau am INT-Ausgang für jede Änderung des Eingangssignals an einem beliebigen Eingang der Mikroschaltung. Dies ist praktisch, wenn die Erweiterung als Tastatur dient. Allerdings müssen Sie im Interrupt-Handler selbst feststellen, welcher Knopf gedrückt bzw. losgelassen wurde. Der Interrupt-Generator ist mit einem Filter zur Unterdrückung von Kontaktprellen ausgestattet.

Beispiel 1: Verwendung des PCF8574-Moduls

Lassen Sie uns eine einfache Schaltung aus vier LEDs, einem PCF8574-Modul und einer Arduino-Platine zusammenbauen (Abb. 3 und 4). Bei diesem Anschlussschema benötigen wir nicht einmal Löschwiderstände für die LEDs. Der Strom fließt durch die LED und einen eingebauten Widerstand, der mit der Stromschiene verbunden ist.

Reis. 3. Anschlussdiagramm des PCF8574-Moduls

Reis. 4. Schaltungslayout mit PCF8574-Modul

Kopieren Sie Skizze 1 und schreiben Sie sie auf das Arduino-Board:

// Moduladresse am Bus (A0, A1, A2 = 0) int address = 0x38; // Vom Modul gelesene Daten uint8_t dataReceive; // In das Modul zu schreibende Daten uint8_t dataSend; void setup() ( Wire.begin(); Serial.begin(9600); // High-Level an alle Ports PCF8574 dataSend = B11111111; pcf8574_write(dataSend); ) void loop() ( // Ein Byte aus dem Modul dataReceive lesen = pcf8574_read (); // Ausgabe an den Monitor im Binärformat Serial.println(dataReceive, BIN); // Verschiebe die Bits um ein Nibble nach links dataSend = dataReceive<< 4; // Накладываем битовую маску dataSend |= B00001111; // Записываем байт в модуль pcf8574_write(dataSend); delay(500); } // Процедура записи байта в модуль void pcf8574_write(uint8_t dt) { Wire.beginTransmission(address); Wire.write(dt); Wire.endTransmission(); } // Процедура чтения байта из модуля int8_t pcf8574_read() { Wire.beginTransmission(address); Wire.endTransmission(); Wire.requestFrom(address, 1); return (Wire.read()); }

Zunächst wird ein High-Pegel an alle Ports des Chips geschrieben, sodass die Ports P0...P3 als Eingänge fungieren können.

Die Pegel an den Port-Pins werden alle 500 ms ausgelesen und das Leseergebnis auf dem Monitor angezeigt. Wenn Sie einen der Eingänge P0...P3 mit einer gemeinsamen Leitung verbinden, erscheint in seinem Bit eine Null. Anschließend wird der gelesene Wert um vier Bit nach links verschoben, das Ergebnis am Port ausgegeben und eine der LEDs erlischt. Wenn beispielsweise an Pin P0 eine Null gelesen wird, erlischt die an Pin P4 angeschlossene LED.

Bitte beachten Sie, dass wir vor jedem Schreibvorgang in den Expander eine Bitmaske aus Einsen auf alle Bits anwenden müssen, die Eingaben sein sollen: dataSend |= B00001111;

Die Routinen für die Arbeit mit dem I2C-Bus sind extrem vereinfacht, es werden keine Fehler verarbeitet.

Beratung: Um die Moduladresse auf dem I2C-Bus zu finden und zu überprüfen, können Sie verwenden. Es zeigt im Terminal die Adressen aller Geräte an, die auf eine Busanfrage antworten.

Beispiel 2: Verwendung des PCF8575-Moduls

Die Besonderheit des PCF8575-Moduls besteht darin, dass es über 16 Ports verfügt Schreiben Sie immer zwei Bytes und lesen Sie zwei Bytes. Diese Regel muss auch dann befolgt werden, wenn das zweite Byte nicht benötigt wird.

Lassen Sie uns das Diagramm ein wenig ändern. Wir werden die LEDs an die Ports P10…P13 anschließen und die Ports P00…P03 mit einer Brücke mit dem gemeinsamen Kabel verbinden (Abb. 5 und 6).

Reis. 5. Anschlussplan des PCF8575-Moduls

Reis. 6. Schaltungslayout mit PCF8575-Modul

In Skizze 2 werden zunächst 1s auf alle Ports geschrieben, anschließend wird deren Status alle 500 ms gelesen. Die Leseroutine gibt ein 16-Bit-Wort zurück, das in Bytes unterteilt ist. Der Inhalt des Low-Byte (Pins P00...P07) wird in das High-Byte kopiert und zurück zum Modul hochgeladen. Wenn Sie einen der Pins P00...P03 mit dem gemeinsamen Kabel verbinden, erlischt eine der an P10...P13 angeschlossenen LEDs.

// Bibliothek für die Arbeit mit I2C #include // Moduladresse auf dem Bus standardmäßig int address = 0x20; // Vom Modul gelesene Daten uint8_t hi, lo; uint16_t dataReceive; uint8_t dataHighByte; // High-Byte (P10...P17) uint8_t dataLowByte; // Low-Byte (P00...P07) void setup() ( Wire.begin(); Serial.begin(9600); // High-Level für alle Ports PCF8575 dataHighByte = B11111111; dataLowByte = B11111111; pcf8575_write(dataLowByte, dataHighByte ); ) void loop() ( // Ein Byte aus dem Modul lesen dataReceive = pcf8575_read(); // Ausgabe an den Monitor im Binärformat Serial.println(dataReceive, BIN); // Wählen Sie das Low-Byte aus einem langen Wort aus dataLowByte = lowByte(dataReceive ); // Low-Byte in High-Byte kopieren dataHighByte = dataLowByte; // Eine Maske auf das Low-Byte setzen dataLowByte |= B11111111; // Neue Daten in das Modul schreiben, zwei Bytes pcf8575_write(dataLowByte, dataHighByte); delay(500); ) // Die Prozedur zum Schreiben eines Bytes in das Modul void pcf8575_write(uint8_t dtl, int8_t dth) ( Wire.beginTransmission(address); Wire.write(dtl); // Das Low-Byte schreiben (P00...P07) Wire.write(dth); // Das High-Byte schreiben (P10...P17) Wire.endTransmission(); ) // Verfahren zum Lesen eines Bytes aus dem Modul int16_t pcf8575_read() ( Wire .beginTransmission(address); Wire.endTransmission(); Wire.requestFrom(address, 2); lo = Wire.read(); // Low-Byte lesen (P00...P07) hi = Wire.read(); // High-Byte lesen (P10...P17) return (word(hi, lo)); // Das lange Wort zurückgeben)

Arduino-Bibliothek für PCF8574/PCF8575

Die Bibliothek kann von GitHub heruntergeladen werden. Aber wie Sie sehen, ist die Arbeit mit Port-Expandern sehr einfach und Sie können problemlos auf eine spezielle Bibliothek verzichten.

Beschreibung des Expander Shield

Expander Shield ist ein originelles Zusatzmodul, das entwickelt wurde, um die Anzahl der Ein-/Ausgangsports von Mikrocontrollern auf Basis der Arduino-Plattform sowie anderen Mikrocontrollern zu erhöhen, indem Port-Expander mit einer SPI- oder I2C-Schnittstelle verwendet werden.


Die Hauptelemente des Zusatzmoduls Expander Shield sind zwei Mikroschaltungen MCP23S17 oder MCP23017 (zwei 16-Bit-I/O-Port-Expander mit SPI- bzw. I2C-Schnittstelle), mit denen Sie also vier 8-Bit-I/O-Ports hinzufügen können , 32 zusätzliche „Beine“.

Ausrüstung

Das Expander Shield-Modul wird entweder als zusammengebaute SPI- oder I2C-Version (mit zugehörigen Chips) oder als Kit ohne Chips geliefert, das separat erworben werden kann.

Die Modulklemmen können mit Transportsicherungen ausgestattet sein, die vor Arbeitsbeginn entfernt werden müssen.

Expanderschild SPI 1100 reiben. 850 Rubel. in den Korb

Bestellformular.

ExpanderShield zum SPI-Bus (mit MCP23S17-Chips).

Expander Shield I2C 1100 reiben. 850 Rubel. in den Korb

Aufmerksamkeit! Sie haben JavaScript deaktiviert. Ein normaler Betrieb des Bestellsystems und des Warenkorbs ist nicht möglich. Wenn Sie JavaScript aus irgendeinem Grund nicht aktivieren können, geben Sie einfach die Artikel, die Sie bestellen, im Bestellformular an.

ExpanderShield zum I2C-Bus (mit MCP23017-Chips).

Technische Eigenschaften

Hier sind die wichtigsten Funktionsmerkmale des Expander Shield Moduls.

  • praktischer Modul-Betriebsmodusschalter abhängig von der Art der aktuell installierten Port-Expander-Chips;
  • Für jeden der beiden verwendeten 16-Bit-I/O-Port-Expander-Chips wird mithilfe von Jumpern eine Drei-Bit-Adresse am Bus eingestellt, sodass Sie bis zu 8 solcher Chips auf einem Bus platzieren können.
  • die Möglichkeit, mithilfe eines Jumpers die Nummer des entsprechenden Freeduino/Arduino-Mikrocontroller-Ausgangs (digitaler Pin 8, 9 oder 10) für das CS-Signal des SPI-Busses auszuwählen;
  • Das Modul verwendet „Pass-Through“-Anschlüsse, sodass Sie mehrere Module andocken können, ohne sie relativ zur Arduino-Platine zu verschieben.
  • Mikroschaltungssignale werden an vier PBD-10R-Anschlüsse mit zusätzlichen Erdungs- und +5-V-Kontakten ausgegeben;
  • die Möglichkeit, mithilfe von Jumpern einen separaten oder gemeinsamen Hardware-Reset (RESET-Taste) der 16-Bit-I/O-Port-Expander-Chips und des Freeduino/Arduino-Mikrocontrollers auszuwählen;
  • zusätzlicher JPIC-Anschluss mit Interrupt-Pins (INTA, INTB), Hardware-Reset (RST) und Chip-Auswahl (CS);

Weitere Eigenschaften des Moduls werden in erster Linie durch die Eigenschaften der Mikroschaltungen MCP23S17/MCP23017 bestimmt, deren technische Beschreibung in der Dokumentation des Herstellers enthalten ist.

Darüber hinaus empfehlen wir Ihnen, sich vor Beginn der Arbeit mit dem Zusatzmodul Expander Shield mit dessen Schaltplan vertraut zu machen.

Betriebsarten

Die Auswahl der Betriebsart Expander Shield erfolgt über einen DIP-Schalter und Jumper.

Schnittstellenauswahl und I2C-Bus-Pull-up-Steuerung

Mit einem DIP-Schalter wählen Sie entweder den SPI-Modus (durch Einschalten der Kontaktgruppe 1-4) für MCP23S17-Mikroschaltungen oder den I2C-Modus (durch Einschalten der Kontaktgruppe 5-6) für MCP23017-Mikroschaltungen. Außerdem wird im I2C-Modus bei Bedarf über die Pins 7 und 8 der I2C-Bus über strombegrenzende Widerstände zum +5-V-Strombus gezogen. Normalerweise sollten Pull-up-Widerstände angeschlossen werden, wenn sich nur ein Gerät am I2C-Bus befindet. Bei mehreren Geräten werden Widerstände nur für eines der Geräte angeschlossen.

Gleichzeitige Aktivierung des SPI- und I2C-Busses sowie des SPI-Busses und der 7-, 8-Pin-Gruppe nicht erlaubt.

Der kombinierte Betriebsmodus, bei dem einer der beiden Mikroschaltkreise in einem Expander Shield-Modul über die SPI-Schnittstelle (MCP23S17) und der andere über die I2C-Schnittstelle (MCP23017) arbeitet, ist nicht möglich.

Wenn Sie die Arbeit gleichzeitig über SPI- und I2C-Schnittstellen organisieren müssen, müssen Sie zwei (mehrere) zusätzliche Expander Shield-Module mit den entsprechenden Schalterpositionen verwenden.

Auswahl der Pin-Nummer zur Steuerung des CS-Signals des SPI-Busses

Für den SPI-Bus müssen Sie den Freeduino/Arduino-Mikrocontroller-Pin auswählen, der als CS-Signal verwendet wird. Typischerweise wird Pin 10 verwendet, was der Jumper-Position ganz links am SS1-Anschluss entspricht. Durch Umsetzen des Jumpers auf eine der beiden anderen Positionen ist es möglich, die Pins 9 bzw. 8 auszuwählen.

Auswahl der Adresse von Mikroschaltungen auf dem Bus

Die niedrigsten drei Bits der Adresse der Mikroschaltungen MCP23S17/MCP23017 werden mithilfe von Jumpern an den Anschlüssen IC1_addr/IC2_addr ausgewählt, indem die Bits 0, 1, 2 auf Masse (Gnd) oder +5 V (5 V) gezogen werden.

Die Adresse jedes Chips muss eindeutig sein.

Somit können bis zu 8 Mikroschaltungen auf einem Bus platziert werden (durch Kombination beispielsweise von 4 Expander Shields).

Auswahl der Betriebsart Hardware-Reset (RESET-Taste)

Es besteht die Möglichkeit, eine von mehreren Betriebsarten der RESET-Taste zu organisieren

  • Die RESET-Taste setzt Freeduino/Arduino- und MCP23S17/MCP23017-Chips zurück
  • Die RESET-Taste setzt nur den Freeduino/Arduino zurück
  • Die RESET-Taste setzt nur MCP23S17/MCP23017-Chips zurück

Die entsprechenden Jumper-Positionen am JRS-Stecker (von links nach rechts) sind unten dargestellt.

Bibliothek MCP23xxx

Um die Arbeit mit diesem und einer Reihe anderer Module zu vereinfachen, wurde die MCP23xxx-Bibliothek entwickelt, die eine einfache Schnittstelle zur Funktionalität der Mikroschaltungen der MCP23xxx-Serie bietet. Die Bibliothek steht zum kostenlosen Download zur Verfügung: Die Bibliothek ist mit der Arduino-Softwareversion 1.0.5 kompatibel (Kompatibilität mit späteren Versionen wird ebenfalls erwartet).

Tatsächlich handelt es sich hierbei um einen Satz aus zwei Bibliotheken: MCP23xxx und LiquidCrystal_MCP23x17.

Die Installation von Bibliotheken wird im Abschnitt Bibliotheken verbinden ausführlicher beschrieben. Die Verzeichnisstruktur des Bibliotheksordners nach der Installation sollte wie folgt aussehen:

/libraries/LiquidCrystal_MCP23x17
/libraries/MCP23xxx

Die MCP23xxx-Bibliothek implementiert Klassenvorlagen, die die Arbeit mit den Port-Expandern MCP23017, MCP23S17, MCP23008 und MCP23S08 organisieren. Die LiquidCrystal_MCP23x17-Bibliothek ist eine modifizierte Standard-LiquidCrystal-Bibliothek, die die russische Sprache unterstützt und über einen Port-Expander funktioniert.

Die Bibliothek enthält Beispiele, die erklären, wie man damit arbeitet. Die Vorgängerversion der Bibliothek steht ebenfalls zum Download bereit:

Schauen wir uns ein Beispiel für die Arbeit mit einem Modul für den I2C-Bus an:

//Im Beispiel wird der Zustand der Pins des 1. Chips gelesen und auf dem 2. werden die gleichen Werte gesetzt

//Für die I2C-Version Wire.h verbinden:
#enthalten
//die Bibliothek verbinden
#enthalten

//Erstellen Sie zwei Objekte der Klasse CMCP23017, initialisieren Sie sie jedoch nicht, weil I2C-Bus ist nicht bereit
CMCP23017 mcp23_1;
CMCP23017 mcp23_2;

void setup()
{
//Initialisiere den I2C-Bus...
Wire.begin();
//... und MCP23*-Objekte mit den Adressen 0 und 1
mcp23_1.init(0);
mcp23_2.init(1);

//Alle Pins des 1. Chips müssen als Eingänge und die des 2. Chips als Ausgänge gemacht werden
//Dies kann in einer Schleife erfolgen
für (int i= 0 ; i< 16 ; i++ ) {
mcp23_1.pinMode (i, INPUT) ;
mcp23_2.pinMode (i, OUTPUT) ;
}
//oder gleichzeitig durch Aufrufen der Methode pinMode16
//mcp23_1.pinMode16(0x0ffff);
//mcp23_2.pinMode16(0x00000);
}

Leere Schleife()
{
//Sie können alle Eingänge des 1. Chips lesen und diese auf dem 2. in einer Schleife setzen
für (int i= 0 ; i< 16 ; i++ ) {
mcp23_2.digitalWrite (i, mcp23_1.digitalRead (i) );
}
//oder nacheinander mit den Methoden digitalRead16 und digitalWrite16
//mcp23_2.digitalWrite16(mcp23_1.digitalRead16());
}

Wie bereits zuvor habe ich drei mehr oder weniger überlappungsfreie Sensorsätze für Arduino bestellt. In beiden Sets erhielt ich die Mikroschaltung 74HC595, die vorerst im Karton verblieb. Im Moment wusste ich nicht einmal, um welche Art von Mikroschaltung es sich handelte oder wie diese schwarze Kakerlake überhaupt beschriftet war.

Doch es kamen dunkle Tage, an denen ich nicht genug von den Ausgangssignalen des Arduino Nano bekommen konnte, während ich ein Gerät zum Testen von Schrittmotoren baute. (TODO: Fügen Sie einen Link zum Artikel über den SD-Tester ein, wenn Sie fertig sind.) Infolgedessen erwies sich mein Gerät zum Testen von Schrittmotoren als recht komplex - ein zweizeiliges 1602-Display mit einem Menüsystem, das über eine voll funktionsfähige 4x4-Tastatur gesteuert wird, 3 digitale Ziffern zum Einstellen des Mikroschrittwerts des Schrittmotors, Step und Dir-Signale für den Schrittmotor usw. Es scheint, dass es an der Zeit ist, auf eine andere Version von Arduino umzusteigen. Aber meine natürliche Faulheit widersetzte sich dieser Migration. Und der faule Kopf begann nach einer Lösung zu suchen.

Es wurde beschlossen, nach einer Lösung zu suchen, die auf dem bereits Bestehenden aufbaut. Beim Durchsuchen der Schals und Teile aus den Bausätzen fiel mir ein 16-poliger schwarzer „Käfer“ auf. Erst in einem Satz, dann in einem anderen. Ich beschloss zu fragen, was für ein Teil das war und warum es zu den Sets hinzugefügt wurde. Ich verstehe nicht, warum sie es in Bausätzen packen, aber ich habe den Chip selbst auf der NXP-Website gefunden.

Es stellte sich heraus, dass es sich hierbei um eine recht interessante Mikroschaltung handelt – ein Schieberegister mit seriellem Eingang und parallelem Ausgang.

(aus Datenblatt)

Beschreibung der Pins

Kontakt Name Beschreibung und Verbindung
10 ~MR Gesamtzurücksetzung- Zurücksetzen, aktiver Pegel niedrig. Idealerweise wäre es eine gute Idee, eine Reset-Schaltung zu bauen, die diesen Eingang zunächst auf Low und dann in einen Einzelzustand steuert. Aber Sie müssen nicht herumspielen und es an +5V anschließen. In diesem Fall enthält die Ausgabe vor dem ersten Datensatz Zufallswerte
13 ~OE Ausgabe aktivieren- Ausgangsauflösung, aktiver Pegel niedrig. Bei Anlegen von 0 wird der Inhalt des Registers an die Ausgänge geliefert; bei Anlegen von 1 werden die Ausgänge ausgeschaltet und in den Z-Zustand überführt, wodurch verschiedene Geräte abwechselnd einen Bus nutzen können. Verbinden Sie sich mit Masse, wenn Sie den Zustand der Ausgänge nicht kontrollieren müssen
14 D.S. Serieller Dateneingang- serieller Eingang. Dieser Eingang muss auf den Eingangssignalwert eingestellt werden, bevor der SHCP-Verschiebungstakt angewendet wird.
11 SHCP Schieberegister-Eingangstakt- Takteingang des Schieberegisters. Um ein Bit in ein Register zu verschieben, muss ein Übergang von 0 auf 1 durchgeführt werden. Wann Sie auf 0 zurückkehren, liegt in Ihrem Ermessen. Sie können es sofort tun, Sie können es direkt vor dem Einschieben tun. Im ersten Fall können wir davon ausgehen, dass die Umschaltung entlang der Flanke des direkten Signals erfolgt, im zweiten Fall entlang des Abfalls des inversen Signals. Siehe auch Leistungshinweise unten. Außerdem ändert sich bei Ankunft dieses Signals der Wert des seriellen Ausgangs Q7/S
12 STCP Speicherregister-Takteingang- Takteingang des Latch-Registers. An der Flanke dieses Impulses wird der Wert vom Schieberegister an die Parallelausgänge Q0-Q7 übertragen
9 Q7S Serielle Datenausgabe- serielle Ausgabe. Darauf wird der Wert des höchstwertigen Bits des Schieberegisters angezeigt. Dieser Ausgang kann verwendet werden, um das Schieberegister auf 16-Bit, 24-Bit usw. zu skalieren. planen
15, 1-7 Q0, Q1-7 Latch-Registerausgänge. Das Signal an sie wird beim Eintreffen des STCP-Signals vom internen Schieberegister übertragen
8 GND Ernährung- gemeinsamer Draht
16 VCC Ernährung - +

Ernährung

Die HC-Version der Mikroschaltung benötigt eine Stromversorgung von 2 V bis 6 V, die HCT-Version (TTL-kompatibel) - von 4,5 V bis 5,5 V. HCT – TTL – wird es noch verwendet? Arduino scheint selbst CMOS zu sein, daher wird HCT nicht benötigt, aber wenn Sie die Pegel mit externen TTL-Verbrauchern koordinieren müssen, können Sie den HC mit 3,3 V versorgen, dann sind die Signalpegel mit TTL kompatibel. Im Allgemeinen sollten sowohl HC als auch HCT mit einem 5-Volt-Arduino funktionieren. Das schreiben sie im Internet.

Wichtiger sind die Abblockkondensatoren. Ohne sie funktioniert die Schaltung möglicherweise nicht wie vorgesehen und ist darüber hinaus möglicherweise unvorhersehbar. Theoretisch sollte im Stromversorgungskreis jedes Gehäuses ein 0,1 µF-Kondensator eingebaut werden. Ich habe diesen Kapazitätswert als Durchschnitt aus dem Internet berechnet. Mein Plan funktionierte auch ohne ihn einwandfrei. Zur Verdeutlichung habe ich in der Bibel der Schaltungsdesigner nachgeschlagen: „The Art of Circuit Design“ von Hill und Horowitz ist fast wie „The Art of Programming“ von Donald Knutt, aber nur für Hardware-Leute (übrigens Hill und Horowitz). sind viel näher am Volk, Knutt durch – er ist zu schlau) – aber dort scheinen sie Blockkondensatoren die Entkopplungskondensatoren an den Eingängen zu nennen. Schade, es ist ein gutes Buch, aber es ist bereits sehr hinter der Zeit zurück. Ich habe die zweite oder dritte russische Ausgabe aus den späten 90ern oder frühen 0ern, das Original ist höchstwahrscheinlich noch 10 Jahre älter. Auf dem dritten, rosafarbenen Band fand ich einen Aufkleber – „14 Rubel“ – wie billig damals alles nach modernen Maßstäben war. Aber es sind erst 15 Jahre oder etwas mehr vergangen. Die Nostalgie war überwältigend.

Leistung

Im Titel des Datenblatts 74HC595 steht, dass es mit 100 MHz arbeitet. Ein kurzer Blick auf die Diagramme und Tabellen im Datenblatt zeigt, dass die längsten Zeiten im Temperaturbereich von -40 °C bis +85 °C bei einer 4,5-V-Stromversorgung 10–20 ns (100–50 MHz) betragen. Angesichts der Frequenzen, mit denen Arduino arbeitet, müssen Sie nichts weiter wissen. Es ist nur möglich, dass die Standardbibliotheken digitalRead/digitalWrite aufgrund verschiedener Prüfungen große Bremsen darstellen und als schnellere Version umgeschrieben werden können (und sollten). Ich habe vor, mich damit zu befassen und ausführlicher zu schreiben, aber im Moment habe ich keinen besonderen Bedarf.

Die Leistung des Arduino Nano und der Arduino-Bibliothek in Bezug auf die Geschwindigkeit des Schaltens von Ausgängen und der Verarbeitung von Eingängen liegt nach meinen Beobachtungen irgendwo in der Mitte von einigen Kilohertz bis zu mehreren zehn Kilohertz. Meiner Meinung nach besteht also beim Schreiben von Code zur Steuerung des 74HC595-Schieberegisters kein Grund zur Sorge über Verzögerungen bei der Einstellung der Steuersignale.

Eine andere Sache ist, dass Sie für einen seriellen 8-Bit-Expander die maximale auf Arduino verfügbare Ausgangsschaltfrequenz teilen sollten – DS einstellen, SHCP auf 1 setzen, SHCP (auf 0) zurücksetzen – 8-mal und STCP setzen/zurücksetzen. Insgesamt auf einen Blick: 3 * 8 + 2 = 26 digitalWrite-Vorgänge. Insgesamt ist es etwa 25-mal langsamer als das Arduino selbst.

Bei einer Skalierung auf 16, 24 oder 32 Ausgänge beträgt die Verlangsamung ungefähr das 3*16 + 2 = 50-fache, 3*24 + 2 = 74-fache bzw. 3*32 + 2 = 98-fache.

Offensichtlich ist ein solcher 74HC595-Schieberegister-Expander nicht dafür geeignet, etwas wirklich Schnelles zu steuern, aber in manchen Anwendungen ist er durchaus geeignet, um sich selten ändernde statische Signale einzustellen. So habe ich beispielsweise mit einem solchen Expander einen 3-Bit-Mikroschrittmodus eingestellt, um den Mikroschrittmodus für den Schrittmotortreiber DRV8825 in einem Tester für Schrittmotoren einzustellen. Das hat mir übrigens noch nicht besonders geholfen – Stepper von Nadeldruckern funktionieren im Mikroschrittmodus fürchterlich, zumindest unter der Steuerung des DRV8825-Treibers – im Mikroschrittmodus ist zum Beispiel die Hälfte des Schritts irgendwie träge und unsicher, nur die zweite Hälfte ist beschwingt und kraftvoll. Daher begann bei Verwendung eines Mikroschritts bei der geringsten Anstrengung auf der Schrittmotorachse die ersten Halbschritte zu überspringen. Danach habe ich die verbleibenden Mikroschrittmodi auf den vorhandenen Drucker-SDs irgendwie nicht erkundet.

Skalierung

Der Arduino-Ausgangsexpander auf Basis des 74HC595 lässt sich ganz einfach von der 8-Bit-Version in eine Schaltung beliebiger Kapazität umwandeln. Dazu muss der serielle Ausgang des unteren Registers Q7S mit dem DS-Eingang des höheren Registers verbunden und die Leitungen SHCP und STCP parallel geschaltet werden. Nun, abhängig von der verwendeten Schaltung und Softwarelösung müssen Sie entscheiden, wie Sie die ~MR- und ~OE-Leitungen verbinden.

Eingabeerweiterung

Das Erweitern der Eingabeleitungen für Arduino ähnelt im Prinzip dem Erweitern der Ausgabe, wobei zu berücksichtigen ist, dass Sie den DS-Wert nicht am Ausgang einstellen, sondern ihn am Eingang lesen müssen und einen Chip vom Typ 74HC597 verwenden müssen. Allerdings habe ich dies noch nicht in der Praxis getestet.

Multiplexen

Sie können die Anzahl der von Arduino gesteuerten Ausgangsleitungen auf zwei Arten erhöhen: 1) Erhöhen Sie die Bitkapazität eines seriellen Ausgangs, was bei einer Erhöhung der Bitkapazität um das Zwei-, Drei- oder Vierfache die Geschwindigkeit des Expanders entsprechend um das Zweifache verringert , drei- oder viermal; 2) Parallelschaltung mehrerer Expander unter Verwendung eines zusätzlichen Ausgangs für jeden Expander, wodurch die Leistung auf einem akzeptablen Niveau gehalten werden kann, aber die Verwendung von mindestens einem Arduino-Ausgang für jeden Expander erforderlich ist.

Wenn Sie die Registersignale 74HC595 - ~MR, ~OE nicht direkt mit Arduino steuern, dann reichen nur drei Arduino-Ausgänge aus, um die Schieberegistersignale DS, SHCP und STCP anzusteuern, um sie in 8 oder 16 oder mehr Ausgangssignale umzuwandeln Verwendung des 74HC595-Chips.

Um mehrere auf dem 74HC595 basierende Expander zu multiplexen, können Sie auf zwei Arten vorgehen: 1) Wählen Sie für jeden Signalexpander ein separates Latch-Signal aus, d. h. alle Register am Bus verschieben eingehende Daten parallel und verschieben dementsprechend die Werte an den Ausgängen des internen Schieberegisters, aber nur eines überträgt den Wert vom internen Schieberegister an die Ausgänge der Mikroschaltung; 2) Schiebesignale werden nur an einen der Erweiterungsmodule übertragen und die Übertragung der Signalwerte an den Ausgang erfolgt für alle Erweiterungsmodule gleichzeitig.

Ich bin eher dazu geneigt, die Option zu verwenden, wenn die internen Schieberegister alles enthalten können, was Sie möchten (Option 1) und einige der vorherigen Werte am Ausgang fixiert sind, und hier ist der Grund: beim Übertragen von Werten aus der internen Verschiebung Register zum Ausgang kann es zu unkontrollierten Übergängen von 0 auf 1 und zurück kommen, zu einer Art Signalsprung, auch wenn der Anfangswert im internen Register und am Ausgang gleich ist. Und meiner Meinung nach sollte der Vorgang der Übertragung des Zustands des internen Schieberegisters an die Ausgänge des 74HC595 so wenig wie möglich genutzt werden.

Software-Unterstützung

Die Softwareunterstützung für diese und ähnliche Erweiterungen besteht darin, dass der Zugriff auf Geräte nicht direkt über bestimmte Pins mithilfe des digitalRead/digitalWrite des verwendeten Arduino-Controllers erfolgt, sondern über die Pins eines abstrakten I/O-Geräts, das wiederum als gebunden initialisiert werden kann einem bestimmten Arduino-Typ und einem anderen ähnlichen abstrakten Gerät.
Fortsetzung des Themas:
Netzwerke

Die Sicherheit von iPhone-Geräten ist der von Android weit überlegen. Die Entwickler versichern, dass es möglich ist, ein iPhone online anhand der Telefonnummer zu finden, wenn Sie der ursprüngliche Besitzer sind....