# Que tipo de memoria usar



## jokep (May 23, 2008)

hola a todos!

lo que pasa es que tengo una duda:

estoy programando el micro 16F877  para hacer un "identificador de llamadas".
Todo el código ya lo tengo, pero tengo que guardar datos (teléfonos, nombres, etc) en una memoria; y no se cual usar ni como: si la EEPROM o la FLASH
¿Cual tiene mayor número de escrituras y leídas?¿Cuál es más rapida?¿Cuál es más facil?
¿Alguien tiene algun manual o información?¿Cuál es mas facil?

de antemano, muchísimas gracias, (pues es lo único que me falta para terminar el proyecto, y me urge)


----------



## DJ DRACO (May 23, 2008)

creo que la mas facil es la eeprom, incluso hay muchos micro que la tienen integrada, pero tambien creo que mas rapida es la flash.


----------



## eidtech (May 23, 2008)

Te recomiendo una EEPROM externa por SPI o I2C, tales como las de Microchip o Atmel.

Una 25LC256 de Microchip, 32KB, viene en DIP8, es SPI, tiene por lo menos 1,000,000 ciclos de escritura.


----------



## Meta (May 23, 2008)

Es una EEPROM ya que puedes escribir y leer, en cuanto a la flash, no puedes escribir ni almacenar datos como la eeprom e incluso la RAM.


----------



## eidtech (May 23, 2008)

Meta dijo:
			
		

> Es una EEPROM ya que puedes escribir y leer, en cuanto a la flash, no puedes escribir ni almacenar datos como la eeprom e incluso la RAM.



absolutamente incorrecto Meta..

el que sea FLASH solo implica que internamente sea de construcción diferente, pero puedes leer/escribir, volver a escribir, como desees... la FLASH solo tiene menos ciclos de escritura.


----------



## Meta (May 23, 2008)

eidtech dijo:
			
		

> Meta dijo:
> 
> 
> 
> ...



Si es al programar un *.hex al PIC, en cambio de almacenar datos como la EEPROM o RAM es como dije.

Si pretendes almacenar datos en la flash ya programada en el PIC y cambiar datos como hace una EEPROM, es la primera vez que veo esto. Ni una BIOS lo hace, para almacenarlo lo hace en una EERPOM interna o externa.

Espero haberlo dejado claro esta vez y perdón por la confusión.


----------



## eidtech (May 23, 2008)

Meta, has escuchado hablar del bootloader...?

Tu que crees que hace...? Lo que hace es cambiar la FLASH en tiempo de ejecución... a traves de los datos recibidos por algun puerto...aun despues de haber grabado el .HEX

Incluso hay manera de escribir la FLASH como si de una variable normal se tratara.

Y por ultimo... tambien hay FLASH externa...


----------



## Meta (May 23, 2008)

¿Boot Loader?

mmmmmmmmmmmmmm...

...pues...

...sí.

O estoy confundido o me expreso mal.

Hace un tiempo, me han explicado que el Boot Loader tiene un pequeño programa de .hex en la flash. Al ejecutarse, guarda información e instrucciones en la memoria RAM. Después las instrucciones que hay en la memoria RAM, ordena que se borre la actual memoria flash que hay almacenada y guarda los nuevos datos y el bootloader otra vez. Si en el momento se pierde la alimentación del PIC, se borra la RAM, y si no ha dado tiempo de hacer la operación, el PIC no sirve, lo mismo con la BIOS de cualquier ordenador o PC.

¿Has oído decir que nunca apagues o reinicies el PC mientras se actualiza la BIOS? Esta información o mensaje lo dice hasta al actualizar el Firmware de la PS3.

Sin contar con el bootloader, *¿hay alguna manera de guardar una operación aritmética o resultado como sumar 2 + 3 = 5 en la flash?*

