triac

4
#include"16f628a.h" #use delay(clock=4000000) #FUSES NOWDT, INTRC_IO, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD #DEFINE ZERO_CROSS PIN_B0 #DEFINE OPTO_TRIAC PIN_B1 unsigned int k=0, i; // La detección de cruce por cero, se hace con el pin de interrupción PIN B0 (INT0) // se genera una interrupcion cada medio ciclo de la onda senoidal para 60Hz, será cada 1/(2*60Hz)=8.33ms // Cuando se produzca la interrupcion, desde la rutina EXT_ISR // se inicia el conteo TON ‐ TOFF para el pin de salida al OPTOTRIAC // 8333/255=32,67uS #int_EXT void EXT_ISR(void){ unsigned int TON; TON=k*32; output_high(OPTO_TRIAC); delay_us(TON); output_low(OPTO_TRIAC); } void main(void){ setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1);

Upload: frank-giraldo

Post on 08-Jul-2016

213 views

Category:

Documents


0 download

DESCRIPTION

triac

TRANSCRIPT

Page 1: triac

#include"16f628a.h" 

#use delay(clock=4000000) 

#FUSES NOWDT, INTRC_IO, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD      

 

#DEFINE  ZERO_CROSS  PIN_B0 

#DEFINE  OPTO_TRIAC  PIN_B1 

 

unsigned int k=0, i; 

 

// La detección de cruce por cero, se hace con el pin de interrupción PIN B0 (INT0) 

// se genera una interrupcion cada medio ciclo de la onda senoidal para 60Hz, será cada 

1/(2*60Hz)=8.33ms 

// Cuando se produzca la interrupcion, desde la rutina EXT_ISR  

// se inicia el conteo TON ‐ TOFF para el pin de salida al OPTOTRIAC 

// 8333/255=32,67uS 

 

#int_EXT 

void  EXT_ISR(void){ 

unsigned int TON; 

    TON=k*32; 

    output_high(OPTO_TRIAC); 

    delay_us(TON);  

    output_low(OPTO_TRIAC); 

    } 

 

void main(void){ 

 

   setup_timer_1(T1_DISABLED); 

   setup_timer_2(T2_DISABLED,0,1); 

Page 2: triac

   setup_ccp1(CCP_OFF); 

   setup_comparator(NC_NC_NC_NC); 

   setup_vref(FALSE); 

    

   enable_interrupts(INT_EXT); 

   ext_int_edge(l_to_h);// interrupcion externa por flanco de subida 

   enable_interrupts(GLOBAL); 

   

   set_tris_b(0B00000001); 

    

while(true){ 

for (i=10; i <= 255; i++){ 

 k=i; 

 delay_ms(20); 

 } 

 

 

 

 

 

 

 

 

 

 

 

 

Page 3: triac

/* 

Control de angulo de disparo AC dimmer con detección de cruce por cero (Zero cross detection) 

 Pin    |  Interrrupcción: |  Arduino Board 

 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 

 2      |  0               |  All 

 3      |  1               |  All 

 18     |  5               |  Arduino Mega Only 

 19     |  4               |  Arduino Mega Only 

 20     |  3               |  Arduino Mega Only 

 21     |  2               |  Arduino Mega Only 

 

INT 0 corresponde al pin 2  

 

*/ 

 

int OPTO_TRIAC = 3;    // Salida al Opto Triac 

int k = 128;  // Nivel k de Dimming (angulo de disparo) 

 

void setup() 

  pinMode(OPTO_TRIAC, OUTPUT);// Set AC Load 

  attachInterrupt(0, zero_crosss_int, RISING);   

// Selecciona interrupción '0' pin 2 como interrupcción para el cruce por cero 

 

void zero_crosss_int()   

{   

  // 8.33ms=8333us 

  // 8333us/255 = 32 (Aprox.) 

Page 4: triac

  int TON = (32*k);    // 60Hz =>32    

  digitalWrite(OPTO_TRIAC, HIGH);   // activacion triac  

  delayMicroseconds(TON);    // triac ciclo On delay 

  digitalWrite(OPTO_TRIAC, LOW);    // triac ciclo Off delay 

void loop()  { 

 for (int i=10; i <= 255; i++) 

 k=i; 

 delay(20); 

 } 

 }