lunes, 26 de diciembre de 2011

SPI conversor AD MCP3204



Vamos a mostrar el valor de una entrada analógica en el LCD alfanumérico. Esta entrada analógica la convertiremos en digital por medio del integrado MCP3204 que se comunicará con el PIC18F4550 por medio del bus SPI.

Características:

MCP3204:
El MCP3204 de Microchip es un conversor analógico-digital de 12 bits por aproximaciones sucesivas (SAR) con interfaz SPI. Dispone de cuatro entradas que puede configurar como 4 canales single-ended ó 2 canales pseudo-diferenciales. La referencia de tensión debe ser externa, funciona a 3 ó 5V y su velocidad de conversión (12 pulsos de clock) ronda las 100Ksps a 5V. Siendo un conversor de 12 bits, su ecuación de funcionamiento es: D= 2^12 x Vin/Vref.


Nos ayudaremos de la librería mcp3204.c del CCSC, para hacer el programa. También utilizaremos la librería personal de control del LCD alfanumérico.


Diseño del esquemático:

- El microcontrolador utilizado será el PIC18F4550, con un reloj externo de 20Mz y un pulsador con circuito R-C a modo de reset:


- Conectaremos el conversor analógico digital MCP3204 al bus SPI del PIC. Tendrá un condensador de desacoplo en la alimentación.


- Utilizaremos un potenciómetro de 1k  alimentado con 5v, como entrada analógica. Irá conectado al canal 0 del conversor.


- Mostraremos el valor de la conversión en un LCD alfanumérico 16x2, tendrá un potenciómetro para modificar el contraste, y un condensador de desacoplo.


- Utilizaremos el depurador SPI para depurar el programa.



Diseño del layout:

En esta práctica se nos pedía crear el layout. He modificado el diseño para añadirle la alimentación y un conector en los canales del conversor. También puse un jumper para habilitar la entrada analógica.


Exportamos el netlist al ares. Colocamos los componentes y hacemos el autorutado.


Se puede ver el resultado en 3D:



Código:

////////////////////////////////////////////////////////////////////////////////////
//   AUTOR: Daniel de Cos                                       Noviembre/2011    //
////////////////////////////////////////////////////////////////////////////////////
//   PROGRAMA:    Conversor_AD                                 VERSIÓN:    1.0
//   DISPOSITIVO: PIC 18F4550                           COMPILADOR:    CCS vs4.023
//   Entorno IDE: MPLAB ID v8.56                        SIMULADOR:    Proteus 7.7 sp2
//   TARJETA DE APLICACIÓN:  interface_2011             DEBUGGER:   ICD3
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
// He cambiado la V de referencia en la librería mcp3204 ya que nuestra entrada   //
// analógica nos da 5.07 voltios de máxima en vez de 5.                                                                   //
////////////////////////////////////////////////////////////////////////////////////

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

#include <C:\H\18F4550.h>
//#FUSES INTHS                              //reloj interno     
#FUSES HS                                                  //reloj de alta velocidad
#FUSES MCLR                                            //Master clear pin enable
#use delay(clock=20000000)  //20MHz
//#use delay(internal= 1Mhz)// Selecciona la velocidad del oscilador interno
#include <mcp3204.c>
#include <LCD_flexible.c>

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

long int data;
char volts[6];
           
////////////////////////////////////////////////////////////////////////////////////
// FUNCIONES ///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
  

////////////////////////////////////////////////////////////////////////////////////
// PRINCIPAL ///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
void main()
{
            //setup_spi(spi_slave | spi_l_to_h | spi_clk_div_16 | spi_ss_disabled);        //Esta configuración esta dentro del adc_init();
           
            adc_init();                                                                                                    
            lcd_init();
            lcd_putc("MCP3204");
 
            while(1){
                        data= read_analog(0);            //leemos la entrada analogica por el canal CH0
                        convert_to_volts(data, volts);    //esta funcion hace la operación de la conversión y la convierte en un string
                        lcd_gotoxy(1, 2);
                        printf(lcd_putc, "voltios= %s", volts);
                        delay_ms(100);
            }
}


Simulación:



Comprobación programa:


No hay comentarios:

Publicar un comentario