Si lo guardas en la EEPROM si queda guardada aunque apagues el PIC y lo vuelvas  a alimentar. *¿Puedes hacer esto en la flash y sin el bootloader?*

Si es cierto que se puede hacer, pues estaría calidad, no tendría que preocuparme almacenar datos en tiempo real en la limitada EEPROM interna ya que me sobra mucho bites de la flash por poner un ejemplo.

EDIT:
Lo de la flash externa nunca lo he oído, si eso existe, es muy curioso.


----------



## eidtech (May 23, 2008)

Meta dijo:
			
		

> ¿Boot Loader?
> 
> mmmmmmmmmmmmmm...
> 
> ...



http://www.atmel.com/products/SFlash/default.asp

Investiga bien como funciona el bootloader, tienes que leer sobre la arquitectura, organización de memoria y el conjunto de instrucciones.


----------



## Meta (May 23, 2008)

Lo que dije es una opinión, no tiene porqué ser como dije o me dijeron. Pero lo voy a leer, espero que sea igual el del AVR al PIC o por el estilo.


No tiene que ver con PIC, pero bueno, la idea es la idea.
http://www.portalsimberos.com/el-portal/del-simba/manuales/BOOT LOADER.htm


----------



## eidtech (May 23, 2008)

Si gustas una explicacion detallada para AVR te la puedo proporcionar.

Para PIC no, ya que no lo uso... y ni me interesa usarlo...


----------



## JV (May 23, 2008)

Meta dijo:
			
		

> Lo de la flash externa nunca lo he oído, si eso existe, es muy curioso.



http://www.atmel.com/products/DataFlash/default.asp


----------



## Meta (May 23, 2008)

Veo que los Atmel está en cabeza, ¿los PIC están atrás?


*RECUERDA:
¿Existe la manera de guardar datos a la memoria flash sin el bootloader?* Aún esta parte no me has respondido.


----------



## eidtech (May 23, 2008)

Meta dijo:
			
		

> Veo que los Atmel está en cabeza, ¿los PIC están atrás?
> 
> 
> *RECUERDA:
> ¿Existe la manera de guardar datos a la memoria flash sin el bootloader?* Aún esta parte no me has respondido.



*SIIII*


----------



## Meta (May 23, 2008)

jejeejjeje, tranqui, eso es lo que quería saber.

Juraría que la respuesta es *NOOOO*.

Sin bootloader, claro.

¿Hay ejemplos en asm de ese ejemplo que dije del *2 + 3 = 5* y que se guarde en la propia flash en vez de la EEPROM?

¿Entonces para qué hicieron la EERPOM interna o externa?

¿De adorno?


----------



## eidtech (May 23, 2008)

Uy... no es la intención de ponernos a hablar de historia ni de características, pero en si la EEPROM es muy diferente de la FLASH... tiempos de acceso, consumos de potencia, espacio en silicio.

Hay notas de aplicación de Atmel, que hablan del tema con respectivo código. No es lo mejor ni lo mas eficiente, pero SI se puede.


----------



## Meta (May 23, 2008)

En Atmel no se, pero quiero saberlo si se puede en PIC. En otros sitios dicen que no, aquí dicen que si (en Atmel).

¿En qué quedamos?

Mi lógica no me lo creo porque recuerdo que los primeros PIC no incluía EEPROM interna para guardar datos y había necesidad de ello en aquella época. Lo hicieron y ahora si se puede. Lo del bootloader es para actualizar más bien el firmware y sin quitar el PIC de la placa.

Sin contar con el bootloader no me creo que eso sea cierto, recuerdo que en un libro de PIC decía que no, pero cuando me devuelvan el libro confirmaré la respuesta y les diré la página, título, etc...

PD: Que sepas que no estoy por cabrearte ni llevarte la contraria, son opiniones que tenemos y para aprender.


----------



## eidtech (May 23, 2008)

Nota de Aplicación 105 de Atmel.
http://www.atmel.com/dyn/resources/prod_documents/doc2546.pdf

Aquí lo utilizan para guardar parámetros (2+3=5) en memoria, sin embargo es el mismo principio de operación del bootloader, SIN SER UN BOOTLOADER.

Asi que si el PIC tiene un BOOTLOADER, también se puede hacer.

Ya te dije que debes de revisar...antes de volvear a postear, te recomiendo cheques el documento de la liga arriba citada.


----------



## Meta (May 23, 2008)

Hola mi muy distinguido amigo:

Hablaba del PIC. Ya has demostrado que en Atmel si se puede, pero en PIC no se. ME has demostrado documentos del AVR, pero de PIC no. Bueno vamos a dejarlo así, pero te admito que en PIC no me lo creo.

Un cordial saludos.


----------



## eidtech (May 23, 2008)

Pagina 44 del Datasheet del PIC16F87X.

Secciones: Reading the FLASH Program Memory y Writing to the FLASH Program
Memory.


----------



## Meta (May 23, 2008)

No tengo buena suerte, pero se me queda en descarga a unos 745kb y no descarga más.

http://ww1.microchip.com/downloads/en/DeviceDoc/39582b.pdf

Cuando pueda, le hecho un vistazo.


----------



## eidtech (May 23, 2008)

Meta dijo:
			
		

> No tengo buena suerte, pero se me queda en descarga a unos 745kb y no descarga más.
> 
> http://ww1.microchip.com/downloads/en/DeviceDoc/39582b.pdf
> 
> Cuando pueda, le hecho un vistazo.



Pagina 36 a 38 de dicho documento..


----------



## Meta (May 23, 2008)

Parece que si, ajjajaaja, por fin te creo _algo_.

Bueno, en el 16F84A no se puede hacer esto, que mala suerte, por eso había leído por ahí que no se puede.

Si AVR de Atmel lo hace, PIC de Microchip también.

Hay que conocer afondo los demás PIC también.


----------



## jokep (May 24, 2008)

Bueno

entonces después de éstos comentarios, no entendí bien. *¿cuál me aconsejan usar????*

necesito grabar en esa memoria externa (ya sea EEPROM o Flash) desde mi PIC PIC16F877
¿en cual se puede escribir más veces, EEPROM o Flash?

