sábado, 10 de marzo de 2012

16F876A ADC y HPWM

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

2 comentarios :

  1. 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.
    osea 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.

    ResponderEliminar
    Respuestas
    1. Gracias por el aporte Juan Angel. Añadiré más información a este tema.

      Eliminar