# Grabar Eeprom desde pic



## Aleix (Jul 7, 2006)

Hola, 
finalmente lo del servo lo grabare con una eeprom. he buscado por internet pero solo me salen grabadores de memorias eeprom donde se usa el pc para grabar los datos. alguien sabe donde encontrar información para que el mismo pic pueda acceder y grabar la eeprom?

muchas gracias.


----------



## Guillermo Carbajal-Franco (Ago 21, 2006)

Hola que tal.

Mira, lo de la EEPROM, lo puedes resolver mediante programación, logicamente el pic y la memoria deben estar conectados en el msimo bus de datos y el de direcciones tendrás que multiplexarlo. El asunto con la grabación de una EEPROM es que debes mantener los datos en el bus de datos, y la dirección en la que deseas programar en el bus de direcciones (de la EEPROM) un tiempo determindao, mientras colocas un voltaje (típicamente de 25V, y creo que ya hay EEPROM's de 5V!) en al pin de programación de la memoria.

Te recomiendo que consigas la hoja de datos de tu EEPROM ya que en esta encontrarás los tiempos, pines y voltajes necesarios.

Además, recuerda que un PIC no es muy diferente de una PC, el chiste es saber "hacer" las interfaces adecuadas.

Suerte!
M. en C. Guillermo Carbajal-Franco


----------



## Aleix (Ago 23, 2006)

Muchas gracias!
ya me he puesto a trabajar en ello!


----------



## tiopepe123 (Ago 23, 2006)

no tienes suficiente con los 256 del mismo pic?
miras en microchip encontraras las rutinas para hacerlo con la serie 24CXX
24C02, 24C04 ....


----------



## dragonspirit (Abr 12, 2007)

Hola a todos,

Mi pregunta es si teneis algun ejemplo de utilizacion de la EEPROM interna del PIC. Llevo tiempo intentando grabar datos generados por el propio PIC en su memoria EEPROM interna, para después volcar los datos en un PC mediante USB. Todavía no tengo claro como funciona el USB, pero de momento me conformo con guardar los datos internamente para empezar a trabajar con ellos, ya investigaré como funciona el USB más adelante.

Muchas gracias

Un saludo


----------



## dragonspirit (Abr 23, 2007)

Hola a todos:

Ha habido cambios en el proyecto que llevo a cabo, y no tengo suficiente con la memoria EEPROM interna del PIC. Necesito al menos unos 500 Kbytes, asi que me disponga a guardar los datos en una memoria externa. Tengo una de microchip, que me puede valer (una 25LC1024), pero nunca he trabajado el tema de la comunicación entre este tipo de dispositivos. Os agradecería si pudierais mandarme algun ejemplo, o decirme donde puedo encontrar alguno (he estado buscando y no he encontrado ninguno). Ya he leido el datasheet y las notas de aplicacion, pero no termino de entender como hacerlo.

Por cierto, esta memoria se comunica por SPI, por si teneis ejemplos de este tipo de comunicacion aunque no sea en este tipo de memorias EEPROM.

Muchas gracias

Un saludo


----------



## maunix (Abr 23, 2007)

La memoria 25LC1024 tiene 1M*b*it = 128*KB*ytes

Ten cuidado con eso.

PD: creo que microchip tiene justamente un par de notas de aplicación para acceder por SPI a memorias serie.  Es probable que no sean justo estas pero te servirán para entender como funciona el SPI.


----------



## dragonspirit (Abr 23, 2007)

Gracias Maunix por tu contestación. Ya tengo las notas de aplicacion, no las entiendo muy bien, pero intentaré darle unas vueltas más a ver si saco algo en claro. 

Lo del tamaño de la memoria es un problema, creia que eran de 1MByte, ¿sabeis que tipo de memoria podría utilizar? Como ya he dicho, es la primera vez que hago este tipo de proyectos, y me está costando bastante coger el hilo del tema.

Gracias otra vez, la ayuda de este foro es enorme

Un saludo a todos


----------



## dragonspirit (May 8, 2007)

Hola de nuevo,

He cambiado el formato de los datos que voy a ir almacenando en la EEPROM externa que comenté días atras (una EEPROM de microchip modelo 25LC1024). 

Me he Hecho una pequeña aplicacion que me almacena un dato en una direccion de memoria, y luego la lee, y compara los dos datos, encendiendo un LED si son iguales. Pues bien, no lo enciende. 

Estoy mirando con un osciloscopio las señales que me generan tanto el PIC como la EEPROM. El PIC manda los datos correctamente (visualizo el SCK y SO y manda los datos que debe), el problema lo tengo en la salida de la memoria. Ésta recibe la instrucción de lectura, y recibe la direccion deseada correctamente, pero el dato que envia de vuelta, no es el dato introducido anteriormente, y además tiene muy mala pinta. La señal parece que sean varias señales superpuestas, y decae de forma exponencial (más o menos, para que os hagais una idea) cuando termina el periodo de envio del dato.

No tengo ni idea de como puedo solucionarlo, y ya llevo varios dias probando cosas, y no hay manera de encender el dichoso LED.

Espero que podais ayudarme, me ayudaríais muchisimo. Estoy deseando ver ese LED encendido, .

Muchas gracias


----------



## Theft (Jul 1, 2007)

Hola: queria saber si habias logrado comunicarte con la memoria SPI, debido a que me encuentro en la misma situacion.

Saludos y suerte.


----------



## dragonspirit (Jul 9, 2007)

Hola Theft

Si, al final, y despues de mucho esfuerzo y muxa ayuda conseguí comunicarme con la memoria EEPROM de 1024 de microchip

Comentame el problema y vere a ver si puedo ayudarte

Un saludo


----------



## ioloo (Ago 2, 2008)

Podríais indicar que librerías utilizasteis y si hizo falta alguna circuitería especial para la memoria, condensadores de desacoplo, diodos...

Es que no me funciona de ninguna y solo inicializo, y leo!


----------



## zgouki (Ago 25, 2008)

Hola que tal amigo, espero que puedas ayudarme. Necesitaría algún esquematico para conectar la eeprom con un PIC 16f628a, y si es posible alguna explicación o algoritmo para leer/ graabr la eeprom externa desde dicho PIC. 
Saludos


----------



## Meta (Ago 26, 2008)

¿Tanta memoria necesitas? ¿Con estos pic no tienes de sobra?

*16F628A*
Program Memory Size (Kbytes)	 3.5
 RAM	 224
 Data EEPROM (bytes)	 128
 I/O	 16

*16F88*
Program Memory Size (Kbytes)	 7
 RAM	 368
 Data EEPROM (bytes)	 256
 I/O	 16


----------



## zgouki (Ago 29, 2008)

> ¿Tanta memoria necesitas? ¿Con estos pic no tienes de sobra?



Y si, necesito más memoria...es para cargar en un PIC una kinformación que este debe procesar (ten en cuenta que las rutinas y demas cosas programadas en el PIC tambien ocupan memoria)
Saludos


----------



## Meta (Ago 29, 2008)

Bueno, si es en C lo entiendo que pida memoria. En ensamblador menos. Aún así, entonces métete con los *16F876A* o el más moderno que recomienda Microchip *16F886*, o vete a la gama *18F2550* que ese tiene 16Kb de memoria flash y 2048 bytes de RAM.

¿No podrás quejarte? En ASM tienes de sobra.

Es la primera vez que veo a alguien que pida tanta memoria. Salvo que lo quieras para un Wedserver para introducir fotitos al PIC  o la EEPROM externa.

¿Qué aún no estás de acuerdo?

Hablando de las 8 bits entonces hay el *18F8723* con 64kb de flash y 1024 de RAM.

¿Si te quedas corto y quieres muchas operaciones? están los PIC de 16Bits y otros mejor aún los PIC32 hasta 512kb de flash.


----------



## Meta (Ago 29, 2008)

dragonspirit dijo:
			
		

> Hola a todos,
> 
> Mi pregunta es si teneis algun ejemplo de utilizacion de la EEPROM interna del PIC.



Si se puede.


```
LIST		P=16F84A
	INCLUDE		<P16F84A.INC>
	__CONFIG	_CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

	CBLOCK   0x0C
	ENDC

	ORG	0x2100				; Corresponde a la dirección 0 de la zona EEPROM
							; de datos.
	DE	"Estos datos son lo que está guardado en la EEPROM", 0x00

	ORG 	0
Inicio
	sleep
	goto	Inicio
	
	END
```

En el MPLAB pulsa en la barra de herramientas, View--->>EEPROM. Al cargar o compilar este código se ve guardado los datos.


----------



## zgouki (Ago 30, 2008)

Ya que esta el tema abierto, tengo una pregunta: Es posible modificar la memoria interna del PIC sin reprogramarlo? 
Me refiero: Supongamos que con un PIC "leo" la temperatura que me marca un dispositivo... es posible ir guardando en algun lugar del PIC esta información, para luego usarla en otros procesos?


----------



## Meta (Ago 30, 2008)

Si, tanto en la RAM como en la EERPOM, la diferencia está que la RAM es volátil y la EEPROM no, es decir, en la EEPROM se mantiene los datos cuando pierde la alimentación y la RAM las pierde.


----------



## jaiser (Oct 3, 2008)

Saludos, tambien estoy trabajando en este tema y quisiera saber si alguien lo ha hecho con CCS. Se que trae unas librerias pero quisiera mas información acerca del direccionamiento de la memoria para poder entender mejor como utilizar las instrucciones de la libreria de CCS.

Tambien estuve investigando sobre los tipos de comunicacion de las memorias y encontre dos, Uno de los protocolos es por SPI y otro dice que es bus serial, alguien puede darme las especificaciones de conexion del harware (EEPROM al PIC)?

Les agradezco mucho su atensión.


----------



## cheapekt (Oct 9, 2008)

dragonspirit dijo:
			
		

> Hola de nuevo,
> 
> He cambiado el formato de los datos que voy a ir almacenando en la EEPROM externa que comenté días atras (una EEPROM de microchip modelo 25LC1024).
> 
> ...




dragonspirit, estoy en el mismo caso que estuviste tu anteriormente, estoy muy desorientado, he estado mirando y la eeprom 25LC1024 que tu has utilizado seria suficiente para los datos que quiero almacenar, me podrias hechas una mano en la conexion fisica y explicar de que forma puedo guardar un dato en la memoria para luego leerlo para enviarlo al PC, lo de la comunicacion con el PC ya lo tengo medio listo, pero me gustaria aprender como comunicar la eeprom con el PIC, desde ya, agradezco vustra colaboracion

UN saludo a todos


----------



## Meta (Oct 9, 2008)

cheapekt dijo:
			
		

> dragonspirit dijo:
> 
> 
> 
> ...



Lo vuelvo a repetir:

```
LIST      P=16F84A
   INCLUDE      <P16F84A.INC>
   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

   CBLOCK   0x0C
   ENDC

   ORG   0x2100            ; Corresponde a la dirección 0 de la zona EEPROM
                     ; de datos.
   DE   "Estos datos son lo que está guardado en la EEPROM", 0x00

   ORG    0
Inicio
   sleep
   goto   Inicio
   
   END
```

No es *24LC1024* sino *24LC1025*. Puedes conectar hasta 8 dispositivo EEPROM 24LC1025 y tienes más memoria.

1025 Kbits son 128,125Kbytes, de ahí viene el 24LC*1025*.
1025 kbits *x* 8 (EEPROM 24LC1025) *=* 8200 KBits, o lo que es lo mismo, 1025Kbytes. 1MBytes reales de memoria.

Si te quedas corto, puedes usar si sabes programarlo, tarjetas MMC de 4Gigas o más. Para un Webserver está muy bien.

Saludos.


----------



## cheapekt (Oct 9, 2008)

Muchisimas gracias Meta por tu rapida contestacion, el problema es que yo programo en CCS, con el lenguaje C tienes idea de como hacerlo en C?

Gracias sinceramente


----------



## Meta (Oct 9, 2008)

Pues...






...no.

Sólo manejo ASM, pero el código que acaba de poner arriba, si alguie sabe, te lo pasará a C, pero debes decir que PIC usas.

Saludos.


----------



## cheapekt (Oct 9, 2008)

Muy amable Meta, el PIC que estoy utilizando es el 16f877


----------



## meledu (Oct 11, 2008)

he notado que en varias paguinas te explican como implementar la comunicacion y algunos ejemplos acerca del soft neesario pero he notado que no ponen en sus diagramas  la conexión de un par de resistencias necesarias para que el bus i2c funcione correctamente son un par de resistencia pull up en plos pines de data y clock .
te lo digo por si las mosca .


----------



## OBI TRICE (Mar 5, 2010)

alguien me podria explicar que significa estos datos
	ORG	0x2100				; de la zona EEPROM
							; de datos.
	DE	"Estos datos son lo que está guardado en la EEPROM", 0x00


----------

