upc eetac_1

Projecte P13: El bus síncron I2C, sensors i LCD amb interfície I2C, subsistemes


LCD amb interfície I2C

1. Habilitació del bus I2C de la Raspberry Pi

Podem seguir aquest tutorial T1 per fer accessible el bus I2C del connector GPIO.

I2C

Fig.1. Una referència per descobrir les bases del bus I2C

2. El bus I2C

Les bases de funcionament del bus I2C. Tutorial. Una altra referència (de les moltes que trobareu a Internet)

3. Raspberry amb visualitzador LCD amb interfície I2C

La manera directa de connectar el típic LCD 16x02 és mitjançant la interfície digital convencional de 7 cables. Però així usem massa línies GPIB.

En canvi, amb un adaptador expansor de port PCF8574T realitzem millor la interfície I2C de dos cables cap al xip Hitachi HD44780 del LCD .

A través dels fòrums d'Internet haurem d'anar treient l'entrellat del circuit; com connectar-lo i quines biblioteques de funcions usar. En tractar-se d'una interfície estàndard, haurem de veure si les biblioteques que trobem, també ens serveixen per realitzar els propers projectes basats en el mateix bus.

Anirem connectant al mateix bus controlat per la Raspberry Pi (master) diferents components (slaves) on cadascun d'ells té una adreça diferent.

Display LCD

Fig. 2. LCD amb interfície sèrie I2C. Algunes referències per començar a cercar biblioteques de funcions: (1), (2), i sobretot (3).

Com que l'LCD funciona amb 5 V i en canvi la Raspberry Pi sols admet 3,3 V, hem s'usar un circuit desplaçador de nivells (bidireccional) per poder connectar aquest element en el bus I2C de la Raspberry Pi.  Nota d'aplicació.

Adaptador

Fig. 3. Adaptador de nivells amb transistor MOSFET BSS138. L'esquema.

Aquesta és una realització amb MOSFET de canal N BS170 simulada en Proteus (fitxer).

Aquests adaptadors bidireccionals també els farem servir per connectar altres dispositius I2C esclaus de 5 V sobre el mateix bus controlat per la Raspberry Pi.

foto  

Fig. 4. Prototip.

 

4. Prototip amb LED, polsador per interrupcció i pantalla LCD 

Per poder continuar s'escau integrar en un sol projecte el que hem après de l'accionament de sortides digitals com la del LED i de la detecció de polsadors a través d'interrupcions (del P11) amb el que hem descobert de la pantalla LCD.

Per exemple: Projecte d'arrencar i parar un procès (com ara la intermitència del LED) prement un sol botó.

Recordeu que, en Python podeu treballar en l'entorn IDE Thonny

pi@raspberrypi: thonny

o bé amb l'entorn IDLE per arrencar i depurar el programa fent el seguiment pas a pas de les variables.

pi@raspberrypi: idle

Una vegada el programa esta acabat i funcionant simplement podeu arrencar-lo des de la pantalla de comandament (shell). Per exemple:

pi@raspberrypi: cd

pi@raspberrypi:cd CURS/P13

pi@raspberrypi: python3 P13_2.py

 

5. Prototip amb sensor ultrasònic mesurador de distàncies

Per realitzar aquest projecte: mesurador de distàncies amb sensor ultrasònic HC-SR04 procedirem de la forma habitual. a) descobrirem el sensor i la tecnologia que hi ha darrere, b) executarem programes de demostració tal com els trobem a les caixes de sensors o intenet amb les adaptacions necessàries, c) adaptarem en sensor al nostre sistema bàsic format per exemple a l'anterior P13_2.py on disposem d'un polsador que arrenca i atura un procés i una pantalla. 

 

A. Podem llegir les característiques d'aquest sensor en el datasheet. I analitzar quin és el principi de funcionament i com s'ha de realitzar el procés de mesura de distància.

HC-SR04

Fig. 5. HC-SH04. Un pols a trigger dispara el front d'ones acústiques ultrasòniques de freqüència de 40 kHz. El pols de resposta es rebrà al senyal Echo després d'un temps (ms) que teactarem de mesurar amb precisió. Concretament Echo roman a nivell alt mentre no arriba el rebot de so.

