AC DİMMER

Başlatan harmanx, 13 Kasım 2018, 23:05:19

harmanx

Yardım istiyorum... dimmer programında 2 adet buton var  DIM_UP, DIM_DOWN bu butonlara bastıkça
değer değişiyor benim istediğim basılı kaldığında yani port sıfıra çekildiğinde maksimum değere
rampalı olarak yavaş çıkması ve tersi butona basıldığında rampalı düşmesi... kodları düzletecek
yardım edeceklere şimdiden teşekkürler...
 ramapa süresi 2.000ms yeter...
butonlar kullnışsız
buton yerine bir pot bağlasak daha güzel olur... istenilen değere rampalı çıkar...

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 16.01.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   : proton basic                                      *
'*          :                                                   *
'****************************************************************


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 = 110 '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'2 'arttırma oranı
  If Load_Value >= 180 Then Load_Value = 180
  tus_basili=1
Return

DIM_DOWN:
 Load_Value = Load_Value - 2'2 'eksilteme oranı
 If Load_Value <= 110 Then Load_Value = 110
 tus_basili=1
Return
'***********************************************************************************************

ete

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 = 110 '150
  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  

MAIN:

  IF Dim_UP_Button=0 THEN
    WHILE DIM_UP_BUTTON=0 AND LOAD_VALUE<180
      LOAD_VALUE= LOAD_VALUE+1
      delayms 29
    WEND  
  ENDIF
  
  IF Dim_DOWN_Button=0 THEN
     WHILE DIM_DOWN_BUTTON=0 AND LOAD_VALUE>110
      LOAD_VALUE= LOAD_VALUE-1
      delayms 29
    WEND  
  ENDIF      
 
 
GoTo MAI

mantık şu, TMR0 sayacı 110 dan başlayıp 180 e geliyor. Bu 70 kademe sayıyor demektir. O halde bu 70 kademenin 2000 ms içinde sayılması gerekecektir. Yani her kademe için yaklaşık 28,5ms gerekiyor. Bunu 29 aldım. Rampa işlerinde mantıklı fark edilebilecek süre yaklaşık 3 sn (3000 ms dir) sen 2 sn olsun demişsin bu nedenle isteğine göre hesap yaptım.
Tuşa basıldığı müddetçe Load_value değerinin sayabilmesi için While - wend döngüsü kullandım.
İki sıfır geçiş arası yaklaşık 10 ms dir. sen bu süreyi (komut gecikmelerinden dolayı) 180 x 64=11520 ms almışsınki bu biraz fazla oluyor. Önceki programı denedinmi bilmiyorum ama min değerinde de bir sorun var gibi. 110 x 64=7040 ms ediyor ki buda yaklaşık %50 dim seviyesinin biraz üzeridir yani %55 lik bir dim seviyesine tekabül eder. Her halde tam sıfırlanmıyor sistemin. Her neyse verdiğim programı dene istersen.

Pot ile de bu işi yapmak mümkün ancak pot sürekli değer veren bir elemandır. Yani onu ADC girişine bağladığın zaman nasıl bir mantık ile dim yaptıracağız. Şöyle olabilir.
POT sıfır konumunda duruyorsa dim seviyen 110 a karşılık gelebilir. Pot maksimuma alınınca rampa yaparak 180 seviyesine gelebilir. Benzer şekilde Pot max değerden küçük bir konumda ise rampa yaparak min konuma gelebilir. Ne olacağına karar vermek güç.

ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

harmanx

#2
ilginiz için teşekkür ederim programı isis'te denedim board üstüne kurduğum devrede çalışmadı
çıkış artmıyor rampa yükselmiyor   butonların 1 konumu komutu yok 1 se ne olacak  ....  proteus isis simlasyonu buraya ekliyorum ilgilenebilirseniz zamanınız varsa
saygılar...
up butonuna basılı kaldığı sürece rampalı olarak maksimum değere tırmanması  lazım

