TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Yodiew en 08 de Enero de 2007, 18:37:43

Título: Direccionar RAM externa de 4Mb.
Publicado por: Yodiew 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.
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: Nocturno 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?
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: Yodiew 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.
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: aitopes en 09 de Enero de 2007, 08:07:47
¿Usar latches no te penalizaria demasiado en la velocidad?
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: Marioguillote 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
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: Modulay 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
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: Yodiew 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)
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: Sispic 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
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: manuelroin24 en 11 de Enero de 2007, 16:23:39
vaya q si, muchas gracias SISPIC por tu contribucion. Aca nunca dejamos de aprender !!!!
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: Yodiew 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.

(http://img401.imageshack.us/img401/4335/ram1ram2ap8.jpg) (http://imageshack.us)
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: diegooe 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
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: reiniertl 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
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: diegooe 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.
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: reiniertl 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.
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: elreypic2 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
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: lexer en 09 de Marzo de 2007, 18:13:35
elreypic2 y  como haces para incorporar la memoria a tu circuito, viene en presentacion TDFN (compatible con SOIC), usas un convesor de SOIC a DIP?
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: aitopes en 09 de Marzo de 2007, 18:40:39
Hola Reinier!

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

Por eso estan buenos los aportes que hacen muchos foreros, como en tu caso con los RTOS, para compartir experiencias y explicar temas en castellano, para todos los que somos "duros" para los idiomas. :)

Saludos!

PD: Hand Shaking es algo asi como "apreton de manos", y se refiere a la...."actitud" de negociar la velocidad o forma de intercambiar datos entre dos dispositivos. O al menos es lo que recuerdo haber leido. RS-232, sin ir mas lejos, tiene lineas de "Hand Shaking " que permiten hacer este control de flujo (son las líneas RTS y CTS) aunque en general he visto por aqui que nunca se usan. Quizas debido a que usamos velocidades fijas de transmision (9600 bauds, por ejemplo) y no hay nada que "negociar" entre las partes.
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: elreypic2 en 09 de Marzo de 2007, 20:20:31
Que tal lexer:

Efectivamente lo que hago es utilizar unconvertidor de SOIC a DIP par hacer pruebas sobre protoboards, pero si la voy a usar en un circuito final la coloco en su forma natural.

Yo tengo algo de experiencia usando estas FRAM, de hecho no es que tengan un endurance ilimitado, la realidad es que es tan grande ese numero, algo asi como 10^18. Este tipo de memoria internamente son memoria dinamicas pero ya tienen la circuiteria para hacer el refresh automatico, pero eso no nos interesa. Lo interesante es que como se comportan como una memoria RAM el tiempo de escritura es practicamente 0 por lo que se pueden accesar muy rapidamente.

Saludos y espero esta info sea de utilidad.

Elreypic.
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: lexer en 11 de Marzo de 2007, 22:11:59
Me interera el tema de la memoria. FRAM ya que estoy trabajando para hacer un buffer para almacenar datos (llamadas) provenientes desde una PBX, estos datos son caracteres ASCII (Cada llamada son alrededor de 68 caracteres), Estaba pensando en usar una memoria paralela, pero puedo usar la FRAM que recomienda elreypic2, Alguien a tenido algun proyecto como este (buffer), en general el proyecto es esto: la informacion llega de la PBX de por un puerto serie, y la pienso descargar del buffer de ya sea via puerto serie o por TCP/IP.
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: Enigma en 07 de Diciembre de 2007, 22:03:58
Hola que tal... Estaba buscando información acerca de las memorias FRAM, y creo que este es el post más indicado... he visitado el Datasheet de la FM25L256, y dice que posee ciclos de escritura y lectura ilimitados.... No se que tan veridica sea está información, el hecho es que necesito guardar muestras que se toman cada milisegundo de tiempo y guardarlas.... Y bueno imaginense para una semana cuantas escrituras no habrá tenido? Necesito saber si alguien a trabajado con este tipo de memorias y si son efectivas... Lo pregunto porque no seria rentable el estar cambiando esa memoria cada tiempo....

Atte: Enigma... La llanerita de Guayana :D
Título: Re: Direccionar RAM externa de 4Mb.
Publicado por: Enigma en 07 de Diciembre de 2007, 22:06:38
Otra cosa... esta RAM es no Volátil???? De cuanto es está RAM???? de 2Mb???? :(

Atte: Enigma... La llanerita de Guayana :lol: