# CicloConvertidor pic16f877A



## felipedream (Oct 5, 2011)

Compañeros amigos y demás...
estoy en un dilema y espero que me ayuden necesito crear un programa que se aplique a este esquema de potencia .. llamado ciclo-convertidor. de esta manera podemos variar la frecuencia ... y a su ves variar la velocidad de un motor ... no así su troque como mucho de ustedes sabrán...






Bueno para entender un poco mas del como debiera trabajar... un gráfico vale mas que mil palabras... 






y ahora el codigo .. espero que lo comprendan ... y me ayuden un poco... 
tengo serios problemas con los pulsos y son la selección de ellos ... 
adjunto 
esquema proteus
archivo ASM
y el  HEX
todo el el rar... haber si me ayudannn 
EDITO PARA MI AMIGO NESTOR2017
*ESQUEMA PROTEUS*




*ESQUEMA POTENCIA*




GRACIAS !!! 

```
;PROGRAMA

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
            LIST                p=16f877A
            INCLUDE          "p16f877A.inc"
 
            ORG     00h

PDel0		equ			0x42
PDel1		equ			0x43
PDel050		equ			0x44
PDel150		equ			0x45
PDel010     equ			0x46
PDel110		equ			0x47
PDel015    	equ			0x48
PDel115		equ			0x49
PDel020		equ			0x50
PDel120		equ			0x51


            goto     inicio
 
inicio
            ORG     10h
 
;Configurar el puerto B (RB4 salida).
 
            call      banco1
            movlw b'00000111' 
            movwf PORTB         
             ; SALIDAS   UP 		        B1
	; 		     DOWN			B2
	;           Pulso 1 tipo P  B3
	;           Puslo 2 tipo p  B4
        ;	    Pulso 1 tipo N  B5
        ;           Pulso 2 tipo N  B6
movlw b'11111110'
movwf PORTD                  	
         ; ENTRADAS   50 HZ          D7
         ; 		   	 25 HZ          D6
         ; 			 16.6 Hz        D5
         ; 			 15,5Hz         D4
         ; SALIDA DE ACTIVACION         D0
         ; ENTRADA DE ACTIVACION      D1
            call banco0

           
 
;Configurar la INT.
 
            call      banco1
            bcf       OPTION_REG,INTEDG ;flanco de bajada de la INT
            call      banco0
 
 
programa
            movlw             00h
            movwf             20h

 
 
progra1
            btfss     INTCON,INTF
            goto      progra1
           
            bcf       INTCON,INTF
       
            call      varia
            call      donde?           ;pregunta donde va dirigido los pulsos
            call      disparoP         ; subrutina de disparo, si rd1 es = 1 entonses dipara el tipo P si no el tipo N
            call      up               
            call      down
 
            goto     progra1
;--------------------------------------------------
;Subrutina de la transmicion 
;---------------------------------------------------
donde?
   		 btfss PORTD,7         
  		 goto  viente
         goto  pulse50

viente   btfss PORTD,6
  		 goto  diesi
         goto pulse20

diesi  	 btfss PORTD,5
  		 goto  doce
         goto pulse16

doce     btfss PORTD,4
  		 goto donde?
         goto pulse12 
		 goto retu
pulse50 
         bsf  PORTD,0
         call cincuentaD
         bcf  PORTD,0
         call cincuentaD
         goto retu
  	 
pulse20
         bsf  PORTD,0
         call vienteD
         bcf  PORTD,0
         call vienteD
         goto retu
  		
pulse16
 		 bsf  PORTD,0
         call diesiseisD
         bcf  PORTD,0
         call diesiseisD
         goto retu
  	
pulse12
 	     bsf  PORTD,0
         call doceD
         bcf  PORTD,0
         call doceD
         goto retu
retu
          return
;--------------------------------------------------
;Subrutina dirivacion
;---------------------------------------------------

;--------------------------------------------------
;Subrutinas de los botones UP-DOWN.
;---------------------------------------------------
up
            btfss                 PORTB,1          ;testeo el puerto RB2 y si vale uno salto
            goto                 saltu1
            incf                  20h,1               ;incremento el registro 20h
           
            bcf                   STATUS,C       ;corrección para no llegar a FFh, solo llego
                                                           ;hasta F1h
            movlw             0fh
            addwf              20h,0
            btfss                 STATUS,C
            goto                 saltu1
 
            movlw             0f1h
            movwf             20h
 
saltu1
            return
 
 
 
 
down
            btfss                 PORTB,2          ;testeo el puerto RB3 y si vale uno salto
            goto                 saltu3
            decf                20h,1               ;decremento el registro 20h
           
            bcf                   STATUS,C       ;corrección para no llegar a 00h, sólo llego
                                                           ;hasta 0Fh
            movlw             0f1h
            addwf              20h,0
            btfss                 STATUS,C
            goto                 saltu2
 
            return 
saltu2
            movlw             0fh
            movwf             20h
saltu3
            return
 
 
;------------------------------------
;Disparo del triac: 225 useg.
;------------------------------------
;Pulso de disparo de 225 microsegundos necesarios para activar el SCR

            btfss                 PORTD,1          ;testeo el puerto RD! y si vale uno salto
            goto                  disparoN
            goto                  disparoP
         


disparoP  	        bsf                   PORTB,3
                        call                   usg225
                        bcf                   PORTB,3
			call			msg10
			bsf			PORTB,4
			call			usg225
			bcf			PORTB,4
            return
disparoN 
            bsf                PORTA,5
            call                usg225
            bcf                PORTA,5
	    call		msg10
	    bsf		PORTA,6
	    call		usg225
	    bcf		PORTA,6
            return
usg225
            movlw             4bh
            movwf             30h
sal4
            decfsz              30h,1
            goto                 sal4
            return


msg10
        movlw     .8        ; 1 set number of repetitions (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .249      ; 1 set number of repetitions (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 cycle delay
        decfsz    PDel1, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop1    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 cycles delay
PDelL2  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done



;-----------------------------------------------
;Retarodo 50HZ - 10ms - 25ms
;-----------------------------------------------
cincuentaD
PDelay50  movlw     .6        ; 1 set number of repetitions (B)
        movwf     PDel050     ; 1 |
PLoop150  movlw     .207      ; 1 set number of repetitions (A)
        movwf     PDel150     ; 1 |
PLoop250  clrwdt              ; 1 clear watchdog
        decfsz    PDel150, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop250    ; 2 no, loop
        decfsz    PDel050,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop150    ; 2 no, loop
PDelL150  goto PDelL250         ; 2 cycles delay
PDelL250  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done
;-----------------------------------------------
;Retarodo 25HZ - 20ms
;-----------------------------------------------
vienteD
PDelay10  movlw     .8        ; 1 set number of repetitions (B)
        movwf     PDel010     ; 1 |
PLoop110  movlw     .249      ; 1 set number of repetitions (A)
        movwf     PDel110     ; 1 |
PLoop210  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 cycle delay
        decfsz    PDel110, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop210    ; 2 no, loop
        decfsz    PDel010,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop110    ; 2 no, loop
PDelL110  goto PDelL210         ; 2 cycles delay
PDelL210  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done

;-----------------------------------------------
;Retarodo 16.6HZ - 30ms
;-----------------------------------------------
diesiseisD
PDelay15  movlw     .21       ; 1 set number of repetitions (B)
        movwf     PDel015     ; 1 |
PLoop115  movlw     .142      ; 1 set number of repetitions (A)
        movwf     PDel115     ; 1 |
PLoop215  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 cycle delay
        decfsz    PDel115, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop215    ; 2 no, loop
        decfsz    PDel015,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop115    ; 2 no, loop
        clrwdt              ; 1 cycle delay
        return              ; 2+2 Done

;-----------------------------------------------
;Retarodo 12,5HZ - 40ms
;-----------------------------------------------
doceD
PDelay20  movlw     .21       ; 1 set number of repetitions (B)
        movwf     PDel020     ; 1 |
PLoop120  movlw     .237      ; 1 set number of repetitions (A)
        movwf     PDel120     ; 1 |
PLoop220  clrwdt              ; 1 clear watchdog
        decfsz    PDel120, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop220    ; 2 no, loop
        decfsz    PDel020,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop120    ; 2 no, loop
PDelL120  goto PDelL220         ; 2 cycles delay
PDelL220  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done
 
 
 
 
 
 
;-----------------------------------------------
;Retardo variable después de la INT.
;-----------------------------------------------
;El tiempo entre que se activa la bandera INTF es de 10mseg (10.000 microsegundos)
;Si un registro (21h) lo cargo con un valor comprendido entre 01h y FFh y 
;lo voy decrementando hasta llegar a cero con un retardo fijo de unos
 ;25 microsegundos entre medias puedo conseguir unos pocos microsegundos o 
;los 10.000 microsegundos.
 
 
varia
            movf               20h,0
            movwf             21h
salte
            call                  usg25
            decfsz             21h,1
            goto                 salte
 
            return
 
usg25
            movlw             08h
            movwf             30h
sal5
            decfsz              30h,1
            goto                 sal5
            return
 
;------------------------------------------
;Subrutinas de cambios de bancos.
;------------------------------------------
banco0
            bcf                   STATUS,RP0
            return
banco1
            bsf                   STATUS,RP0
            return
 
            END
```


