Translate

Thursday, 12 June 2014

Analog / Digital Converter with SPI

In this program we will perform an analog / digital conversion using the SPI bus. 

We will use the Pic 18F4550 and CAD MCP_3204, displaying the result on a LCD display.

For its operation will be necessary to use the library for use MCP_3204.C CAD SPI, and library of display LCD_Flexible.C

SPI Protocol:
 








ISIS Program: Use ISIS program to simulate the code.


PROGRAM CODE

///////////////////////////////////////////////////////////////////////////////////////////
//   AUTOR: OSCAR GONZALEZ BURON                                             ENERO/2014
///////////////////////////////////////////////////////////////////////////////////////////
//   PROGRAMA:    CAD_SPI                                    VERSIÓN:    1.0
//   DISPOSITIVO: PIC 18F4550                                COMPILADOR:    CCS vs4.023
//   Entorno IDE: MPLAB                                      SIMULADOR:    Proteus 8.0 sp1
//   TARJETA DE APLICACIÓN: UNIVERSAL TRAINER                DEBUGGER:    ICD3
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
//   CONVERSOR ANALOGICO/DIGITAL MCP3204 CON PROTOCOLO SPI    ////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////

////////////////// Driver for MCP3204 A/D Converter ////////////////////////
////                                                                     ////
////  adc_init()                                                          ////
////      Call after power up                                             ////
////                                                                       ////
////  value = read_analog_mcp( channel, mode )                             ////
////      Read an analog channel                                            ////
////      0 through 3 and select                                          ////
////      differential (0) or                                             ////
////      single (1) mode                                                  ////
////                                                                       ////
////  value = read_analog( channel )                                      ////
////      Read an analog channel                                           ////
////      0 through 7 in   single mode                                        ////
////                                                                       ////
////  convert_to_volts( value,  string )                                 ////
////      Fills in string with                                             ////
////      the true voltage in                                             ////
////      the form 0.000                                                   ////
////                                                                      ////
////////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services            ////
//// This source code may only be used by licensed users of the CCS C   ////
//// compiler.  This source code may only be distributed to other       ////
//// licensed users of the CCS C compiler.  No other use, reproduction  ////
//// or distribution is permitted without written permission.           ////
//// Derivative programs created using this software in object code     ////
//// form are not restricted in any way.                                ////
////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// CABECERA ///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
#include <18f4550.h>
#fuses XT,MCLR
#use delay(clock=20000000)
#include <LCD_flexible.c>
#include <D:\Proyectos Electronica\Project_IDE\2º\CAD_3204>
///////////////////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES /////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////

long int valor;
float voltaje;
///////////////////////////////////////////////////////////////////////////////////////////
// FUNCIONES //////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// PRINCIPAL //////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
void main()
{
   lcd_init();
   adc_init();
   lcd_putc("CAD MCP3204 I2C");
   for(;;)
   {
      valor = read_analog(0);
      voltaje = (valor*5.0)/4096;   //Regla de 3; el dato es igual al valor leido multiplicado por Vref(5V) y                                                         //dividido entre el nº de bits del CAD (12bits=4096)
      LCD_GOTOXY(1,2);
      printf(lcd_putc,"Voltaje = %f V", voltaje);
   }
}


 

No comments:

Post a Comment

Questions and doubts:

¿Que aspectos del Blog se podrían mejorar?