Paso 4: El Firmware
Se adjunta es el firmware que utiliza para esta pequeña demo. Usé el libre IDE MPLAB con el compilador C18 (gratis para estudiantes). Ambos están disponibles para descargar desde la Web de Microchip. La lógica va como esto:1. retardo en algún lugar entre 10 y 20 ms. (en este caso, 12)
2. Si se pulsa el botón (pin 4), mida el voltaje del potenciómetro (pin 2)
3. Ajuste la señal de control alto (5 v)
4. retraso durante un tiempo proporcional a la tensión medida en el paso 2
5. Ajuste la señal de control bajo (tierra)
6. lazo para paso 1
Tal vez un poco más información sobre la conversión de analógico a digital está en orden. Así que ya sabemos que el voltaje en el pin 2 va a estar en alguna parte entre 0 y 5 voltios por el divisor de tensión. Conversión del A/d del PIC (expresiones) funciona como un divisor del voltaje inverso. Reporta el voltaje como una parte de su alimentación. Sin embargo, la proporción se escala entre 0 y 255 (que es de 8 bits de información, el tamaño de un carácter sin signo). En otras palabras, se establece la siguiente igualdad:
(voltaje del pin 2) / 5v = POT_VALUE / 255
o:
POT_VALUE = 255 * ((pin 2 voltage) / 5v)
La foto está haciendo en realidad una conversión A/d de 10 bits y 8 bits es mucho granulares suficiente para nuestros propósitos, por lo que no se usan los dos bits menos significativos de la conversión A/D de este código. Además, el último par de dígitos probablemente miden ruido en lugar de la señal, por lo que no estamos perdiendo todo lo que tanto por ignorarlas.
Los retrasos se calculan basándose en el tiempo que toma para completar una instrucción en el PIC con un reloj de 4 MHz. No recuerdo por qué, pero de alguna manera que esto funciona hacia fuera a 1/6 nos por ciclo de instrucción. Así que si nos demoramos para 5400 ciclos, que es de 5400 ciclos * Estados Unidos 1/6 / ciclo = 900 US = 0,9 Sra. otra pieza importante es encontrar la constante de proporcionalidad que escala POT_VALUE (en un rango de 255-0 = 255) a la anchura de pulso (en un rango de 2,1 ms-0,9 ms = 1200 nos); o, para enmarcar la cuestión de una manera diferente: ¿Cuántos ciclos debemos retrasar para cada cuenta de POT_VALUE?
(Estados Unidos 1200 * 6 ciclos / nos) 255 cuenta = cuenta de ciclos de 28
Los siguientes junto con el código notará que realmente demoro 20 ciclos por cuenta, no 28. Se trata de un valor determinado experimentalmente (miraba la señal con un osciloscopio) que se ajusta para todos los factores eso efecto de la sincronización, principalmente la cabeza del bucle for en la línea 68.