----------



## Nestor2017 (Oct 5, 2011)

Hola Felipe:

Me parece interesante realizar este controlador para convertidor, para entender mejor emvia es esquema en jpg no tengo proteus jeje hace un tiempo hice un convertidor trifasico asi qeu si me envias el esquema sera mas facil ayudarte, como estas sensando el cruce por cero de la tension de entrada?? cuando realice mis pruebas este presentaba problemas por el ruido de la conmutacion de los tiristores por eso tienes que ver alguna forma de filtrar esta entrada.

Saludos


----------



## metal muff (Oct 6, 2011)

Hola felipedream:
verás, yo tambien estoy intentando realizar ese cicloconvertidor:...pero tengo entendido que la tension para activar un scr, (x ejemplo, el bt151)es en continua y del orden de los milivoltios, en este caso, seria typ de 600mv, te digo eso xq veo q utilizas un optotriac, bueno, revisa eso y me avisas como te va. Exitos.


----------



## felipedream (Oct 8, 2011)

metal muff dijo:


> Hola felipedream:
> verás, yo tambien estoy intentando realizar ese cicloconvertidor:...pero tengo entendido que la tension para activar un scr, (x ejemplo, el bt151)es en continua y del orden de los milivoltios, en este caso, seria typ de 600mv, te digo eso xq veo q utilizas un optotriac, bueno, revisa eso y me avisas como te va. Exitos.


 

