Bien, buscando como controlar las locomotoras de la maqueta encontré como configurar la instrucción Hpwm.
Hpwm es una instrucción que llevaba tiempo que quería probarlo pero siempre me había dado fallos, eso unido a mi poca paciencia y tiempo... Pero bueno encontré un ejemplo en todo pic y revisando la ayuda de Microcode Studio, hice este pequeño programa para controlar la intensidad de 2 leds con los conversores analógicos.
Una de las ventajas que tiene es que se ejecuta en segundo plano así que puedes hacer otras cosas mientras que se ejecuta hpwm. Una de las desventajas es que utiliza pines específicos del PIC llamados CCP, en el caso del 16F876A son 2 y están situados en los pines 12 y 13 (CCP2 y CCP1 respectivamente).
Para activar el HPWM en PBP se utilizan los siguientes DEFINE'S
DEFINE CCP1_REG PORTC 'Hpwm 1 pin port
DEFINE
CCP1_BIT 2 'Hpwm 1 pin
bit
DEFINE CCP2_REG PORTC 'Hpwm 2 pin port
DEFINE
CCP2_BIT 1 'Hpwm 2 pin bit
Bueno con esto se habilita, y la instrucción es así:
HPWM Channel,Dutycycle,Frequency
En Channel ponemos el canal del CCP que estemos usando, 1 para CCP1 y 2 para CCP2
En Dutycycle pondremos la variable o el número que queramos para los ciclos que especifica el encendido / apagado en relación a la Frecuencia (Frequency). Con una variable Byte, 0 seria totalmente apagado, 127 seria la mitad de la onda y 255 seria la onda completa, en el caso del led, este brillara a su máxima potencia.
El tema de las frecuencias (Frequency) no lo tengo muy claro asi que mejor mirarlo en el Data del Chip, yo estoy utilizando 255 y funciona bien, al menos en la prueba por hardware, porque en la simulación no va muy fino. Pero no me queda muy claro si es por culpa del PC o del programa...
En la pagina de descargas encontrareis el ejemplo en Pbp y la simulación en Proteus para el control HPWM mediante ADC
Un saludo!!
By PeYuTrOn
Amigo la frecuencia es la cantidad de ciclos de alto y bajo de tu pwm, un periodo es un ciclo completo sumando el tiempo en alto y el tiempo en bajo.
ResponderEliminarosea que si colocas en frecuencia por ejemplo 1000, quiere decir que tu frecuencia es de 1 khz osea que tu programa ejecutara 1000 peiodos de encendido y pagado en un segundo.
Gracias por el aporte Juan Angel. Añadiré más información a este tema.
Eliminar