Raspi y entrada analógica (PCF8591) 5

Una de las “carencias” de la tarjeta Raspberry Pi es, sin duda, la falta de una entrada analógica (o que permita la conversión de la misma), tal y como existen en otros dispositivos (Arduino o Cubieboard sin ir más lejos).

Para paliar esto os comentamos hoy la posibilidad de añadir mediante una pequeña circuitería la conversión A/D a muestra Raspi. Para ello haremos uso del bus I2C que esta incorpora y de un chip encargado de la “misión” : el PCF8591.El chip PCF8591 realiza la conversión A/D con una resolución de 8 bits y mediante el método de aproximaciones sucesivas.

¡Vamos allá!

Para poner en marcha este chip podemos optar por localizarlo en el mercado o bien optar por un módulo pre-configurado que lo incorpora. Podemos encontrar este módulo en  Webtronika . Este módulo hace uso del chip PCF8591 de la firma NXP (antigua Philips) e incorpora 4 entradas analógicas. También incorpora varios dispositivos analógicos pre-conectados y configurables vía “jumpers”. El módulo viene acompañado del cable (tipo Dupont) de 4 hilos –  preciso para su conexionado a patillas de placa – sin necesidad de soldadura.

PCF8591_00a

Lo comentado en este artículo (tanto a nivel hardware como software) puede aplicarse tanto al chip como al módulo que lo incorpora.

En esencia, lo que comentamos a continuación es:

– Descripción básica del circuito PCF8591.
– Pre-configuración software de la Raspberry Pi.
– Implementación y cableado del módulo.
– Primeras pruebas sobre el sistema.
– Programa Python de manejo del módulo.

Nota: el programa python puede descargarse desde nuestra Web

– Descripción básica del circuito PCF8591 –

El circuito PCF8591 incorpora 4 entradas analógicas y una salida gestionables remotamente mediante bus serie I2C. Opera con un bajo consumo (8-bits CMOS) y puede ser direccionado mediante 3 patillas al efecto (en el módulo estas ya se han pre-ajustado). Internamente el chip se encarga de multiplexar la información que captura en cada entrada y almacenarla para su lectura vía bus I2C.

PCF8591_00

Si utilizamos el módulo comentado vemos que el conexionado del mismo responde a este esquema …

PCF8591_01

Además, el módulo incorpora 3 sensores de test con los que podemos realizar de forma inmediata las primeras pruebas. En concreto, podemos “convertir” señales analógicas provenientes de un sensor de LUZ (LDR en modo divisor), temperatura (también en modo divisor de señal) y un potenciómetro que nos permitira “jugar” con valores en la entrada analógica a la que este está conectado. Una de las patillas (AIN2) no está usada por los sensores montados el módulo. Si queremos utilizar (o no) las señales de test instaladas tan solo tendremos que dejar puesto (o quitar) el “jumper” que utiliza cada señal. En este esquema podemos entenderlo algo mejor:

PCF8591_01b

– Pre-configuración software de la Raspberry Pi  –

Para poder manejar el chip (o el módulo) desde la Raspberry Pi hemos de efectuar ciertas comprobaciones y/o instalaciones previas.
En primer lugar hemos de verificar que el fichero /etc/modprobe.d/raspi-blacklist.conf contiene algo similar a esto

PCF8591_02

podemos editarlo – si fuera preciso – mediante

sudo nano /etc/modprobe.d/raspi-blacklist.conf

despues hemos de comprobar que el fichero /etc/modules contiene estas 2 líneas al final del mismo

PCF8591_03

si no las tuviera lo editaremos con

sudo nano /etc/modules

ahora hemos de instalar varios componentes para el manejo del bus I2C.

Instalamos

sudo apt-get install python-smbus

sudo apt-get install i2c-tools    (no es esencial)

sudo modprobe i2c-dev

sudo modprobe i2c-bcm2708

finalmente reiniciamos la Raspbery

– Implementación y cableado del módulo –

Como siempre, efectuaremos el cableado entre el módulo y la Raspberry Pi (utilizamos el cable que este incorpora) de forma cuidadosa y verificando las conexiones descritas en este esquema. Vemos que la tensión de entrada para el módulo es de 3,3 V. razón por la que la referencia para la conversión AD sera de este nivel (¡ no de 5 V !).

PCF8591_04E

Una vez instalado el software preciso y realizado el cableado efectuaremos las primeras pruebas.

– Primeras pruebas sobre el sistema –

Cada chip que conectemos al bus I2C estará direccionado adecuadamente mediante los 3 bits de direccionamiento que podemos pre-configurar y los bits fijados por el fabricante.

PCF8591_05

En el caso que nos ocupa – el módulo conversor AD – el chip PCF8591 se ha direccionado poniendo los bits A0, A1 y A2 a masa, con lo que su valor es 0 y, por tanto, el chip PCF8591 queda en la dirección 0x48. Los bits activos son el 4 (valor 8) y el 7 (valor 64), por lo que la dirección sería 64+8 = 72 (0x48).

PCF8591_06

Si hemos instalado las herramientas I2C comentadas, con el módulo conectado a la placa y energizado (el LED rojo D2 se encenderá) efectuamos desde un terminal el test siguiente:

ejecutamos

sudo i2cdetect 1

y obtendremos algo como esto

PCF8591_07

Nota: dependiendo de la versión de nuestra Raspberry puede ser preciso usar el comando como sudo i2cdetect 0

– Programa Python de manejo del módulo –

Para que los lectores puedan probar de una forma inmediata las bondades del módulo conversor ADC (o del chip PCF8591 si se direcciona en forma similar) hemos preparado una pequeña utilidad en lenguaje Python. Es este …

Para utilizar este programa tendremos que tener el módulo PCF8591 a la Raspberry Pi y, desde un terminal, ejecutar:

sudo python adc.py

PCF8591_08

Nota: dependiendo de la versión (revisión) de nuestra Raspberry es posible que la línea

miADC = smbus.SMBus(1)

haya de ser cambiada por

miADC = smbus.SMBus(0)

PCF8591_09

A DIVERTIRSE

Descarga de código

[wpdm_file id=13 title=”true” template=”bluebox ” ]

 

5 thoughts on “Raspi y entrada analógica (PCF8591)

  1. Reply dhouha May 14, 2015 4:31 pm

    hello

    if i connect an analog temperature sensor “pt100” to AIN1 ;this code will give the value of the temperature?

    tanks

  2. Reply dhouha May 15, 2015 5:25 pm

    ¡hola

    Si conecto un sensor de temperatura analógico “pt100” para AIN1; este código dará el valor de la temperatura?

    tanques

  3. Reply arenas May 30, 2017 6:14 am

    hola, como podría ser el código para obtener la salida digital de un sensor de nivel de agua .

Leave a Reply

  

  

  

  Bitcoin Currency Converter
Amount of BTC to convert
To currency:
1BTC =