no tengo problemas en la parte de potencia ... ya que por separados me funciona super bien .. despues subo fotos del ociloscopio ... el problema es el control .. mi programa ...
ayudenme  crear el programa ... los pulsos ... las activaciones .. y lo demas ...

voy bien avanzado ... pero nesesito de su ayuda .. gracias !!!


----------



## Nestor2017 (Oct 9, 2011)

Hola Felipe:

No le veo problema a la etapa de potencia, los optoacopladores estan bien conectados segun el data sheet, sobre el problema que indican de la tension de activacion del los tiristores si es pequeña pero si observan el esquema cuando se active el optoacoplador solo habra un instante en que toda la tension este en esta etapa ademas mas que tension los tiristores se activan por corriente y solo se necesita un pulso en la entrada (gate) para activarlos despues es recomendable desactivar el pulso para evitar perdidas.

Sobre el esquema del pics, deberias utilizar un comparador en la entrada LM311 o LM339 son mejores para esta aplicacion debido a que el LM324 tiene un ancho de banda limitado por lo cual tiene retrasos a la salida del pulso pero no es demasiado para 50hz o 60 hz

Otro problema que veo es que en el esquema no hay resistencias pull-down en los pulsadores de PORTD, RB1 y RB2 que son necesarias para mantener la entrada del pic a un valor fijo que podria variar con el ruido si no estan estas resistencias.

El programa lo estoy revisando te aviso cuando termine.

Saludos

Hola nuevamente:

Revise el programa al parecer todo esta bien, pero seria mas facil si utilizar comparadores CCP1 y CCP2 estos tienen registros que comparan con el temporizador 1, asi puedes dar valores a CCP1PRL y CCP1PRH que son compararados con el temporizador y dar el disparo a los tiristores.

Saludos


----------



## felipedream (Oct 10, 2011)

gracias ! ..
te pasaste ..
espero con muchas ansias tus modificaciones .. para tratar de hacerlo ...
sobre las recistencias ... en el porteus no las pongo ... ya que da lo mismo .. 
no asi en lo real .. que si nesesita ... tu sabes ... 1 o 0 ... 

sera mucho pedirte un esquema con tus modificaciones ... 

entiendo que quieras cambiar el comparador ... para el cruze por 0 !!! pero no es tan nesesario por que en lo real funciona muy bien .. aunke es verdad que tine un retrazo .. pero para las frecuencias que uso no presenta complicaciones ... esta todo perfectamente sincronizado ... visto desde un ociloscopio real .. 

gracias ...


----------



## felipedream (Oct 11, 2011)

