Schlagwort-Archive: I²C

Der I2C Bus Scanner. Die Adressen von Geräten am I2C Bus ausgeben.

Der I2C Bus ist ein 2-Draht Bus mit den Leitungen SCL (clock) und SDA (data). Er wird auf Platinen zwischen zwei Geräten / ICs verwendet. Die Hersteller der ICs geben die I2C Bus Adresse vor, manchmal können die unteren Bits angepasst werden, da theoretisch nur 128 Adressen zu Verfügung stehen und zwei ICs auf der selben Adresse liegen könnten.
Der Bus hat einen Master (hier der Arduino) und bis zu 112 Slaves (verschiedene ICs mit unterschiedlichen Adressen).

Hier die I2C Beschreibung bei Wikipedia.
Beim Arduino wird die Library Wire.h für die I2C Befehle eingebunden.
Der TWI Bus ist identisch mit dem standard I2C Bus.

Ein einfaches Arduino Programm scannt alle Adressen im I2C Bus und gibt die verwendeten Adressen aus.

// I²C Scanner aus dem Arduino.cc forum
// Netzfund, unbekannter Autor.
// Sucht I2C Geräte an den Adressen 0...127 und gibt bei gefundenen Geräten die Adresse aus.
//
// Matthias Busse 22.9.2018 Version 1.0

#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(38400);
  while (!Serial);
  Serial.println("\nI2C Scanner");
}

void loop() {
  byte error, address;
  int nDevices;
     
  Serial.println("scannen...");
  nDevices = 0;
  for(address = 1; address < 127; address++ ) {
    // Der i2c Scanner nimmt den Rückgabewert von Write.endTransmisstion um zu schauen ob ein Gerät auf dieser Adresse antwortet.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("I2C Geraet gefunden an Adresse 0x");
      if (address<16) Serial.print("0");
      Serial.println(address,HEX);
      nDevices++;
    }
    else if (error==4) {
      Serial.print("Unbekannter Fehler an Addresse 0x");
      if (address<16) Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0) Serial.println("Kein I2C Geraet gefunden\n");
  else Serial.println("fertig\n");
  delay(5000);           // 5 Sekunden warten bis zum nächsten durchlauf
}

Und hier die Ausgabe

I2C Scanner
scannen...
I2C Geraet gefunden an Adresse 0x68
fertig

von Matthias Busse

Ein Batteriemonitor für Strom und Spannung mit dem INA226 und dem Arduino Uno

Ich möchte einen Batteriemonitor bauen. Dazu muß die Batteriespannung gemessen werden mit 12V oder 24V und der entnommene oder geladene Strom. Für die Strommessung wird ein Shunt Widerstand verwendet. Für hohe Ströme von einigen Ampere bis hin zu mehreren Hundert Ampere werden Shunt Widerstände angeboten die einen Spannungsabfall von ca. 60mV bis 75 mV beim Maximalstrom haben.

Ich brauche also einen AD Wandler der -+75mV genauso gut messen kann wie 12V oder 24V. Das ist mit zwei langsamen aber hochauflösenden AD Wandlern machbar. Dazu kann man einen Spannungsteiler für 24V und eine OP Verstärker für +-75 mV vorschalten. Hierbei sind dann noch die Toleranzen der Widerstände und der OP Schaltung zu beachten. Weiterlesen

Der Luftdruck und Temperatur Sensor BMP085 am Arduino Uno.

Ich habe hier den Luftdruck und Temperatur Sensor BMP085 von Bosch. Er wird seriell über den i²C Bus angesprochen und gibt dann die Temperatur und den Luftdruck aus.

Der Messbereich geht von 300 hPa bis 1100 hPa mit einer Genauigkeit von typisch +-1,0 hPa. Zwischen 700 und 1100 hPa mir der maximalen Auflösung von 0,01 hPa.
Die Temperatur misst er von 0 bis 65°C mit einer Genauigkeit von typisch +-1 Grad Celsius. Weiterlesen