Archivi tag: controllori

Raspberry PI e i2c

Per acquisire dei dati meteo, ho realizzato una piccola schedina figlia che si basa sue due sensori: SHT21 della Sensirion e MPL3115 della Freescale.

Nell’interfacciamento del primo sensore non ci sono state particolari difficoltà, anche per il fatto che il codice è piuttosto diffuso e ben funzionante, sia in pyhton che in c.

Qualche grattacapo in più è arrivato dal dispositivo Freescale. In effetti il sisitema riconosce il dispositivo ma non riesce ad accedere ai dati. Pertanto anche se il comando i2cdetect -y 1 consente di visualizzare correttamente il dispositivo, una successiva lettura dei dati fallisce. Leggendo il datasheet è possibile notare come lo scambio dati richieda una condizione di “repeated start” per l’accesso al bus I2C. Peccato che questo non sia supportato dalla corrente implementazione del Kernel su Raspberry Pi:

As part of guaranteeing reliability, mostly in a multi-master setup, SMBus requires the use of I2C’s repeated starts for read operations. The I2C master driver for Linux on the Raspberry Pi does not support this

Fantastico. Fortunatamente Jovian Jackowski ha sviluppato un hack per questo problema. informazioni possono essere reperite qui e qui. Il codice per il dispositivo mpl3115 lo si può trovare qui e restituisce questo output:
root@raspbeacon:~/weather/mpl3115# ./mpl3115_comma
WhoAmI:c4
Status Register: 0
---- PRESSURE FUNCTION ----
Press RT: M:62 C:39 L:30
Press Integer Complete: 188e4 100580
Complete: 1005.00
Final Value 1005.75
---- END PRESSURE ----
---- TEMPERATURE FUNCTION ----
Temp RT: M:15 L:70
Temp Decimal Integer Part: 21
Tcomplete 21.4375
---- END TEMPERATURE ----
---- ALTITUDE FUNCTION ----
Alt RT: M:0 C:3f L:80
alt  Integer Complete: 3f 63
Complete: 63.00
Final Value 63.50
---- END ALTITUDE ----
1005.75,63.50,21.44

A presto!