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: