Paso 16: Llama menos LED vela simulador Firmware Descripción
Están disponibles en la fuente para el firmware (así como las imágenes binarias de programación)http://www.wire2wire.org/LED_candle/LED_candle.html
Existe amplia documentación en la fuente sobre el funcionamiento en detalle tan sólo a entrar en los altos puntos aquí el firmware.
Este proyecto utiliza un pic12F508 este micro particular tiene muy poco en el camino de periféricos de hardware. De hecho incluso no tiene interrupciones y sólo tiene un temporizador de hardware solo / contador. Esto particularmente había dificultado generar señales PWM. La principal razón que elegí este micro era que tenía acción en mano y su bajo costo.
La hoja de datos para esta parte se puede encontrar aquí:
http://WW1.microchip.com/downloads/en/DeviceDoc/41236E.pdf
Los componentes del firmware son los 5 generadores LFSR PRBS y el motor PWM. Para generar la máxima cantidad de aleatorio parpadeo con los limitados recursos yo había decidido establecer 5 idénticos Linear Feedback Shift registra Pseudo Bitstream generadores aleatorios. Cada uno es de 16 bits de largo y comienza con una semilla única. Las únicas semillas son importantes puesto que los generadores no son realmente al azar y se repetirá después de una cantidad dada de tiempo. Si comenzaron con la misma semilla 5 canales sería sincronizado y producen como agradable de un parpadeo. Para maximizar la aleatoriedad entre los canales que los bits de orden inferior se usan para ajustar el brillo de que canal y los bits de orden superior del canal anterior se utilizan para configurar el tiempo de permanencia esta luminosidad se llevará a cabo. El LFSR sólo se actualiza al valor siguiente cuando es necesario un nuevo nivel de brillo. Así que utilizando otro generador de canales para configurar el tiempo de permanencia de los canales individuales patrones deben cambiar con el tiempo con respecto a ellos.
La otra función en el código es un modo de "viento". A nivel del código se trata de un evento al azar que duran una duración aleatoria. Cuando se desencadena un evento de viento el código recoge 2 nuevos números del LFSR existente se utiliza como la duración del evento y la otra es el retraso antes de los desencadenadores de eventos otra vez después de termine. Durante el evento de viento, la única diferencia real en el código PWM es las máscaras para habitar el tiempo y el valor de brillo. Para el modo "normal" se establecen para producir un parpadeo lento y brillante. Durante el modo de viento las máscaras se ajustan para producir un parpadeo más dévil y más rápido.
Como se ha dicho anteriormente no hay interrupciones ni periféricos disponibles en este micro que no sea un simple temporizador. Para implementar el generador PWM de 5 canal en primer lugar configurar timer 0 para ser un contador funcionando bastante lento que yo podría ejecutar todas las instrucciones necesarias para actualizar el LFSR antes de la siguiente cuenta pero lo suficientemente rápido que la luz era suave a la vista. En el bucle principal hay lógica que hace una de dos cosas con el temporizador. En primer lugar si el temporizador se vuelca a 0 se enciende todas las salidas. En segundo lugar compara la cuenta a los niveles de brillo de cada canal. Si el nivel es más bajo que la cuenta corriente se apaga el canal.
Este método trabajó bien para esta aplicación pero no está exenta de inconvenientes. La desventaja principal es desde la cuenta del temporizador debe ser más lenta que el tiempo las instrucciones de actualización no funcionaría bien en grandes programas complejos (o PWM sería muy granulado).