I2C OLED-display SSD1306, 128x64pix

      Geen reacties op I2C OLED-display SSD1306, 128x64pix

Hoe gebruik  je I2C mini OLED-display SSD1306 op de Raspberry Pi?
Zie handleiding van RaspberryPi-Spy

I2C-bus

I2C (eigenlijk: I2C ) staat voor Inter-Integrated Circuit (IIC). De I2C-bus is ontwikkeld door Philips Semiconductors in 1979. Het is een synchrone, seriële bus die is ontwikkeld voor datacommunicatie tussen microprocessoren en andere IC’s, meestal op één enkele printplaat.

(NB: Er bestaat van Philips ook een vergelijkbare bus, maar dan voor geluidstoepassingen: de I2S-bus)

De I2C-bus werkt met in totaal 4 lijnen: 2 signaallijnen (SDA voor het datasignaal; en SCL voor het kloksignaal) , plus een spannings- en een massalijn. De I2C-bus werkt volgens het master-slave principe, waarbij alle ‘slaves’ een eigen uniek hexadecimaal adres moeten hebben (bv: “0x3c of 0x18). Helaas is er voor dit laatste geen dwingende standaard. Dus fabrikanten kunnen hun eigen adressen kiezen of voor alle producten van hetzelfde type hetzelfde adres kiezen (zoals bij de ssd1306 mini-oledschermpjes meestal het geval is: 0x3c). 

Conflict

Als je bijvoorbeeld twee schermpjes met hetzelfde adres 0x3c op een I2C-bus aansluit heb je een conflict. Dit betekent niet dat ze niet werken, maar dat ze allebei exact dezelfde beeldinhoud weergeven. Dit kun je ook zien met het commando sudo i2cdetect -y 1 (zie onder). Dit laat alle op een I2C-bus aangesloten apparaten zien. Maar bij twee apparaten met hetzelfde adres zie je maar 1 adres (dus alsof het 1 apparaat is).

Gelukkig is er voor dit conflict een oplossing, want je kunt meerdere I2C-bussen naast elkaar hebben. De Arduino-Uno bijvoorbeeld ondersteunt maar 1 I2C-bus. De Raspberry Pi ondersteunt er wel twee, maar die tweede is gereserveerd voor communicatie met een HAT (Hardware Attached on Top). Een oplossing is dan om met extra hardware ( I2C multiplexer zoals de TCA9548A) of met software meer bussen toe te voegen.

Om de I2C-bus op een Raspberry Pi te kunnen gebruiken moet deze eerst in de instellingen (raspi-config) worden geactiveerd. Daarnaast heb je ook sensoren, displays of andere elektronica nodig die van I2C-aansluitingen zijn voorzien. Elk I2C-apparaat heeft een eigen hexadecimaal adres. Dit is ofwel hard-coded, ofwel is te veranderen door het verplaatsen van een weerstandje, met een jumperbrug of solderpads. Bij de ssd1306 mini-oledschermpjes zijn er van verschillende fabrikanten in omloop, die er op het eerste gezegd identiek uit zien. Deze schermpjes hebben, als ze van dezelfde fabrikant komen, vaak eenzelfde adres, dat je niet kunt veranderen.

Andere schermpjes hebben aan de achterkant een duidelijke opdruk van twee id-adressen die je kunt kiezen door het verplaatsen van een weerstandje (zie foto).

In totaal kunnen er 127 verschillende apparaten op één I2C-bus worden aangesloten. Ze delen dan dezelfde signaallijnen en ze worden automatisch herkend.

Je kunt de I2C-bus op aangesloten apparaten scannen met onderstaand commando. De 1 geeft aan dat het hier bus nr. 1 betreft.

sudo i2cdetect -y 1

wat het volgende schema oplevert:

I2C-bus

Er zijn hier twee apparaten op de eerste I2C-bus gevonden: 0x18 en 0x3c