ete

Ben proton kullanmıyorum. Aynı programı PBP ya çevirdim ve simulasyonda denedim benimki çalışıyor. Şimdi senin simulasyonunda da deniyorum çalışıyor gözüküyor. Sorun senin derlemende olsa gerek. Çünki programın çalışması gerekir.

Ete

https://1drv.ms/u/s!AvTLMS2z03FNgYJ5wvyVd7Ub7Ig_zw
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

harmanx

Gönderdiğiniz pic basic kodu çalışıyor   fakat butona bastıkça tetikleme sinyali kesime gidiyor

oda kırpışma yapıyor...  emeğine sağlık....

ete

Kırpışma muhtemelen 29ms lik gecikmeden kaynaklanıyor. Onu dilimlere bölerek gecikme sağlamak gerek.
linktekini dene bakalım. Buda olmaz ise başka yapacak bir şey yok maalesef.
Ete

https://1drv.ms/u/s!AvTLMS2z03FNgYJ6D_9WdOAfqnzmxw,
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

harmanx

Ete hoca emeğine saygı duyuyorum 10 numara oldu teşekkür ederim...


https://youtu.be/nYpn_NgALJ4

ete

İyi bari sevindim.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

harmanx

#8
ETE Hocam  devrede zero cross  devresini değiştirmek zorunda kaldım önceki devre 10ms de bir sinyal geliyordu problem yoktu şimdi direk 50hz den dirençle porta veriyorum kare dalga olarak
dolasıyla 20ms 50 hz bir sinyal tekralıyor..20ms niye olunca eksi altrnasta tetikleme yapmıyor
yarım dalga çalışıyor buna göre 10ms niye olması lazım  kare dalganın yükselen ve düşen kenarında tetikleme yapması gerekiyor zannımca düzelteme imkanı varmı...


F.T

Dirençten sonra köprü diyod koyarsan olur.Yarım dalgada sadece artı alternansta tetikleme yaparsın.50 puls.Köprü tipü doğruldursan 100 puls yapar hem artı hem ekside tetiklersin.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

harmanx

#10
devre direk 220 beslendiği için düşük akım çekmem lazım malzeme artırmadan yapmam gerekiyor..
soft olarak düzelebilir...

harmanx

Ete hocam devre izolesiz 220vac çalıştığı için köprü diyotla olmuyor zero cross soft olarak yardım bekliyorum... Şuan direk ac den port girişine dirençle veriyorum 50hz 20ms yazılımda ne yapabiliriz 10ms okumak için eksi alternası nasıl okuruz yaparız.

ete

Bir çok dimmer yaptım. Sıfır geçiş yakalamak için hepsinde köprü diyot ve peşinde optocoupler kullandım. Opto çıkışını pic'e verdim. Başka türlü sorun olur. Zaten senin devrende simulasyonda da görülüyor idi. Tepe noktada kesme sinyali geliyordu yanlış hatırlamıyorsam.

Ete

https://1drv.ms/u/s!AvTLMS2z03FNgYMN8aHaXOY75DACtg
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

yas

Köprü kullanmadan iki yönde çalışan opto da kullanılabilir. "AC optocoupler" olarak aramak yeterli.

harmanx

ETE Hocam  gönderdiğiniz dosya 8.8 versiyon ben açamadım bendeki 8.6  sizden önce opto kulanarak yaptım oldu..
fakat başka bir problem ortaya çıktı up tuşu devamlı basılı kilitli  halde enerjiyi ani olarak aç kapa yamam gerikiyor anahtarla bu işlem sırasında pic in her seferde 0 dan başlaması gerekiyor  devrede dc voltaj boşalma süresi var o nedenle pic mclr'den reset atmam gerekiyor... enerji kesildiği anda  bunun için zero crostan yaralanmak istedim fakat opto çıkışı dc den beslendiği için ordada gecikme oluyor başka ne yapabilirim..