PWM PIC 16f877a

#1
buenas tardes. soy nuevo en el tema de los microcontroladores. como tarea tengo hacer un PWM con un PIC 16f877a con el protonIDE. he tratado modificando los registros ccp1con, t2con, ccpr1l y pr2. pero no me funciona y ya no entiendo bienn que hacer con el CCPR1L y el PR2 que tienen que ver con el ciclo de dureza. podrían darme un ejemplo simple de un PWM en el PROTON para basarme y hacer mi trabajo? me creo capaz de manejar el conversor A/D del micro para variar el ciclo de dureza una vez tenga un PWM que funcione :)

agradezco su respuesta
 
#2
buenas tardes. soy nuevo en el tema de los microcontroladores. como tarea tengo hacer un PWM con un PIC 16f877a con el protonIDE. he tratado modificando los registros ccp1con, t2con, ccpr1l y pr2. pero no me funciona y ya no entiendo bienn que hacer con el CCPR1L y el PR2 que tienen que ver con el ciclo de dureza. podrían darme un ejemplo simple de un PWM en el PROTON para basarme y hacer mi trabajo? me creo capaz de manejar el conversor A/D del micro para variar el ciclo de dureza una vez tenga un PWM que funcione :)

agradezco su respuesta
Saludos.
Este ejemplo es del mismo programa Proton Compiler.
Código:
' Demonstrate Hardware PWM
' Output a 1KHz signal with duty cycle sweeping from 20% to 80% once per second

    Device 16F877A
    Declare Xtal 4

    Dim Duty As Word        ' Duty cycle value (CCPR1L:CCP1CON<5:4>)

    TRISC.2 = 0             ' Set PORTC.2 (CCP1) to output
    CCP1CON = %00001100     ' Set CCP1 to PWM
    T2CON = %00000101       ' Turn on Timer2, Prescale=4
    PR2 = 249               ' Set PR2 to get 1KHz out
    Duty = 200              ' Set duty cycle to 20%
Loop:
    CCP1CON.4 = Duty.0      ' Store duty to registers as
    CCP1CON.5 = Duty.1      ' a 10-bit word
    CCPR1L = Duty >> 2
    Duty = Duty + 10        ' Increase duty cycle
    DelayMS 17              ' Delayms 1/60 of second
    If Duty < 800 Then Loop ' Do it again unless 80% duty cycle
    Duty = 200              ' Reset to 20% duty cycle
    GoTo Loop               ' Do it forever
Analizalo y pruebalo. Si requieres de mas información usa el buscador del foro.
Hay un post en donde lograron tener hasta 8 salidas PWM independientes
con un PIC16F628A y esta escrito con Proton.
 
#4
lo simulo en Proteus y no funciona no da la señal cuadrada. solo tengo el pic configurado a la misma frecuencia de reloj del programa (4MHZ) , el osciloscopio y el PIN MCLR del PIC a power con la patita CCP1 al oscilocopio. ¿necesita algo mas para simular?
 
#5
lo simulo en Proteus y no funciona no da la señal cuadrada. solo tengo el pic configurado a la misma frecuencia de reloj del programa (4MHZ) , el osciloscopio y el PIN MCLR del PIC a power con la patita CCP1 al oscilocopio. ¿necesita algo mas para simular?
Saludos.
Agregue la configuración de fuses y otros parametros más.
Adjunto el programa compilado funcionando y su simulación.

Suerte y hasta luego.
 

Adjuntos

Última edición:
#7
descargue los archivos y simule. sigue sin dar la onda cuadrada. igual gracias por su ayuda. cuando encuentre el error te escribo diciendo cual fue. saludos
 
#9
ok. ya funciona. es mucho mas facil con la funcion HPWM.

HPWM (pin de salida, dureza(entre 0-254), frecuencia.

saludoss
Ok. Pues como tu querias un ejemplo usando esos registros, eso fue lo que mande.
HPWM sirve para generar PWM solo en los PIC que tienen puertos para esa función. (Hardware)
La Instrucción PWM lo genera por software y se puede usar cualquier PIC y cualquier pin.
Suerte y hasta luego.
 
#10
HOla Darkbytes disculpa la molestia pero baje el comprimido que publicaste y encontre un programa en asm por casualidad no tendras alguno en ccs que explique como usar el PWM si no es mucha molestia.
muchas gracias
 
#11
HOla Darkbytes disculpa la molestia pero baje el comprimido que publicaste y encontre un programa en asm por casualidad no tendras alguno en ccs que explique como usar el PWM si no es mucha molestia.
muchas gracias
El archivo en ensamblador que viene dentro del archivo, es el que se genera cuando se manda compilar el programa original que está escrito en PICBasic del Proton IDE con extensión *.bas.

En cuanto a programas sobre PWM escritos en C para PIC hay varios en el foro. Usa el Buscador


Suerte.
 
Arriba