Inicio > PIC > Comunicacion entre un PIC 18f4550 y un PCF8591 modo Conversor Digital Analogico por I2C

Comunicacion entre un PIC 18f4550 y un PCF8591 modo Conversor Digital Analogico por I2C

En este ejercicio vamos a programar un conversor PCF8591 de 8-bit que trabaja en modo Analógico/Digital o Digital/Analógico según sea la configuración. En este caso vamos a programarlo atravez del PIC18f4550 para que trabaje Digital/Analógico utilizando el Bus I2C ya que es el medio por donde adquirimos o enviamos la dirección, control y datos del dispositivo.

Para programar el pic y controlar el conversor de manera correcta, lo que debemos hacer es leer las caracteristicas que nos da el fabricante. Podemos ver que,  para trabajar con el Bus I2C es necesario enviar en Bytes la direccion valida del dispositivo.

Esta direccion consta de una parte fija y una programable. La parte programable se establece de acuerdo a los bits de los pines A0, A1 y A2 que son las entradas analogicas, que en este caso no vamos a utilizar y el ultimo bit corresponde a la lectura o escritura de los datos. Esta direccion tiene que ser enviada como primer byte despues de la condicion de arranque del protocolo I2C “i2c_start();“.

El segundo byte que vamos a enviar al un dispositivo se almacenarán en el registro de control y es necesario para controlar el dispositivo.
Viendo el esquema anteriror el segundo byte a enviar seria “0100000“, ya que el primer bit es fijo y la salida sera analogica. El resto de los  bits los podemos dejar en 0 puesto que no los vamos a utilizar.

Si tenemos claro esto, lo siguiente es programar el PIC.


////////////////////////////////////////////////////////////////////////////////////
//   AUTOR: Trujillo Alcocer Jesus Fernando                        Marzo 2011
////////////////////////////////////////////////////////////////////////////////////
//   PROGRAMA:                                          VERSIÓN:    1.0
//   DISPOSITIVO: PIC18F4550                            COMPILADOR: CCS vs4.088
//   Entorno IDE:                                       SIMULADOR:  Proteus 7.7 sp2
//   TARJETA DE APLICACIÓN:                             DEBUGGER:
////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////
//   Comunicacion entre un PIC 18f4550 y un PCF8591 modo
//   Conversor Digital Analogico por I2C                      //
////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////
// CABECERA ////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#fuses INTHS
#use delay(internal=8mhz,RESTART_WDT)
#use i2c(Master,sda=PIN_B0,scl=PIN_B1,restart_wdt)//Protocolo I2C
#include <LCD_flexible.c> //Libreria personal del LCD
#use fast_io(a)
///////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES /////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// FUNCIONES //////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// PRINCIPAL //////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

void main() {
 int analogico=0x00;
 i2c_start();             //Iniciar comunicacion con el Bus I2C
 delay_ms(20);
 i2c_write(0b10010000);  // Envío Dirección I2C del PCF8591
 delay_ms(20);
 i2c_write(0b01000000); // Envío Configuración del PCF8591 para Conversor. Digital/Analogico
 delay_ms(20);
 do{
 if((input(pin_a0)==1)&&(analogico!=0xFF))
 {
 i2c_write(analogico);
 analogico++;
 delay_ms(20);
 }

 if((input(pin_a1)==1)&&(analogico!=0x00))
 {
 i2c_write(analogico);
 analogico--;
 delay_ms(20);
 }
 }while(true);
}

Una vez hecho el código el siguiente paso será diseñar el circuito en Proteus para poder simularlo y comprobar que funcione correctamente.

Una vez terminado el diseño con proteus, lo siguiente es pasar con Ares.  Colocamos los componentes y cuando tengamos definido las medidas con las que vamos a trabajar, que caras vamos a usar, que en nuestro caso solo seran dos, la top y la bottom; Una vez definido estos puntos solo nos quedaria hacer el autorutado de las pistas y ver como queda todo el diseño en 3D.

Anuncios
Categorías:PIC
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: