# Copiar datos de una ram a otra ram



## tito 2 (Ago 10, 2014)

*H*ola amigos deseo implementar un circuito que copie los datos de una ram que contiene 32768 direcciones y pasarla a otra memoria ram de la  misma cantidad de direcciones osea una memoria ram de 32k,por el momento pienso en implementar un contador que cuente hasta esa cantidad para acceder a todas las direcciones de la memoria pero seria de gran ayuda alguna sugerencia de como implementarlo, de*-*repente algui*i*en hizo algo similar.


----------



## proteus7 (Ago 10, 2014)

es una memoria ram o una eepron i2c?


----------



## Sr. Domo (Ago 10, 2014)

Hola y Bienvenido al Foro!

Si lo piensas hacer con lógica cableada, pues sí es un tanto fácil. Ahora una breve descripción:

Las memorias paralelas, RAM o EEPROM cuentan con unas líneas que sirven para seleccionar el chip, leer/escribir datos y para habilitar/deshabilitar la salida para leer o escribir datos. Estas líneas son CS, #WE y #OE
Además de estas líneas, están las líneas de direcciones y datos, las de direcciones son las que varían, pueden ir de A0 a A12 por ejemplo y las de datos por lo regular son de D0 a D7 o hasta D15.

Ahora, para leer un dato, debes introducir primero la dirección a leer, ésta dirección puede generarse desde un contador como el CD4040 donde las introduces en las líneas de dirección (obviamente).

Luego, para leer un dato, la línea CS debe estar en alto, la línea #WE también y la línea #OE debe estar en bajo, de esta forma la memoria sabrá que quieres leer un dato. 

Con la línea CS le "avisas" que va a hacer algo, con la línea #WE en estado alto le indicas que quieres leer un dato y con la línea #OE en bajo le indicas que puede colocar los datos en sus salidas D0-D7.

Entonces al enviarle estas señales de control, la memoria te dará el dato que tenga en la dirección que le indicaste.

Ahora, para escribir un dato, necesitas introducirle la dirección donde quieres escribir, introduces de una vez el dato que quieres escribir en la dirección deseada, luego envías una señal alta a CS y a #OE, y a #WE le envías una señal baja para indicarle que le vas a enviar un dato.

De esta forma la memoria almacena el dato que le pusiste previamente en el bus de datos.

-------

Ahora, ya que tienes una idea de como leer y escribir en ellas, lo que necesitas hacer es leer una memoria y al mismo tiempo escribir ese dato en la otra, empleando la misma direeción del CD4040 y circuitos distintos para generar las señales de lectura en una memoria y escritura en la otra.

Lee el datasheet de las memorias que usarás para asegurarte que las líneas de control son iguales a las que te mencioné.

Salu2!!


----------



## miguelus (Ago 10, 2014)

Buenas noches.

Tienes que tener en cuenta que las Memorias RAM necesitan alimentación, si pierde la Alimentación, los datos que se hayan grabado se perderán 

Tendrás que ingeniar una forma para asegurarte que  haya alimentación permanentemente.

Sal U2


----------



## Sr. Domo (Ago 10, 2014)

miguelus dijo:


> Buenas noches.
> 
> Tienes que tener en cuenta que las Memorias RAM necesitan alimentación, si pierde la Alimentación, los datos que se hayan grabado se perderán
> 
> ...



Batería? recargable en paralelo con la fuente + regulador?

Podría funcionar?


----------



## Gudino Roberto duberlin (Ago 10, 2014)

Hola, pregunto!, de que tipos son las memorias que comentas? Estáticas  o dinámicas, ya que el circuito cambia radicalmente para poder manejarlas.


----------



## Sr. Domo (Ago 11, 2014)

Gudino Roberto duberlin dijo:


> Hola, pregunto!, de que tipos son las memorias que comentas? Estáticas  o dinámicas, ya que el circuito cambia radicalmente para poder manejarlas.



En caso de ser DRAM, es imprescindible un micro, pero para estas aplicaciones convienen las memorias NVRAM estáticas. Se ahorrará mucho hardware.

O lo que se puede hacer es conseguir el controlador de memorias DRAM y el circuito básico usaría la misma idea que sugerí.

