Translate

Sunday, 15 June 2014

Analog / Digital Converter with I2C

In this program we will perform an analog / digital conversion using the I2C protocol. 

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

For its operation will be necessary to use the library of display LCD_Flexible.C


In this exercise program the PCF8591  converter Digital-Analog-Digital 8-bit Analog to operate in mode Analog to Digital Converter.

The data read range from 0 to 0xFF × 00 because it is an 8-bit converter. Knowing that the reference voltage is 5V and there are 256 possible readings 

SPI Protocol:




























ISIS Program: Use ISIS program to simulate the code.




PROGRAM CODE:
///////////////////////////////////////////////////////////////////////////////////////////
//   AUTOR: OSCAR GONZALEZ BURON                                            FEBRERO/2014
///////////////////////////////////////////////////////////////////////////////////////////
//   PROGRAMA: CAD I2C                                                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 PCF8591 CON PROTOCOLO SPI            //////////////////
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
// CABECERA ///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
#include <18f4550.h>
#fuses intHS,MCLR
#use delay(internal=8MHz)
#use i2c(Master, sda=PIN_B0, scl=PIN_B1)
#include <LCD_flexible.c>
///////////////////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES /////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////

float valor=0;

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

///////////////////////////////////////////////////////////////////////////////////////////
// PRINCIPAL //////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
void main()
{
   i2c_start();               //iniciar comunicación i2c.
   i2c_write(0b10010000);         //dirección (7bits). El último bit determina si se lee o se escribe
   i2c_write(0b00110000);         //byte de control (El 11 activa las entradas analógicas en modo diferencial)
   i2c_start();               //iniciar comunicación i2c.
   i2c_write(0b10010001);         //dirección (7bits). El último bit determina si se lee o se escribe
   lcd_init();
   for(;;)
   {
      valor=i2c_read();
      valor=valor/256;
      LCD_GOTOXY(1,1);
      printf(lcd_putc,"Tension = %1.2f Voltios",valor);
   }
      

   i2c_stop();                  //terminar comunicación i2c.







No comments:

Post a Comment

Questions and doubts:

¿Que aspectos del Blog se podrían mejorar?