creo que ahora si tengo los pulsos codiciados 
pero ahora tengo un problema de desincronizacion ya que use muchos delay
entre pulso y pulso son 10 ms ... el delay es de 9.95 ms ...
ya que el propio pulso es de 0.05 ms 
asi completamos bien los 10 ms ...

para que se entienda mas ....
rd7 = a 50  HZ       
rd6 = a 25  HZ
rd5 = a 16.6HZ 
rd4 = a 15.5HZ

porfavor ayuda  en la sincronizacion !!!!!!!!!!!!!!!!!!!!!!!!!!!!! mírenlo en el proteusssssssss 

adjunto imagen del ocs del proteus ... en la foto esta a 5 mili seg por div 


```
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
            LIST                p=16f877A
            INCLUDE          "p16f877A.inc"
 
            ORG     00h

PDel05		equ			0x42
PDel0 equ	0x43
PDel1 equ	0x44
PDel0p equ   0x45




            goto     inicio
 
inicio
            ORG     10h
 
;Configurar el puerto B (RB4 salida).
 
            call      banco1
            movlw b'00000111' 
            movwf PORTB         
                                   			; SALIDAS   UP 				B1
		                         			; 			DOWN			B2
									 		;           Pulso 1 tipo P  B3
			                          		;           Puslo 2 tipo p  B4
          									;			Pulso 1 tipo N  B5
         									;		  	Pulso 2 tipo N  B6
			movlw b'11111110'
            movwf PORTD                  	
                                       		; ENTRADAS   50 HZ          D7
          							 		; 		   	 25 HZ          D6
                                     		; 			 16.6 Hz        D5
                           					; 			 15,5Hz         D4
                                 
            call banco0

           
 
;Configurar la INT.
 
            call      banco1
            bcf       OPTION_REG,INTEDG ;flanco de bajada de la INT
            call      banco0
 
 
programa
            movlw             00h
            movwf             20h
 
 
progra1
            btfss     INTCON,INTF
            goto     progra1
           
            bcf       INTCON,INTF
 
            call      varia
            call      donde?
           
            call      up
            call      down
 
            goto     progra1
 
;--------------------------------------------------
;Subrutina de la transmicion 
;---------------------------------------------------

donde?
   		 btfss PORTD,7         
  		 goto  viente
         goto  pulse50

viente   btfss PORTD,6
  		 goto  diesi
         goto pulse20

diesi  	 btfss PORTD,5
  		 goto  doce
         goto pulse16

doce     btfss PORTD,4
  		 goto donde?
         goto pulse12 
		 goto donde?

pulse50 
            bsf                   PORTB,3
            call                  usg500
            bcf                   PORTB,3
			call				  msg10
			bsf					  PORTB,5
			call				  usg500
			bcf					  PORTB,5
         
            goto  retu

  	 
pulse20
            bsf                   PORTB,3
            call                  usg500
            bcf                   PORTB,3
			call				  msg10
			bsf					  PORTB,4
			call				  usg500
			bcf					  PORTB,4
            call                  msg10
            bsf                   PORTB,5
			call				   usg500
			bcf					  PORTB,5
			call				  msg10
			bsf					  PORTB,6
            call                   usg500
            bcf                   PORTB,6
         
      
            goto  retu
  		
pulse16
 	        bsf                   PORTB,3
            call                  usg500
            bcf                   PORTB,3
			call				  msg10
			bsf					  PORTB,4
			call				  usg500
			bcf					  PORTB,4
            call                  msg10
            bsf                   PORTB,3
            call                  usg500
            bcf                   PORTB,3
            call                  msg10
            bsf                   PORTB,5
			call				   usg500
			bcf					  PORTB,5
            call				  msg10
			bsf					  PORTB,6
            call                   usg500
            bcf                   PORTB,6
            call                  msg10
            bsf                   PORTB,5
			call				   usg500
			bcf					  PORTB,5
  	        goto  retu
pulse12
 	        bsf                  PORTB,3
            call                  usg500
            bcf                   PORTB,3
			call				  msg10
			bsf					  PORTB,4
			call				  usg500
			bcf					  PORTB,4
            call                  msg10
            bsf                   PORTB,3
            call                  usg500
            bcf                   PORTB,3
            call                  msg10
            bsf                   PORTB,4
			call				   usg500
			bcf					  PORTB,4
            call				  msg10
		    bsf                   PORTB,5
            call                  usg500
            bcf                   PORTB,5
			call				  msg10
			bsf					  PORTB,6
			call				  usg500
			bcf					  PORTB,6
            call                  msg10
            bsf                   PORTB,5
            call                  usg500
            bcf                   PORTB,5
            call                  msg10
            bsf                   PORTB,6
			call				   usg500
			bcf					  PORTB,6
  	        goto  retu
           
retu
          return

;--------------------------------------------------
;Subrutinas de los botones UP-DOWN.
;---------------------------------------------------
up
            btfss                 PORTB,1          ;testeo el puerto RB2 y si vale uno salto
            goto                 saltu1
            incf                  20h,1               ;incremento el registro 20h
           
            bcf                   STATUS,C       ;corrección para no llegar a FFh, solo llego
                                                           ;hasta F1h
            movlw             0fh
            addwf              20h,0
            btfss                 STATUS,C
            goto                 saltu1
 
            movlw             0f1h
            movwf             20h
 
saltu1
            return
 
 
 
 
down
            btfss                 PORTB,2          ;testeo el puerto RB3 y si vale uno salto
            goto                 saltu3
            decf                 20h,1               ;decremento el registro 20h
           
            bcf                   STATUS,C       ;corrección para no llegar a 00h, sólo llego
                                                           ;hasta 0Fh
            movlw             0f1h
            addwf              20h,0
            btfss                 STATUS,C
            goto                 saltu2
 
            return 
saltu2
            movlw             0fh
            movwf             20h
saltu3
            return
 
;------------------------------------
;Disparo del triac: 225 useg.
;------------------------------------
;Pulso de disparo de 500 microsegundos necesarios para activar el SCR

usg500
      movlw     .11       ; 1 set number of repetitions
        movwf     PDel0p     ; 1 |
PLoop0p  clrwdt              ; 1 clear watchdog
        decfsz    PDel0p, 1  ; 1 + (1) is the time over?
        goto      PLoop0p    ; 2 no, loop
        clrwdt              ; 1 cycle delay
        return              ; 2+2 Done

msg10    movlw     .11       ; 1 set number of repetitions (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .225      ; 1 set number of repetitions (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel1, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop1    ; 2 no, loop
        clrwdt              ; 1 cycle delay
        return              ; 2+2 Done



 
;-----------------------------------------------
;Retardo variable después de la INT.
;-----------------------------------------------
;El tiempo entre que se activa la bandera INTF es de 10mseg (10.000 microsegundos)
;Si un registro (21h) lo cargo con un valor comprendido entre 01h y FFh y lo voy 
;decrementando hasta llegar a cero con un retardo fijo de unos 25 microsegundos entre
; medias puedo conseguir unos pocos microsegundos o los 10.000 microsegundos.
 
 
varia
            movf                20h,0
            movwf             21h
salte
            call                  usg25
            decfsz              21h,1
            goto                 salte
 
            return
 
usg25
            movlw             08h
            movwf             31h
sal5
            decfsz              31h,1
            goto                 sal5
            return
 
;------------------------------------------
;Subrutinas de cambios de bancos.
;------------------------------------------
banco0
            bcf                   STATUS,RP0
            return
banco1
            bsf                   STATUS,RP0
            return
 
            END
```


----------



## dark aioros dan (Dic 4, 2011)

oye estoy realizando un cicloconvertidor pero tengo dos dudas, primera ¿com solucionaste tu problema de la desinconizacion? y segunda, como manejas el tiempo para las diferentes frecuencias? si peudes explicarme un poco esa parte del programa ya que soy novato en programar y si me cuesta un poco de trabajo entenderlo. de antemano muchas gracias


----------



## powerful (Dic 4, 2011)

Estimado felipedream el gráfico que muestra es de un DC-DRIVE con inversión del sentido de giro un cicloconvertidor es en controlador de motor AC de inducción como los de jaula de ardilla y se usan dos rectificadores de trifásicos  de 6,12pulsos o más.



Tiene que mantener la relación  V/F .


----------



## dark aioros dan (Dic 4, 2011)

powerful dijo:


> Estimado felipedream el gráfico que muestra es de un DC-DRIVE con inversión del sentido de giro un cicloconvertidor es en controlador de motor AC de inducción como los de jaula de ardilla y se usan dos rectificadores de trifásicos  de 6,12pulsos o más.



asi es powerful pero estamos hablando de voltajes convencionales, ya que para el q tu mensionas se utilizan voltajes demasaido grandes, ese cicloconvertidor q muestra es monofasico y es como un practica, o un sencillo ejemplo de un cicloconvertidor


----------



## powerful (Dic 4, 2011)