De manera la Raspberry Pi serà el controlador que enviarà senyal de trigger que arrencarà un senyal acústic i en rebrà les dades. Bàsicament, mesurarem el temps que tarda en propagar-se el so fins a l'obstacle i rebotar. Comprovarem que funciona a 5 V, de manera que necessitarem l'adaptador de nivell a 3,3 V per usar-lo amb la Raspberry Pi.

 

B. Realització del circuit bàsic i la posta en marxa de les biblioteques de funcions bàsiques GPIO en Python.

 

C. Projecte. Modificació del programa anterior, per exemple el P13_2.py, per representar les mesures en pantalla LCD.  S'aprofita el senyal del LED de 2 s per realitzar mesures periòdiques de distància mentre el procés està arrencat.

Files

Fig. 6. Fitxers necessaris per aquest projecte.  El programa principal P13_distance es recolza amb la biblioteca de funcions LCd per poder escriure caràcters ASCII a la pantalla amb interfície I2C.

 

6. E/S amb la targeta Explorer HAT PRO 

A partir de la biblioteca de funcions bàsica I2C, s'han desenvolupat targetes com aquesta Explorer HAT (Hardware Attached on Top) que permeten connectar dispositius perifèrics sense gaire cablejat. Així els programes d'aplicació quedaran força senzills perquè la tasca d'interfície queda reservada a les noves funcions d'alt nivell desenvolupades expressament per a la targeta.

Ara bé, amb aquestes solucions els projectes ens quedaran una mica menys compatibles o estàndard i caldrà reescriure'ls en cas de canviar de maquinari. Veureu que la documentació de la targeta és opaca, no ofereix detalls del circuit electrònic. No hem estat capaços de trobar) informació detallada sobre el circuit electrònic (hardware) que programarem.

Qualsevol dels exemples d'aplicació de què disposa la targeta ens és vàlid per veure com funciona.

 

 


Subsistemes en bus I2C: rellotge en temps real (RTC), EEPROM, E/S, etc.

6. Xip de rellotge en temps real:

Usarem el xip PCF8563 disponible a la targeta ARPI600. Té preconfigurada l'adreça I2C 0x51.

bloc

Fig. 7. Diagrama de l'estructura interna del xip PCF8563.

I2C detect

Fig. 8. Detecció dels dispositius connectats al bus I2C.

Observem que amb aquest nivell d'aproximació als xips digitals, necessitem comprendre bastant bé quina mena d'operacions es realitzen a nivell de registre i de bit. Per exemple, cal tenir coneixements sobre què és l'oscil·lador base, com funciona un comptador binari o BCD, què és un registre (byte) de memòria, quina posició ocupa cada bit del registre, com s'emmascarem bit a bit els registres per llegir les dades guardades (quin és el rang de cada dada?), etc.

 

7. Memòria externa de dades EEPROM

Usarem una memòria sèrie d'Atmel. Per exemple l'AT24C02 que hi ha disponible en aquesta targeta d'entrenament de microcontroladors d'Atmel.

 

Usarem la memòria AT24C32N de 4 kB o superior que hi ha en targetes RTC+EEPROM com ara aquestes.

 

8. Xip extensor de bus E/S

Per exemple els MCP23008 o MCP23017 de Michochip, o el PCF8574T. Podem augmentar el nombre de línies d'entrada/sortida disponibles a la Raspberry Pi. A més de que es poden encadenar fàcilment.

expansor

Fig. 9. Diagrama de l'estructura interna del xip PCF8557.

Necessitem el mínim esquema electrònic en el protoboard o per exemple usant una targeta d'expansió.

PCF8574

Fig. 10. Targeta preparada per facilitat la connexió del xip expansor de bus.

I també hem de localitzar biblioteques de funcions que ens facilitin la programació. Per exemple, en Python, la quick2wire-python-api.

 

Altres referències similars

- [1] Raspberry Pi: I2C-Konfiguration und -Programmierung

 

Altres materials d'interès

- El mateix circuit LCD per a l'Arduino.