Arduino NANO: I2C -AdressScanner |
|
Programm: I2C-Bus
nach Adressen von Bausteinen durchsuchen
/*
I2C-AdressenScanner
===================
Das
Programm durchsucht den I2C-Bus des Arduino NANO nach den 7Bit
Adressen von angeschlossenen I2C-
Bausteinen.
Da in Datenblättern der I2C-Bausteine manchmal Adressen mit
8 Bit angegeben werden, gibt das Programm auch diese in Klammern
an.
Die
gefundenen Adressen werden im seriellen Monitor der
Entwicklungsumgebung angezeigt.
*/ long f100kHz = 100000L; // typische I2C-Frequenz beim Arduino NANO long f400kHz = 400000L; #include <Wire.h> // einmalig, Startbedingungen des Programms einstellen // --------------------------------------------------- void setup() { Serial.begin (9600); Wire.begin(); Serial.println ("Start: I2C-AdressScan\n"); scan(f100kHz); // I2C-BUS mit f100kHz einmalig scannen Serial.println ("Ende: I2C-AdressScan"); } // wird die Funktion loop() entfernt, erscheint der Fehler: // Fehler beim Kompilieren für das Board Arduino Nano // -------------------------------------------------------- void loop() { // nix } // I2C-Adressen von 0-127 ausgeben und auf // eine Antwort hoffen // --------------------------------------- void scan(long frequenz) { int count = 0; // Anzahl der gefundenen Bausteine Wire.setClock(frequenz); // Bus-Frequenz einstellen .. Serial.print ("Scan mit "); // .. und anzeigen Serial.print (frequenz/1000); Serial.println ("kHz"); for (int i = 0; i < 128; i++) { // alle 7Bit I2C-Adressen von 0 bis 127 aufrufen Wire.beginTransmission(i); // .. Adresse aufrufen byte msg = Wire.endTransmission(); // .. Aufruf beenden if (msg == 0) { // Rückgabe 0, ein Baustein hat ACK gesendet Serial.print ("ID = 7 Bit= "); // 7 Bit Adresse des Bausteins ausgeben Serial.print (" 0x"); Serial.print (i, HEX); Serial.print (" .. (8 Bit= 0x"); // ( 8 Bit Adresse) berechnen Serial.print (i<<1,HEX); Serial.println (")"); count++; } delay (50); } Serial.print (count); // Anzahl der gefundenen Bausteine ausgeben Serial.println (" I2C-Bausteine gefunden\n"); } |