Paso 7: Firmware
Nota: En este paso os adjunto independiente código de demostración para el codificador rotatorio y comunicación SPI MCP3008 como referencia. Este es el código de barebones para cada tipo de entrada. Es increíble cómo no hay tutoriales para usar el MCP3008 con Arduino o Launchpad! Puedo hacer un Instructable para explicar esto...
Como se indicó anteriormente, este proyecto tiene dos diferentes microcontroladores que manejan diferentes controles en el circuito. El microcontrolador principal es responsable de leer entrada de 6 de los controles analógicos, leyendo los 5 botones, interpretando el codificador rotatorio y su botón de empuje integrado y pasando datos seriales de microcontrolador secundario a la computadora. El microcontrolador secundario es responsable de la comunicación SPI con el convertidor de analógico a Digital de MCP3008 e interpretación de la entrada del circuito de teclado (que consiste en el teclado, el interruptor de la cubierta y el selector de modo). Estos ICs trabajan mano a mano para darnos una gran variedad de controles!
Vas a necesitar un par de cosas para programar los microcontroladores.
Materiales:
- Energia, un IDE de Arduino como para TI Launchpad
- Biblioteca de Arduino teclado
- TI Launchpad
- MSP430G2553 (x 2)
Conseguir establecer
Si no utiliza/instaló el predeterminado IDE (de TI código compositor estudio) para programar su Launchpad antes, usted necesita obtener los controladores para el Launchpad antes de que su ordenador se 'vea'. Para conseguir configurar inicialmente usando Energia, seguir a esta guía. Si es tu primera vez usando Energia, te recomiendo subir un par de sus programas de demo super sencillo primero y probarlo todo. Es muy fácil y no toma mucho tiempo, te esperaré!
Cuando regreses de eso, tenemos que instalar la biblioteca de teclado. Está escrito para Arduino pero también funciona con Energia. Para instalar la biblioteca, busque su carpeta de Energia (generalmente en documentos) y extraer el zip de la biblioteca de teclado en la carpeta Energia\libraries.
Asegúrese de que tiene Energia hasta para programar un MSP430G2553 en un Launchpad y que tiene la selección de puerto COM correcto. Siga la guía anterior para cargar un programa de demostración para que sepa que funciona y configurarlo!
Energia debe ser todo listo para programar ahora!
Comprender el protocolo de
Los microcontroladores se comunican con la computadora usando un protocolo personalizado que hice. Utiliza sólo dos bytes (16 bits) mensajes a la información del ordenador acerca de todos los controles. Esto fue en un intento para reducir cualquier latencia posible y sólo para practicar mis habilidades matemáticas bit a bit. Tenga en cuenta que los datos originales de la serie no están humanos legible en lo más mínimo! Explicación del protocolo está incluida en esta sección para que pueda entender cómo el código funciona mejor. No tienes que leer esta sección, pero puede ayudarle si usted quiere modificar este proyecto.
Formato general
El formato general para todos los mensajes es el siguiente:
[00000] | [0] | [0000000000]
Num de ID | Tipo | Valor
El número de identificación nos dice qué control envió el mensaje. El tipo nos dice si es digital (0) o analógico (1) control. Y el valor es tan sólo un espacio para el control poner cualquier mensaje necesita enviar.
Análogo
Mensajes analógicos son super simples. Están formateados como sigue:
[00000] | [1] | [0000000000]
Num de ID | Tipo | Valor de ADC de 10 bits
¿Buscar familiar? Eso es porque es exactamente lo mismo que un mensaje general, sólo el bit tipo siempre será un 1 para los controles analógicos. La ADCs que pasar a usar valores de 10 bits de salida, qué conveniente!
Digital
Controles digitales formato exactamente como controles analógicos, excepto el bit de tipo siempre será un 0 para controles digitales. El valor es sólo un valor booleano, el último bit será un 1 (para alta digital) o 0 (para bajo digital).
Teclado
Aquí es donde comienza obteniendo un poco más complicado. El teclado debe comunicar varios valores diferentes con el fin de funcionar correctamente. Debido a esto, sus mensajes son formateados como sigue:
[00000] | [0] | [0000] | [00] | [0] | [00]
Número de identificación | Tipo | Key ID | On/Off | Modo | Cubierta | No importa
El teclado será siempre un control digital (tipo = 0). El número de ID de 0 está reservado para entrada del telclado numérico por lo que los primeros 6 bits siempre será [000000] para los mensajes de teclado. El siguiente cuatro bits son el número de identificación de clave. Puesto que tenemos un teclado de 12 botones, utilizamos números 0 al 11. Sin embargo, los números restantes pueden ser utilizados para otras cosas ya el hardware nunca recibe como entradas. Decidí usar el tecla numero 15 para indicar cubierta cambiar comandos (enviados cuando se gira el interruptor de la cubierta). Esto nos permite ajustar la cubierta activa y PFL con selector de la cubierta. El siguiente bit sólo nos indica si el botón fue presionado (a) o liberado (off). Los siguientes dos bits representan el modo que seleccionó. Va de 0 a 2 (por lo tanto necesitamos dos bits para representar el modo). El siguiente bit representa la cubierta seleccionada, cubierta 0 o 1 de la cubierta. Los últimos dos bits que no nos importa y no ser interpretados.
Codificador rotatorio
El codificador rotatorio no es tan complicado, pero tenga en cuenta que también tiene un número de identificación reservado de 1 para controles digitales. Los mensajes de codificador rotatorio están formateados como sigue:
[00001] | [0] | [00] | [0] | [0000000]
Número de identificación | Tipo | Valor | Super velocidad | No importa
El número de identificación del codificador rotatorio siempre será 1 y el tipo siempre será 0. El valor tiene tres acepciones diferentes, 0 significa rotación a la derecha, 1 significa rotación a la izquierda y 2 significa un doble clic, 3 no se utiliza. Los últimos 7 bits que no nos importa y no ser interpretados.
Eso es todo allí está a él! El Protocolo no es realmente tan difícil de entender. Y es una buena manera de practicar habilidades matemáticas bit a bit y estirar los límites sobre cómo pequeñas puede recibir paquetes de datos. Decidí usar 5 bits para el número de identificación para que el protocolo puede soportar hasta 32 entradas digitales y 32 entradas analógicas (5 ^ 2 = 32).