Benötigen Sie immer einen GPIO-Erweiterungschip, wenn Sie i2c verwenden?

ZUSAMMENFASSUNG:

Ich versuche, die Grundlagen zu lernen, wie man eine einfache Schaltung mit dem i2c verdrahtet. Ich möchte nur ein einfaches Projekt mit einer LED und einem Druckknopf mit meinem Himbeer-Pi bauen. Soweit ich weiß, ist das "pi" bereits i2c-fähig und i2c ist kein Stück Hardware, sondern nur ein Protokoll, soweit ich es verstehe.

Anfangs dachte ich jedoch, alles, was ich tun müsste, wäre, den Druckknopf und die LED mit den SDA- und SCL-Pins auf den Pinouts des "pi" zu verbinden, und ich wäre gut. Aber anscheinend brauche ich einen Erweiterungschip oder ein ähnliches Gerät, das Anweisungen und Registrierung für Geräte wie LED und PushButton bereitstellt.

FRAGE 1:

Benötige ich einen GPIO-Erweiterungschip, um eine Verbindung zu meinem "Pi" herzustellen, bevor ich mit dem Anschließen von Geräten über die i2c-Funktionalität beginnen kann?

Ich habe bereits ein 579-MCP3008-I/P und ein 579-MCP23017-E/SP bestellt, falls es sein muss. Ich bin mir nicht sicher, was I/P oder E/SP bedeutet, aber mir wurde gesagt, dass der MCP3008 und der MCP23017 gut zu bekommen seien.

FRAGE 2:

Aus meiner Recherche hier und durch die Untersuchung des Schaltplans unten dachte ich, die (SLAVE) Geräte seien meine LED und mein Druckknopf und dann war mein (MASTER) Gerät mein "pi". Ich gehe davon aus, dass mein Pi mein MASTER-Gerät ist, aber mein SLAVE-Gerät würde als mein Erweiterungschip betrachtet, NICHT als LED oder PushButton.

Daher ist meine LED und mein Druckknopf kein Slave- oder Master-Gerät, sondern nur eine Erweiterung des SLAVE-GERÄTS, das der Erweiterungschip ist. Habe ich dieses Recht.

BILD 1

Ich zog meine Schlussfolgerung dessen, was ich verstehe. Verzeihen Sie meine Zeichnung, da ich weiß, dass sie nicht maßstabsgetreu ist. Kann mich jemand kritisieren, ob ich dieses Setup und diese Terminologie verstehe, wenn es um Sklave und Meister geht?

Geben Sie hier die Bildbeschreibung ein

Nur um das klarer zu machen, wollen Sie hauptsächlich nur den I2C-Bus verstehen? Wenn ja, dann fair genug, aber wenn Sie wirklich nur eine LED und eine Taste anschließen möchten, ist es viel einfacher, nur den GPIO (Allzweck-E / A) zu verwenden.
@PeterJ Ja, ich möchte nur den I2C verstehen. Ich weiß, dass dies ein sehr einfaches Projekt ist, aber ich möchte zuerst einfach anfangen und alles kommunizieren lassen, bevor ich zu extrem werde.
Jetzt würde sich diese Frage für die Migration auf den Raspberry PI-Stack qualifizieren

Antworten (3)

Bei der Kommunikation müssen festgelegte Regeln für die Interaktion vorhanden sein. Ähnlich wie wir derzeit Englisch verwenden, wenn wir miteinander sprechen. In ähnlicher Weise müssen Chips über ein etabliertes Protokoll für ihre Kommunikation verfügen, um Daten zwischen ihnen zu übertragen.

Beim Sprechen beinhalten die Regeln die Verwendung von Lauten, die Wörter bilden, und dann Regeln, die beschreiben, wie diese Wörter zusammenpassen, um Sätze zu bilden. Beim Schreiben haben wir Symbole, die zusammenkommen, um Wörter zu bilden, und dann die gleichen Regeln, wie Wörter zusammenkommen, um Sätze zu bilden.