Salu2!


----------



## tito 2 (Ago 11, 2014)

*H*ola el tipo de  memoria q*UE* voy a usar es una ram estatica de 32k. direcciones por 16 bit de palabra la idea es copiar todos los datos de la memoria ram y pasarlo esos datos a otra ram de las mismas caracteristicas
*P*or el momento estoy pensando en usar 2 contadores 74ls163 para que pueda leer todas las direcciones de la ram estatica pero al mismo tiempo escribir en  otra ram dichos datos
*A*hora ya entendi con claridad el funcionamiento de la ram,la pregunta es si hay otro integrado que cuente todas las direcciones de dicha ram y si se podria usar directamente esas mismas direcciones para escribir simultaneamente en la otra ram? esta bien usar una bateria de litio de 3v para la alimentacion de la ram sabiendo q*UE* es una memoria ram statica cmos,la idea es que el circuito cuente con su propio clock que sincronice al contador para que pueda leer las dire*C*ciones *D*e la ram


----------



## Sr. Domo (Ago 11, 2014)

Hola!

2 CD4040 en cascada para contar hasta 16.777.216 posiciones, si es que con uno solo no te alcanza.

Con ese mismo contador puedes enrutar varias memorias a la vez, de eso no debe haber problema.

Salu2!


----------



## tito 2 (Ago 11, 2014)

*O*k*,* gracias Domonation por la sugerencia*.* *¿*pero aún tengo la duda de si se requiere de-repente alguna compuerta para retra*s*ar el bus de direcciones del contador al momento de escribir en la ram q*ue* va a *ser* copiada o no es necesario*?*


----------



## Sr. Domo (Ago 11, 2014)

