TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: WALTER ALEJANDRO en 10 de Mayo de 2015, 09:32:13
-
buenos dias, estoy interesado en usar la configuracion del modulo ccp1con en full bridge del 16f883,aca les dejo el codigo y las preguntas(y dudas que son varias)
Define CONF_WORD = 0x23c4
Define CONF_WORD_2 = 0x3eff
'16f883
'tmr2 regula la frecuencia
'tmr1 el ancho de pulso
TRISA = 0
TRISB = 0
TRISC = 0
T2CON = 56
T2CON.TMR2ON = 1
T2CON.T2CKPS1 = 0
T2CON.T2CKPS0 = 0 ';
PR2 = 250 ';
';
CCP1CON = %01001100 'forward, todas las salidas activas high
CCPR1L = 10
inicio:
Toggle RA1
WaitMs 10
Goto inicio
End
este codigo corrido con el PSI no funciona,ahora pregunto.
el timer 2 regula la frecuencia del pwm,mientras el registro ccpr1l regula el ancho del pulso?????
desde ya agradeceria aclararme las dudas ya que esta es una funcion que necesito usar.Desde ya
gracias por su aporte
-
En teoría esto cargaría el duty cycle:
'Carga el duty cycle
Proc _set_pwm1_duty(_duty As Word)
CCP1CON.DC1B0 = _duty.0
CCP1CON.DC1B1 = _duty.1
CCPR1L = ShiftRight(_duty, 2)
End Proc
-
Solo me funciona el simulador en modo CCP simple, te dejo el código por si puedes probarlo en la realidad ya que no tengo ningún hardware para ese micro.
Define CONF_WORD = 0x23c4
Define CONF_WORD_2 = 0x3eff
Include "_FuncionesPic16F883.bas"
Define CLOCK_FREQUENCY = 8
'Pic16F883
Call _setup_oscillator(_osc_8mhz) 'Internal frecuency clock (INTRC)
AllDigital
TRISA = 0
TRISB = 0
TRISC = 0
Symbol _p1a = RC2
Symbol _p1c = RB1
Symbol _p1b = RB2
Symbol _p1d = RB4
ConfigPin _p1a = Output 'Pin como salida
ConfigPin _p1c = Output 'Pin como salida
ConfigPin _p1b = Output 'Pin como salida
ConfigPin _p1d = Output 'Pin como salida
Call _setup_timer2(_tmr2_div16, 250, 1) '500Hz a 8Mhz
Call _timer2(_on)
Call _setup_ccp1(pwm_p1a_p1c_h_p1b_p1d_l)
Call _set_pwm1_duty(498) 'Maximo 996, minimo 0
inicio:
Toggle RA1
'WaitMs 10
Goto inicio
End
-
hola, mira lo que hice fue pasar el codigo a un 18f4520 que esta en todos los programadores ya que el 16f883 veo que no esta en todos y ....SORPRESA!!!!!! funciona perfectamente tal cual lo publique , evidentemente el simulador del PSI tiene sus limitaciones .A tener en cuenta! no es la primera vez que me hace algun chiste de este tipo.Desde ya gracias por tu aporte y hasta la proxima :)
-
¡Felicidades por el éxito!
Pero recuerda que el duty cycle se controla mediante un registro de 10bit, que esto se logra concatenando el registro CCPR1L de 8Bit con dos bit más para formar los 10Bit, DC1B1 y DC1B0, si no lo haces pierdes resolución.