ELECTRONIC MEMORIES

Conversor digital – analógico

Posted by discobolo100 en 16 marzo, 2011

CONVERSOR DIGITAL – ANALÓGICO(I2C)


Finalidad del ejercicio: Usando el protocolo I2C se a de comunicar el pic de la gama alta 18f4550 con el conversor PCF8591 y realizar una conversión digital analógico.

Para la realización del ejercicio tenemos que tener claro como configurar el componente para que realice la comunicación I2C correctamente, para ello nos valdremos del datasheet del mismo, en el cual nos viene como se ha de configurar. Dejo el datasheet para que lo puedan ver y descargar.  datasheet PCF8591

Una vez nos hemos leído y comprendido el datasheet y sabemos como lo debemos de configurar para poder realizar esa comunicación I2C pasamos a la realización del código.

El código que he creado realiza lo siguiente:

  • Configura el componente para trabajar como I2C mandando una serie de tramas de 0 y 1.
  • Está pendiente del pin RA0, si está con un 1 lógico y la variable tensión esta por debajo de 255 mandará escribir el contenido de la variable tensión en I2C, posteriormente aumentará la variable tensión. Si RA0 tiene un 0 lógico realizará lo mismo que antes solo que en vez de incrementar la variable la decrementará.
  • Mostrar en el LCD la tensión que queremos que muestre el conversor por su pin AOUT.

Ahora paso a mostrar el código:


////////////////////////////////////////////////////////////////////////////////////
// AUTOR: Ismael Muriedas Saro //
////////////////////////////////////////////////////////////////////////////////////
// PROGRAMA: Conversor Digital-Analógico //
// DISPOSITIVO: PIC 18F4550 COMPILADOR: CCS 4.068 //
// Entorno IDE: SIMULADOR: ISIS Proteus 7.7 sp2 //
// TARJETA DE APLICACIÓN: DEBUGGER: //
////////////////////////////////////////////////////////////////////////////////////
// ENUNCIADO: Comunicación entre PIC 18F4550 y PCF8591 en modo conversor //
// digital-analógico mediante el bus I2C //
////////////////////////////////////////////////////////////////////////////////////
// CABECERA //////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#fuses INTHS
#use delay(internal=8mhz,RESTART_WDT)
#use i2c(Master,sda=PIN_B0,scl=PIN_B1,restart_wdt)
#include //Libreria del LCD
#use fast_io(a)
///////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES /////////////////////////////////////////////////////////
int tension=0;
float a;
///////////////////////////////////////////////////////////////////////////////
// FUNCIONES //////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// PRINCIPAL //////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void main()
{
lcd_init();
lcd_putc('\f'); //Borra pantalla
lcd_gotoxy(1,1);
// Declaro variable entera (analógico) y la inicializo a 0.
i2c_start(); // Inicio la comunicacion mediante el bus I2C.
delay_ms(20); // Retardo.
i2c_write(0b10010000); // Direcciono PCF8591 por I2C.
delay_ms(20); // Retardo.
i2c_write(0b01000000); // Configuro el PCF8591 en modo conversor digital-analógico.
delay_ms(20); // Retardo.
do
{
if((input(pin_a0)==1)&&(tension0)) //Condición No pulso y la variable tension es mayor que 0.
{
i2c_write(tension); //Escribo el contenido de la variable tensión
tension--; // Decremento la variable 'tensión'.
delay_ms(20); // Retardo.
}
lcd_gotoxy(1,1); //inicializo el cursor en la posición 1,1 dentro de la pantalla del lcd alfanumérico
a=tension*0.01945098; //convierto las divisiones que nos da el daq en el equivalente en tensión
printf(lcd_putc,"V-->%2.3lfV",a); //visualizo en el lcd la tensión que esta convirtiendo el daq
}
while(true); //El bucle se repite constantemente
}

Una vez que tenemos ya realizado el código del programa debemos de pasar a la realización del esquemático con proteus.

El esquemático estará conformado por:

  • 1 Pic 18f4550
  • 1 PCF8591
  • 2 resistencias, una de 10k y otra de 470 ;un condensador de 100nf y un swich para realizar el circuito del reset.
  • 2 resistencias de 100 que harán la función de pull up en los pines de SDA y SCL.
  • 1 regleta de 3.5 mm de 2 para las alimentaciones.
  • 1 conector de 14 pines para el LCD
  • 1 swich para el pin RA0 que hará que aumente o disminulla el voltaje del conversor.

Nota: Dentro del enlace que he puesto en la parte inferior de la entrada para descargar el ejercicio, viene un (*.rar) en el que dentro de la carpeta de proteus aparte del esquema tiene una carpeta llamada “librerías actualizadas” esas librerias son de proteus, y bien si las usais podreis tener una variedad de componentes extras con sus PCB y todo. Espero que sirvan de algo =)

Circuito

El funcionamiento es el siguiente el pic manda una serie de códigos comprendidos desde 0xOO a la 0xFF o lo que es lo mismo desde el 0 hasta el 255. y esto es debido a que el conversor lo que hace es realizar un incremente de tensión en el pin AOUT que es igual a la Vref-Vgnd/255 y eso indica que tiene una precisión de 19mv.

Para la simulación del circuito dejo un video que muestra gráficamente el funcionamiento del circuito.

Después realizar la simulación pasamos a la realización del PCB del circuito con la ayuda de ARES.

Primero realizaremos la ubicación de los componentes, posteriormente configuraremos el ancho de las pistas, el tamaño de las vías y con ayuda del autoruter haremos el rutado a nuestra placa, para posteriormente generar el plano de masa de la misma consiguiendo así una disminución de los ruidos que puedan colarse en el circuito pudiendo distorsionar las señales.

El PCB quedaría algo parecido al de la siguiente fotografía.

La vista en 3D que nos ofrece el entorno de ARES consigue que la placa se muestre tal y como quedaría en la realidad.

La fotografía de la izquierda pertenece a la cara de los componentes o cara “top” y la fotografía de la derecha pertenece a la cara de las pistas o cara “botton”. Para descargar el ejercicio solo tenéis que hacer click en el siguiente enlace: http://cid-2d81d75b5f40e144.office.live.com/self.aspx/.Public/I2C/CONVERSOR%20DIGITAL-ANALOGICA.rar

Una respuesta to “Conversor digital – analógico”

  1. mike said

    idolo muy util….gracias…

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: