Arduino Mega 2560 como placa pero con más ram

Estoy haciendo un globo LED POV RGB que reproduce animaciones en su superficie. Actualmente estoy usando un Arduino Mega 2560 con 256k de memoria flash. Mi programa y el gestor de arranque ocupan 20k de memoria, dejándome con 236k.

Hay 64 LED RGB que usan 8 bits de brillo que cambian de color 64 veces por revolución. $\left( 64 \cdot 64 \cdot 3 \cdot 8 \right) \div 1024 = 12\mbox{ kB}$ == 12288 BYTES

Cada cuadro de animación ocupa 12288 BYTES (12k) de memoria. Eso solo me deja con 19 fotogramas de animación. Bueno, pero no excelente, a 10 cuadros por segundo, eso es solo 2 segundos de animaciones. Esperaba ~64 fotogramas de animación o 768k de RAM. (768+20=788k totales)

He probado algunos métodos de carga "sobre la marcha" y vapor (SD, inalámbrico), pero no pueden mantenerse al día con los datos requeridos mientras transmiten los datos a los LED. A continuación, intentaré usar un método de compresión simple, pero no tengo muchas esperanzas de que el sistema pueda descomprimir los datos mientras transmite la información de color a los LED.

Actualmente he probado 10 fotogramas de animación con el Arduino Mega 2560 y funciona. Algo así, todavía hay algunos errores. Pero realmente no quiero apagar una placa Arduino si puedo evitarlo.

Mis preguntas son:

  1. ¿Hay placas Arduino preconstruidas con más ram?
  2. ¿Puedo agregar RAM a una placa Arduino existente?
  3. Sugiera una placa de desarrollo diferente que sea MUY similar a Arduino con un compilador de C++.

Gracias por tu tiempo.

Editar: estoy usando la palabra clave "PROGMEM" para almacenar mis animaciones en la memoria Flash, no en la SRAM. http://www.arduino.cc/playground/Learning/Memoria

(64 * 64 * 3 ) / 1024 != 12288. Además, tenemos un excelente soporte de LaTeX a través de MathJax , por lo que podría ser $\left( 64 \cdot 64 \cdot 3 \right) \div 1024 = 12\mbox{ kB}$ (clic derecho para ver la fuente)
Según mis cálculos, sus requisitos de datos son solo alrededor de 40 kB/segundo, lo que debería ser bastante fácil con la carga sobre la marcha, las tarjetas SD o (algunas) opciones de redes inalámbricas, así como la memoria Flash en serie (creo que desea Flash, no RAM, para esto). ¿Podría explicar cómo se aseguró de que no pueden seguir el ritmo?
12 kB por cuadro y 10 cuadros por segundo para un total de 120 kB por segundo. \left( 12 \cdot 10 \right) = 120\mbox{ kB} Pero tienes razón en que no tiene sentido. La tarjeta SD debería poder mantenerse a ese ritmo. Editaré la pregunta con mi experiencia con la tarjeta SD.
@Steven: rodee las matemáticas con $signos para invocar el formato LaTeX. Sin embargo, me falta el punto en el que necesita multiplicar por tres. ¿Tiene 8 bits para cada color de los LED RGB?
@reemrevnivek: sí, 8 bits de brillo por color en los LED RGB. Lo siento, debería haber sido más claro. En otras palabras, se necesitan 3 BYTES o 24 bits para cada LED RGB.
En caso de que todavía lea esto: el chipKIT Max32 recientemente anunciado tiene 512kB Flash

Respuestas (5)

Intente usar un chip SRAM I2C.

Tal vez un N256S0830HDA de 256 kbit a 3 V de AMI se ajuste a la factura: http://www.modtronix.com/products/components/ram/n256s0830hda.pdf

Ver http://arduino_related.livejournal.com/1414.html para un tutorial.

Eso es fantástico, gracias, creo que esto es exactamente lo que estoy buscando.

La compresión de datos puede ser una opción. Probablemente no NECESITE todas las iteraciones del conjunto de datos 255/255/255. Incluso quedarse con 256 colores sería más que suficiente para lo que está tratando de hacer.

Luego, cada LED solo necesita 1 byte de información para almacenar su configuración de brillo, lo que aumenta la cantidad de fotogramas disponibles a 57, lo que estaría bastante cerca de los 64 que estaba buscando.

Si quedan suficientes pines de E/S, puede intentar conectar el chip SRAM y controlarlo manualmente. Puede intentar usar pestillos adicionales para almacenar la dirección, para reutilizar el mismo conjunto de pines para los buses de datos y direcciones (por ejemplo, los sistemas basados ​​en MCS-51 solían usar 74HCT373 para bloquear la parte inferior del bus de direcciones, consulte aquí ) . Este enfoque debería permitir transferencias de datos más rápidas en comparación con los chips SRAM I2C.

Tenga en cuenta que la memoria del tamaño que necesita probablemente vendrá en un paquete TSOP o similar.

El requisito parece ser en realidad para flash en lugar de RAM, y hay muchos de ellos en paquetes SOIC de 8 pines que serán fáciles de soldar: solo suelde un pin de esquina y verifique la alineación antes de soldar cualquier otro. Y después de hacer algunos de esos, TSOP no será intimidante.

Realmente no puedes expandir la RAM direccionable; el chip tiene todo lo que tiene adentro y no presenta un bus de memoria afuera. Puede agregar un escudo SD como este y usarlo como un disco de estado sólido, como lo está haciendo ahora con el flash integrado.

Algunas personas usan varios Arduinos (u otro procesador), cada uno de los cuales ejecuta una pequeña sección de una pantalla LED.

Por ejemplo, tal vez podría usar 8 Arduinos, cada uno responsable de 8 LED RGB de su total de 64 LED RGB. (Aunque funcionarían más Arduino Megas, esto también abre la opción de usar Arduinos más pequeños, livianos y de menor costo, como el Arduino Pro Mini, que tiene muchos menos pines que el Arduino Mega).

Esto le permite ampliar su pantalla a cualquier cantidad de LED, mucho más de lo que Arduino podría manejar.

Esto todavía no es rentable. El almacenamiento en chip del microcontrolador es muchísimo más caro que los chips de memoria externos fabricados con un proceso de fabricación optimizado para el almacenamiento. Entonces, si bien hay un punto en el que tiene sentido agregar procesadores adicionales (o en el que tiene sentido tener un producto universal fabricado a escala que a veces puede usar más de uno), tiene sentido cargar cada placa con almacenamiento adicional antes agregas más tableros.
@ChrisStratton: Estoy de acuerdo en que "de hecho, hay un punto en el que tiene sentido agregar procesadores adicionales". Siéntase libre de editar esta respuesta si hay una mejor manera de expresar esa declaración.