# Lectura eeprom con CCS



## jgarcam (Oct 22, 2010)

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 , y bueno para no darle tantas vueltas me gustaría saber como puedo leer/escribir la eeprom interna de un 16F628A en CCS.

Espero puedan ayudarme, de antemano muchas gracias


----------



## george.manson.69 (Oct 22, 2010)

jgarcam dijo:


> 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 , y bueno para no darle tantas vueltas me gustaría saber como puedo leer/escribir la eeprom interna de un 16F628A en CCS.
> 
> Espero puedan ayudarme, de antemano muchas gracias



solo es usar la funcion _write_eeprom(adress,data);_

ejemplo:


```
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 
	
	



```
valor=read_eeprom(adress);
```


----------



## Vegetal Digital (Oct 22, 2010)

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


----------



## FBustos (Oct 22, 2010)

Hola mi aporte es que proteus 7.7 sp2 si simula eeprom, escribe hasta un archivo con los datos.


----------



## jgarcam (Oct 23, 2010)

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


----------



## FBustos (Oct 23, 2010)

De nada, que bueno que te haya resultado.


----------



## upiscoya (Feb 16, 2011)

dj pipe dijo:


> De nada, que bueno que te haya resultado.



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


----------



## jgarcam (Feb 16, 2011)

upiscoya dijo:


> 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


----------



## upiscoya (Feb 17, 2011)

jgarcam dijo:


> 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?


----------



## COSMICO (Jun 27, 2011)

Hola amigos.
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.
le agradesco..


----------



## jgarcam (Jun 27, 2011)

Ya comprobaste que si este escribiendo, antes de leer??
Si pudieras explicar un poco más y/o poner tu codigo seria mas facil.


----------



## COSMICO (Jun 28, 2011)

Ahy te dejo parte de la libreria
y de como estoy intentando leer.


//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.
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.

Se me olvidaba, el nombre de la libreria" Lib_Int_EEProm.c "


----------



## jgarcam (Jun 29, 2011)

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:
	
	



```
*(&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.


----------



## COSMICO (Jun 29, 2011)

hola jgarcam.
Pues ni por aquí ni por allá; encontre una rutina por ahí en un foro sobre ccs 
y esa si funciono a la primera, gracias por todo.


----------



## jgarcam (Jun 29, 2011)

Bueno colega me da mucho gusto que hayas dado con la respuesta , si no es mucha molestia podrías compartir la liga o la solucion que encontraste .

Saludos y suerte.


----------



## COSMICO (Jun 30, 2011)

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

Funciones read_eeprom(address) y write_eeprom(address, byte) 	 
  	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;
}


----------



## jgarcam (Jun 30, 2011)

Ooo vaya si ya veo , bueno gracias por el aporte, digno de agregar a la biblioteca , hasta pronto


----------



## ilcapo (Jul 6, 2014)

hola cosmico, tendras algun ejemplo sencillo para ver como se usan esas funciones ?  mil gracias


----------

