miércoles, 11 de junio de 2014

(MPLAB-IDE) Analog/Digital Converter PCF8591 I2C

In this post i will explain how to use the analog/digital converter with PCF8591 comunicating with PIC18F4550 by I2C.

The secuence to read of the I2C communication is:

START->ADDRESS W->CONTROL BYTE->REPEATED START->ADDRESS R->DATA BYTE

And knowing this i made the program:


//////////////////////////////////////////////////////
// CABECERA /////////////////////////////
//////////////////////////////////////////////////////
#include<18f4550.h>
#fuses INTHS,MCLR
#use delay(internal=8mhz)
#use i2c(Master,sda=PIN_B0,scl=PIN_B1)
#use rs232(baud=9600,parity=N,xmit=pin_c6,rcv=pin_c7,bits=8)
#include <LCD_flexible.c>
//////////////////////////////////////////////////////
// VARIABLES GLOBALES ////////
//////////////////////////////////////////////////////
char nombre[20];  
char enter;
int direccion=0b00000000;
int a,escribir;
int incremento;
//////////////////////////////////////////////////////
// FUNCIONES ///////////////////////////
//////////////////////////////////////////////////////
#INT_RDA 
void rda_int()
{
    enter = getchar();
putc(enter);

if(enter==13  || a==20)
{
escribir=1;nombre[a]=0;
}  

else 
  {
  nombre[a]=enter; 
a++;
 
}
//////////////////////////////////////////////////////
// PROGRAMA PRINCIPAL //////
//////////////////////////////////////////////////////
void main()
{

 a=0;
 lcd_init();
 enable_interrupts(INT_RDA); 
 enable_interrupts(GLOBAL);
 escribir=0;
 puts( "Escribe tu nombre" ); 
 while(escribir==0)
 {}
  puts("Pulsa enter para grabar en la memoria");
  enter = getchar();
  if(enter!=13)
  {
  escribir=0;
  }  
  
  else
  for (incremento=0;incremento<15;incremento++) 
  {
 
   if (nombre[incremento]==0)
   break;
   
   i2c_start();  
   i2c_write(0b10100000); 
   i2c_write(0b00000000);  
   i2c_write(direccion);
   i2c_write(nombre[incremento]);
   i2c_stop();
   direccion ++;
   
   lcd_gotoxy(1,1);
   printf(lcd_putc," MEMORIA ");
   lcd_gotoxy(2,2);
   printf(lcd_putc,"%s",nombre); 
   delay_ms(2); 
  }

}
//////////////////////////////////////////////////////

And this is the scheme in Proteus:













No hay comentarios:

Publicar un comentario