I2C

I2C (Inter-Integrated Circuit): https://en.wikipedia.org/wiki/I%C2%B2C

I2C on kaksisuuntainen ohjaus- ja tiedonsiirtoväylä. I2C:n avulla piirit voivat välittää keskenään tietoa. I2C-tä voi käyttää esim. ohjaamaan lcd-näyttöä, ohjata servoja erillisellä piirillä, lukea tai välittää tietoja eri sensoreilta (esim. lämpötila, kiihtyvyys, asento...).

I2C laitteet liitetään Arduinossa SDA ja SCL pinneillä. Arduino Uno:ssa:

      • SDA = Analog 4
      • SCL = Analog 5

Eri mikrokontrollerissa voi olla eri pinnit tuota varten ja usein pinnit voi olla myös nimetty SDA ja SCL. Useampia I2C laitteita voi (yleensä) kytkeä rinnakkain, samoihin portteihin, joten saat ohjattua useampiakin I2C laitteita käyttämällä vain kahta pinniä.

I2C laitteilla on aina I2C osoite, jonka avulla laite tunnistetaan ja jutellaan oikean laitteen kanssa. Samanosoitteisia laitteita ei voi kytkeä samaan I2C väylään, mutta monella laitteella I2C osoitetta voi tarvittaessa muuttaa muuttamalla laitteen piirilevyllä I2C-osoite kytkentöjä.

I2C:n käyttö vaatii Wire.h -kirjaston lisäämisen koodiisi. https://www.arduino.cc/en/Reference/Wire

Kun saat käsiisi I2C piirin, selvitä ensin laitteesi osoite kytkemällä se arduinoon ja ajamalla arduinossasi jokin I2C scanneri ohjelma. Esim.: http://playground.arduino.cc/Main/I2cScanner

Scanneri listaa Arduinon I2C väylästään löytämät laitteet.

Voit myös käyttää alla olevaa koodia:

// I2C Scanner
// Written by Nick Gammon
// Date: 20th April 2011

#include <Wire.h>

void setup() {
  Serial.begin (9600);

  // Leonardo: wait for serial port to connect
  while (!Serial) 
    {
    }

  Serial.println ();
  Serial.println ("I2C scanner. Scanning ...");
  byte count = 0;
  
  Wire.begin();
  for (byte i = 8; i < 120; i++)
  {
    Wire.beginTransmission (i);
    if (Wire.endTransmission () == 0)
      {
      Serial.print ("Found address: ");
      Serial.print (i, DEC);
      Serial.print (" (0x");
      Serial.print (i, HEX);
      Serial.println (")");
      count++;
      delay (1);  // maybe unneeded?
      } // end of good response
  } // end of for loop
  Serial.println ("Done.");
  Serial.print ("Found ");
  Serial.print (count, DEC);
  Serial.println (" device(s).");
}  // end of setup

void loop() {}