I2C con wiringPi

In fase di sviluppo Deprecato In fase di sviluppo

In questa pagina verranno presentati alcuni brevi programmi scritti in C per utilizzare periferiche I2C con Raspberry Pi tramite le funzioni fornite da WiringPi.

Il bus I2C di Raspberry Pi è già stato discusso; se ancora non lo avete fatto, leggete la pagina introduttiva su Raspberry e I2C prima di proseguire in quanto non verrà qui ripreso nulla su come configurare il modulo i2c-dev e come assegnare i permessi agli utenti. I pin utilizzati dal bus I2C sono disponibili sul connettore GPIO.

Le funzioni I2C di wiringPi

L'elenco completo delle funzioni di wiringPi relative a I2C è descritto nella pagina ufficiale http://wiringpi.com/reference/i2c-library.

Un esempio: LM75A

Il circuito utilizzato per questo esempio è costituito da un LM75A collegato al connettore GPIO del Raspberry Pi. Il circuito può essere realizzato su breadboard oppure è possibile utilizzare RPi demo. Nel caso di realizzazione su breadboard:

Schema del circuito utilizzato con LM75A

Il codice di esempio, scaricabile a fondo pagina, contiene le seguenti funzioni:

I due byte ritornati sono la parte intera (MSB) e la parte frazionaria (LSB) della temperatura misurata, come descritto nella Table 9. Temp register dei fogli tecnici di LM75A.

pi@raspberrypi:~ $ ./LM75A
Reading 2 bytes from I2C address 0x4F, register 0x00
Raw data: 0x18 0x20
Temperature: 24.1 degree Celsius

I segnali

Di seguito i segnali misurati durante l'esecuzione del codice LM75A.c e la figura 9 tratta dai fogli tecnici di LM75A. i due grafici sono stati colorati allo stesso modo per rendere più semplice il loro confronto.

Forme d'onda reali

Forme d'onda presenti nei fogli tecnici

Scrittura dei registri

In modo analogo, è possibile scrivere nei registri di una periferica I2C. Il secondo esempio mostra come poter scrivere nei due registri TOS e THYST che permettono di far funzionare LM75A come termostato funzionante autonomamente dal software: il LED mostrato nello schema si accende quando la temperatura sale sopra una determinata temperatura impostata tramite TOS e si spegna quando scende al di sotto di quella impostata attraverso THYST (nota 1).

pi@raspberrypi:~ $ ./LM75A_thermostat.c
Temperature: 25.375 degree Celsius
The LED becomes active when temperature exceeds 25.0 deg C, and leaves the active state when the temperature drops below 22.5 deg C

La nuova funzione utilizzata è int wiringPiI2CWriteReg16 (int fd, int reg, int data)  che scrive 16 bit (data) nel registro reg nel dispositivo I2C identificato da fd.

Il codice

Note

  1. Il funzionamento può essere invertito attraverso il flag O.S.Polarity del registro di configurazione
  2. Questo codice non è stato verificato per temperature diverse dalla temperatura ambiente. In particolare non è stato mai eseguito per temperature inferiori a 0 °C

 

Data di creazione di questa pagina: marzo 2013
Ultima modifica di questa pagina: 31 marzo 2018


Licenza "Creative Commons" - Attribuzione-Condividi allo stesso modo 3.0 Unported


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima