70 paso: Ejecutar el cubo en un Arduino
Desde que publicamos nuestro último cubo LED instructable, hemos conseguido un montón de preguntas de gente preguntando si podrían usar un Arduino para controlar el cubo.
Esta vez, estamos un paso por delante de usted en el frente "¿puedo usar un arduino?" :D
Los requisitos de IO para un 8 x 8 x 8 LED cube es:
- Seleccione la capa: 8
- Ómnibus de datos para cierres: 8
- Dirección de bus para cierres: 3
- Salida activar (OE) para cierres: 1
Total: 21
Arduino dispone de 13 pines GPIO y 8 entradas analógicas, que también pueden ser utilizados como GPIO. Esto le da un total de 21 líneas de IO, exactamente la cantidad de IO necesario para que funcione el cubo del LED!
Pero, ¿por qué escribir sobre ello cuando simplemente podríamos mostrarle?
Había enganchado el cubo hasta un Arduino y había portado algo del software.
Desde la Junta AVR y matriz multiplexor están separados por un cable de cinta, conectar las líneas de IO a un Arduino es una simple cuestión de conectar algunos cables de protoboard. Por suerte, soldar en una mujer 0,1" jefe del pin de las líneas de transistor cuando fuimos depurando el primer conjunto de transistores. Sólo Retire el ATmega y conecte los cables de la Arduino a estas cabeceras de pin.
Conectamos el cubo así: bus de datos: pines digitales 0-7. Esto corresponde a PORTD en el ATmega328 en la placa de Arduino, para que podamos usar acceso directo del puerto en lugar de Arduinos digitalWrite (lo cual es lenta). Bus de dirección: pins de Digital 8-10. Esto corresponde al bit PORTB 0-2. En esto tenemos que utilizar el acceso directo del puerto. Arduinos digitalWrite funcionaría con esto, porque no se pueden establecer varios pernos al mismo tiempo. Si no se configuran los pines de dirección en el momento exacto de la misma, la salida del 74HC138 desencadenaría los cierres mal. Salida activar: Pin Digital 11. Transistores de capa: pernos de analógica 0-5 y digitales pines 12 y 13.
Teníamos que ir un poco fuera del alcance de la plataforma Arduino. La intención de Arduino es utilizar digitalWrite() IO puerto acceso, hacer portable el código y algunas otras razones. Teníamos esquivar y acceder directamente a los puertos. Además de eso, tuvimos que utilizar uno de los contadores de tiempo para la rutina de interrupción.
Los registros de la interrupción y contadores de tiempo son diferentes en diferentes modelos AVR, por lo que el código no puede ser portable entre diferentes versiones de la placa Arduino.
Se adjunta el código de nuestra rápida hack de Arduino.