dark airos dan que son.... voltajes " convencionales" ....osea que tambien hay voltajes "no convencionales".......y logro ver en su gráfico que trabajan con 220Vac , yo estoy hablando del mismo voltaje solo que trifásico ...cicloconvertidor se refiere a control de campo para motores  ac manteniendo el flujo constante para lo cual V/F de ser constante.......el gráfico repito es de un control de DC por torque constante ( control por rotor) con inversión de giro.



Los rect en oposicion son de 6,12,24 pulsos ,obviamente trifásicos ...lo que se persigue es que las ondas R,Sy T generadas sean sinusoidales con bajo THD ya que estos motores trabajan con flujo sinusoidal......¡¡¡¡¡¡¡¡NO CONFUNDAN A LOS FORISTAS!!!!!!!


----------



## EJQA (Dic 5, 2012)

hola como estan tengo dudas de como sincronizar la carga y tambien me causa mas dudas del funcionamiento MOC 3021, el diseño para la carga espero alguna respuesta se los agradeceria


----------



## dark aioros dan (Dic 10, 2012)

Deberías ser un poco mas especifico en tu pregunta, pero tratare de responder, no entiendo a q*ue* te refieres a sincronizar la carga, ya que la carga será un motor de CA lo que podrás energizar, ahora los moc son optoacopladores, compuesto por un led un emisor y un foto triac receptor, los cuales al ingresarles una corriente en el led emisor polarizan al triac para cerrar el circuito y hacer funcionar lo que le hallas conectado. 

Como el triac funciona en corriente alterna, habrá una parte de la onda que será positiva y otra negativa, la parte positiva de la onda (semiciclo positivo) pasará por el triac siempre y cuando haya habido una señal de disparo en la compuerta, de esta manera la corriente circulará de arriba hacia abajo (pasará por el tiristor que apunta hacia abajo), de igual manera, la parte negativa de la onda (semiciclo negativo) pasará por el triac siempre y cuando haya habido una señal de disparo en la compuerta, de esta manera la corriente circulará de abajo hacia arriba (pasará por el tiristor que apunta hacia arriba).

No se, espero te sirva, hasta pronto.


----------



## EJQA (Dic 11, 2012)

gracias por responder si bueno con respecto a la sincronización me refería al comparador que le introduje  la alimentación de 220V AC uno de los cuales neutro va hacia tierra del circuito del uc y por ende ese mismo voltaje alimentara la carga por medio de la activación de los scr's. pero gracias a DIOS entendí. ahora quiero saber si me  dan guía del código les paso a mostrar del primer pulso y el segundo de antemano gracias.

```
#include <16F877A.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#use delay(clock=12M)
#use fast_io(d)
#use fast_io(b)
#use fast_io(c)
signed int t0;
int j=0;
int i,k;
void pulso1(void){
   If(j==1){
    output_high(PIN_B4);   
    delay_us(500);
    output_low(PIN_B4);}
   else{                   
    output_high(PIN_B7);   
    delay_us(500);
    output_low(PIN_B7);}
  }
void pulso2(void){
   if(j==1){
     if(i==0){
      i=1;
        output_high(PIN_B4);
        delay_us(500);
        output_low (PIN_B4);}
     else{
      i=0;
        output_high(PIN_B5);
        delay_us(500);
        output_low (PIN_B5);}}
   else{              
     if(i==1){
      i=0;
       output_high(PIN_B6);
       delay_us(500);
       output_low(PIN_B6);}
     else{
      i=1;
       output_high(PIN_B7);
       delay_us(500);
       output_low(PIN_B7);}}
}
#INT_EXT
void CrucePor0()
 {
    if(j==0){
    j=1;
    ext_int_edge(H_TO_L);}
    else{
    j=0;
    ext_int_edge(L_TO_H);}
    set_timer0(t0);
    enable_interrupts(INT_TIMER0);
 }
 
#INT_TIMER0
void tmr_handler()
  {
    switch(input_D()){
      case 1:
       pulso1();
      break;
      case 3:
       pulso2();
      break;}
  }
void main()
{
set_tris_d(0xff);
set_tris_b(0x07);
set_tris_c(0x00);
output_high(PIN_C0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128);//Division del preescaler para 128
disable_interrupts(INT_TIMER0);
enable_interrupts(INT_EXT);
ext_int_edge(L_TO_H);
enable_interrupts(GLOBAL);
    do {  
      if(input(pin_B1)){
      t0=200;}      
      if(input(pin_B2)){
      t0=150;}
           }while(true);}
```


----------

