Autor Tema: Direccionar RAM externa de 4Mb.  (Leído 7390 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Yodiew

  • PIC10
  • *
  • Mensajes: 5
Direccionar RAM externa de 4Mb.
« en: 08 de Enero de 2007, 18:37:43 »
El micro que utilizo es el PIC16F877A, y necesito leer y escribir en esta ram de 512x8 bytes. ¿Como puedo armar un esquema con este Pic, teniendo en cuenta que necesito 19 lineas (A0-A18) de dirección y 8 de datos (D0-D7) más las de control, OE,WR, y CS.?
La ram es tratada como un "dispositivo de gran almacenamiento externo de datos", como di fuese un HD.
Muchas gracias y un saludo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Direccionar RAM externa de 4Mb.
« Respuesta #1 en: 08 de Enero de 2007, 18:43:28 »
Según tú mismo has expresado, necesitas 30 líneas, y ese PIC dispone de 40 pines; ¿cuál es la pega?

Desconectado Yodiew

  • PIC10
  • *
  • Mensajes: 5
Re: Direccionar RAM externa de 4Mb.
« Respuesta #2 en: 09 de Enero de 2007, 07:58:36 »
Primero gracias por contestar, Nocturno. El problema es que me quedo sin procesador para otras cosas... Yo había pensado en algún sistema de multiplezado, por lo menos para direcciones, no sé algo así... (Es que vengo de los intel 8085, 8051, etc)
¿Cómo lo podría hacer?. Necesito muchas lineas para otras cosas.  ¿Lachear las direcciones y utilizar solo el bus PPS?.
Un saludo.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Direccionar RAM externa de 4Mb.
« Respuesta #3 en: 09 de Enero de 2007, 08:07:47 »
¿Usar latches no te penalizaria demasiado en la velocidad?
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Direccionar RAM externa de 4Mb.
« Respuesta #4 en: 09 de Enero de 2007, 08:59:32 »
Hola !

Primero.
... necesito leer y escribir en esta ram de 512x8 bytes......

Deben ser Bits, no Bytes.

Estamos hablando de memoria RAM.
Es desiciva la velocidad, para necesitar usar una de acceso paralelo ?
Con un puñado de 24C512 y un sólo puerto de un PIC tendrías resuelto tu problema usando I2C.

Has pensado en esa posibilidad ?

Saludos
Mario

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Direccionar RAM externa de 4Mb.
« Respuesta #5 en: 09 de Enero de 2007, 09:03:16 »
Pues la verdad es que sí.
Aunque si necesita ahorrarse toda esa entrada salida,no le veo otra vía que sacar las direcciones codificadas vía serie,usando por ejemplo registros de desplazamiento en cascada para decodificarlas y entregarlas en paralelo a la memoria.El control y los datos mejor que los maneje directamente el micro.Puede que haya integrados específicos que te puedan solucionar esto y que cuenten con interfaces que te permitan alcanzar mayores velocidades.
Si el tiempo no supone un problema,la solución de los registros te vale y es fácil de implementar

Desconectado Yodiew

  • PIC10
  • *
  • Mensajes: 5
Re: Direccionar RAM externa de 4Mb.
« Respuesta #6 en: 10 de Enero de 2007, 09:13:47 »

La verdad es que todos tenéis razón. He pensado mucho en el I2C, pero aunque la velocidad no es muy decisiva, los datos como máximo entran a la velocidad del rs232, 9600. no me he decidido por la ram serie porque iba a ser muy lento, debo atender a otros requisitos tambien. Pero lo que no va en lagrimas, vá en suspiros. ¡No veas el placón que sale con latch!. Pero creo que es mas rápido que una ram serie. Pero bueno, no estoy aún decidido. De todas formas el problema no termina solo en el direccionamiento. El sistema tiene dos uP y dos ram, pongamos que el uP1 escribe en la RAM1 y el uP2 en la RAM2 (RD y WR, claro) y esto ocurre mientras la RAM1 se está "llenando", pero cuando esté llena los procesadores cambian de ram y ahora  el uP1 escribe en la RAM2 y el uP2 escribe en la RAM1 hasta que se llena, momento en el que todo vuelve a comenzar intercambiando la ram de nuevo, y así... De esto se deduce que tengo que conmutar direcciones (hc573),   datos (hc245) y control (hc244) podeis haceros una idea del PCB, ¡unos veinte CI!.
he estado buscando algún integrado que me hiciera estás funciones y lo más cerca es un contrlador de DMA, pero lo he desestimado por coste y porque realmente no hace las funciones que quiero (el DMA aparte de direccionar ram establece un protocolo de prioridades, etc.)
Bueno, muchas garacias a todos.
Saludos.


La ram es de 512K x8, es decir 4.096K bits. y los procesadores PIC16F877A.(20Mhz)

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
Re: Direccionar RAM externa de 4Mb.
« Respuesta #7 en: 11 de Enero de 2007, 04:03:48 »
Esto es un pepino y muy completo :

http://ww1.microchip.com/downloads/en/DeviceDoc/21952a.pdf

16-Bit I/O Expander with Serial Interface .
•High-speed SPI™ interface (MCP23S17)-10MHz (max.)

Si usas el pic18F con el spi por hardware va que vuela

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Direccionar RAM externa de 4Mb.
« Respuesta #8 en: 11 de Enero de 2007, 16:23:39 »
vaya q si, muchas gracias SISPIC por tu contribucion. Aca nunca dejamos de aprender !!!!
El conocimiento se consigue a base de esfuerzo...

Desconectado Yodiew

  • PIC10
  • *
  • Mensajes: 5
Re: Direccionar RAM externa de 4Mb.
« Respuesta #9 en: 13 de Enero de 2007, 10:19:52 »

Gracias Sispic. Me he decidido por el esquema que adjunto. Tengo la posibilidad de hacerlo en smd y no es muy costoso.
Creo que así puede funcionar.


Saludos.


Desconectado diegooe

  • PIC10
  • *
  • Mensajes: 2
Re: Direccionar RAM externa de 4Mb.
« Respuesta #10 en: 26 de Febrero de 2007, 18:06:54 »
Hola Disculpen que escriba tan tarde, pero es necesario utilizar tantas lineas para leer o escribir la memoria? No es suficiente con registros de desplazamiento que sean llenados por algun puerto del pic. Tardaria un poco pero seria mucho mas rapido que una memoria serie. Todo seria cuestion de "paralelizar" o "serializar".
Saludos

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Direccionar RAM externa de 4Mb.
« Respuesta #11 en: 26 de Febrero de 2007, 18:36:49 »
Una de las razones por la que han aparecido las interfaces de comunicación serie de alta velocidad como I2C y SPI es para eliminar el uso de memorias paralelas, ya que una memoria paralela tiene tantas patas como un PIC, se convierte en un problema serio el uso de este tipo de IC, para ello hay dos soluciones elegantes en estos momentos:

1. Metes todo el circuito digital del uC dentro de un FPGA y lo conectas a la memoria
2. Botas la memoria paralela y te consigues una serie con la que obtengas los mismo resultados.

Si como dice Yodiew, si la tasa de transferencia del sistema es de unos 9600bauds, aunque tenga que atender a otros requisitos eso no implica que tenga que renunciar a usar SPI o I2C, la razón es simple. Muchos PICs implementan estas interfaces por hardware, así que mientras una transferencia de escritura o lectura se efectúa te puedes dedicar a hacer otras cosas que cuando se termine la trasnferencia el Harware de la interfaz te interrumpirá.

Lo que pasa es que si utilizas esas interfaces atendidas por encuesta no te va alcanzar el tiempo ni para mirar al lado. Aquí casi todos trabajan con compiladores de C y la verdad es que la mayoría de las funciones que tienen esos dispositivos para trabajar con el hardware de comunicación los atiende por encuesta y como se cagan en las interrupciones son bastante poco eficientes.

Así que te sugiero que trates de poner una memoria serie e implementar tus propias funciones para el trabajo con ellas pero atendiendo a las interfaces POR INTERRUPCION, ya verás que te quitas de arriba el tremendo problema de una placa que ni de Tarjeta Madre de PC.

Un saludo
Reinier

Desconectado diegooe

  • PIC10
  • *
  • Mensajes: 2
Re: Direccionar RAM externa de 4Mb.
« Respuesta #12 en: 27 de Febrero de 2007, 16:08:10 »
Hola!!!!!! Reinerlt gracias por contestar y por compartir tus conocimientos. Te hago una pregunta que me carcome el cerebro. Que pasaria si debo guardar datos a una velocidad de 100 o 200 k bits per seconds en una memoria?. En el mercado solo existen memorias paralelas de esa velocidad. Bueno es lo que encontre hasta ahora y como soy bastante duro quizas existan memorias serie mas veloces y que yo no encontre.
Bueno no molesto mas y gracias a todos por enseñarnos a los mas duros.
Saludos.

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Direccionar RAM externa de 4Mb.
« Respuesta #13 en: 28 de Febrero de 2007, 11:14:25 »
Vamos allá.

Registrando mis data sheets y otras documentaciones encontré que I2C, en la revisión de 1998 puede transferir datos hasta una velocidad de 3.4Mbit, eso no quiere decir que puedes transmitir o recibir datos a esa velocidad sino que las transferencias se hacen a esa velocidad. Explico con más detalle:

La implementación del bus I2C implica transmitir una serie de señales de control utilizando las mismas líneas de trasnmisión y recepción de datos que en una memoria paralela se harían a través de sus pines de control, además tienes que transmitir la dirección, todo este mecanismo conocido como hand shaking (no estoy seguro si se escribe así), se le carga a la tasa de transferencia del bus por lo que tendrás una tasa de transferencia de datos efectiva menor de lo que la reportada por el BUS, los fabricantes no te pueden precisar de cuanto será la tasa efectiva porque eso depende de la aplicación que estés implementando (cuantos datos a Tx o Rx), de los modos de trabajo del bus, el reloj, etc. Así que tendrás que calcularlo tú, de todos modos haciendo unos cálculos simples puedo decirte que para una tasa de 3.4Mbit tenemos una tasa de transferencia en bytes de 415Kbytes/s y con un overhead de aproximadamente el 30% (estoy suponiendo uno bien grande) tendrías como 290Kbytes/s para comunicarte con un dispositivo I2C que soporte los 3.5Mbit/s de tasa de transferencia. Lo que te queda es comenzar a visitar las páginas de los distintos fabricantes para ver si ofertan memorias como las que necesitas para hacer tu trabajo.

Por otro lado los PIC suelen venir equipados con el Hw para hacer comunicación I2C o SPI (que tiene tasas de transferencia mayores que I2C) pero como tu aplicación tiene tasas de transferencia especiales y además necesitas aprovechar todo el tiempo del uC para hacer cosas útiles lo más probable es que tengas que hacerte tus propias funciones para atender este Hw por interrupción. Lo otro que tienes que valorar es si tu uC será capaz de hacer el resto de las cosas además de atender el almacenamiento de datos en la memoria externa.

Respecto a los fabricantes puedes comenzar por Philips, Motorola, Microchip, STMicroelectronics, National Semicondutors, entre otros. Seguro que todos fabrican memorias RAM I2C o SPI.

Si tienes que utilizar memorias Flash, entonces las cosas cambian porque aquí la escritura es lenta y no te puedo asegurar que aún con las velocidades de estos buses se asegure la escritura a esas velocidades, pero con memoria RAM no debe haber problemas de ninguna clase.

Además tendrás que estudiar bien a fondo estos buses por lo que no podrás escaparte facilmente del Inglés.

Un saludo y buena suerte.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Direccionar RAM externa de 4Mb.
« Respuesta #14 en: 28 de Febrero de 2007, 12:43:52 »
Que tal amigos foreros:

Si creo entender el problema aqui es el tiempo de escritura cuando se transfieren datos a lata velocidad. Creo que la solucion a esto seria usar una memoria FRAM, la cual su tiempo de escritura es muy pequenio y es por eso que el bus SPI del cual cuentan puede ser muy rapido como 20 MHz. Con este tipo de memoria se puede realizar una escritura en modo burst practicamente de toda ella si ningun delay entre cada byte a grabar.

Pueden revisar el web page: www.ramtron.com

Ver el datasheet de la memoria FM25L512

Saludos