Autor Tema: puente H  (Leído 3324 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado WALTER ALEJANDRO

  • PIC12
  • **
  • Mensajes: 64
puente H
« 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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: puente H
« Respuesta #1 en: 10 de Mayo de 2015, 14:32:18 »
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                 
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: puente H
« Respuesta #2 en: 10 de Mayo de 2015, 15:39:27 »
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

Saludos desde Granada, España.

Desconectado WALTER ALEJANDRO

  • PIC12
  • **
  • Mensajes: 64
Re: puente H
« Respuesta #3 en: 11 de Mayo de 2015, 15:38:23 »
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 :)

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: puente H
« Respuesta #4 en: 11 de Mayo de 2015, 19:06:22 »
¡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.
Saludos desde Granada, España.