Ejemplo Temperatura I2C con MCP9803

Sensor de temperatura I2C con MCP9803

Para este ejemplo vamos a utilizar el integrado MCP9803 de microchip, es un sensor de temperatura con comunicación I2C.

mcp9803

 

El PCF8591 posee un sensor de temperatura integrado ademas de un pin dedicado a alerta. Dispone de tres pines para seleccionar la dirección del bus I2C.

En este ejemplo solo vamos a utilizar el sensor de temperatura.

Se puede observar en el esquema que hemos puesto todos los pines de direcciones a GND, eso quiere decir que nuestro periférico I2C tendrá la dirección 000, que traducido a nuestro código 0x48.

El esquema de nuestro sensor en PCB es el siguiente:

esquema-mcp9803

 

La siguiente imagen muestra lo que nos encontramos en la PCB, las 4 entradas analógicas y el conector de comunicación con la alimentación, que es el que principalmente nos interesa.pcb-mcp9803

 

La placa que he diseñado para el sensor tiene los pines compaibles con los conectores I2C que se preparan en el Motor Shiled Mioio, al igual que los ultrasonidos Srf04.

img_20140121_175050 img_20140121_175108

Para ponerlo en marcha en nuestro programa debemos incluir lo siguiente:

El programa es muy similar al del conversor PCF8591, solo hay que cambiar una linea del código.

1. La librería que posee la comunicación I2C:

import ioio.lib.api.TwiMaster;

2. En el setup: (Fíjate como se usa el puerto número 1 de I2C que corresponde a los pines 47 y 48 de la MIOIO).

twi = ioio_.openTwiMaster(1, TwiMaster.Rate.RATE_100KHz, true);

3. En el loop:

final float sensorain1 = Readmcp9803(0x48, twi);
 setText(Float.toString(reading));

4. Las funciones utilizadas son las siguientes:

//Para la lectura de la conversión:
public float Readmcp9803(int address, TwiMaster port) {
float returnval = 0;
byte[] request = new byte[] { 0x30 };
 byte[] tempdata = new byte[2];
 try {
 port.writeRead(address, false, request,request.length,tempdata,tempdata.length);
float ain1 = tempdata[0];
//La siguiente linea es la que cambia respecto del ejemplo del 
//conversor analógico PCF8591
ain1+=(float)tempdata[1] / 256;
return ain1;
 } catch (ConnectionLostException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (InterruptedException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } finally {}
return returnval;
 }
//La función settext para la visualización del dato en un textView que nos hayamos creado.
//private void setText(final String str) {
 runOnUiThread(new Runnable() {
 @Override
 public void run() {
 textView_.setText(str);
 }
 });
 }

Deja un comentario

Tu dirección de correo electrónico no será publicada.