Está en la página 1de 10

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

Digital por I2C

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

13 marzo, 2011jftrujilloaDeja un comentarioGo to comments

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 Analogico/Digital utilizando el Bus I2Cya
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. 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. Debemos recordar que la configuracion debe ser la adecuada para trabajar en
modo A/D y en modo individual.
Si tenemos estos datos
claros, lo siguiente es programar el codigo fuente del PIC.

1 ///////////////////////////////////////////////////////////////////////////////

2 // AUTOR: Trujillo Alcocer Jesus Fernando Marzo 2011

3 //////////////////////////////////////////////////////////////////////////////
4 // PROGRAMA: I2C Analogico/Digital VERSIÓN: 1.0

5 // DISPOSITIVO: PIC 18F4550 COMPILADOR: PCWHC Compiler v4,093

6 // Entorno IDE: SIMULADOR: Proteus 7.7

7 // TARJETA DE APLICACIÓN: DEBUGGER:

8 ///////////////////////////////////////////////////////////////////////////////

9 ///////////////////////////////////////////////////////////////////////////////

10 ///////////////////////////////////////////////////////////////////////////////

11 // Comunicacion entre un PIC 18f4550 y un PCF8591 modo

12 // Conversor Analogico Digital por I2C //

13 ///////////////////////////////////////////////////////////////////////////////

14

15 ///////////////////////////////////////////////////////////////////////////////

16 // CABECERA ///////////////////////////////////////////////////////////////////

17 ///////////////////////////////////////////////////////////////////////////////

18 #include <18F4550.h>

19 #fuses INTHS

20 #use delay(internal=8mhz,RESTART_WDT)

21 #use i2c(Master,sda=PIN_B0,scl=PIN_B1,restart_wdt)

22 #include <LCD_flexible.c>

23

24 ///////////////////////////////////////////////////////////////////////////////

25 // VARIABLES GLOBALES /////////////////////////////////////////////////////////

26 ///////////////////////////////////////////////////////////////////////////////

27 float lectura;

28

29 ///////////////////////////////////////////////////////////////////////////////

30 // FUNCIONES //////////////////////////////////////////////////////////////////
31 ///////////////////////////////////////////////////////////////////////////////

32

33 ///////////////////////////////////////////////////////////////////////////////

34 // PRINCIPAL //////////////////////////////////////////////////////////////////

35 ///////////////////////////////////////////////////////////////////////////////

36 void main()

37 {

38 lcd_init();

39 lcd_putc("Conversor A/D");

40 i2c_start(); // Inicio la comunicación I2C

41 i2c_write(0b10010000); // Envío Dirección I2C del dispositivo

42 delay_ms(10);

43 i2c_write(0b00000011); // Envío Configuración para trabajar A/D por AIN0

44 delay_ms(10);

45 i2c_start(); // Inicio la comunicación I2C

46 i2c_write(0b10011001); // Envío Dirección I2C del dispositivo

47 for(;;)

48 {

49 lcd_gotoxy(1,2);

50 lectura=i2c_read();

51 lectura=(lectura*5.0)/256.0; //Conversion de 8 bits

52 printf(lcd_putc,"I2C:%f V ",lectura); //Mostrar dato

53 }

54 }

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.

También podría gustarte