Paso 6: Diseño de Firmware
Para hacer el juego tan simple como posible para comprender y modificar el firmware está escrito puramente en C usando el compilador de C de alta tecnología. El PIC12F683 tiene sólo 2K de flash de programa, que significa que tendrá que ser lo más eficiente posible con el código para que quepan en el dispositivo de destino. El código se divide en módulos que tratan sobre los diversos componentes de hardware que le permita ser fácilmente entendido y modificada.Buttons.c:
Este módulo es responsable de leer el estado de botón mediante el ADC PICs. Es leer el ADC y el botón presionado se determina mediante una pequeña gama de voltaje de entrada posible para cada botón. El código también prevé debounce botón encendido y apagado para asegurar que la acción de botón es 'positiva' y ruidosos interruptores no resultan en lecturas falsas (que no sería divertido durante su épico juego!).
charlieplex.c :
Este módulo proporciona el control de LED de charlieplexed que establece las direcciones de puerto y potencia de salida para encender el LED correcto para el PIC.
Sleep.c:
Este módulo contiene los comandos para poner el PIC en modo sleep de bajo consumo.
Sound.c:
Este módulo contiene las funciones que permiten el sonido al activarse (en una frecuencia especificada) y se apaga. También contiene la función de solicitud (ISR) de servicio de interrupción que se llama mediante una interrupción timer1 basado y cambia el pin de salida y a generar el sonido requerido.
Simon.c:
Este módulo contiene el juego de la máquina de estado que es sondeada por el bucle principal función cada 10 milisegundos. El juego está implementado como una petición-máquina de estado para permitir la sincronización exacta del juego evitando utilizar interrupciones (que pueden interferir con la generación de sonido desde el PIC12F no tiene multi nivel priorizados interrupciones). La técnica de la interrogación también permite que el PIC constantemente leer Estados de botón del juego y realizar debounce sin impedir el juego de esperar tiempos de espera y la entrada del usuario durante el juego.
El juego en sí se basa en el juego original 1 desde el juego de Simon de MB Electronics. El juego de salidas de un número cada vez mayor de colores en una secuencia que se debe repetir para ganar. El número de colores en la secuencia ganadora es determinado por el nivel seleccionado.
Main.c:
El módulo main.c inicializa el PIC listo para usar y permite al usuario seleccionar un nivel de habilidad requerido antes de iniciar el juego. Una vez que ha pulsado el botón de inicio el firmware 'persigue a' los LEDs para indicar que está esperando la selección del nivel de habilidad. El usuario selecciona el nivel de habilidad 1 a 4 pulsando el botón azul para nivel 1, el botón rojo para nivel 2, el enlace para el nivel 3 o el botón azul para el nivel 4.
El módulo principal es también responsable de generar un número aleatorio que selecciona el color siguiente en la secuencia. Esto se hace mediante la simple técnica de continuamente incrementar un contador entre 1 y 4 como los lazos del juego encuesta. Puesto que el juego lee el contador en base cuando el usuario presiona un botón, el resultado es un número aleatorio que se burlan cada vez. Puesto que el tiempo entre que apretas el botón reset y el PIC está listo es constante, la selección del nivel de habilidad inicial se utiliza para obtener el primer color al azar para el juego.