Hola vszener
Mmm creo que no entendi muy bien, si yo escribo en esa posición se borra toda la memoria o tengo que ir sobreescribiendo desde el principio hasta llegar a esa localidad??
Gracias
Muchas gracias, aunque me podrian explicar un poco mas como es eso de la grabación continua o por páginas, ya leí el datasheet pero todavia no me cae el veinte. Lo que quiero en algunas ocasiones es borrar la memoria a partir de cierta dirección y en otras borrala completamente, desde principio a fin.
Saludos
for(i=0;i<=localidadmaxima;i++)
{
i2c_write(i,0xff)
}
#include <18f4320.h>
#use delay(clock=3579545)
#fuses XT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT
#define EEPROM_SDA PIN_C4
#define EEPROM_SCL PIN_C3
#use rs232(baud=9600, xmit=PIN_c6,rcv=PIN_c7)
#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL, FORCE_SW)
#include <24LC512.c>
long int dir;
int val;
main()
{
val=0;
delay_ms(50);
printf("Grabando...");
delay_ms(500);
init_ext_eeprom();
for(dir=0;dir<=8192;++dir)
{
write_ext_eeprom(dir,val);
val=val+1;
if (val>=255)
{
val=0;
}
delay_ms(1);
}
delay_ms(500);
printf("Leyendo...");
delay_ms(200);
printf("Iniciando Transmision");
for(dir=0;dir<=8192;++dir)
{
printf(" %lu --> %u",dir,read_ext_eeprom(dir));
delay_ms(500);
}
printf("Fin de la Transmision");
delay_ms(1000);
while(true)
{
}
}
Grabando...Leyendo...Iniciando Transmision 0 --> 0 1 --> 1 2 --> 2 3 --> 3
4 --> 4 5 --> 5 6 --> 6 7 --> 7 8 --> 8 9 --> 9 10 --> 10 11 --> 11 12 -
-> 12 13 --> 13 14 --> 14 15 --> 15 16 --> 16 17 --> 17 18 --> 18 19 -->
19 20 --> 20 21 --> 21 22 --> 22 23 --> 23 24 --> 24 25 --> 25 26 --> 26
27 --> 27 28 --> 28 29 --> 29 30 --> 30 31 --> 31 32 --> 32 33 --> 33 34
--> 34 35 --> 35 36 --> 36 37 --> 37 38 --> 38 39 --> 39 40 --> 40 41 --
> 41 42 --> 42 43 --> 43 44 --> 44 45 --> 45 46 --> 46 47 --> 47 48 --> 4
8 49 --> 49 50 --> 50 51 --> 51 52 --> 52 53 --> 53 54 --> 54 55 --> 55
56 --> 56 57 --> 57 58 --> 58 59 --> 59 60 --> 60 61 --> 61 62 --> 62 63
--> 63 64 --> 64 65 --> 65 66 --> 66 67 --> 67 68 --> 68 69 --> 69 70 -->
70 71 --> 71 72 --> 72 73 --> 73 74 --> 74 75 --> 75 76 --> 76 77 --> 77
78 --> 78 79 --> 79 80 --> 80 81 --> 81 82 --> 82 83 --> 83 84 --> 84 8
5 --> 85 86 --> 86 87 --> 87 88 --> 88 89 --> 89 90 --> 90 91 --> 91 92 -
-> 92 93 --> 93 94 --> 94 95 --> 95 96 --> 96 97 --> 97 98 --> 98 99 -->
99 100 --> 100 101 --> 101 102 --> 102 103 --> 103 104 --> 104 105 --> 105
106 --> 106 107 --> 107 108 --> 108 109 --> 109 110 --> 110 111 --> 111
112 --> 112 113 --> 113 114 --> 114 115 --> 115 116 --> 116 117 --> 117 11
8 --> 118 119 --> 119 120 --> 120 121 --> 121 122 --> 122 123 --> 123 124
--> 124 125 --> 125 126 --> 126 127 --> 127 128 --> 128 129 --> 129 130 --
> 130 131 --> 131 132 --> 132 133 --> 133 134 --> 134 135 --> 135 136 -->
136 137 --> 137 138 --> 138 139 --> 139 140 --> 140 141 --> 141 142 --> 14
2 143 --> 143 144 --> 144 145 --> 145 146 --> 146 147 --> 147 148 --> 148
149 --> 149 150 --> 150 151 --> 151 152 --> 152 153 --> 153 154 --> 154 1
55 --> 155 156 --> 156 157 --> 157 158 --> 158 159 --> 159 160 --> 160 161
--> 161
Exacto, lo que sucede es que yo tenia la duda sobre lo relacionado a lectura y escritura de una eeprom de 512 y maunix me preguntó por los valores que obtenía. Referente a lo del borrado ya quedó. Mi duda está ahora en saber si lo que estoy obteniendo es realmente la dirección en memoria y el contenido.
Saludos y gracias
#include <18f4320.h>
#use delay(clock=3579545)
#fuses XT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT
#define EEPROM_SDA PIN_C4
#define EEPROM_SCL PIN_C3
#use rs232(baud=9600, xmit=PIN_c6,rcv=PIN_c7)
#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL, FORCE_SW)
#include <24LC512.c>
long int dir;
long int val;
main()
{
val=0;
delay_ms(50);
printf("Grabando...");
delay_ms(500);
init_ext_eeprom();
for(dir=0;dir<=65535;++dir)
{
write_ext_eeprom(dir,val);
val=val+1;
if (val>255)
{
val=0;
output_toggle(PIN_A1);
}
delay_ms(1);
}
//write_ext_eeprom(0,0);
//delay_ms(1);
//write_ext_eeprom(32768,127);
//delay_ms(1);
//write_ext_eeprom(65535,255);
//delay_ms(1);
delay_ms(500);
printf("Leyendo...");
delay_ms(200);
printf("Iniciando Transmision");
for(dir=0;dir<=65535;++dir)
{
printf(" %lu --> %u",dir,read_ext_eeprom(dir));
delay_ms(500);
}
//printf(" 0 --> %u", read_ext_eeprom(0));
//delay_ms(500);
//printf(" 32768 --> %u", read_ext_eeprom(32768));
//delay_ms(500);
//printf(" 65535 --> %u", read_ext_eeprom(65535));
//delay_ms(500);
printf("Fin de la Transmision");
delay_ms(1000);
while(true)
{
}
}
Cuando utilizo lo que tengo comentado funcionó perfectamente pero cuando lo quito el programa tal cual lo muestro se tarda mucho, no se si por obvias razones o el pic esté haciendo otra cosa. De hecho coloqué un led para ver lo que pasaba y pues este sigue parpadeando. Al incluir el archivo 24LC512.c, la grabación se hace byte a byte. De todos modos voy a hacer otro programa y se los muestro.Lo que yo entendí fue que si quiero hacer el grabado por página puedo hacerlo con hasta 128 bytes, porque despues de este valor estaría sobreescribiendo. Para este caso tendría que volver a empezar el proceso pero escribiendo desde la posición 128 verdad? En el caso de grabar byte a byte puedo hacerlo con toda la memoria, cierto?
Comenzaré con los códigos y en cuanto los termine los pongo para que me los revisen
Muchas gracias