Alguien sabe porque al leer la eeprom externa siempre da 0xff?
he leido varios temas de aqui y en la pagina ccs pero asi arregle la libreria de la memoria, ponga lo q ponga no me escribe ni lee, tengo q repertir la operacion 3 veces para q escriba o lea, que pasa es problema de proteus o las librerias de las memorias en ccs?
Lo curioso es que si pongo las instrucciones write_ext_eeprom y read_ext_eeprom en el main si lo hacen, si las pongo es otra funcion no, como dije antes tengo q repetir el proceso 3 veces y listo lo hace, medio fastidiosas estas memorias no?
... Proteus 6.9 falla cuando se usa una 24lc16b
...A estas conclusiones se llegan, dado que he montado todo en protoboard y todo funciona correctamente....y en Proteus NO!! :shock:
Saludos.
Has colocado las resistencias pull-up?Hola Suky, gracias por responder... Si, ya he colocado las resistencias pull-up con valores desde los 330 ohm hasta las de 10k, actualmente le tengo unas de 4.7k pero cuando hago la prueba en el proto, el programa no avanza de la instrucción de escribir y queda paralizado... A diferencia de la simulación en proteus que arroja una serie de errores --Stop detected part way through receiving data byte. Write operation aborted. -- pero no se queda paralizado como en la vida real... Aún no encuentro el error y necesito salir de esta cuanto antes para un proyecto final en la U.... Gracias por tu interés.
#include <18f4550.h>
#fuses xt,nowdt,nobrownout,nolvp,put
#use delay(clock=4000000)
#define EEPROM_SDA pin_a4
#define EEPROM_SCL pin_a5
#include <2416.c>
#include <lcd.c>
int data=0,dir=0,value=0;
int F[23];
void main(void){
output_a(0x00);
output_c(0x00);
init_ext_eeprom();
lcd_init();
for(dir=0;dir<23;dir++){
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Writing...");
lcd_putc("\n");
lcd_putc("EEPROM");
output_high(pin_c0);
output_high(pin_c1);
delay_ms(100);
value=value+dir;
write_ext_eeprom(dir,value);
F[dir]=value;
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("EEPROM");
lcd_putc("\n");
lcd_putc("Writed");
output_low(pin_c0);
output_low(pin_c1);
delay_ms(100);
}
for(dir=0;dir<23;dir++){
data=read_ext_eeprom(dir);
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Reading...");
lcd_putc("\n");
if(data==F[dir]){
printf(lcd_putc,":) %u = %u",data,F[dir]);
output_high(pin_c0);
output_low(pin_c1);
}
else{
printf(lcd_putc,":( %u = %u",data,F[dir]);
output_low(pin_c0);
output_high(pin_c1);
}
delay_ms(500);
}
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("EEPROM");
lcd_putc("\n");
lcd_putc("Read");
output_low(pin_c0);
output_low(pin_c1);
delay_ms(100);
}
Acabo de simular el siguiente ejemplo, idéntico al tuyo, en proteus y me funciona correctamente. No obtengo caracteres raros como los que mencionas :? En el proto compruebas las conexiones, que estén fijas y no muy alejadas del PIC. Prueba cambiando de pines, etc.Código: C
#include <18f4550.h> #fuses XT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT //comandos para el programador #use delay(clock=4000000) #include <lcd.c> #define EEPROM_SDA PIN_C4 #define EEPROM_SCL PIN_C5 #include <2416.c> //libreria de eeprom externa 24LC16 int i=0; void main(){ BYTE dato1,dato2; EEPROM_ADDRESS direccion; init_ext_eeprom(); lcd_init(); for(direccion=0;direccion<100;direccion++){ dato1=64; lcd_putc("\f"); lcd_gotoxy(1,1); lcd_putc("Test"); lcd_putc("\n"); lcd_putc("EEPROM"); delay_ms(500); write_ext_eeprom(direccion,dato1); lcd_putc("\f"); lcd_putc("EEPROM"); lcd_putc("\n"); lcd_putc("ESCRITA"); delay_ms(500); dato2=read_ext_eeprom(direccion); lcd_putc("\f"); lcd_putc("EEPROM"); lcd_putc("\n"); lcd_putc("LEIDA"); delay_ms(500); } }
Ya simulé el código que me pasaste y lo implementé en la vida real, y como digo, en la proto todo parece estar bien, pero en proteus no.No entendí :mrgreen: Funciona o no? Si es no, revisa las conexiones, porque en el código no veo errores.
Prueba cambiar las resistencias. Si estas usando el modelo MINRES cambialas por las PULLUP. Estas ultimas son para ese proposito, las MINRES son para asignar valores y otras cosas.