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");
}
|