Paso 13: Hacer una animación de 10 pasos
Primero tenemos que averiguar qué LEDs queremos en y qué LEDs queremos apagado en cada paso. Si voy a hacer un gráfico de barras simple te quiero LED7, LED8 y LED9 para encender cuando el sonido es en el nivel 1 (la fila inferior de LEDs azules). Cuando el sonido es en el nivel 2 quiero LED7, LED8, LED9, LED12, LED13 y LED14 para encender mientras que el resto se apagan (las filas de la parte dos inferior de LEDs azules). Tan en así sucesivamente, hasta que llegamos al 10 de nivel de sonido en el que todos los LEDs azules queremos en. Así que aquí está la función que vamos a utilizar:
void Bar_Graph(void)
{
UInt16 nivel;
nivel = (0xF0 & PORTD (uint16)) << 2. Almacenar el nibble superior de PORTD 'nivel' de bit #9 - bit #6
nivel | = ((0xFC & PORTB) >> 2); Máscara de RB0 y RB1, poco cambio los datos a la derecha dos lugares y almacenar RB2 - RB7 'nivel'
interruptor (nivel)
{
caso 0x03FF: SPI_Send_595(0x000000C0); rotura; Nivel de sonido 0
caso 0x03DF: SPI_Send_595(0xE00000C0); rotura; Nivel de sonido 1
caso 0x03CF: SPI_Send_595(0xFC0000C0); rotura; Nivel sonoro 2
caso 0x03C7: SPI_Send_595(0xFF8000C0); rotura; Nivel sonoro 3
caso 0x03C3: SPI_Send_595(0xFFF000C0); rotura; Nivel sonoro 4
caso 0x03C1: SPI_Send_595(0xFFFE00C0); rotura; Nivel sonoro 5
caso 0x03C0: SPI_Send_595(0xFFFFC0C0); rotura; Sonora 6
caso 0x01C0: SPI_Send_595(0xFFFFF8C0); rotura; Nivel de sonido 7
caso 0x00C0: SPI_Send_595(0xFFFFFFC0); rotura; Nivel de sonido 8
caso 0x0040: SPI_Send_595(0xFFFFFFCC); rotura; Nivel de sonido 9
caso 0 x 0000: SPI_Send_595(0xFFFFFFCF); rotura; Nivel de sonido 10
}
}
** No preocuparse poco #7 y #6 que el derecho 0xC0 todavía, la explicó en el párrafo siguiente del pedacito
Se puede ver que en el nivel de sonido 0 que no encender de cualquier LED, así envía 0x000000C0. En el sonido nivel 1 enviar a 0xE00000C0 que se convertirá en el LED7, LED8 y LED9. En el sonido nivel 2 enviar a 0xFC0000C0 que se convertirá en LED7, LED8 LED9, LED10, LED11 y LED12. Y así sucesivamente. Su simple, usted sólo averiguar que LED que desea activar o desactivar e independientemente del nivel de sonido y luego solo lo ponga en la sentencia switch.
Ahora ¿recuerdas en el paso #8 cuando te dije que ignorar los 4 pedacitos superiores de datos que se envían a IC4? Bueno ahora vamos a utilizar 2 de esos bits no utilizados cuando estamos pasando el valor de datos de 32 bits a SPI_Send_74HC595(*data*). Usted puede haber notado en el esquema que somos capaces de controlar todos los LEDs verdes y todos los LEDs amarillo en su totalidad gracias a los 2 MOSFET x IRL510 que están en el circuito. Para encender todos los LED verdes simplemente escribimos un 1 (+ 5v) a RC2 y para encender todos los LEDs amarillo escribimos un 1 RC1. Esto enciende el IRL510 permitiendo corriente fluyendo a través de ellos, así la iluminación del LED.
Para encender la botella y limón, cuando envíe sus datos a través de la función SPI_Send_595(*data*) tendrás que hacer bit #6 y #7 alta de bits. #6 poco la botella y broca #7 manejarán el limón. En el SPI_Send_595 función que enmascare bit #6 y broca #7 y la salida de RC1 y RC2 según el estado de los bits. La IRL510 no están controlados por los registros de cambio, no se que confunda. Acabo de utilizar bits #6 y #7 de bits en el software, nunca haz transferidos a los 74HC595. Como se puede ver llegar enmascaradas de cuando enviamos el byte #4.
#define PORTCbits.RC2 de limón
#define botella PORTCbits.RC1
void SPI_Send_595(uint32 data)
{
LIMÓN = (datos >> 7) & 0 x 00000001; Encienda el limón si el bit #7 es alto y apagar si la broca #7 es baja
BOTELLA = (datos >> 6) & 0 x 00000001; Gire la botella si poco #6 es alto y a su vez él mordió #6 es baja
SPI_Send (datos de >> 24); Cambio a byte #1 primera (IC1)
SPI_Send ((datos >> 16) & 0x000000FF); Cambio a byte #2 siguiente (IC2)
SPI_Send ((datos >> 8) & 0x000000FF); Cambio a byte #3 siguiente (IC3)
SPI_Send (datos y 0x0000000F); Cambio a byte #4 último (IC4)
LAT_595 = 1; Cierre de los datos sobre las salidas de los 74HC595
NOP();
LAT_595 = 0; Restablecer el seguro a su estado predeterminado
}
También puede notar que la RC1 y RC2 son salidas de PWM del PIC18F4550. Han sido colocados allí en caso de que alguien quisiera controlar el brillo de la botella o el limón. Creo que sería genial utilizar el gráfico de barras para una animación de LED y para todos los niveles de sonido tienen un brillo diferente de la luz de los LEDs amarillo. De esa manera el limón iría también al ritmo de la música con los LEDs azules.
Funcionó en problemas cuando diseñé la primera versión del PCB y no puedo controlar el LED botella y limón por separado. No encuentro mi error hasta que ya había creado y el PWB montado. Sin preocupaciones para usted, fija ese error en los archivos del PCB como lo encontré, así que si usas mi diseño para hacer este medidor VU será capaz de controlar la botella y el limón.
Finalmente me enfermé de averiguar valores para LEDs específicos que quería encender así que azotaron juntos un pequeño programa que hará todos los cálculos por nosotros. Todo lo que necesitamos hacer es que datos valor del maleficio y lo pusieron en SPI_Send_595 (* datos aquí *) y se enciende cada LED que muestra en el programa. Puede descargarse en el archivo zip en el paso #4. Por lo que a mí respecta este programa es un ahorrador de vida.