Pues en sí si requieres un circuito que genere todos los retrasos necesarios a la hora de hacer una operación de "lectoesctritura" ya que para leer una memoria cualquiera (paralela, SRAM o EEPROM) necesitas colocar primero la dirección y enseguida las señales de control para indicarle que quieres leer un dato (CS=1, #WE=1, #OE=0)

Y al mismo tiempo debes colocar la dirección en la otra memoria, pero esto se ahorra por el mismo contador, pero también, debes enviarle las señales de control una vez la memoria anterior tenga los datos en el "exterior", una vez los tenga disponibles, tienes que habilitar la escritura a la otra memoria RAM.

En pocas palabras, necesitas el contador de direcciones y otro circuito divisor para sincronizar las operaciones realizadas en el proceso de "lectoescritura". Es simple, pero debes saber qué memorias vas a usar, menciona cuales son y veremos más detalladamente como sería la parte del control de las memorias 

Salu2!


----------



## tito 2 (Ago 13, 2014)

bueno gracias por el aporte ,voy a implementar el clok el contador y la memoria ram luego les comento


----------



## tito 2 (Ago 31, 2014)

*H*ola amigos*.* *B*ueno*, *estoy intentando simular el contador 74ls163  para las direcciones de la ram*.
**P*rimero trato de entender el funcionamiento de dicho contador para después implementar en cascada*.*
*E*stoy usando el simulador multisim para realizar las pruebas y en la simulación solo logro tener señal a la salida del 555*,* pero no pasa nada con el conteo*,* ya  que  no prenden los led indicadores del conteo*.*
*H*ice los pasos para que el contador realice las cuentas pero no pasa nada*.
**A*djunto el circuito para que me puedan ayudar*,* probablemente estoy fallando en las conexiones del contador*.*


----------



## Daniel Meza (Ago 31, 2014)

tito 2 dijo:


> *H*ola amigos*.* *B*ueno*, *estoy intentando simular el contador 74ls163  para las direcciones de la ram*.
> **P*rimero trato de entender el funcionamiento de dicho contador para después implementar en cascada*.*
> *E*stoy usando el simulador multisim para realizar las pruebas y en la simulación solo logro tener señal a la salida del 555*,* pero no pasa nada con el conteo*,* ya  que  no prenden los led indicadores del conteo*.*
> *H*ice los pasos para que el contador realice las cuentas pero no pasa nada*.
> **A*djunto el circuito para que me puedan ayudar*,* probablemente estoy fallando en las conexiones del contador*.*




Amigo, coloca el diagrama en formato de imagen para hacer más accesible a los compañeros del foro (y a mí)

Saludos


----------



## MrCarlos (Ago 31, 2014)

Hola tito 2

A reserva de lo que te recomiende Daniel Meza.

Hay algunas cosas por mejorar en tu diseño.

No es prudente dejar entradas de los IC’s sin conectar a algún nivel lógico. (1 o 0).
Las terminales: 3, 4, 5, 6, 7, 10, 2 y 1, del 74LS163, No están conectadas.

El diseño que presentas es una simulación, pero al armar el circuito en la realidad harán falta las resistencias limitadoras de corriente para cada LED que utilizas.

Tienes varias líneas(Alambres) sin conexión alguna.
Para Qué Serán ?

Le asignaste la misma tecla (La A) al potenciómetro y al interruptor.

No hagas caso omiso de lo que te recomienda el Moredador en casi todos tus mensajes:
*Última edición por D@rkbytes; Hace 2 Horas a las 19:41; Razón: Escribe de manera correcta.*
Podrían suspenderte de estos foros.


----------



## Daniel Meza (Sep 1, 2014)

Pues el compañero MrCarlos ya dijo las principales posibles causas del problema, sólo podría añadir que no es recomendable manejar leds directamente de esa manera con integrados TTL para suplir corriente, es preferible que drenen corriente, es decir que los leds se conecten con sus cátodos hacia las salidas del contador para que prendan con 0's.

Saludos


----------



## tito 2 (Oct 3, 2014)

Hola amigos, he concluido con  la implementación del contador cd4040 en cascada para contar hasta 32k pero este conteo le tengo que mostrar en 5 display que es la cantidad de dígitos que se requiere para poder visualizar el total de direcciones , bueno decidí usar dicho contador siguiendo las sugerencias planteadas ya que solo se esta usando dos contadores, ahora estoy tratando de ver la forma como decodificar dichas salidas de los contadores a decodificadores 7447 debido a esto surgen las preguntas:
¿Se puede usar el decodificador 7447 sabiendo que el contador cd4040 no es ttl ?
¿Cómo puedo implementar los decodificadores si las salidas del contador en cascada tiene 15 bits de salida ya que uno de ellos tiene 12 salidas y el otro 3 ?

Se les agradece de antemano por alguna sugerencia.



Después de pensar un poco veo que puedo usar 4 decodificadores 7447 , para esto tendría que usar cada cuatro salidas del contador ya que el 7447 permite 4 entradas de datos, así mismo usaría los 4 decodificadores en cascada ¿ esta bien lo que estoy pensando?
De antemano gracias por la ayuda.


----------



## Daniel Meza (Oct 3, 2014)

Pero recuerda que el 7447 sólo te decodificará los datos dentro del rango 0-9, necesitas un decodificador hexadecimal para lograr mostrar las letras en los displays.

Recuerdo que hay en la familia CD40XX un decodificador como este que te menciono, deja investigo

Saludos


----------



## tito 2 (Oct 3, 2014)

gracias por la sugerencia Daniel, la idea es que me muestre en los 5 display los numeros del conteo, es decir  el numero 1,2,3,4,5.........hasta que llegue a 32,768, como este numero es de 5 digito entonces necesito un display para las unidades,decenas,centenas,unidad de millar y decena de millar.¿Existe algun decodificador para 15 bit ?.


----------



## Daniel Meza (Oct 3, 2014)

mm tendrás que hacer una etapa extra de decodificación de hexadecimal a decimal entonces. 
Mi sugerencia es que sea sólo hexadecimal, es decir, de 0x0000-0xFFFF y que se muestren los datos en 4 displays. Sigo buscando el circuito decodificador que te comenté pero no lo hallo


----------



## MrCarlos (Oct 3, 2014)

Hola tito 2

Hay que tener en consideración algunos detalles.
Las direcciones de la memoria están en binario natural, esto es
256, 128, 64, 33, 16, 8, 4, 2, 1. cada BIT de la dirección tiene ese valor.
Probablemente esto ya lo sabes.

Entonces para cambiarlo a BCD tendrías que diseñar un decodificador de Binario natural de 9 BIT’s a BCD 3 Dígitos. 
En este caso. 

En tu caso dices que requieres 5 Dígitos. Para mostrar (32,768) todas las direcciones de la memoria EN DECIMAL.
Lo que te puedo recomendar es utilizar memorias tipo EEPROM para lograr este decodificador.
Creo que es lo más simple para lograr tu cometido.

Por acá puedes encontrar el procedimiento para diseñar el decodificador.
https://www.forosdeelectronica.com/f25/hacer-decodificador-2074/
https://www.forosdeelectronica.com/f25/convertir-valores-binarios-bcd-3757/

saludos
a sus ordenes


----------



## tito 2 (Oct 12, 2014)

Hola amigos, aun sigo tratando de implementar un circuito que muestre el conteo de 0 a 32768 
y lo muestre en cinco display, lo que se trata es que las salidas de los contadores cd4040 en cascada de 16 bits (de 0 al 15 en decimal) se muestre en los displays, pensé en usar el clock de los contadores pero la idea no es esa, si no directamente usar las salidas del contador y no entiendo bien la idea de  usar el sistema hexadecimal a bcd ya que tendría una entrada de 16 bits y una salida de 4 bits en bcd la cual solo mostraría solo en un  display o de repente me estoy equivocando, ahora si se usaría eeprom ¿como se haría el circuito?.
También estuve leyendo que se puede usar sumadores pero no entiendo bien la idea.

Gracias de antemano por la ayuda.


----------



## MrCarlos (Oct 13, 2014)

Hola tito 2

No encontraste algo que te sirviera por acá ??. . .
https://www.forosdeelectronica.com/f25/hacer-decodificador-2074/
https://www.forosdeelectronica.com/f25/convertir-valores-binarios-bcd-3757/
Como te recomendé en mi mensaje #21.

Por otra parte, necesariamente tienes que hacer tu diseño con el [/COLOR]CD4040 ??
Porque podrías hacerlo con 5 contadores de décadas como por ejemplo estos: 
4029
40160
40162
40192
Pero si tu contador debe contar en binario natural entonces el que dices (CD4040) te sirve.
Pero tienes que desarrollar un decodificador de binario natural de 18 BIT’s de entrada y para 5 Dígitos en decimal de salida.

En aquellos enlaces describen los métodos que hay para realizar este tipo de decodificador.
El que a Mi me parece más sencillo en el que utiliza Chips de memoria.
En éste método, al BUS de direcciones (A0, A1, A2. . . Ax) le llegan las salidas de los CD4040. en binario natural.
Y, en el BUS de datos (D0 hasta D7), que es el contenido de cada dirección, aparece los BIT’s correspondientes para el BCD.

Se requieren algunas cosas para desarrollar el decodificador por medio de ese método.
Hacer el archivo x.BIN.
Tener un programador para memorias que sea compatible con el Chip de memoria que vas a utilizar.

A excepción del circuito que se mira en el en el archivo -*diseño de contador 74ls163 ACTUAL.rar-* que adjuntaste en tu mensaje #13, tienes algunos avances que pudiéramos ver ??

saludos
a sus ordenes


----------



## TRILO-BYTE (Oct 13, 2014)

que tal tito se puede saber para que quieres grabar una RAM a otra RAM.

veo que es viable usar el clock para un contador "un vulgar contador" que corra paralelamente al conteo de los CD4040.

otra cosa yo hise un grabador de memorias S-RAM y descubri que el CD4040 no era muy estable en cascada asi que opte por ponerlos en cascada cada 8 bit en lugar de los 10 o 12 que trae no recuerdo muy bien.

una cosa cuando llegue despues de los 32k es decir al 32k +1 ese bit debe parar tu sistema pues el dato de la direccion A0 se borrara.

yo usaria un flip flop jk para ese propocito  aunque yo en su momento hise un copiador ROM a SRAM en la era de los dinosaurios pero vi detalles asi que sobreescribias un dato , que se perdian datos, etc.


----------

