TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: rodrigo_control2009 en 20 de Marzo de 2009, 02:31:30

Título: Problema en bus i2c entre 18f4550 y 24lc256
Publicado por: rodrigo_control2009 en 20 de Marzo de 2009, 02:31:30
HOLA  ENCONTRE  ESTE  CODIGO  PARA  EXPERIMENTAR  CON EL BUS I2C   Y  EL  MASTER  ENVIA LOS  DATOS  PERO  NO  HAY  RESPUESTA DEL  ESCLAVO  LEVANTO  LA  RESISTENCIA  DE  LA  LINEA DE DATOS  Y  COMIENZA  A ENVIAR  PERO  SE DETIENE CUANDO  LA  RECONECTO  Y  EL LED   C1 SE MANTIENE ENCENDIDO  EN  MUESTRA  Q  NO  HAY  RESPUESTA  DEL  ESCLAVO 
ESTE  EL  CODIGO   GRACIAS  POR  SU AYUDA
#include <18f4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use i2c(Master,sda=PIN_B0,SCL=PIN_B1)
#include <lcd.c>
#use  standard_io(c)
#define EEPROM_ADDRESS long int
void WRITE_EXT_EEPROM(long int address, BYTE data)
{
short int  status;
output_high(PIN_C1);
i2c_start();
i2c_write(0xa0);
i2c_write(address>>8);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xa0);
output_low(PIN_C1);
while(status==1)
{
i2c_start();
status=i2c_write(0xa0);
}
}
BYTE READ_EXT_EEPROM(long int address){
BYTE data;
output_high(PIN_C0);
i2c_start();
i2c_write(0xa0);
i2c_write(address>>8);
i2c_start();
i2c_write(0xa1);
data=i2c_read(0);
i2c_stop();
output_low(PIN_C0);
return(data);
}
void main () {
int8 valor=0,dato;
EEPROM_ADDRESS address;;
lcd_init();
for (address=0;address<=100;address++){
   WRITE_EXT_EEPROM(address,valor);
   lcd_gotoxy(1,1);
   printf(lcd_putc,"ENVIANDO =%1D",valor);
   delay_ms(500);
   valor++;
 }
for (address=0;address<=100;address++){
   dato=READ_EXT_EEPROM(address);
   lcd_gotoxy(1,2);
   printf(lcd_putc,"RECIBIENDO =%1D",data);
   delay_ms(500);
   valor++;
}
}