dimmer yapmaya çalışıyorum

Başlatan bunymert, 28 Mayıs 2015, 09:41:20

bunymert

       Arkadaşlar başlıktan da görüldüğü üzere deneme amacıyla ve kesmeleri daha iyi anlama açısından 877a ile dimmer yapmaya çalışıyorum.şebekenin sıfır noktasını 4n25 ile bulup b0 kesmesine veriyorum. dış kesme aktif olunca timer0 kesmesi çalışıyor. pottan bilgiyi alıp belirli bir süre bekledikten sonra b3 e bağlı triac tetiklemesi gerekiyor. sonra timer0 pasif olup diğer dış kesmeyi beklemesi gerekiyor. ama devre çalışmıyor. devre şemasını koymaya gerek duymadım internette olan devrelerden kurdum. pottan aldığım analog bilgiyi dijital olarak lcd ekranda görebiliyorum. timer0 a kendim gecikme versem de yine gecikme olmuyor. proteusta timer0 aktif olur olmaz b3 100us çıkış veriyor. yani beklemiyor. disable_interrupts(INT_TIMER0); satırını kaldırınca da verdiğim sürede sürekli pals verip triac zamansız tetikleniyor. programı aşağıya yazıyorum.
sanırım programda bir hata var bir bakıp yanlışlığı söyleyebilecek arkadaş var mı acaba. teşekkürler.



#include <deneme1.h>
int i=0;
unsigned long int t;
#INT_EXT
void  EXT_isr(void)
{
set_timer0(t);
enable_interrupts(INT_TIMER0); // timer0 aktif
}

#INT_TIMER0
void  TIMER0_isr(void)
{
set_timer0(t); // 64x(256-t) kadar bekliyor

output_high(pin_b3); // triac tetikle
delay_us(100);
output_low(pin_b3); // triac tetiklemeyi bırak

disable_interrupts(INT_TIMER0); // timer0 pasif
}


#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7

#include <lcd.c>

void main()
{
   unsigned long int k;
   
   
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64|RTCC_8_bit);      //8,1 ms overflow

   ext_int_edge(L_TO_H);
   enable_interrupts(INT_EXT);
   
   enable_interrupts(GLOBAL);
set_tris_b(0x01);
   lcd_init();
   
   lcd_putc("\fReady...\n");
delay_ms(500);
   while(TRUE)
   {
      k=read_adc(); // k değişkeni pottan okunan 0 - 1023 arası bir değer
      t=100+(k/6.6);// 10ms gecikme aralığı sağlamak için t değikeninin
                    // 100 ile 256 arası olması gerekiyor. (64x(256-t))hesabından
      printF(lcd_putc,"\fk=%lu",k);
      printF(lcd_putc,"\nt=%lu",t);// değerler çalışıyor mu diye kontrol amaçlı
      delay_ms(100);

   }

}

bunymert