h>
void setup() {
(115200);
// Leonardo: wait for serial port to connect
while (! Serial)
{}
intln ();
intln ("I2C scanner. Scanning... ");
byte count = 0;
();
for (byte i = 8; i < 120; i++)
{
ginTransmission (i);
if (Wire. endTransmission () == 0)
("Found address: ");
(i, DEC);
(" (0x");
(i, HEX);
intln (")");
count++;
delay (1); // maybe unneeded? } // end of good response} // end of for loop
intln ("Done. ");
("Found ");
(count, DEC);
intln (" device(s). ");} // end of setup
void loop() {}
Anschließend öffnen wir den seriellen Monitor innerhalb der Arduino IDE und stellen die Baudrate auf 115200 ein. Die HEX-Adresse wird anschließend im seriellen Monitor ausgegeben. Arduino Tutorials auf Deutsch: Liste mit Anleitungen. Hinweis zur Verkabelung von zwei I2C Displays am Arduino UNO R3
Um nun auf zwei I²C Displays gleichzeitig zwei verschiedene Texte anzeigen lassen zu können, müssen die Displays natürlich auch verschiedene HEX Adressen haben. Also verlöten wir in unserem Beispiel bei einem der Displays den A1 Kontakt, sodass dieser nun die Adresse 0x3D hat (kann mit dem Adressen Scanner nochmal geprüft werden).
Arduino I2C Beispiel Projects
Der Aufwand für Hardware und Software ist gering und eröffnet viele Möglichkeiten für ansprechende Darstellungen. Downloads
Arduino-Sketch: adc_bar_graph (28-Dec-2017)
Arduino glcd-Bibliothek: siehe Ressourcen, Smart I2C Display, Arduino
Arduino I2C Beispiel Model
Dazu sind zwei Funktionen vorhanden: draw_bar_graph_frame() zeichnet einen Ramen mit einer Skala von 0 bis 100. Diese Funktion wird ganz am Anfang im setup() -Block aufgerufen. Die zweite Funktion refresh_bar_graph() erzeugt dann den Balken mit dem aktuellen Wert, der vom ADC kommt. Diese Funktion wird im loop() -Block aufgerufen. I2C Bus - Adressierung - Datenübertragung - Zeitdiagramm - Arduino UNO - Unterricht - Lernmaterial - Mikrocontroller - serielle Kommunikation - MINT. Schließlich sorgt der Aufruf von delay(100) dafür, dass die Loop etwa 10 mal pro Sekunde durchlaufen wird. Neben den verschiedenen Zeichenfunktionen zeigt dieses Beispiel auch die Möglichkeiten, die Hintergrund-Beleuchtung zu steuern, wie es z. zum Stromsparen bei Batterie-Betrieb notwendig sein kann. Solange der ADC-Wert unverändert bleibt, wird nach Ablauf einer voreingestellten Zeit (verwaltet mi dem Zähler delay_cnt) das Display mit der Funktion dim_on() dunkel geschaltet. Sobald sich der ADC-Wert verändert, wird die Display-Beleuchtung mit dim_off() wieder auf ihren ursprünglichen Wert zurück gesetzt. Fazit
Dieses Beispiel soll zeigen, dass das Display sehr einfach in eine Arduino-Anwendung einzubinden ist.
Arduino I2C Beispiel Sensor
Es gibt auch Sensoren, die haben nur eine einzige I2C-Adresse. So musste ich einmal die gemessenen Temperaturen von drei PT1000-Fühler, mit I2C-Modulen mit nur einer möglichen I2C-Adresse, für die Steuerung eines Boilers einlesen, wo ich dann ebenfalls den TCA9548A eingesetzt habe. Und genau für solche Anwendungsfälle habe ich damals schon eine kleine Library geschrieben, die ich hier vorstelle. Bild 1: Ansicht mit Anschlussbelegung des I2c-Multiplexers TCA9548A VIN, GND: Stromversorgung 1, 65 - 5, 5 V SCL, SDA: Serial Clock und Serial Data Bus RST: Reseteingang (aktiv LOW) A0-A2: I2C-Adresseingänge SCx, SDx: Serial Clock und Serial Data der Kanäle 0.... Arduino i2c beispiel projects. 7
I2C-Adresse: Standardmäßig ist die I2C-Adresse des TCA9548A-Moduls 0x70, die Adresseingänge A0-A2 brauchen dazu wegen der vorhandenen Pulldown-Widerständen am Modul nicht beschaltet werden. Durch entsprechende Beschalten der Adresseingänge mit VCC kann die Adresse von 0x71 bis 0x77 eingestellt werden. Pullup-Widerstände: Die Signalleitungen SCL und SDA des I2C-Busses sind am Modul bereits mit 10 kOhm Pullup-Widerständen versehen.
Beschreibung
Mit dem IC MCP23017 von Microchip lässt sich Arduino sehr einfach um 16 I/O Kanäle
über die I2C Schnittstelle erweitern. Dieses IC besitzt drei Adresspins mit dessen
Hilfe bis zu acht ICs an einer Bus- leitung angebunden werden können. Somit kann
Arduino insgesamt um bis zu 128 I/O Kanäle erweitert werden. Testaufbau
Pinbelegung MCP23017
Spezifikation
Arbeitsspannung: 1. Arduino i2c beispiel sensor. 8V - 5. 5V
16-bit I/O (Eingang als Defaulteinstellung)
Hochgeschwindigkeit I2C Interface: 100 kHz, 400 kHz, 1. 7MHz
Drei Adresspins erlauben bis zu acht ICs an einer Busleitung zu adressieren
Zwei Interrupt Ausgänge
Arduino Beispielcode
Beispielcode:
Arduino Library: Adafruit_MCP23017. h Links
MCP23017 Datenblatt
Tutorial: Maximising your Arduinos I/O ports
Forumeintrag