Paso 11: Lectura salidas de LM3915
Salidas: entradas
LED1:RB7
LED2:RB6
LED3:RB5
LED4:RB4
LED5:RB3
LED6:RB2
LED7:RD7
LED8:RD6
LED9:RD5
LED10:RD4
Una vez más, si te estás preguntando por qué las entradas son tipo de hacia atrás su vencimiento para el ruteado del PCB. Ahora que tenemos las conexiones, le mostraré cómo almacenamos los datos de entrada.
Lo primero que hacemos es declarar una variable de 16 bits. Sólo utilizaremos los 10 bits más bajos porque sólo tenemos 10 diferentes niveles de sonido.
UInt16 nivel; Estamos declarando un entero sin signo de 16 bits que almacena el nivel de sonido de LED1 - LED10
Ya que no utiliza un puerto completo (RB0 - RB7 o RD0 - RD7) para los datos, vamos a tener a la máscara de bits no deseados. Los bits que no necesitamos son RB0, RB1, RD0, RD1, RD2 y RD3. Los primeros 4 bits de datos que traeremos en es RD4 - RD7, así que lo enmascare los bits de la parte inferior (RD0 - RD3) y establezca el variable 'nivel' en a nibble superior (RD4 - RD7).
Level = 0x00F0 y PORTD; Enmascare los bits de la parte inferior y hacer igual que el nibble superior de PORTD 'nivel'
Ahora que ya tenemos los valores almacenados en las salidas LED7 - LED10, tenemos que la variable 'nivel' listo para poder almacenar los siguiente 6 bits de datos que se encuentran en RB2 - RB7. Con el fin de hacer sitio para estos próximos 6 bits tenemos que izquierdo poco cambio 'nivel' por 2. Así que derecho ahora 'nivel' sería algo como esto en formato binario:
XXXX = RD4, RD5, RD6 RD7 respectivamente
nivel = 00000000xxxx0000 < = hay solamente bastante sitio para los 4 bits de datos en el extremo. Necesitamos para 6 bits de datos
Tan para poco cambio 'nivel' dos lugares, ponemos esto como nuestra siguiente línea de código:
Level = nivel << 2; Poco cambio nivel dos lugares y listo para aceptar los datos de RB2 - RB7
Esto es ahora como 'nivel' cambió de look después de que ha sido poco puesto a la izquierda dos lugares:
nivel = 000000xxxx000000 < = ahora tenemos espacio suficiente para que RB2 - RB7
Por último, ahora podemos recuperar el finales 6 bits de datos que son de salida de LED 1 - LED6 y guardarla en 'nivel'. Aquí está la siguiente línea de código para hacerlo:
Level = nivel | ((0xFC & PORTB) >> 2); Máscara de bits RB0 y RB1, luego cambio de bit RB2 - RB7 dos lugares a la derecha y guárdelo en la parte inferior 6 pedacitos de 'nivel'
Esta línea es un poco más críptica, pero hace exactamente lo mismo como lo hicimos con PORTD excepto los dos lugares de datos desplaza a la derecha. En el interior los soportes que enmascare RB0 y RB1 y luego pasar el resultado a los derecha dos lugares. Ahora que los datos que están en los 6 bits más bajo, o con 'nivel' que simplemente coloque RB2 - RB7 en los bits 6 menor de 'nivel'. Aquí está lo que va a terminar como:
XXXX = RD4, RD5, RD6 RD7 respectivamente
yyyyyy = RB2, RB3, RB4, RB5, RB6, RB7 respectivamente
nivel = 000000xxxxyyyyyy
A continuación nosotros le igualamos los valores de 'nivel' con el correspondiente nivel sonoro.