Vous êtes sur la page 1sur 14

///////////////////////////////////////////////////////////////////////////////

// AUTOR: Juan Jesus Sanchez Torres

22-Febrero-2011

//////////////////////////////////////////////////////////////////////////////
// PROGRAMA:

I2C ADC

VERSIN:

// DISPOSITIVO: PIC 18F4550


// Entorno IDE:

1.0

COMPILADOR: PCWHC Compiler v4,093


SIMULADOR: Proteus 7.0 sp1

// TARJETA DE APLICACIN:

DEBUGGER:

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/*Ejercicio; Utilizar el periferico PCF8591 usando la cunicacion I2C. Programar
el conversor para que funcione en conversor Analogico Digital. Controlar el
periferico utilizando un PIC 18F4550

*/

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// CABECERA ///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#fuses INTHS

//libreria del PIC


//utilzar relog interno

#use delay(internal=8mhz,RESTART_WDT)
#use i2c(Master,sda=PIN_B0,scl=PIN_B1,restart_wdt)
#include <lcd_puertoD.c>

//programar I2C

//libreria para el LCD

///////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES /////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
float lectura;
///////////////////////////////////////////////////////////////////////////////
// FUNCIONES //////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// PRINCIPAL //////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void main()

{
lcd_init();
lcd_putc(PCF8591 ADC I2C);
i2c_start();

// Inicio la comunicacin I2C

i2c_write(0b10010000); // Envo Direccin I2C del PCF8591


delay_ms(10);
i2c_write(0b00000000); // Envo Configuracin del PCF8591 para ADC por AIN0
delay_ms(10);
i2c_start();

// Inicio la comunicacin I2C

i2c_write(0b10010011); // Envo Direccin I2C del PCF8591


// 1001 parte fija
// 0 no seleccionar A2
// 0 mo seleccionar A1
// 0 seleccionar A0
// 1 R/W seleccionado modo leer
for(;;)
{
lcd_gotoxy(1,2);

//me situo en la segunda linea del LCD

lectura=i2c_read(); //leo la conversion de A0


lectura=(lectura*5.0)/256.0;

//trato la conversion

printf(lcd_putc,Tension:%f V ,lectura); //y muestro el dato


}
}
Con el cdigo compilado pasamos a disear el circuito en Proteus para poder simularlo.
Conectamos un voltmetro entre AIN0 para poder ver que tensin tiene a la entrada y
comprobar si es correcta con la que lee el PIC. Para variar la tensin en AIN0 colocamos un
potencimetro. Despus con un LCD mostraremos la lectura del conversor ya tratada.

A continuacin vemos como variando el potencimetro que hace cambiar la tensin en


AIN0 concuerda con los valores que aparecen en el LCD. Al tener una tensin de referencia
de 5v las tensiones oscilaran entre 0v y 5v.

Despus de comprobar el correcto funcionamiento en la simulacin pasamos a disear la


placa. Colocamos bornas para poder alimentar el circuito. Un botn para poder hacer un
reset manual al PIC. Tambin colocaremos el LCD con su correspondiente regulador de
contraste controlado por un potencimetro.

Por ultimo pasamos a ISIS para finalizar el diseo de la placa. Colocamos los componentes y
delimitamos el tamao de la placa. Trazamos las pitas con el tamao deseado y
incorporamos la serigrafa para saber dnde ha de ir cada componente.

#include <16f876a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use standard_io(b)

int

analogico=0x00;

#use i2c(master,sda=PIN_C4, scl=PIN_C3) // Configuracin del I2C como


Master y los pines del MSSP en mi 16F876A.
void main() {

DA

i2c_start();
// Inicio la comunicacin I2C
i2c_write(0b10010000); // Envo Direccin I2C del PCF8591
i2c_write(0b01000000); // Envo Configuracin del PCF8591 para Conv.
do {
i2c_write(++analogico); // Envo Valor digital 0x00->0V, 0xFF->Vcc
} while (TRUE);

Este programa nos generar una preciosa onda de sierra en el pin 15 (AOUT) del PCF8591 (De
hecho ahora, mientras escribo este post, la estoy viendo en la pantalla del osciloscopio

Comunicacion entre un PIC 18f4550 y un PCF8591 modo Conversor


Digital Analogico por I2C
12 marzo, 2011jftrujilloaDeja un comentarioGo to comments

En este ejercicio vamos a programar un conversor PCF8591 de 8-bit que trabaja en modo
Analgico/Digital o Digital/Analgico segn sea la configuracin. En este caso vamos a
programarlo atravez del PIC18f4550 para que trabaje Digital/Analgico utilizando el Bus I2Cya
que es el medio por donde adquirimos o enviamos la direccin, 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 almacenarn 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 bites 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:

VERSIN:

//

DISPOSITIVO: PIC18F4550

COMPILADOR: CCS vs4.088

//

Entorno IDE:

SIMULADOR:

//

TARJETA DE APLICACIN:

DEBUGGER:

1.0

Proteus 7.7 sp2

////////////////////////////////////////////////////////////////////////////////////

8
9
10

////////////////////////////////////////////////////////////////////////////////////
//

Comunicacion entre un PIC 18f4550 y un PCF8591 modo

//

Conversor Digital Analogico por I2C

//

11 ////////////////////////////////////////////////////////////////////////////////////
12

13 ////////////////////////////////////////////////////////////////////////////////////
14
15
16

// CABECERA ////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#fuses INTHS

17 #use delay(internal=8mhz,RESTART_WDT)
18 #use i2c(Master,sda=PIN_B0,scl=PIN_B1,restart_wdt)//Protocolo I2C
19 #include <LCD_flexible.c> //Libreria personal del LCD
20 #use fast_io(a)
21 ///////////////////////////////////////////////////////////////////////////////
22
23
24
25

// VARIABLES GLOBALES /////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////

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

26 ///////////////////////////////////////////////////////////////////////////////
27
28 ///////////////////////////////////////////////////////////////////////////////
29
30

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

///////////////////////////////////////////////////////////////////////////////

31
32 void main() {
int analogico=0x00;

33

i2c_start();

34

//Iniciar comunicacion con el Bus I2C

delay_ms(20);

35

i2c_write(0b10010000);

36

// Envo Direccin I2C del PCF8591

delay_ms(20);

37

i2c_write(0b01000000); // Envo Configuracin del PCF8591 para Conversor. Digital/Analogico

38

delay_ms(20);

39

do{

40

if((input(pin_a0)==1)&&(analogico!=0xFF))

41

{
i2c_write(analogico);

42

analogico++;

43

delay_ms(20);

44

45
46

if((input(pin_a1)==1)&&(analogico!=0x00))

47

48

i2c_write(analogico);

49

analogico--;

50

delay_ms(20);
}

51
52
53
54
55
56
57
58
59

}while(true);
}

Una vez hecho el cdigo el siguiente paso ser disear el circuito en Proteus para poder
simularlo y comprobar que funcione correctamente.

Una vez terminado el diseo 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 diseo en
3D.

Vous aimerez peut-être aussi