Durante los siguientes 6 capas, utilice el mismo proceso exacto, pero que pasan más tiempo alineando los LEDs esquina antes de soldar ellos. Mira el cubo de arriba, y asegúrese de que todos los testigos de esquina en una línea recta cuando se mira desde arriba.
Aclarar y repetir!
No teníamos ninguna herramienta de lujo a nuestra disposición para crear una posición de lujo o caja para el cubo de LED. En su lugar, hemos modificado la plantilla para trabajar como una base para el cubo.
Le animamos a hacer algo más fresco de lo que hizo por el cubo del LED!
Para la plantilla, sólo perforó un par de milímetros en la madera. Para transformar la plantilla en una base, que acaba de perforar todos los agujeros a través de la junta. Luego perforar 8 orificios más pequeños para los 8 cables del cátodo corriendo a las 8 capas cátodo.
Por supuesto, usted no quiere que su cubo de LED en una base de madera de colores. No teníamos ninguna pintura negro por ahí, pero sí encontramos un gigante rotulador negro! Tinción de la madera negro con un marcador mágico funcionó sorprendentemente bien! Creo que el que usamos tiene un punto de 10 mm.
Montar el cubo. Eso suena muy fácil, pero no lo es. Tienes que alinear las piernas 64 LED para deslizarse a través de 64 hoyos, al mismo tiempo. Es como enhebrar una aguja, los tiempos de 64.
Se han encontrado más fácil que empezar con uno de los extremos, luego, gradualmente, apareciendo las piernas en su lugar. Utilice un lápiz o algo para meter en las patas del LED que pierda sus agujeros.
Una vez que los 64 LED están metiendo las patas en la base, con cuidado a su vez que en su lado. Luego doblar los 64 piernas 90 grados. Esto es suficiente para mantener el cubo montado firmemente a la base. No hay necesidad de pegamento o cualquier otra cosa
Ahora tiene un cubo de LED con 64 conexiones del ánodo en la parte inferior de la base. Pero es necesario conectar las capas de tierra también.
Recuerde que los ocho pequeños agujeros que ha perforado en un paso anterior? Vamos a usarlos ahora.
Hacer un poco de alambre recto usando el método explicado en un paso anterior.
Comenzamos con motivo de la capa 0. Tome un pedazo corto de alambre recto, hacer una curva de aproximadamente 10 mm desde el extremo. Meter por el agujero de capa de base 0. Deja 10mm metiendo a través de la parte inferior de la base. Posición de modo que la curva que hace se basa en el alambre trasero de la capa de base 0. Ahora bien, la soldadura en su lugar.
Capa 1 al 7 son un poco más complicado. Se utilizó una mano para sujetar el cable en su lugar durante la soldadura.
Tome un pedazo de alambre recto y la curva de 90 grados de 10 mm desde el extremo. Luego se corta a la longitud de manera que 10 mm de alambre se asoman a través de la parte inferior de la base.
Meter el cable por el agujero y dejar que el resto de alambre en el cable de nuevo de la capa que se está conectando. Sujete la mano sobre el alambre, entonces la soldadura en su lugar.
Aclarar y repetir siete veces más.
Con cuidado, gire el cubo en su lado y doblar los 8 cables de tierra de 90 grados.
64+8 cables que van desde el controlador al cubo de LED. Se utilizó cable de cinta para hacer las cosas un poco más fácil.
Las capas de tierra utiliza un cable de 8 hilos de la cinta.
Los cátodos están conectados con 4 de 16 cables de alambre de la cinta. Cada uno de estos cables planos se dividen en dos en cada extremo, para obtener dos cables de 8 hilos.
En el lado del controlador, que adjunta 0.1 "conectores de cabecera mujeres. Estos se conectan a estándar 0.1" pasadores sola fila de encabezado de PCB.
El conector de cabecera es un conector modular que se presenta en dos partes, las inserciones de metal y un cuerpo de plástico.
Los insertos de metal se supone que se doble, en una herramienta. No hemos tenido la herramienta adecuada a mano, así que utilizamos un alicate. También hemos añadido una pequeña capa de estaño para asegurarse de que los cables no se caen de con el uso.
1) Preparar un cable de 8 hilos de cinta y 4 16 hilos cables de cinta de la longitud deseada
2) crimpado o soldadura en los insertos metálicos.
3) Introducir el inserto de metal en la carcasa del conector de plástico.
4) Suelde el cable de 8 hilos de la cinta a las bandas del cátodo. Pre-lata antes de soldar los cables!
5) la soldadura en el resto de los cables. La franja roja en el primer alambre indica que este es el bit 0.
6) Apriete los tornillos de la liberación de tensión para asegurarse de que todo se queda en su lugar.
7) Conecte todos los cables de cinta para los PCB en el orden correcto. Vea las fotos de abajo. Nuestras 8 cable de alambre de la cinta no tenía un cable rojo. Simplemente introduce el conector 180 grados si el cubo está boca abajo.
Si todo va bien, tirar de la capa del cubo y empezar a soldar la siguiente.
Sacamos el mayor tipo de PCB que había disponibles (9x15cm) y comenzó a experimentar con diferentes diseños de tablero. Pronto quedó claro que abarrotar todos los componentes en una sola placa no era una buena solución. En su lugar, decidió separar el cierre matriz y la parte de alimentación del circuito y colocarlo en una tabla separada. Una cinta de transferencias por cable líneas de datos entre los dos tableros.
Elección de dos tableros independientes fue una buena decisión. El cierre matriz ocupaba casi todo el espacio del tablero de circuito. No habría sido mucho espacio para el controlador de micro y otras partes.
Puede que no tenga las juntas exactamente el mismo circuito que nosotros, o lo desea, puede organizar sus componentes de manera diferente. Trate de colocar todos los componentes en la placa de circuito para ver qué diseño mejor se adapte a su tarjeta de circuitos.
Nosotros usamos un cristal exterior de 14,7456 MHz para conducir el reloj del sistema ATmega.
Usted puede pensar que se trata de un número impar de usar, y por qué no se ejecutó el ATmega a 16MHz es clasificado.
Queremos ser capaces de controlar el cubo del LED de una computadora, usando RS232. Comunicación serie requiere la sincronización exacta. Si el tiempo está apagado, sólo un poco, algunos bits se van a perder o contabilizado por partida doble de tiempo en tiempo. No vamos a correr ningún algoritmos de corrección de errores en las comunicaciones de serie, por lo que cualquier error en la línea estaría representada en el cubo LED como un voxel es encendido o apagado en el lugar equivocado.
Para establecer la comunicación serie impecable, tiene que utilizar una frecuencia de reloj que puede ser dividido por la frecuencia de serie que desea utilizar.
14,7456 MHz es divisible por todos los populares velocidades de transmisión RS232.
(* 14.7456MHz 1000 * 1000) / 9600 = 1.536,0
(* 14.7456MHz 1000 * 1000) / 19.200 baudios = 768.0
(* 14.7456MHz 1000 * 1000) / 38.400 baudios = 384.0
(* 14.7456MHz 1000 * 1000) / 115 200 baudios = 128.0
La fórmula dentro de los paréntesis se convierte de MHz a Hz. En primer lugar * 1000 le da KHz, el próximo Hz.
Como se puede ver todas estas velocidades de transmisión RS232 puede ser limpiamente dividida por nuestra velocidad de reloj. Comunicación serie esté libre de errores!
Vemos que la gente hace un montón de cosas raras cuando la soldadura de PCB prototipo. Antes de continuar, sólo queremos compartir con ustedes el proceso que utilizamos para crear pistas sobre los PCB prototipo con los ojos de la soldadura. Una vez que domines esta técnica, es probable que empezar a usarlo mucho.
1) Llenar cada punto de la pista que quiere hacer con la soldadura.
2) Conecte todos los otros puntos por calentamiento y la adición de una pequeña capa de estaño.
3) Conectar las piezas largas de 2 agujeros que ahora tienen que abarca el tema deseado.
4) Mira qué hermoso es el resultado.
Se puede ver en el video de cómo lo hacemos. Tuvimos que tocar algunos de los puntos dos veces a unirse a ellos. Fue un poco difícil tener la cámara en el modo en que se suelda
El cubo está completo, ahora lo único que queda es un circuito monstruo para controlar el problema.
Vamos a empezar con la parte más fácil, la "fuente de alimentación".
La fuente de alimentación consta de un terminal de tornillo donde se conecta la tierra de los cables y VCC, algunos condensadores de filtrado, un switch y una de un LED para indicar la alimentación.
Inicialmente, se había diseñado un sistema de alimentación de a bordo con un paso por el regulador de voltaje LM7805. Sin embargo, esto resultó ser un gran fracaso.
Usamos esto con una verruga de la pared de 12V. Pero como usted ya sabe, la mayoría de las verrugas de la pared voltajes de salida superiores a las especificadas en la etiqueta. Nuestro outputted algo así como 14 voltios. El LM7805 no es un regulador de voltaje muy sofisticado, que sólo utiliza la resistencia a reducir el voltaje. Para obtener 5 voltios de salida de 14 voltios de entrada significa que el LM7805 tiene que bajar 9 voltios. El exceso de energía se dispersa en forma de calor. Incluso con el disipador de calor que se ve en la imagen, se hizo muy, muy caliente. Camino a la caliente al tacto! Además de eso, el rendimiento no era grande tampoco. No fue capaz de suministrar la corriente necesaria para ejecutar el cubo en el brillo completo.
El LM7805 se retiró más tarde, y un alambre se suelda entre los pines de entrada y salida. En su lugar, utiliza una fuente externa de alimentación de 5V, como se explica en un paso anterior.
¿Por qué tan muchos condensadores?
El cubo del LED se va a cambiar unos 500mA dentro y fuera de varios cientos de veces por segundo. En el momento en que se enciende la carga de 500 mA, el voltaje se va a caer a través de todo el circuito. Hay muchas cosas que contribuyen a esto. La resistencia en los cables de la fuente de alimentación, la lentitud en el suministro de energía para compensar el aumento de la carga, y probablemente algunas otras cosas que no sabía nada
Mediante la adición de condensadores, se crea un buffer entre el circuito y la fuente de alimentación. Cuando la carga 500mA está encendido, la corriente necesaria puede extraerse de los condensadores durante el tiempo que toma la fuente de alimentación para compensar el aumento de la carga.
condensadores grandes se pueden suministrar grandes corrientes durante períodos más largos de tiempo, mientras que los condensadores más pequeños pueden suministrar pequeñas ráfagas mas rápido de la energía.
Hemos colocado un condensador 1000uF justo después del interruptor principal. Esto funciona como nuestro buffer de alimentación principal. Después de eso, hay un condensador de 100uF. Es una práctica común tener un condensador grande en el pin de entrada de un LM7805 y un condensador más pequeño en él es perno de la salida. El condensador de 100uF probablemente no es necesario, pero creemos que los condensadores que su aspecto más fresco del circuito!
El LED está conectado a VCC sólo después de que el interruptor de alimentación principal, a través de una resistencia.
En este paso se suelda en los componentes principales de la matriz de multiplexor.
Nuestra consideración de diseño principal aquí era minimizar la soldadura y el cableado. Hemos optado por colocar los conectores tan cerca de la VA como sea posible. En la salida del lado, sólo hay dos puntos de soldadura por columna cubo LED. IC-resistencia, la resistencia del conector. Las salidas de los cierres están dispuestos en orden 0-7, por lo que este funciona de maravilla. Si no recuerdo, el seguro que está utilizando está disponible en dos versiones, una con las entradas y salidas en orden secuencial, y otra con el de entradas y salidas en orden aparentemente al azar. No se que uno! No te preocupes, que tiene un nombre diferente 74HC-xxx, por lo que será bueno si nos atenemos a nuestra lista de componentes.
En la primera foto, se puede ver que hemos puesto todas las tomas de IC, resistencias y conectores. Nos apretó tan fuerte como sea posible, para dejar espacio para cosas imprevistas en el futuro, como botones o LEDs de estado.
En la segunda foto, puedes ver las juntas de soldadura entre las resistencias y las tomas de IC y los conectores. Tenga en cuenta que el lado de la entrada del cierre zócalos IC no han sido soldadas sin embargo, en esta imagen.
Recuerde que el truco protoboard soldar le mostró en un paso anterior? Le dije que sería muy útil, y aquí es donde usted lo utiliza.
tableros grandes del circuito como éste, con una gran cantidad de cables, puede llegar a ser bastante confuso. Nosotros siempre tratamos de evitar el levantamiento de la GND y VCC líneas del tablero. Les líneas de soldadura como la soldadura continua. Esto hace que sea muy fácil de identificar lo que es GND / VCC y lo que las líneas de señales.
Si las líneas de VCC y GND debe cruzarse en el camino, sólo una ruta de ellos sobre el otro con un pedazo de alambre en la parte superior de la placa.
En la primera foto se pueden ver algunos restos de soldadura en su lugar.
Las dos trazas horizontales es el "autobús de la energía principal". El menor es VCC y el de arriba es GND. Por cada fila de una tierra de circuitos integrados y la línea se bifurca VCC del bus de alimentación principal. La línea GND se ejecuta bajo la VA, y la línea de VCC se ejecuta bajo las resistencias.
Fuimos un poco por la borda al hacer alambre recto para el cubo, y había algunos trozos sobrantes. Se utilizó para que la línea de VCC que se ejecuta en las resistencias.
En la esquina inferior derecha, se puede ver que hemos comenzado a soldar el bus de 8 bits una conexión de todos los circuitos del cierre. Mira lo fácil que es ver lo que es cables de señal y lo que es la distribución de energía!
En la segunda foto, se puede ver el panel a la derecha de arriba abajo, con algunos componentes adicionales soldado, simplemente los ignoran por el momento.
Por cada cierre IC (74HC574), hay una 100nF (0.1uF) condensador de cerámica. Se trata de condensadores de reducción de ruido. Cuando la corriente de los pines de salida se enciende y se apaga, esto puede causar la tensión a caer lo suficiente como para meterse con el funcionamiento interno de los circuitos integrados, por una fracción de segundo. Esto es poco probable, pero es mejor prevenir que curar. Depuración de un circuito con cuestiones relativas al ruido puede ser muy frustrante. Además, los condensadores que el aspecto del circuito que mucho más fresco y profesional! Los condensadores de 100nF asegurarse de que existe algún derecho actual disponible al lado del CI en caso de que haya una caída repentina de la tensión. Hemos leído en alguna parte que es práctica común de ingeniería para colocar un condensador de 100nF al lado de cada IC, "los uso como caramelos". Tenemos la tendencia a seguir ese principio.
Debajo de cada fila de resistencias, se puede ver un pequeño trozo de alambre. Esta es la línea VCC hacer un pequeño salto hacia el lado superior de la tarjeta para cruzar la línea de GND principal.
También hemos añadido un condensador en el extremo del bus de alimentación principal, por si acaso.
En la imagen, verás que hay una gran cantidad de cables han venido en su lugar.
Todos los cables azules pequeños forman el bus de 8 bits 1 que conecta todos los circuitos del cierre. 8 bits de datos, y el bit 1 es la salida permite la línea.
En la parte superior de la tabla, hemos añadido un conector de 16 pines. Esto conecta el cierre consejo a la junta microcontrolador. Junto a esto, ver el 74HC138.
Los cables azules diminutos cables Kynar. Esto es un 30 o 32 AWG (American Wire calibre) de alambre. Muy pequeña. Nos encanta trabajar con este tipo de cable. Debido a que es tan delgada, que no ocupa tanto espacio en el circuito. Si se hubiera utilizado alambre más grueso, no sería capaz de ver la tarjeta a través de todos los cables. Alambre de Kynar está recubierto con estaño, para que pueda soldar directamente después de despojarlo. No hay necesidad de pre-estañado. Los cables azules pequeños están conectados al mismo pin en cada cierre del IC.
Desde el conector en la parte superior, se puede ver ocho cables verde conectado con el autobús. Este es el bus de datos de 8 bits. Se utilizaron colores diferentes para funciones diferentes para visualizar mejor la forma en que el circuito está construido.
El cable naranja conectado con el autobús es la salida permite (OE) de la línea.
En el lado derecho del conector, el primer pin está conectado a tierra.
El 74HC138 es responsable de accionar la palanca del perno del reloj en el 74HC574 cierre VA. A esto lo llamamos un selector de la dirección, ya que selecciona el que uno de los 8 bytes en la matriz de cierre queremos escribir datos. Los tres cables azules que va desde el conector a la 74HC138 es la entrada de tres bits binarios utilizados para seleccionar cuál de las 8 salidas es puesta a tierra. De cada una de las salidas en el 74HC138, hay un cable (blanco) que se ejecutan con el conector de reloj en el 74HC574 correspondiente cierre del IC.
Para empezar, la tierra de soldadura y conexiones VCC. Si se utiliza la soldadura traza método para ejecutar GND / VCC líneas que quieres hacer esto antes de soldar los cables de otros en su lugar. Un condensador de 100nF cerámica filtrado se coloca cerca de los pines de VCC y GND del 74HC138.
A continuación, conecte las líneas de dirección y el 8 líneas de reloj.
Si se fijan bien en el conector, se puede ver dos pines que no se utilizan. Estos serán utilizados para un botón y pantalla LED más tarde.
Esta placa es el cerebro del cubo del LED. El componente principal es un Atmel AVR ATmega32.
Este es un microcontrolador de 8 bits con 32 KB de memoria del programa y 2 KB de RAM. El ATmega32 tiene 32 GPIO (General Purpose IO) alfileres. Dos de ellos se utilizará para la comunicación serie (TX + RX). Tres pines de E / S se utilizan para la ISP (programación serie en circuito). Esto nos deja con 27 GPIO para conducir el cubo del LED, botones y LEDs de estado.
Un grupo de 8 GPIO (8 bits, un byte) se llama un puerto. El ATmega32 tiene 4 puertos. PORTA, PORTB, PORTC y PORTD. En PORTC PORTD y algunos de los pines se utilizan para TX / RX y la ISP. En PORTA y PORTB, todos los pernos están disponibles. Utilizamos estos puertos para conducir el bus de datos del cierre array y la capa del transistor de selección.
PORTA está conectado al bus de datos en el cierre de la matriz.
Cada pin de PORTC está conectado a un par de transistores que impulsan una capa de tierra.
El selector de dirección en el cierre de matriz (74HC138) está conectado a poco 0-2 en PORTB. De habilitación de salida (OE) se conecta a PORTB bit 3.
En la primera imagen, se ve la placa AVR el lado derecho hacia arriba.
Los grandes de 40 pines PDIP (línea doble de plástico del paquete) de chips en el centro del tablero es el ATmega32, el Brainz! Justo a la izquierda de la ATmega, verá el oscilador de cristal y los dos condensadores. A ambos lados de la ATmega hay un condensador de 100nF filtrado. Uno de GND / VCC y otro para AVCC / GND.
En la esquina superior izquierda, hay dos conectores de pines y dos condensadores de filtrado. Una 10uF y uno 100nF. El LED es conectado a VCC a través de una resistencia, y indica que está encendido.
La gran 16 pines directamente sobre el ATmega se conecta a la placa matriz de cierre a través de un cable plano. El pinout en lo que corresponde a los pines en el otro tablero.
Cuanto más pequeño conector de 10 pines a la izquierda, es un estándar de programación AVR encabezado ISP. Tiene GND, VCC, RESET, SCK, MISO y MOSI, que se utilizan para la programación. Junto a ella, hay un puente. Cuando esto esté en su lugar, la junta puede ser alimentado por el programador.
Precaución: el poder no la placa del programador, cuando el cubo real LED está conectado al controlador. Esto podría sonar el programador e incluso el puerto USB el programador se conecta a!
La segunda imagen muestra la parte inferior. Una vez más todas las líneas de VCC y GND son soldados como huellas en el protoboard o cable desnudo. Tuvimos un poco más a la izquierda sobre el alambre de metal recta, así que utilizamos esto.
Los cables de color naranja conectar RESET de la ATmega, SCK MOSI, MISO y alfileres a la cabecera de programación ISP.
Los cables verde PORTA conectar al bus de datos.
Los cables de color azul son las líneas de dirección para seleccionar el 74HC138 y salida permite (OE) para el cierre de la matriz.
1) Comience colocando el zócalo de 40 pines del IC, los 10 pines del conector ISP con un puente junto a ella y los 16 pines del bus de datos.
2) la soldadura en el lugar del conector de alimentación, condensadores e indicador LED de encendido.
3) Conecte todas las líneas GND y VCC con huellas de soldadura o alambre. Colocar un condensador de 100nF entre cada par de GND / VCC alfileres en el ATmega.
4) la soldadura en el cristal y los dos condensadores de 22pF. Cada condensador está conectado con un alfiler en el cristal y GND.
5) Ejecutar todo el bus de datos, la dirección de los cables de selección y la OE, y los cables de ISP.
Transistores, botones y RS232 se añadirán en fases posteriores.
En este momento, el consejo regulador se puede conectar a un programador ISP y el ATmega debe ser reconocida.
El arsenal del transistor es responsable de encendido y apagado GND para cada capa en el cubo del LED.
Nuestro primer intento de esto fue una epopeya no. Compramos algunos transistores tasados a más de 500 mA, pensando que sería mucho jugo. No recuerdo el número de modelo.
El cubo del LED trabajado, pero no fue muy brillante, y el brillo fue inversamente proporcional al número de los LED encendido en cualquier capa dada. Además de eso, hubo algunos fantasmas. Capas no apagar completamente cuando se suponía que fuera.
Huelga decir que estábamos un poco decepcionada, y comenzó la depuración. Lo primero que hicimos fue agregar resistencias para tratar de combatir el efecto fantasma. Esto elimina casi todas las imágenes fantasma, yay! Pero el cubo era todavía muy débil, ¡bah!
No teníamos ninguna transistores MOSFET poderosos o por ahí, así que tuvimos que llegar a otra solución.
Hemos publicado un hilo en la sección de electrónica del foro AVRFreaks.net, preguntando si era posible utilizar dos transistores más pequeños en paralelo. Esta es la única opción disponible para nosotros a través de las piezas que tenía en la mano. La respuesta general fue, esto no funcionara, entonces ni siquiera se moleste en tratar. Incluso tenían teorías válidas y esas cosas, pero eso no nos disuadirá de tratar. Era nuestra única solución que no implicaba la espera de nuevas piezas para llegar en el correo.
Acabamos tratando PN2222A, NPN amplificador de fines generales. Idealmente, usted quiere un transistor de la conmutación de este tipo de aplicaciones, pero necesitábamos 16 transistores del mismo tipo. Este transistor fue clasificado en 1000 mA de corriente, por lo que decidimos darle una oportunidad.
Para cada capa, se utilizaron dos PN2222As en paralelo. Los colectores conectados a GND. Los emisores conectados entre sí, luego se conecta a una capa de tierra. La base de cada uno de los transistores se conectó a la propia resistencia, y los dos resistores conectados a un pin de salida en el ATmega.
Soldamos en todos los transistores y se volvió la cosa de nuevo, y funcionó perfectamente!
Si usted sabe lo que está haciendo, probablemente debería hacer una investigación y encontrar un transistor MOSFET o más adecuado. Sin embargo, nuestra solución es de probada eficacia, y también hace el truco!
1) Comience por colocar las 8 todos los transistores en el CPC y la soldadura de cada una de sus patas.
2) Ejecutar una soldadura de seguimiento entre los emisores de los 16 transistores. Conecte este soldadura seguimiento a GND.
3) la soldadura en una resistencia de cada transistor, la soldadura de las resistencias en parejas de dos.
4) Pase el cable kynar de los pines de salida en el ATmega a cada uno de los 8 pares de resistencia.
5) Soldadura juntos los colectores de los transistores en parejas de dos y ejecutar la soldadura de seguimiento o el alambre de los pares de colector para una cabecera de 8 pines.
Usted puede hacer un cubo LED sin ningún botón en absoluto, pero es bueno tener al menos un botón y algunos LEDs de estado para la depuración.
Hemos añadido un botón mirar impresionante con dos construida en LED, y un botón de regular con un LED.
El primer botón se monta en el cierre matriz PCB, ya que este se sienta en la parte superior de la placa AVR, y queremos que el botón de fácil acceso. Los cables se enrutan a través del cable de cinta. El segundo botón y el LED se sienta en el consejo regulador y se utiliza sobre todo para la depuración durante la construcción.
Los botones están conectados entre GND y el pin de E / S en el ATmega. Un interno de resistencia pull-up en el interior del ATmega se utiliza para tirar de la clavija de alta cuando el botón no está presionado. Cuando se pulsa el botón, el pin de E / S es puesta a tierra. Una lógica 0 indica que un botón se ha presionado.
Los LED también están conectados entre GND y el pin de E / S a través de una resistencia de tamaño adecuado. No conecte un LED a un microcontrolador pines de E / S sin tener una resistencia conectadas en serie. La resistencia está ahí para limitar la corriente, y de su omisión puede soplar el puerto de E / S en el microcontrolador.
Para encontrar la resistencia adecuada, sólo tiene que enchufar el led en un protoboard y probar diferentes resistencias con una fuente de alimentación de 5V. Elija las resistencias que hacen que la luz LED se ilumina con el brillo que desee. Si utiliza LEDs de diferentes colores, debe ponerlos a prueba al lado del otro. LEDs de diferentes colores por lo general requieren resistencias diferentes para alcanzar el mismo nivel de brillo.
Vamos a dejar a usted para decidir la ubicación de los LED de su situación, pero se puede ver en las fotos de abajo como lo hicimos:
Para obtener las animaciones realmente sorprendentes, hay que conectar el cubo de LED a un PC. El PC puede hacer cálculos de punto flotante que tiene el regulador de trabajo en cámara lenta.
El ATmega ha construido en un interfaz en serie llamado USART (Universal sincrónica y asincrónica de serie del receptor y transmisor).
El USART comunica con niveles TTL (0 / 5 voltios). El equipo habla serie RS232 utilizando. Los niveles de señal para RS232 están en cualquier lugar de + / - 5 voltios a + / - 15 voltios.
Para convertir las señales de serie del microcontrolador a algo que el puerto RS232 en un PC puede entender, y viceversa, se utiliza el Maxim MAX232 IC. En realidad, el chip que está utilizando no es de Maxim, pero es un clon compatible pin a pin.
Hay algunos condensadores de 100nF de cerámica que rodean el MAX232. El MAX232 usos interiores de carga las bombas y los condensadores externos para incrementar el voltaje a niveles apropiados de RS232. Uno de los condensadores de 100nF es un condensador de filtro.
El conector RS232 se encuentra en un ángulo de 90 grados para facilitar el acceso cuando el cierre bordo matriz se monta en la parte superior de la placa AVR. Se utilizó un conector de 4 pines y cortar una de las clavijas a hacer un conector polarizado. Esto elimina cualquier confusión en cuanto a qué forma de conectar el cable RS232.
En la segunda foto se pueden ver dos cables amarillos que va desde el ATmega al MAX232. Se trata del nivel TTL líneas TX y RX.
1) Conecte los pines GND y VCC uso de soldadura de seguimiento o de alambre. Coloque una cerca de 100nF condensador a los pines GND y VCC.
2) la soldadura en su lugar el resto de los condensadores de 100nF. Puedes soldar estos con restos de soldadura, así que es mejor hacer esto antes de conectar el tx / rx cables.
3) la soldadura en marcha un pin 4 0.1 "encabezado con un pin quitado. Conecte el pin junto al que fue trasladado a GND.
4) Conecte el tx / rx líneas de entrada al microcontrolador, y el tx / rx líneas de salida a la cabecera de 4 pines.
Los cables que van al cabezal de 4 pines se cruzan debido a que el primer cable de serie que había utilizado este pinout.
Para conectar el cubo de LED a un puerto serie del ordenador, es necesario hacer un cable serie con un conector hembra D-Sub 9.
Nuestro patrón desplegado 70 conmutadores Ethernet con la gestión del año pasado. Con cada interruptor viene un cable RS232 que nunca se utiliza. Literalmente, había un montón de cable RS232, por lo que decidió modificar uno de ellos.
En el cubo de LED, un 0.1 "pin header se utiliza, por lo que el cable RS232 necesita un nuevo conector en el lado del cubo.
No teníamos una hembra de 4 pines 0,1 "conector, así que utilizamos un cabezal de 4 pines hembra PCB en su lugar.
El conector en el cubo del LED PCB ha eliminado uno de los pines, para visualizar la direccionalidad de la conexión. Los números de pin va de derecha a izquierda.
Configuración de pines del conector RS-232:
1) GND (DSUB9 pin 5)
2) No está conectado
3) RX (DSUB9 pin 3)
4) TX (DSUB9 pin 2)
Siga estos pasos para hacer su propio cable RS232:
1) Corte del conector en un extremo del cable. Si el cable tiene una hembra y un conector macho, asegúrese de quitar el conector macho!
2) Pele la envoltura exterior en el lado donde se ha extraído el conector.
3) en la Franja de todos los cables.
4) Ajuste el multímetro al modo de prueba de continuidad. Esto hace que el sonido multímetro cuando las sondas están conectados. Si el multímetro no tiene esta opción, utilice el modo de resistencia. Debe estar cerca de 0 ohmios cuando conecte las sondas.
5) Conecte una punta de prueba del multímetro a la clavija de la DSUB9 de 5, a continuación, todos los cables de la sonda hasta que el multímetro emite un pitido. Se han identificado el color de GND en el cable. Repita el procedimiento para el pin 2 y 3 (TX y RX).
6) Anote los colores que identifican, a continuación, cortar los cables de otros.
7) Cortar los tres cables a su tamaño, 30 mm debe hacer.
8) Pre-estaño los cables para facilitar la soldadura. Basta con aplicar el calor y la soldadura de los cables pelados.
9) Introducir una contracción del tubo a través del cable. Deslice tres pequeños tubos de contracción en los conductores individuales.
10) Suelde los cables al conector.
11) Reducir el tamaño de los tubos más pequeños primero, y luego el grande. Si usa un encendedor, no tienen la contracción del tubo por encima de la llama, simplemente póngalo en el lado de la llama.
No haga que su cable basado en los colores que utiliza. Pruebe el cable para encontrar los colores correctos.
Las dos tablas están conectadas por dos cables:
Un cable plano de los datos y bus de direcciones.
Un cable de dos hilos de tierra y VCC.
Después de conectar estos dos cables, la placa se ha completado.
Conecte los cables de cinta de acuerdo a la configuración de pines se muestra en la figura 2 y 3.
La capa de tierra del cable de cinta conecta a la cabecera de pasador cerca de la matriz de transistores. Si el cubo está boca abajo, sólo tienes que conectarlo en el otro lado.
El ATmega32 tiene dos bytes fusible. Estos contienen valores que tienen que cargar antes de que la CPU puede comenzar, como fuente de reloj y otras cosas. Usted tiene que programar su ATmega utilizar un oscilador externo de cristal de alta velocidad y JTAG desactivar.
Hemos establecido el byte fusible inferior (lfuse) para 0b11101111, y el byte de fusibles de alta a 0b11001001. (0b significa que todo después de la b es en binario).
Se utilizó avrdude y USBtinyISP (http://www.ladyada.net/make/usbtinyisp/) para programar nuestra ATmega.
En todos los ejemplos siguientes, vamos a utilizar un equipo con Ubuntu Linux. Los comandos deben ser idénticos si ejecuta avrdude en Windows.
avrdude usbtiny-c-p m32-U lfuse w: 0b11101111: m
avrdude usbtiny-c-p m32-U hfuse w: 0b11001001: m
Advertencia: Si recibe este error, usted puede fácilmente su ATmega ladrillo! Si, por ejemplo, deshabilitar el botón de reinicio, no podrá volver a programarlo. Si selecciona la fuente de reloj mal, puede que no arranque en absoluto.
Es hora de probar si su marca LED nuevo cubo realmente funciona!
Hemos preparado un programa de prueba sencilla para comprobar si todo el trabajo de los LED y si están conectados correctamente.
Usted puede descargar el firmware test.hex en este paso, o descargar el código fuente y compilarlo usted mismo.
Al igual que en el paso anterior, usamos avrdude para la programación:
usbtiny avrdude-c-p m32-B-1 U flash: w: test.hex
-usbtiny c especifica que se está utilizando el USBtinyISP de Ladyada-p m32 especifica que el dispositivo es un ATMEGA32-B 1 dice avrdude a trabajar en una mayor velocidad por defecto. U-flash: w: test.hex especifica que estamos trabajando en la memoria flash, en modo de escritura, con la test.hex archivo.
El código de prueba que programó en el paso anterior le permitirá confirmar que todo está conectado correctamente.
Se comenzará por la elaboración de un plano a lo largo de un eje, para después pasar a lo largo de los 8 puestos de ese eje. (en avión nos referimos a una superficie plana, no un avión: p) El código de prueba recorrerá un plano a través de los tres ejes.
Después de eso, se encenderán los LEDs en una sola capa a uno, a partir de la capa inferior.
Si cualquiera de las capas o columnas parecen a la luz en el orden equivocado, es probable que haya soldado el cable equivocado a la capa equivocada o columna. Tuvimos un error en nuestro cubo
Si encuentra algo que está fuera de orden, sólo de-soldar los cables y soldar de nuevo en el orden correcto. Usted puede por supuesto hacer una solución de software, sino que comen los ciclos de la CPU cada vez que se ejecuta la rutina de interrupción.
Puede comparar el cubo a la prueba de video a continuación:
Así que todo lo verificado en la prueba. Es hora de programar el ATmega con el firmware de verdad!
En su mayor parte, el proceso es el mismo que en la etapa de programación anterior. Pero además hay que programar la memoria EEPROM. El cubo del LED tiene una fuente de mapa de bits de base almacenados en la EEPROM, junto con algunos otros datos.
El firmware es programado utilizando el mismo procedimiento que con el código de prueba.
Firmware:
usbtiny avrdude-c-p m32-B-1 U flash: w: main.hex
EEPROM:
usbtiny avrdude-c-p eeprom 1-U m32-B: w: main.eep
-U eeprom w: main.eep especifica que se está accediendo a la memoria EEPROM, en modo de escritura. Avr-gcc pone todos los datos en la EEPROM main.eep.
Si no quieres jugar con el código, el cubo del LED se termina en este punto. Pero le recomendamos que pasar algún tiempo en el lado del software de las cosas tan bien. Eso es al menos tan divertido como el hardware!
Si descarga los archivos binarios, usted tiene que cambiar los nombres de archivo en los comandos con el nombre de los archivos descargados. Si compilar el código fuente es el nombre main.hex y main.eep.
http://www.instructables.com/files/orig/FVZ/Y8K2/GICYB945/FVZY8K2GICYB945.tmp
El software está escrito en C y compilado con el compilador de código abierto avr-gcc. Esta es la razón principal por la que el uso Atmel AVR micro controladores. La serie de PIC de Microchip es también una buena opción, pero la mayoría de los compiladores de C cuestan dinero, y las versiones gratuitas tienen limitaciones en el tamaño del código.
La ruta del AVR se realiza sin problemas mucho más libre. Sólo apt-get install el compilador avr-gcc, y estás en el negocio.
El software del regulador consiste en dos componentes principales, la rutina del cubo de interrupción y el código de efecto para hacer animaciones de lujo.
Cuando finalmente terminó de soldar, pensamos que ésta sería la parte fácil. Pero resulta que hacer animaciones en blanco y negro a baja resolución es más difícil de lo que parece.
Si la pantalla había una mayor resolución y más colores, podríamos haber utilizado el pecado () y cos () y todas las funciones que para hacer los ojos dulces de lujo. Con dos colores (y fuera) y baja resolución, tenemos que usar un montón de si () y () para hacer algo significativo.
En los siguientes pasos, que le llevará en un recorrido por algunas de las animaciones que hicimos y cómo funcionan. Nuestro objetivo es brindar una descripción de cómo se puede hacer animaciones, y los inspire a crear su propio! Si lo haces, por favor enviar un vídeo en los comentarios!
Como se mencionó en el paso anterior, el programa consta de dos pares. La rutina de interrupción y el código vigente.
La comunicación entre estos dos pasa a través de una amplia voxel. Esta matriz tiene un poco de cada LED en el cubo del LED. Nos referiremos a esto como la matriz de cubo o tampón cubo a partir de ahora.
La matriz del cubo es de 8x8 bytes. Dado que cada byte son 8 bits, esto nos da un búfer que es de 8 voxels, el 8 de alto y 8 woxels voxels de profundidad (de 1 byte de profundidad).
volátiles cubo unsigned char
;
La rutina de interrupción se lee de la matriz del cubo durante períodos determinados y muestra la información en el cubo del LED.
Las funciones de efecto escribe los estados deseados LED a esta matriz.
Nosotros no utilizamos ninguna sincronización o búfer doble, ya que sólo hay un productor (o los efectos en ejecución, o la entrada de RS232) y un consumidor (la interrupción de código que actualiza el cubo). Esto significa que algunos voxels podría ser de la siguiente o anterior "marco", pero esto no es un problema, ya que la velocidad de fotogramas es tan alto.
Cuando se trabaja con micro controladores, el tamaño del código es fundamental. Para guardar el tamaño del código y el trabajo de programación, y para hacer que el código sea más fácil de leer, hemos tratado de escribir código reutilizable tantas veces como sea posible.
El código de cubo del LED tiene una base de funciones de bajo nivel de dibujo que se utilizan por el efecto de las funciones de nivel superior. Las funciones de dibujar se pueden encontrar en draw.c. Dibuja funciones incluyen todo, desde establecer o eliminar un voxel único para dibujar líneas y cuadros de alambre.
Lo primero que el ATmega hace después del arranque, es llamar a la ioinit () función.
Esta función establece los puertos de E / S, temporizadores, alarmas y comunicaciones de serie.
Todos los puertos de E / S en el ATmega son bidireccionales. Se pueden utilizar como una entrada o salida. Configuramos todo como salidas, excepto los pines de E / S, donde los dos botones están conectados. El pin RX de la línea serie se convierte automáticamente en una entrada cuando USART RX está habilitado.
1) DDRX establece la dirección de datos de los pines de E / S. (Registro de dirección de los datos). Un medio de salida, 0 medios de la entrada.
2) Después de direccionalidad se ha configurado, ponemos todas las salidas a 0 para cualquier ávido LED parpadeando, etc antes de la interrupción ha comenzado.
3) Para los pines configurados como entradas, el poco PORTx cambia su función. El establecimiento de un 1 en el bit de registro PORTx permite un interior resistor. El puerto se detuvo a VCC. Los botones están conectados entre el puerto y GND. Cuando se pulsa un botón correspondiente PINX lee un poco la lógica 0.
4) Temporizador 2 está configurado y activado un temporizador de interrupción. Esto se trata en una etapa distinta.
5) Las comunicaciones serie se ha configurado y habilitado. Esto también es cubierto en una etapa distinta.
Cuando empezamos a escribir y depurar los efectos, nos dimos cuenta de que las funciones utilizando números aleatorios que aparecen las animaciones misma cada vez. Se fue al azar bien, pero la misma secuencia aleatoria cada vez. Resulta que el generador de números aleatorios en el ATmega tiene que ser cabeza de serie con un número aleatorio para crear verdaderos números aleatorios.
Se escribió un bootwait pequeña función llamada (). Esta función sirve para dos propósitos.
1) Crear una semilla aleatoria. 2) Escucha al pulsar un botón para seleccionar el modo de operación.
Se hace lo siguiente:
1) Ajuste contraria x 0.
2) Iniciar un bucle infinito, mientras que (1).
3) Incremento de la lucha contra x por uno.
4) Utilice x como una semilla aleatoria.
5) Retardo por un tiempo y el estado establece el led rojo.
6) Controlar al pulsar un botón. Si el botón principal se pulsa, la función devuelve 1. Si el botón PGM se presiona returnes 2. Las declaraciones de retorno sale de la función terminando así el bucle infinito.
7) Retraso y establecer de nuevo el led verde.
8) Ver al pulsar un botón de nuevo.
9) Loop para siempre hasta que se pulsa un botón.
El bucle de bucles muy rápido, por lo que la probabilidad de que usted va a parar en el mismo valor de x dos veces seguidas es muy remota. Esta es una manera muy sencilla pero eficaz para obtener una buena semilla aleatoria.
Bootwait () se llama desde la función main () y su valor de retorno asigna a la variable i.
Si i == 1, el bucle principal se inicia un ciclo que muestra los efectos generados por el ATmega. Si i == 2, entra en el modo RS232 y espera a que los datos de un ordenador.
El corazón del código cubo LED es la rutina de interrupción.
Cada vez que esto se ejecuta la interrupción, se elimina el cubo, los datos de la nueva capa se carga en el cierre de matriz, y la nueva capa se enciende. Esto sigue siendo hasta que la próxima vez que se ejecuta la interrupción, en el cubo se borra otra vez, los datos de la capa siguiente se carga en el cierre de matriz, y la siguiente capa está encendido.
El ATmega32 tiene 3 temporizadores / contadores. Estos se pueden establecer para contar de manera continua y desencadenar una rutina de interrupción cada vez que alcanzan un número determinado. El contador se pone a cero cuando la rutina de interrupción se llama.
Utilizamos Timer2 con un prescaler de 128 y una salida Comparar valor de 10. Esto significa que el contador se incrementa en 1 por cada ciclo de CPU de 128. Cuando Timer2 alcanza el 10, que se pone a 0 y la rutina de interrupción se llama. Con una frecuencia de la CPU 14745600 Hz, 128 prescaler y salida de comparar, de 10, la rutina de interrupción se llama cada ciclo de la CPU 1408a (128 * 11), o 10.472,7 veces por segundo. Se muestra una capa a la vez, por lo que lleva 8 carreras de la interrupción para dibujar todo el cubo una vez. Esto nos da una tasa de refresco de 1309 FPS (10.472,7 / 8). En esta frecuencia de actualización, el cubo del LED es 100% libre de parpadeo. Algunos podrían decir que 1300 FPS es un exceso, pero la rutina de interrupción es bastante eficiente. A este ritmo de actualización alto, sólo utiliza alrededor del 21% del tiempo de CPU. Podemos medir lo anterior al conectar un osciloscopio a la salida permite la línea (OE). Este se tira de alta al comienzo de cada interrupción y baja al final, lo que da una idea bastante buena de el tiempo dentro de la rutina de interrupción.
Antes de cualquier interrupción programada puede comenzar, tenemos que configurar el temporizador 2. Esto se hace en el ioinit () función.
TCCR2 (Contador de registro de control 2) es un registro de 8 bits que contiene la configuración de la fuente de reloj temporizador y modo de operación. Seleccionamos una fuente de reloj con un prescaler 1 / 128. Esto significa que del temporizador / contador 2 es incrementet antes del 1 de todos los ciclos de la CPU 128.
Lo establecido en el modo de CTC. (Borrar el temporizador Compare). En este modo, el TCNT2 valor del contador es constantemente comparado con OCR2 (Registro de salida Comparar 2). Cada TCNT2 tiempo alcanza el valor almacenado en OCR2, que se pone a 0 y empieza a contar a partir de 0. Al mismo tiempo, una interrupción se activa y la rutina de interrupción se llama.
Para cada ejecución de la interrupción, el siguiente tiene lugar:
1) Todos los transistores de capa se apagan.
2) habilitación de salida (OE) se eleva a la anulación de la salida de la matriz de cierre.
3) Un bucle se ejecuta a través de i = 0-7. Para cada paso un byte es outputed en el bus de datos y la i +1 es outputed en el bus de direcciones. Añadimos el 1 porque el 74HC138 tiene salidas activas bajas y la línea de reloj 74HC574 se dispara en el flanco de subida (transición de bajo a alto).
4) habilitación de salida es puesta a tierra para permitir la salida lado a otro el cierre matriz de nuevo.
5) El transistor de la capa de corriente está encendido.
6) current_layer se incrementa o se restablece a 0 si se mueve más allá de 7.
Eso es todo. La rutina de interrupción es bastante simple. Estoy seguro de que hay algunas optimizaciones que podría haber usado, pero no sin comprometer la legibilidad del código. A los efectos de este instructivo, pensamos que la legibilidad es un comercio razonable de partida para un ligero aumento en el rendimiento.
Hemos hecho una pequeña biblioteca de funciones de bajo nivel gráfico.
Hay tres razones principales para hacer esto.
Huellas de memoria
La forma más fácil para hacer frente a cada voxel sería a través de una matriz de estabilización de tres dimensiones. De esta manera:
sin firmar cubo char
; (. char significa un número de 8 bits, sin signo significa que la gama es 0-255 firmado es de -128 a +127)
Dentro de esta matriz de cada voxel estaría representada por un número entero, donde 0 es apagado y 1 es encendido. De hecho, podría utilizar el entero de todo y tiene 256 niveles de brillo diferente. En realidad este tratado en primer lugar, pero resultó que nuestro LED eBay había muy pocos cambios en el brillo en relación con el ciclo de trabajo. El efecto no se notó lo suficiente como para que valga la pena. Fuimos a una solución blanco y negro. Dentro y fuera.
Con un cubo blanco y negro y un buffer de tres dimensiones, estaríamos perdiendo el 7.8 de la memoria utilizada. La menor cantidad de memoria que puede asignar es de un byte (8 bits), y sólo necesita 1 bit para representar dentro y fuera. 7 bits para cada voxel se desperdiciaría. 512 * (07/08) = 448 bytes de memoria desperdiciada. La memoria es escasa en los controladores de las micro, por lo que esta es una solución óptima.
En su lugar, creamos un búfer que se parece a esto:
sin firmar cubo char
;
En este búfer el eje X está representado en cada uno de los bytes de la matriz de amortiguamiento. Esto puede ser muy confuso para trabajar, lo que nos lleva a la segunda razón para hacer una biblioteca de funciones de bajo nivel de dibujo:
Código de lectura
El establecimiento de un voxel con las coordenadas x = 4, y = 3, z = 5 requerirá el siguiente código:
cubo
| = (0x01 <<4);
Puedes ver cómo esto podría conducir a algunos graves en la cabeza cuando se trata de rascarse para depurar el código efecto
En draw.c hemos hecho un montón de funciones que tiene x, y, z como argumentos y que esta magia para usted.
Marco el voxel mismo que en el ejemplo anterior se hace con setvoxel (4,3,5), que es lot_ _a más fácil de leer!
draw.c contiene muchas funciones más como este. dibujo de línea, el dibujo plano, dibujo de la caja, el etc ¡Echa un vistazo en draw.c y familiarizarse con las diferentes funciones.
código reutilizable y el tamaño del código

