Limitación de SRAM AVR

4

Solo soy un entusiasta que busca un 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 haciendo prototipos con un Arduino, pero me gustaría pasar a un AVR eventualmente.

El problema es que un marco de imagen es de 9600 bytes y la SRAM de Arduino es de 2.5 KB. No puedo amortiguar un cuadro entero. Intenté leer desde la cámara y escribir en la pantalla unas pocas líneas a la vez, pero como están en el mismo bus SPI, necesito anular la aserción de la cámara, reafirmar la pantalla y luego reafirmarla. Si anulas la cámara a mitad de cuadro, pierdes la sincronización.

Necesito encontrar una manera de obtener 9600 bytes de la cámara a la pantalla sin desestimar la cámara. Parece que tengo 2 opciones: aumentar SRAM para almacenar un cuadro o separar los buses SPI.

Aumente SRAM:

  • Cambiar AVRs: el único ATmega con suficiente SRAM es ATmega1284 y tiene 44 pines.
  • SRAM externa? Nunca trabajé con él.

Buses SPI separados:

  • Mueva la pantalla del hardware SPI a los pines normales y escriba el 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 tan pequeños como 20 pines. Esto seguiría retrasando la lectura de cuadros simples, pero esperemos que no demasiado.

¿Algo ... más?

  • FPGA? Nunca trabajé con ellos ...
  • ¿Algún otro tipo de microcontrolador?

¡Gracias!

    
pregunta Adam Griffin

3 respuestas

5

Algo más (tipo de):

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

    
respondido por el Ignacio Vazquez-Abrams
6

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

    
respondido por el markt
4

La mayoría de la RAM externa es SPI, que sufre el mismo problema de bus dual que ya tiene. Eso no quiere decir que sea imposible de usar.

Una forma inteligente sería conectar la salida de datos de la cámara a la entrada de datos de un chip SPI SRAM y usar el chip SRAM para capturar directamente los datos del marco. A continuación, puede acceder a cualquier parte del último fotograma recibido en su tiempo libre. Sin embargo, se necesitaría una cierta cantidad de circuitos externos astutos para compartir la entrada de datos entre la cámara y su MCU, ya que no podrán conectarse los dos a la vez, y es posible que también necesite recibir directamente de la cámara para configúrelo y verifique los estados, etc. (dependiendo de la cámara, por supuesto).

Un método más simple sería usar una MCU más grande.

Los tableros basados en PIC32 serían una buena alternativa para los tableros Arduino en esta situación. Algo como un chipKIT uC32 le daría 32KB de RAM y múltiples puertos SPI, por lo que puede tanto almacenar un fotograma completo como como usar puertos SPI separados. También es de 32 bits y 80MHz, por lo que puede procesar sus datos mucho más rápido.

También hay placas PIC32 que usan chips DIP de 28 pines (como el DP32 que usa un chip PIC32MX150) que es mejor para la creación de prototipos.

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

    
respondido por el Majenko

Lea otras preguntas en las etiquetas