Auf die gleiche Weise hat Ihr Chip zwei Verständniselemente. Der erste Teil ist das Protokoll und der zweite Teil ist die Schnittstelle. I2C hat gleichzeitig sowohl ein Protokoll als auch eine Schnittstelle. Es beschreibt die Schnittstelle, das sind die Regeln dafür, wie ein Chip Strom an einen anderen Chip senden soll (ähnlich wie die Töne zum Sprechen oder Symbole zum Schreiben). I2C beschreibt auch ein Protokoll, bei dem es sich um Regeln handelt, wie die über die Schnittstelle übertragenen Informationen zu interpretieren sind (wie die Syntax für einen Satz).

Nun, die Arten von Geräten, die über I2C kommunizieren sollen, sind Dinge wie Mikrocontroller und Computer. Dinge, die ein ausreichend hohes Maß an "Verständnis" oder zumindest die Fähigkeit haben, an Dinge wie "Adressen" und Bytes zu denken. Wenn Sie ein Gerät kaufen, das I2C versteht (wie diese schicke LED https://www.sparkfun.com/products/8579 ), dann wissen Sie, dass es diese Regeln sowohl für die Schnittstelle als auch für das Protokoll von I2C versteht. und Sie können direkt damit interagieren.

Eine "normale" LED (wie diese: https://www.sparkfun.com/products/9590 ) versteht so etwas wie I2C nicht. Es ist wie eine Glühbirne, es wandelt nur empfangenen Strom in Licht um! Aus diesem Grund können Sie nicht über I2C damit "kommunizieren". Ebenso spricht eine Schaltfläche (wie diese: https://www.sparkfun.com/products/97 ) auch kein I2C. Es ist wie der Schalter, den Sie verwendet haben. Wenn Sie den Knopf drücken, verbindet er physisch zwei der Pins auf der Außenseite. Wenn Sie eine solche Taste oder LED verwenden möchten, sollten Sie sich die Pins "General Purpose Input/Output", auch GPIO genannt, ansehen. Dies sind Pins auf Ihrem Raspberry PI, die einfach "Hi"- und "Low"-Spannung an eine Komponente (wie Ihre LED) senden können.

Lassen Sie mich nun, nachdem all das aus dem Weg geräumt ist, einige Ihrer eigentlichen Fragen beantworten!

F1) Soweit ich weiß, ist "pi" bereits i2c-fähig und i2c ist kein Stück Hardware, sondern nur ein Protokoll, soweit ich weiß.

A1) Bei einer Schnittstelle ist es ziemlich mühsam und CPU-intensiv, in einer Schleife zu sitzen und die Pins wiederholt auf "hi" und "low" zu setzen und dann eine genaue Zeitspanne zu warten, um Ihre Daten zu senden. Da wir häufig die Daten senden möchten und dann die CPU gehen lassen und etwas anderes tun, enthalten viele Mikrocontroller und CPUs Hardwareabschnitte, die verstehen, wie die Daten aus einer Reihe von Bits in die elektrischen Signale umgewandelt werden, die für die Kommunikation mit bestimmten erforderlich sind Protokolle. In Ihrem Himbeer-Pi gibt es einen speziellen Satz von Registern (oder zumindest Speicherstellen), die beim Schreiben dazu führen können, dass sich einige Ihrer Pins in Übereinstimmung mit den I2C-Spezifikationen verhalten. Wenn Sie dies unter Linux über den Kernel tun, kann dies ziemlich schwierig sein, weshalb viele Designer "memmap" verwenden werden. und /dev/mem, um diese Speicherorte direkt umzuschalten. Dies ist ziemlich kompliziert, und Sie werden wahrscheinlich umfangreichere Referenzen finden müssen, als ich Ihnen bieten kann.

F2) Benötige ich einen GPIO-Erweiterungschip, um eine Verbindung zu meinem „Pi“ herzustellen, bevor ich mit dem Anschließen von Geräten über die i2c-Funktionalität beginnen kann?

A2) Wie ich oben erwähnt habe, müssen Sie, wenn Sie nicht bereit sind, die bereits auf dem Himbeer-Pi selbst verfügbaren GPIO-Pins zu verwenden, ein Gerät finden, das die I2C-Informationen in eine einfachere Form umwandeln kann, die Ihre LED und Ihr Druckknopf "verstehen". ."

Q3) Wer ist der Master und wer der Slave auf meinem I2C-Bus?

A3) Es gibt also nur ein Gerät in I2C, das gleichzeitig die Kommunikation initiieren darf. In diesem Fall ist das einzige Gerät, das ein Master sein sollte, der Himbeer-Pi. Wenn Sie tatsächlich einen I2C-fähigen Druckknopf haben, werden Sie dem Himbeer-Pi sagen, dass er den Druckknopf-Slave fragen soll: "Bist du gedrückt oder nicht?" und die Schaltfläche antwortet, und dann verwenden Sie diese Informationen.

Ich hoffe das hilft!

Ich möchte nur ein einfaches Projekt mit einer LED und einem Druckknopf mit meinem Himbeer-Pi bauen.

Dafür braucht man kein I2C. Die Verwendung von I2C ist unangemessenes Over-Engineering zum Lesen eines Schalters und zum Ein- und Ausschalten einer LED.

Von Ihrer Schaltung würde ich sagen, dass Sie diese Schaltung zuerst ausprobieren und verstehen sollten

  • Ohm'sches Gesetz
  • Warum eine LED keinen festen Widerstand hat
  • Die Rolle eines Strombegrenzungswiderstands

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

V1 wären zwei AA-Batterien in einer Halterung.

Die LED sollte so etwas wie eine 5-mm-grüne "Anzeige" -LED sein (keine LED, die für die Beleuchtung ausgelegt ist). Es sollte ein billiges sein, weil Sie es zerstören werden.

Eine solche LED hat typischerweise eine Durchlassspannung von 2 V und ist so ausgelegt, dass sie bei einem Strom von 10 mA gut leuchtet. Wenn Sie es jedoch mit etwas über 2 V ansteuern, fällt sein scheinbarer Widerstand schnell ab (da es sich um ein Halbleiterübergangsgerät handelt, nicht um ein normales Widerstandsgerät) und der Strom steigt schnell bis zu dem Punkt, an dem der Arbeitsteil der LED sehr heiß wird und brennt aus.

Danach schlage ich vor, einen Taster an (sagen wir) GPIO23 und eine LED (plus Strombegrenzungswiderstand) an GPIO24 anzuschließen. Dieses Beispiel kann hilfreich sein.

Benötige ich einen GPIO-Erweiterungschip, um eine Verbindung zu meinem "Pi" herzustellen, bevor ich mit dem Anschließen von Geräten über die i2c-Funktionalität beginnen kann?

Nein. Einige Geräte "sprechen" selbst I2C. Zum Beispiel der Temperatursensor TMP100 . Diese können Sie direkt an einen Raspberry Pi anschließen. Sie benötigen keinen GPIO-Erweiterungschip.

Wer ist der Master und wer der Slave in meinem I2C-Bus?

Der Raspberry Pi wäre der Master.

Das RPI hat sowohl i2c-Fähigkeit (ich bin mir nicht sicher, ob es hardware- oder softwarebasiert ist, aber das ist eine andere Geschichte) als auch grundlegendes GPIO.

I2C ist ein adressiertes Busprotokoll, das für die Kommunikation zwischen einem Master und einem Slave (oder mehreren Mastern und mehreren Slaves) bestimmt ist. Sie (der Benutzer) sagen Bob (dem Meister), dass er Mike (dem Sklaven) sagen soll, dass er Aufgabe X erledigen soll, wofür Mike eingestellt wurde.

GPIO hingegen bedeutet „General Purpose Input Output“. Sie sagen Bob, er soll Aufgabe X erledigen, was darin bestehen kann, ein Licht einzuschalten, und lesen einen Schalter, um zu wissen, wann er das Licht ein- und ausschalten muss.

Das RPI kann mit direkten GPIO-Pins verwendet werden, um eine LED ein- oder auszuschalten (es hat 3,3 V und kann nur direkt weniger als 20 mA ausgeben). IIRC, die SDA- und SCL-Pins auf dem RPI können sowohl im I2C- als auch im GPIO-Modus verwendet werden, aber da es viele reine GPIO-Pins gibt, verwenden Sie diese, anstatt sie zu verwechseln.

Um Ihre schriftliche Frage zu beantworten: JA, i2c benötigt einen i2c-GPIO-Port-Expander oder einen LED-Treiber, um eine LED ein- und auszuschalten, und um Ihr eigentliches Problem zu beantworten. NEIN, Sie benötigen kein I2C, um eine LED ein- oder auszuschalten RPI GPIOs stattdessen.