- Was ist das I2C-Kommunikationsprotokoll?
- Wie funktioniert I2C-Kommunikation?
- Wo kann ich die I2C-Kommunikation nutzen?
- I2C in MSP430: Steuerung des digitalen Potentiometers AD5171
MSP430 ist eine leistungsstarke Plattform, die von Texas Instruments für eingebettete Projekte bereitgestellt wird. Aufgrund ihrer Vielseitigkeit konnte sie Wege in viele Anwendungen finden, und die Phase ist noch nicht abgeschlossen. Wenn Sie unseren MSP430-Tutorials gefolgt sind, haben Sie bemerkt, dass wir bereits eine breite Palette von Tutorials zu diesem Mikrocontroller behandelt haben, beginnend mit den Grundlagen. Seitdem haben wir die Grundlagen behandelt, die wir für interessantere Dinge wie das Kommunikationsportal benötigen.
In dem riesigen System eingebetteter Anwendungen kann kein Mikrocontroller alle Aktivitäten selbst ausführen. Zu einem bestimmten Zeitpunkt muss es mit anderen Geräten kommunizieren, um Informationen auszutauschen. Es gibt viele verschiedene Arten von Kommunikationsprotokollen, um diese Informationen zu teilen. Die am häufigsten verwendeten sind USART, IIC, SPI und CAN. Jedes Kommunikationsprotokoll hat seine eigenen Vor- und Nachteile. Konzentrieren wir uns zunächst auf den I2C-Teil, da wir dies in diesem Tutorial lernen werden.
Was ist das I2C-Kommunikationsprotokoll?
Der Begriff IIC steht für " Inter Integrated Circuits ". Es wird normalerweise an einigen Stellen als I2C oder I im Quadrat C oder sogar als 2-Draht-Schnittstellenprotokoll (TWI) bezeichnet, aber alles bedeutet dasselbe. I2C ist ein synchrones Kommunikationsprotokoll, dh beide Geräte, die die Informationen gemeinsam nutzen, müssen ein gemeinsames Taktsignal gemeinsam nutzen. Es gibt nur zwei Drähte zum Teilen von Informationen, von denen einer für das Hahnsignal und der andere zum Senden und Empfangen von Daten verwendet wird.
Wie funktioniert I2C-Kommunikation?
Die I2C-Kommunikation wurde erstmals von Phillips eingeführt. Wie bereits erwähnt, hat es zwei Drähte, diese beiden Drähte werden über zwei Geräte verbunden. Hier wird ein Gerät als Master und das andere Gerät als Slave bezeichnet. Die Kommunikation sollte und wird immer zwischen einem Master und einem Slave stattfinden. Der Vorteil der I2C-Kommunikation besteht darin, dass mehr als ein Slave mit einem Master verbunden werden kann.
Die vollständige Kommunikation erfolgt über diese beiden Drähte, nämlich Serial Clock (SCL) und Serial Data (SDA).
Serial Clock (SCL): Teilt das vom Master erzeugte Taktsignal mit dem Slave
Serielle Daten (SDA): Sendet die Daten zum und vom Master und Slave.
Zu jedem Zeitpunkt kann nur der Master die Kommunikation initiieren. Da sich mehr als ein Slave im Bus befindet, muss der Master auf jeden Slave mit einer anderen Adresse verweisen. Bei einer Adressierung antwortet nur der Slave mit dieser bestimmten Adresse mit den Informationen, während die anderen weiterhin aufhören. Auf diese Weise können wir denselben Bus verwenden, um mit mehreren Geräten zu kommunizieren.
Die Spannungspegel von I2C sind nicht vordefiniert. Die I2C-Kommunikation ist flexibel, dh das Gerät, das mit 5 V Volt betrieben wird, kann 5 V für I2C und die 3,3 V-Geräte 3 V für die I2C-Kommunikation verwenden. Was aber, wenn zwei Geräte, die mit unterschiedlichen Spannungen betrieben werden, über I2C kommunizieren müssen? Ein 5-V-I2C-Bus kann nicht mit einem 3,3-V-Gerät verbunden werden. In diesem Fall werden Spannungsschieber verwendet, um die Spannungspegel zwischen zwei I2C-Bussen anzupassen.
Es gibt einige Bedingungen, die eine Transaktion bestimmen. Die Initialisierung der Übertragung beginnt mit einer fallenden SDA-Flanke, die im folgenden Diagramm als "START" -Zustand definiert ist, bei der der Master die SCL hoch lässt, während der SDA niedrig eingestellt wird.
Wie im obigen Diagramm unten gezeigt, Die fallende Flanke von SDA ist der Hardware-Trigger für die START-Bedingung. Danach wechseln alle Geräte am selben Bus in den Abhörmodus.
Auf die gleiche Weise stoppt eine steigende Flanke von SDA die Übertragung, die im obigen Diagramm als "STOP" -Zustand dargestellt ist, wobei der Master SCL hoch verlässt und auch SDA freigibt, um auf HIGH zu gehen. Eine steigende Flanke von SDA stoppt also die Übertragung.
Das R / W-Bit gibt die Übertragungsrichtung der folgenden Bytes an. Wenn es HIGH ist, sendet der Slave, und wenn es niedrig ist, sendet der Master.
Jedes Bit wird in jedem Taktzyklus übertragen, daher dauert es 8 Taktzyklen, um ein Byte zu übertragen. Nach jedem gesendeten oder empfangenen Byte wird der neunte Taktzyklus für das ACK / NACK gehalten (bestätigt / nicht bestätigt). Dieses ACK-Bit wird je nach Situation entweder vom Slave oder vom Master generiert. Für ACK - Bit wird SDA bei 9 bis niedrig - Master oder Slave gesetzt ten Taktzyklus. Es ist also niedrig, es wird als ACK angesehen, sonst NACK.
Wo kann ich die I2C-Kommunikation nutzen?
Die I2C-Kommunikation wird nur für die Kurzstreckenkommunikation verwendet. Es ist sicherlich bis zu einem gewissen Grad zuverlässig, da es einen synchronisierten Takt hat, um es intelligent zu machen. Dieses Protokoll wird hauptsächlich zur Kommunikation mit Sensoren oder anderen Geräten verwendet, die Informationen an einen Master senden müssen. Dies ist sehr praktisch, wenn ein Mikrocontroller mit nur wenigen Kabeln mit vielen anderen Slave-Modulen kommunizieren muss. Wenn Sie nach einer Kommunikation über große Entfernungen suchen, sollten Sie RS232 ausprobieren. Wenn Sie nach einer zuverlässigeren Kommunikation suchen, sollten Sie das SPI-Protokoll ausprobieren.
I2C in MSP430: Steuerung des digitalen Potentiometers AD5171
Energia IDE ist eine der am einfachsten zu programmierenden Software für unseren MSP430. Es ist dasselbe wie Arduino IDE. Weitere Informationen zum Einstieg in MSP430 mit Energia IDE finden Sie hier.
Also, zu verwenden I2C in Energia IDE haben wir nur schließen wire.h Header - Datei. Die Pin-Deklaration (SDA und SCL) befindet sich in der Drahtbibliothek, sodass wir sie nicht in der Setup- Funktion deklarieren müssen.
Beispielbeispiele finden Sie im Menü Beispiel der IDE. Eines der Beispiele wird nachfolgend erläutert:
Dieses Beispiel zeigt, wie ein digitales Potentiometer AD5171 von Analog Devices gesteuert wird, das über das synchrone serielle I2C- Protokoll kommuniziert. Mit der I2C-Drahtbibliothek von MSP durchläuft der digitale Poti 64 Widerstandsstufen und verblasst eine LED.
Zunächst werden wir die für die i2c-Kommunikation zuständige Bibliothek, dh die Drahtbibliothek, einbeziehen
#einschließen
In der Setup- Funktion initiieren wir die Drahtbibliothek mit der Funktion .begin () .
void setup () { Wire.begin (); }}
Dann initialisieren eine Variable val zum Speichern von Werten von Potentiometer
Byte-Wert = 0;
In der Schleifenfunktion starten wir die Übertragung zum i2c-Slave-Gerät (in diesem Fall Digitalpotentiometer- IC), indem wir die Geräteadresse angeben, die im Datenblatt des IC angegeben ist.
void loop () { Wire.beginTransmission (44); // an Gerät Nr. 44 senden (0x2c)
Anschließend Warteschlangenbytes, dh Daten, die Sie zur Übertragung mit der Funktion write () an den IC senden möchten.
Wire.write (Byte (0x00)); // sendet das Anweisungsbyte Wire.write (val); // sendet das Potentiometerwertbyte
Übertragen Sie sie dann, indem Sie endTransmission () aufrufen.
Wire.endTransmission (); // Übertragung beenden val ++; // Wert erhöhen, wenn (val == 64) {// wenn die 64. Position erreicht ist (max) val = 0; // vom niedrigsten Wert neu beginnen } delay (500); }}