(y muchas gracias por todo lo que escribieron y por los links que pusieron, pues me han servido muchísimo (pues soy novato)


----------



## eidtech (May 24, 2008)

La primer pregunta que te tienes que hacer es cual consigues mas fácil...?

La que tiene mayor ciclos es la EEPROM, aunque con los ciclos que tiene la FLASH debe ser suficiente.


----------



## Meta (May 24, 2008)

Veo que con el PIC16F84A que es el que uso, no se puede hacer nada con Flash pero si con el 16F87x.

No tiene la instrucción que tiene el 16F87x.

jokep, para estas cosas, siempre ah sido la EEPROM, para eso fue diseñado.


----------



## jokep (May 24, 2008)

muchas gracias Meta

voy a usar entonces la EEPROM, aver cuantas escrituras me aguanta

muchísimas gracias a todos


----------



## Meta (May 24, 2008)

Lo es lo cuanto te aguanta sino su velocidad. Ya nos dirá nuestro amigo. Para eso pusieron la EEPROM.

PD: Acaba de recordar que la memory card de PS1 y PlayStation 2 son de tecnología flash, y la verdad que son lentas.


----------



## jokep (May 24, 2008)

oye meta

y qué modelo me recomiendas?, ocupo leer y escribirle 1kb como 1 vez cada 30 min.

y no tendrás por ahí algun tutorial para ver como guardo y leo datos de ella?

uso el CCS para programar PIC, y quisiera que desde un circuito, el PIC 16f877 grabara datos en la memoria externa EEPROM

de antemano gracias por tu dedicación y generosidad. se ocupa gente que se interese por los demás como tú


----------



## eidtech (May 24, 2008)

jokep, que modelos consigues facilmente?


----------



## jokep (May 24, 2008)

no tengo idea, la verdad, pues nunca he usado ninguna

solo ocupo una simple, que soporte muchas escrituras y leídas, barata, etc


----------



## Meta (May 24, 2008)

En un libro se aprende muchas cosas de estas, www.pic16f84a.com lo que no dice que se puede grabar cosas en flash como la EEPROM, por eso no me lo creía, pero veo que con 16F87x si se puede.


----------



## Lambert (May 24, 2008)

Existe una gran variedad de memorias EEPROM en el mercado, las mas usadas son las de la serie 24YYXX(ejem:24C04,24C08,24FC01 etc...).

Estas usan interfase serie I2C

Tambien está la serie 25YYXX.La interfase de comunicación de estas es serie también pero con la diferencia de que tienen una entrada de SCK sincrónico y pines para entrada y salida de datos independientes

Estas ultimas (serie 25XX) pueden trabajar con VDD de 1.8 a6V y soportan hasta 1000000 ciclos de borrado-escritura.

Ahora para conexión paralelo están las 28XX, 48XX, 55XX 58XX y otras mas, con bus de dato de 8 y 4bits.Ejemplos de estas:
2816 (2Kx8)
2864 (8Kx8)
5513 (1Kx4)...

Bueno espero que te sirva de algo mi pequeño aporte.


----------



## Meta (May 24, 2008)

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=80


----------



## jokep (May 26, 2008)

Hola a todos:

perdón por el retraso, pues estuve ausente el fin de semana

gracia spor las respuestas, ya las revisé

voy a usar una EEPROM, de Microchip, pero no sé cual es la diferencia entre la 24LC64 y la 24LC65.

ocupo una de las dos (pues son 64Kb), pero las dos existen y no sé cual es la diferencia, pues las dos creo que son de 64Kb

y tmb creo q hay una q es 24AA64

¿alguien me podría ayudar

gracias


----------



## eidtech (May 26, 2008)

jokep dijo:
			
		

> Hola a todos:
> 
> perdón por el retraso, pues estuve ausente el fin de semana
> 
> ...



Solo ten en cuenta que son 64 Kilobit


----------



## jokep (May 26, 2008)

pero lo demás no importa?

que tiene que ver que sea "smart" o no


----------



## jokep (May 26, 2008)

oigan

por favor

si me pueden ayudar

ya vi y lo unico que cambia es una patita:
en el 24LC64 tiene una que dice WP Y EN EL 24LC65 dice NC la misma patita (la número 7)

de ahí en mas las patitas se llaman igual

bueno, esperando su ayuda,  hasta luego

gracias de antemano


----------



## eidtech (May 26, 2008)

Lee bien la hoja de datos, lo que cambia es la organizacion de memoria..


----------



## jokep (May 26, 2008)

muchas gracias por su ayuda

ya vi las datasheet de los comoponentes, solo que no sé como iniciar el bus. Sé que se dá una señal de alto a bajo, (o alrevez), pero no he podido comprender a q se refiere eso; es decir, que es lo que tiene que hacer mi PIC para mandar y recibir señales

bueno, espero no molestarlos


----------



## eidtech (May 26, 2008)

Lee acerca de I2C.


----------



## jokep (May 26, 2008)

oye eidtech

ya leí sobre eso y aún así no consigo comprender nada

soy nuevo en esto

¿como se envía un bit? ¿solo con poner a 1 la salida?
¿como mandas la señal de reloj del bus?

alguien que tenga algun manual facil


----------



## eidtech (May 27, 2008)

http://es.wikipedia.org/wiki/I²C

Ahi vienen las respuestas a tus preguntas.

Como información adicional el PIC16F877 tiene un modulo llamado MSSP (Master Syncronus Serial Port) que se puede configurar para trabajar como I2C.


----------



## Ana Clara (Jul 15, 2013)

Hola, estaría necesitando que me ayudaran a resolver un problema. En el circuito que estoy diseñando recibo datos desde una computadora por el RS232 a un ATmega16 a 115.200bps. El tema es que esa información la tengo que enviar por uno de los puertos del micro a una velocidad mayor, por lo que necesitaría primero guardar la información y luego enviarla.

Mi duda es la siguiente, puedo conectarle al ATmega16 una EEPROM externa que guarde esta información y luego me permita enviarla?? Si esto es factible, tendría que utilizar una memoria con comunicación SPI, no es cierto??

Muchas gracias.


----------



## Chico3001 (Jul 17, 2013)

Cierto.... aunque si solo necesitas reenviar los datos a una velocidad mayor yo los guardaria en RAM, ya que las memorias EEPROM tienen un limite maximo de escritura de datos.... excediendo ese limite dejan de funcionar...


----------



## Ana Clara (Jul 22, 2013)

Gracias por la respuesta. Pasa que no encuentro en el mercado memorias RAM con comunicación SPI, hoy voy a comprar y veo si consigo. Sino, tendré que poner un zócalo y cambiar la eeprom externa cada tanto.


----------



## Scooter (Jul 22, 2013)

Depende de cuánta RAM necesites, en algunos rtc hay RAM además del rtc.


----------



## Ana Clara (Jul 24, 2013)

Gracias, ahora busco si consigo algún rtc con la cantidad de RAM que necesito, serían 32K mínimo.

Había programado todo para la comunicación SPI y ahora no consigo el 25LC256, me puse a leer de I2C para usar la 24LC256 pero la verdad que es bastante más complicado y estoy necesitando solucionar este tema.


----------



## Scooter (Jul 24, 2013)

Ni por asomo, en un RTC pueden haber 32 bytes.
Dallas tiene RAM no volátil pero de acceso paralelo vía bus "normal" con y sin RTC, yo los usaba.


----------



## Ana Clara (Jul 24, 2013)

Gracias Scooter. Me fijo entonces si consigo alguna RAM de dallas de las que me comentás, pasa que no creo que me alcancen los puertos del atmega16 para usarla si tengo 16 bits de direccionamiento y 8 de datos.


----------



## Scooter (Jul 24, 2013)

Y las líneas de control...


----------



## Ana Clara (Jul 25, 2013)

Otra opción que se me ocurre es, si consigo, conectar dos 93c86 para utilizar la comunicación por el SPI. Esto es factible, no es cierto?


----------



## Gudino Roberto duberlin (Jul 25, 2013)

Ana Clara, pregunto, implementar memorias dinamicas, te resulta un gran desafio?.


----------



## Ana Clara (Jul 25, 2013)

Gracias por la sugerencia, pero la verdad que no tengo idea como podría implementarla. No te pido que me lo soluciones, pero podrás ayudarme para ver por donde empezar a investigar para realizarlo?


----------



## Scooter (Jul 25, 2013)

Para 32kB una memoria dinámica... Si fuesen 32MB pues vale


----------



## Daniel Meza (Jul 25, 2013)

Siguiendo la opinión de Scooter, puedes recurrir a una RAM (no necesariamente no volátil) como por ejemplo una 62256 (32KB). Para ahorrarte líneas del micro puedes recurrir a registros de corrimiento para el bus de datos y otros para el de dirección y unas líneas aparte para el bus de control. El circuito quedará grande pero será de una velocidad mayor que si utilizases algúna EEPROM externa.
Saludos


----------



## Scooter (Jul 26, 2013)

He estado buscando y no encuentro ram SPI o I²C de mas de 1kB, y poner 32 chips me parece un pasón.
Para las memorias paralelo si vas a hacer un buffer secuencial puedes usar un contador para el bus de direcciones y con dos líneas lo controlas (reset y clock) y el bus de datos ya al gusto, o directo o con un registro de desplazamiento.

Corrijo, microchip tiene para todos los gustos:
http://www.microchip.com/pagehandler/en-us/products/memory/serialSRAM/home.html


----------



## Ana Clara (Jul 26, 2013)

Gracias por las sugerencias, no había entendido antes a Scooter. Ustedes dicen de usar un 74HC164 para convertir la salida serie a paralela y de esa manera usar la memoria RAM 62256, luego para la lectura un 74HC165. Ahora me pongo en tema para implementarlo, muchas gracias, si puedo hacerlo la verdad que sería lo ideal. 

Igual en principio lo que no entiendo es lo siguiente, necesitaría tres 74HC164 para convertir a paralelo la dirección (high y low) y los datos. El tema es que los tres tendrían que estar conectados al SPI, para poder seleccionar si enviando o leyendo address high, address low o datos tendría que utilizar el pin MR, no es cierto?


----------



## Scooter (Jul 26, 2013)

Yo dejaría el bus de datos tal cual, el bus de direcciones si que le pondría un contador. Con reset y clock controlas toda la memoria que quieras.


----------



## Daniel Meza (Jul 26, 2013)

Ana Clara dijo:


> Gracias por las sugerencias, no había entendido antes a Scooter. Ustedes dicen de usar un 74HC164 para convertir la salida serie a paralela y de esa manera usar la memoria RAM 62256, luego para la lectura un 74HC165. Ahora me pongo en tema para implementarlo, muchas gracias, si puedo hacerlo la verdad que sería lo ideal.
> 
> Igual en principio lo que no entiendo es lo siguiente, necesitaría tres 74HC164 para convertir a paralelo la dirección (high y low) y los datos. El tema es que los tres tendrían que estar conectados al SPI, para poder seleccionar si enviando o leyendo address high, address low o datos tendría que utilizar el pin MR, no es cierto?



Así es, 3 74HC164, uno para el bus de datos, otros dos para 16 bits de dirección y también otro 74HC165 para la lectura de datos.
Siguiendo esta estructura con la señal de reloj decidirás que registro "captura" el bit enviado por la línea de datos común a TODOS los registros.

Esta implementación tiene como ventaja que solo se necesitan 16 pulsos de reloj para fijar una dirección cualesquiera que sea (acceso aleatorio) y 8 pulsos más para los datos, a diferencia de la propuesta de los contadores que propone el amigo Scooter que demanda una cantidad variable de pulsos en función de la dirección donde se desea leer/escribir haciendo el sistema mucho más lento. 
Aunque si las lecturas/escrituras serán sucesivas la idea de los contadores es más propicia y rápida


----------



## Scooter (Jul 26, 2013)

La de los contadores es precisamente para ahorrar pulsos; se supone que lo que quiere es un buffer fifo o algo así. Para ello quizás le venga bien un contador y un descontador.


----------



## Ana Clara (Jul 31, 2013)

Muchas gracias a todos por sus sugerencias. Finalmente compré una memoria 62256 y los integrados 74HC164 y 74HC165 para implementar lo que les comentaba, ya programé el ATmega16 y me faltaría probarlo, cualquier cosa les comento.


----------



## Ana Clara (Ago 8, 2013)

Acá estoy implementando lo que estuvimos hablando y me surgen dos dudas que me gustaría saber si estoy equivocada:

1 - Para conectar las señales de clock de los integrados 74HC164 y el 74HC165 desde SCK del microcontrolador necesitaría un separador entre el pin del ATmega16 y cada señal de clock.

2 - A la hora de leer la memoria, primero se escribe la parte alta y baja de la dirección de memoria a leer y después se lee.

Muchas gracias


----------



## Scooter (Ago 8, 2013)

1 depende de como estén conectados
2 da igual el orden sólo cuenta el.estado de los pines cuando llegue señal de lectura o escritura


----------

