Arduino/I2C

Uit Lab
Naar navigatie springen Naar zoeken springen

Deze pagina is in bewerking en nog erg onvolledig

I2C (of IIC) is een protocol voor de communicatie tussen een microcontroller en randapparaten daarvoor - zoals sensoren, actuatoren, maar ook geheugens e.d. Voor deze communicatie zijn maar 2 draden nodig, waarop meerdere apparaten kunnen worden aangesloten: dit maakt de bedrading van een systeem veel eenvoudiger.

Een ander serieel protocol is ISP - maar dit heeft meer draden nodig, en

De Arduino UNO heeft ingebouwde hardware voor dit protocol: de analoge poorten A4 (SDA) en A5 (SCL). Deze zijn op nieuwere versies (UNO R3, en volgende) ook uitgevoerd op de extra poorten SDA en SCL - voorbij D13. Dit zijn de verbindingen die gebruikt worden door de Arduino I2C library.

Je kunt het protocol ook in software uitvoeren, met twee digitale poorten.
Als de poorten SDA en SCL beschikbaar zijn, hebben deze de voorkeur. Bij nieuwere borden zoals de Arduino M0 (Zero) worden A4 en A5 niet meer hiervoor gebruikt.

Hoeveel draden heb je nodig?

I2C maakt gebruik van twee draden; soms heb je een derde nodig, voor de aarde (0V).

  • SDA: de data-draad; de bits worden achtereenvolgens hierop verstuurd;
    • Arduino UNO: A4
  • SCL: de clock-draad; deze geeft het kloksignaal dat bij de bits hoort. I2C is hiermee een synchrone verbinding.
    • Arduino UNO: A5
  • GND: ground (aarde, 0V): dit is de referentiespanning voor de beide andere draden.
    • in een systeem is de 0V vaak aanwezig als onderdeel van de voeding van de verschillende componenten.

pull-up weerstanden

Voor de I2C zijn pull-up weerstanden nodig. Als je één device (randapparaat) gebruikt, heb je waarschijnlijk voldoende aan de pull-up weerstanden die bij de Arduino ingebouwd zijn. Als je meerdere devices gebruikt op dezelfde I2C-bus, gebruik je 10KOhm pull-ups in de SCL en de SDA verbindingen. Voor sommige devices heb je nog "sterkere" (kleinere) pull-up weerstanden nodig, bijvoorbeeld 4k7.

I2C scanner

Met een I2C scanner kun je nagaan op welke i2c-adressen een device aanwezig is.

Historie en achtergrond

I2C is een protocol dat in de jaren XX door Philips is ontwikkeld, onder meer voor het vereenvoudigen van de bedrading van van ICs en van systemen. ICs hebben voor seriële communicatie veel minder aansluitingen nodig dan voor parallelle communicatie, Aansluitingen (pinnen) zijn relatief duur, en maken een veel grotere behuizing nodig dan je voor de chip zelf nodig hebt. Bovendien is elke verbinding een mogelijk defect.

Serieel protocol

I2C is een seriële verbinding: de bits worden achterelkaar over dezelfde draad verstuurd. (Bij een parallelle verbinding verstuur je de bits over meerdere draden parallel.)

Tegenwoordig worden steeds meer seriële verbindingen gebruikt. Andere voorbeelden van seriële verbindingen zijn: USB,

Synchroon

I2C maakt gebruik van synchrone communicatie: het kloksignaal is onderdeel van de verbinding.

Andere serie-protocollen

Soms wordt er maar 1 draad gebruikt; er is dan meestal sprake van een absolute timing (maar je zou ook een echt asynchoon protocol kunnen gebruiken...). Dit betekent meestal een lage snelheid van het protocol.

  • Dallas 1-wire
  • DHT-11 (etc.) 1-wire
    • De periode van een "1" verschilt van die van een "0".