Şema MICROCHIP in uygulama notlarından alınmıştır. Şemada gösterilen MAC210 (triyak) yerine piyasamızda oldukça popüler olan BTA12-600 kullanabilirsiniz. MOC3021 de popülerdir ve kolay temin edilir.
Nelere dikkat etmelisiniz?
Devreyi fiziksel olarak gerçekleştirdikten sonra, PIC'i de programlayarak deneyin. Elinizin altında bir osilaskop olmasında fayda var. Osilaskop ile şebeke gerilimi ile GP0 daki tetikleme sinyalinin pozisyonunu karşılaştırın. Eğer devrenizde yanlış yerlerde tetikleme sinyali oluşuyor ise DIM_UP ve DIM_DOWM fonksiyonlarında yer alan değişken sınırlama değerleri ile (Load_Value = 180) oynayın ve devreniz için en uygun pozisyonu yakalayın.
Yazılım PROTON Basic derleyicisi ile hazırlanmıştır. Yazılımı derlemek için bu yazılımın free versiyonunu kullanabilirsiniz. Derleme konusunda sorunlarınız olursa bu yazının altındaki yorumlar kısmına yazınız.
Eğer PICBasicPro ile derleme yapacaksanız, özellikle değişken kullanımı bu iki derleyici arasında farklıdır, gerekli düzenlemeleri yapmalısınız
Açık Şema
'****************************************************************
Device 12F675
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_OFF, CP_OFF, MCLRE_OFF
XTAL 4
;I/O symbols
Symbol Triac_out = GPIO.0 ;triac pin
Symbol Zero_cross = GPIO.2 ;zero-cross algilama pini
Symbol Dim_UP_Button = GPIO.4
Symbol Dim_DOWN_Button = GPIO.5
;interrupt symbols
Symbol GIE = INTCON.7 ; Global Interrupt Enable 1 = enable, 0 = disable
Symbol T0IE = INTCON.5 ;TMR0 Overflow Interrupt Enable bit
Symbol INTE = INTCON.4 ;GP2/INT External Interrupt Enable 1 = enable, 0 = disable
Symbol T0IF = INTCON.2 ;TMR0 Overflow Interrupt Flag bit
Symbol INTF = INTCON.1 ;External Interrupt Flage 1 =
;external interrupt occurred (must be cleared in software)
'degiskenler
Dim Load_Value As Word
Dim I As Byte
Dim tus_basili As Byte
'***********************************************************************************
ON_INTERRUPT Interrupt_Detect
GoTo BEGIN
'************************************************************************************
Interrupt_Detect:
If INTF = 1 Then
TMR0 = Load_Value
T0IE = 1 ' Enable TMR0 overflow interrupt
INTF = 0 ' Clear INT Flag (be ready for the next)
EndIf
If T0IF = 1 Then
High GPIO.0
DelayUS 100 'triyak tetiklemesi 100 uSn
Low GPIO.0
T0IF = 0
EndIf
Context Restore
'************************************************************************************
BEGIN:
ALL_DIGITAL = TRUE
CMCON = 7 ;comparator kapali
'OPTION_REG.7 = 0 ;pull-ups aktif
OPTION_REG = %01010101 ;presc 1:64 ,External Interrupt Edge to rising edge
TRISIO = 111100 ;1-giris, 0-cikis
WPU=110000
;interrupt (kesme) tanimlamalari
T0IF = 0 ;TMR0 overflaw bayragini sil
INTF = 0 ;External Interrupt bayragini silg
Load_Value = 150
MAIN:
GIE = 0 ' tüm kesmeleri kapat
While GIE = 1:GIE = 0:Wend ' kesmelerin kapandigindan emin ol
INTE = 1 ' Enable External Interrupt
GIE = 1 ' Enable global interrupts
If tus_basili=0 Then
If Dim_UP_Button = 0 Then GoSub DIM_UP
If Dim_DOWN_Button = 0 Then GoSub DIM_DOWN
EndIf
If Dim_UP_Button = 1 And Dim_DOWN_Button = 1 Then
tus_basili=0
EndIf
GoTo MAIN
;bu degerler 50Hz gore ayarlidir
DIM_UP:
Load_Value = Load_Value + 2
If Load_Value >= 180 Then Load_Value = 180
tus_basili=1
Return
DIM_DOWN:
Load_Value = Load_Value - 2
If Load_Value <= 110 Then Load_Value = 110
tus_basili=1
Return
Hiç yorum yok:
Yorum Gönder