Lectura eeprom con CCS

Hola colegas pues acudo a ustedes una vez más con una duda, hace un tiempo comence a programar PIC's en C con mikroC, pero decidí mudarme a CCS sin embargo me he topado con un problemilla que es la lectura/escritura de eeprom interna, y es que un amigo me comentó que en CCS no había una funciones definidas como en mikroC para la lectura/escritura de la eeprom interna :eek:, y bueno para no darle tantas vueltas me gustaría saber como puedo leer/escribir la eeprom interna de un 16F628A en CCS.:confused:

Espero puedan ayudarme, de antemano muchas gracias (y)
 
Hola colegas pues acudo a ustedes una vez más con una duda, hace un tiempo comence a programar PIC's en C con mikroC, pero decidí mudarme a CCS sin embargo me he topado con un problemilla que es la lectura/escritura de eeprom interna, y es que un amigo me comentó que en CCS no había una funciones definidas como en mikroC para la lectura/escritura de la eeprom interna :eek:, y bueno para no darle tantas vueltas me gustaría saber como puedo leer/escribir la eeprom interna de un 16F628A en CCS.:confused:

Espero puedan ayudarme, de antemano muchas gracias (y)

solo es usar la funcion write_eeprom(adress,data);

ejemplo:

Código:
        write_eeprom(7,'1');
        write_eeprom(8,'2');
        write_eeprom(9,'3');
        write_eeprom(10,'4');
        write_eeprom(11,'5');
        write_eeprom(12,'6');

para leer pues
Código:
valor=read_eeprom(adress);
 
ok me ganó @george-manson-69 pero estaba por escribir lo mismo. Aporto que no lo pruebes en el isis porque el simulador no escribe en la eeprom, esa parte no la simula (al menos la version 7.6) y lee cualquier verdura.
Saludos
 
Última edición:
Muchas gracias a todos, ya vi que si existen las funciones de escritura/lectura de eeprom en el CCS y gracias por los comentarios de ISIS, creo ke mi amigo recibira una queja jajaja, bueno pues nuevamente muchas gracias hasta pronto
 
mira yo e utilizado los comandos write_eeprom() y read_eeprom() y en el simulador proteus simula de maravilla , lo paso al pic y es un desastre alguien q me pueda decir porq en el pic falla y en el simulador esta correcto

Pues mira, después de aclarado el tema de las funciones, a mi me paso algo similar y me dijeron resulta que para lectura-escritura de la eeprom se requiere un tiempo mínimo que no se cumple si utilizas un cristal muy grande y lo que tienes que hacer es poner un delay.

No me consta, ya que para mí caso me convino más regresar al cristal que tenia que modificar mi programa, y pues ya no lo comprobé, espero que alguien más pueda corroborarlo o corregirlo.

Saludos, y suerte
 
Pues mira, después de aclarado el tema de las funciones, a mi me paso algo similar y me dijeron resulta que para lectura-escritura de la eeprom se requiere un tiempo mínimo que no se cumple si utilizas un cristal muy grande y lo que tienes que hacer es poner un delay.

No me consta, ya que para mí caso me convino más regresar al cristal que tenia que modificar mi programa, y pues ya no lo comprobé, espero que alguien más pueda corroborarlo o corregirlo.

Saludos, y suerte

yo estoy utilizando un cristal de 4MHZ en un pic 16f877-20 y si e puesto delays puedes decirme por favor que palabra de configuracion has usado derrepente no estoy grabando bien el pic

que cristal as utilizado tu ? puedes escribir un ejemplo con el delay que mencionas?
 
Última edición:
Hola amigos.:apreton:
Necesito de su ayuda. Tengo un contador de 0 a 999, y debo guardar este numero en la eeprom del pic 873
He encontrado varias funciones para hacerlo, pero al leerla, sólo obtengo el primer byte, y la idea es pasar los dos byte de 8 a un entero de 16, para verlo en la lcd.Como le hago para recuperar el numero entero.:cry:
le agradesco..
 
Ahy te dejo parte de la libreria
y de como estoy intentando leer.
:apreton:

//esto hace parte de la libreria de pcw, que estoy usando

void write_int16_eeprom(INT_EEPROM_ADDRESS address, int16 data){

int8 i;

for(i = 0; i < 2; ++i){
write_eeprom(address + i,*(&data + i));
}
}


// Purpose: Read a 16 bit number from internal eeprom -----------------------
// Inputs: An eeprom address
// Outputs: The 16 bit number read from internal eeprom

int16 read_int16_eeprom(INT_EEPROM_ADDRESS address){

int8 i;
int16 data;

for(i = 0; i < 2; ++i){
*(&data + i) = read_eeprom(address + i);
}
return(data);
}

//aqui intento grabar y leer

int16 contador;
int16 valor;

contador=contador+1;
supongamos que contador vale mas de 255.Sea, 256.:unsure:
write_int16_eeprom(0,contador);
valor=read_int16_eeprom(0);//lo leo en valor, pero valor solo lee un 1 y no 256
pienso que no se usar la libreria; ooo, no es para lo que creo
//si grabo en la eeprom el nº 500 por ejemplo; quiero recuperarlo en otra variable
//has usado esta libreria, ya he intentado varias por internet, pero ninguna me funciona.
Gracias por la ayuda.:cry:

Se me olvidaba, el nombre de la libreria" Lib_Int_EEProm.c "
 
Bueno la verdad nunca he usado esta libreria, pero ya le he echado un vistazo.
Segun entiendo el chiste de todo está en esta parte:
Código:
*(&data + i)

Sincermente no comprendo la funcion exacta o el proceso que hace esa parte del código, lo ideal sería investigar un poco más sobre lo que hace exactamente para determinar si está interfiriendo algo con esa parte, aunque sinceramente no le veo problemas segun lo que lei.
 
hola jgarcam.:apreton:
Pues ni por aquí ni por allá; encontre una rutina por ahí en un foro sobre ccs (y)
y esa si funciono a la primera, gracias por todo.:aplauso:
 
Bueno colega me da mucho gusto que hayas dado con la respuesta (y), si no es mucha molestia podrías compartir la liga o la solucion que encontraste :).

Saludos y suerte.
 
Esta fue la rutina que encontre. y si que funciona.
se lee y escribe, tal cual lo hice en mi promer post.
Un saludo.(y)

Funciones read_eeprom(address) y write_eeprom(address, byte) :aplauso:
void write_eeprom_16bits(int address, long* val){
int pLow, pHigh;
pLow = val;
pHigh = val>>8;
write_eeprom(address,pHigh);
delay_ms(12);
++address;
write_eeprom(address,plow);
delay_ms(12);
}

long read_eeprom_16bits(int address){
int pLow, pHigh;
long result;
pHigh = read_eeprom(address);
++address;
pLow = read_eeprom(address);
result=(pHigh<<8);
result+=pLow;
return result;
}
 
Atrás
Arriba