4 votos

Limitación de SRAM de AVR

Soy solo un entusiasta en busca de consejo.

Me gustaría usar un microcontrolador para leer fotogramas de una cámara y escribir esos fotogramas en una pequeña pantalla LCD. La cámara y la pantalla están en el mismo bus SPI. He estado prototipando con un Arduino pero me gustaría pasar eventualmente a un AVR.

El problema es que un fotograma de imagen tiene 9600 bytes y la SRAM de Arduino es de 2.5KB. No puedo almacenar en búfer un fotograma completo. Intenté leer de la cámara y escribir en la pantalla unas cuantas líneas a la vez, pero debido a que están en el mismo bus SPI, necesito desactivar la cámara, activar la pantalla y luego volver a activar la cámara. Si desactivas la cámara a mitad de un fotograma, pierdes la sincronización.

Necesito encontrar una forma de pasar 9600 bytes de la cámara a la pantalla sin desactivar la cámara. Parece que tengo 2 opciones: Aumentar la SRAM para almacenar en búfer un fotograma o separar los buses SPI.

Aumentar la SRAM:

  • Cambiar a AVRs - El único ATmega con suficiente SRAM es el ATmega1284 y tiene 44 pines.
  • ¿SRAM externa? Nunca he trabajado con eso.

Separar los buses SPI:

  • Mover la pantalla del hardware SPI a pines regulares y escribir en software SPI. (Dudo que esto sea lo suficientemente rápido.
  • Parece que hay varios ATtinys y ATmegas con 2 o más buses SPI. Algunos con tan solo 20 pines. Esto aún retrasaría la lectura de fotogramas individuales, pero con suerte no demasiado.

¿Algo... más?

  • ¿FPGA? Nunca he trabajado con ellos...
  • ¿Algún otro tipo de microcontrolador?

¡Gracias!

1 votos

El software SPI podría ser lo suficientemente rápido. SPI es un protocolo muy simple, por lo que no debería llevar mucho tiempo probarlo y descubrirlo.

0 votos

Un Cortex-M0 en un paquete DIP8 con 3x USART + 2x SPI: nxp.com/documents/data_sheet/LPC81XM.pdf

0 votos

La página 3 muestra un paquete DIP con solo 1 SPI. 3x USART + 2x SPI son solo para los paquetes TSSOP y XSON.

6voto

Kimball Robinson Puntos 161

Prueba una placa STM32F4Discovery; US$15-25. El MCU es un STM32F407VG: ARM Cortex-M4 de 168MHz, 1MB de flash, 192kB de RAM, 3 puertos SPI y DMA que permitiría, por ejemplo, transmitir desde un puerto SPI a otro con la mínima participación del procesador. La Discovery tiene un programador/debugger SWD incorporado por lo que no se requiere hardware adicional; prueba CooCox para un IDE gratuito e ilimitado.

0 votos

¿Los diseños de referencia están disponibles sí? ¿Las personas pueden hacer sus propias placas basadas en STM32F4 bastante fácilmente usando los diseños de referencia y esquemas?

0 votos

He hecho varios.

0 votos

¿son agradables y limpios? Utilicé la placa de desarrollo/referencia Atmel SAM3 Xplained como ejemplo para mi placa Cortex M3 y fue un desastre, tantas cosas inútiles y tontas adicionales para su placa y el código está igualmente hinchado

5voto

chrisbunney Puntos 228

Otra cosa (más o menos):

Varios de los dispositivos ATmega pueden reconfigurar sus USART(s) para actuar como un maestro SPI. Simplemente conecta uno de los dispositivos a uno de estos periféricos reconfigurados. Busca "USART en modo SPI" o "MSPIM" en la hoja de datos.

0 votos

Basado en este comentario, me topé con la página de búsqueda de productos de Atmel. Acababa de estar usando digikey. Parece que los ATMega328 tienen 2 puertos SPI, así que tal vez vaya con eso. Tengo un ATtiny85 y un ATMega88A a mano, así que veré si puedo configurar su UART como SPI antes de comprar un 328.

0 votos

El 88A es esencialmente idéntico al 328 excepto por la cantidad de flash y RAM. El segundo puerto SPI es la USART reconfigurada.

0 votos

También, ATtinyX5 solo tiene el USI único, así que no lo consideraría para esto.

4voto

user4245 Puntos 324

La mayoría de los RAM externos son SPI, lo que sufre del mismo problema de doble bus que ya tienes. Eso no quiere decir que sea imposible de usar.

Una manera inteligente sería conectar la salida de datos de la cámara a la entrada de datos de un chip SRAM SPI y utilizar el chip SRAM para capturar directamente los datos del fotograma. Luego podrías acceder a la parte del último fotograma recibido a tu gusto. Sin embargo, se requeriría cierta cantidad de circuitos externos ingeniosos para compartir la entrada de datos entre la cámara y tu MCU, ya que no podrán estar conectados ambos al mismo tiempo, y es posible que también necesites recibir directamente de la cámara para configurarla y verificar sus estados, etc. (dependiendo de la cámara, por supuesto).

Un método más simple sería simplemente utilizar un MCU más grande.

Las placas basadas en PIC32 serían una buena alternativa para las placas de Arduino en esta situación. Algo como un chipKIT uC32 te daría 32KB de RAM y múltiples puertos SPI, para poder almacenar un fotograma completo y usar puertos SPI separados. Además, es de 32 bits y 80MHz, por lo que puedes procesar tus datos mucho más rápido.

También hay placas PIC32 que utilizan chips de 28 pines DIP (como el DP32 que usa un chip PIC32MX150) que son mejores para prototipos.

El IDE (MPIDE) y el lenguaje son casi idénticos a Arduino, así que no hay mucho nuevo que aprender.

0 votos

Gracias por esto. Presumí que la RAM externa estaría en SPI y, por lo tanto, sería un punto discutible; gracias por esa confirmación. Tu sugerencia de PIC32 parece que lograría la tarea, pero no en mi factor de forma objetivo. (¡Recientemente he sido seducido por el minimalismo de los ATTinys de 8-DIP!) Como dije en otro comentario, parece que el ATMega328 tiene 2 puertos SPI en un paquete DIP, así que probablemente lo intente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X