Picproje Elektronik Sitesi

DERLEYİCİLER => Proton+ => Konuyu başlatan: harmanx - 13 Kasım 2018, 23:05:19

Başlık: AC DİMMER
Gönderen: harmanx - 13 Kasım 2018, 23:05:19
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
'***********************************************************************************************
Başlık: Ynt: AC DİMMER
Gönderen: ete - 14 Kasım 2018, 10:48:35
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
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 14 Kasım 2018, 12:55:01
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
Başlık: Ynt: AC DİMMER
Gönderen: ete - 14 Kasım 2018, 15:25:57
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
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 14 Kasım 2018, 15:52:01
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....
Başlık: Ynt: AC DİMMER
Gönderen: ete - 14 Kasım 2018, 16:25:09
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,
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 14 Kasım 2018, 16:52:59
Ete hoca emeğine saygı duyuyorum 10 numara oldu teşekkür ederim...


https://youtu.be/nYpn_NgALJ4
Başlık: Ynt: AC DİMMER
Gönderen: ete - 14 Kasım 2018, 17:35:06
İyi bari sevindim.
Ete
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 15 Kasım 2018, 18:18:50
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ı...

Başlık: Ynt: AC DİMMER
Gönderen: F.T - 15 Kasım 2018, 19:01:16
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.
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 15 Kasım 2018, 19:15:43
devre direk 220 beslendiği için düşük akım çekmem lazım malzeme artırmadan yapmam gerekiyor..
soft olarak düzelebilir...
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 16 Kasım 2018, 15:48:59
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.
Başlık: Ynt: AC DİMMER
Gönderen: ete - 16 Kasım 2018, 17:23:11
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
Başlık: Ynt: AC DİMMER
Gönderen: yas - 16 Kasım 2018, 17:38:47
Köprü kullanmadan iki yönde çalışan opto da kullanılabilir. "AC optocoupler" olarak aramak yeterli.
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 16 Kasım 2018, 17:45:17
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..
Başlık: Ynt: AC DİMMER
Gönderen: fide - 16 Kasım 2018, 22:29:27
@harmanx yazdığın programlama dilini bilmiyorum ama aşağıdaki sayfaya bir bak istersen.

http://fidenetgaraj.blogspot.com/2018/07/analog-ve-dijital-dimmerleri-inceleyelim.html?m=0

 Butonu main içinde okurum. Main içinde çalışırken İnterrupt içinde olmadığın için zero crossing devresini oluşturduğu interrupt çalışacaktır.
Burada tuşa hala basılı ise dimm değerini step step artırın. Bu arada zero crossing interrupta gireceği için dimm miktarının arttığını görürsünüz.
Mcuyu resetlemenize gerek kalmaz.

Sayfayı bir inceleyin.
Başlık: Ynt: AC DİMMER
Gönderen: ete - 17 Kasım 2018, 08:02:59
konu başlığında ne istemiş isen onu gerçekleştirmiş olduk. Bu son isteğini yani ne istediğini anlamış değilim. İşlemciyi reset etmen gerekiyor ise mclr bacağını aktif edip oraya butonla gnd uygulaman yeterli.
Son verdiğim şemayı resim olarak gün içinde ekleyeceğim takip edip alırsın. Onun dışında önerebileceğim bir şey yok.
Ete
Başlık: Ynt: AC DİMMER
Gönderen: ete - 17 Kasım 2018, 10:47:13
Son devre şeması aşağıdaki linktedir.
https://1drv.ms/u/s!AvTLMS2z03FNgYMS0RBHEyb9vOzMPg

Ete
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 18 Kasım 2018, 00:54:30
Sayın Ete hocam Anlatamamış olabilirim kısacası dimmer çıkışını
Herhangi bir voltaja ayarladığımızda besleme voltajının aniden kesilip tekrar gelmesininde
Picin tekrar sıfırdan başlamasını sağlamak şuanki devrede bunu yaptığımıza picin besleme geriliminde devrede kondastör olduğundan besle gerilimi hemen sıfıra düşmediğinden sapıtma yapıyor bunu engellemek istiyorum yani pic voltajın kesildiğini anlaması lazım tekrar sıfırdan başlaması için bilginize ihtiyacım var...saygılar...
Başlık: Ynt: AC DİMMER
Gönderen: ete - 18 Kasım 2018, 08:30:52
Şayet pic beslemesi kesilirse ve devrede kondansatör var ise besleme kesilmiyor demektir. O halde kesintiyi pice anlatacak bir yol gerekiyor ki oda aynı şebekeden kondansatörsüz bir 5v ayarlayıp pice girmek. Şebeke kesilir kesilmez bu uç anında sıfıra düşer ama pic kondansatörlü beslemeden dolayı ayakta kalır ve girişin sıfır olduğunu görünce sistemi en başa yönlendirir yada dimmeri nereye alacak ise oraya alır.  Devrende port.1 boş gözüküyor oraya şebeke girişini verebilirsin. Yalnızca dorultulmuş zener ile sabitlenmiş ama kondansatörü olmayan bir 5v gerekiyor. Gerisi programdan halledilir. Sen önce bu beslemeyi hallet programı ben düzenlerim.
Bir dimmerde bu gibi bir sorun hiç görmedim. Acaba endüktif bir yükü dimliyor olmayasın. Bu durumda faz kayması meydana gelir ve dimmer sınırların dışına çıkar ve abuk subuk çalışır. Yoksa anlık elektrik kesintileri dimmeri etkilemez. Sorununu anlamakta zorluk çekiyorum doğrusu.

Ete
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 18 Kasım 2018, 13:54:14
Dimmerle Taşlama motoru çalıştırıyorum dolasıyla anahtarla hızlı aç kapa yaptığım zaman sfırdan başlaması gerekiyor rampalı kalkması için değiniz gibi boş porta 5v vericem...
Yanlız  fikrimce zaten zero coros bilgisi geliyor ondan faydalansak olmazmı sıfır geçiş bilgisi gelmediğinde program başa dönsün..
Başlık: Ynt: AC DİMMER
Gönderen: ete - 18 Kasım 2018, 14:20:34
Sorunun motor çalıştırmak ile ilgili bu dimmer motor çalıştırmak için uygun değildir. Çünki motor rotor ve statoru endüktif materyaldir ve üzerine enrji depolar ve buda faz kaymasına sebep olur. Bazı motorları çalıştırabilir özellikle küçük motorları ama taş motoru kesinlikle sorun çıkartacaktır. Sorunlarıda söyleyeyim tam sıfıra düşmez yada düşer gibi yapıp aniden devir yükselir bunlar hep faz kaymasının sonuçlarıdır. Yüzlerce kere denedim bunu.
Motor için trail edge denilen bir sistemle çalışan dimmer gerekir. Bu da triac ile değil mosfet ile çalışır. İnternette çok fazla açık edilmemiştir bu konu. Çünki ticari değeri olan bir iştir ve çok açık edilmiyor maalesef. Çok zor değil aslında. Farkı ne dersen yaptığın modelde dim yapmak için sıfır noktasından sonra bekleyip öyle triacı ateşliyorsun sıfır noktasında triac kesime gidiyor. Diğerinde ise her sıfır noktasından sonra yük voltaj alıyor yani triac ateşlenmiş gibi düşün ama ortada yada sona yakın bir yerde triac kesime götürülüyor. Tabiiki triac ile bu iş yapılamayacağı için mosfet kullanılıyor. Triac bir kez ateşlendimi gate ucunu kessen bile iletimde kalıyor sıfır noktasına kadar. Mosfet ise istenilen anda açılıp kapatılabiliyor.

Sıfır noktası ile şebeke varmı yokmu anlamak için bir sürü eklenti yapmak gerek öyle düşündüğün kadar kolay bir iş değil. Sen dediğimi yap diyeceğim ama boşuna uğraşıyorsun olmayacak bu iş.

Ete
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 18 Kasım 2018, 15:16:49
Ete hocam denemeleri şuan için lamba ile yapıyorum motor denemesine geçmedim henüz dediğinizi yapıp porta 5v vericem müsait olduğunuz zaman prorgramı düzenlerseniz denmesini yaparım...
Başlık: Ynt: AC DİMMER
Gönderen: F.T - 18 Kasım 2018, 15:31:27

Motorun türüde önemli aslında bu tip kontrollerde.Nasıl bir motor kullanılıyorsa.Neticede normal çamaşır makinası veya süpürge motorlarıda sıfırı yakala bekle ateşle yöntemi ile dimleniyor.Neticede onlarda endüktif yük.
Başka bir sorun var gibi.
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 18 Kasım 2018, 17:03:05
Ortada bir problem yok şuan lamba ile deneme yapıyorum işlemcinin ac voltajın kesildiğini anlaması ve programın başa dönmesi gerekiyor..
Başlık: Ynt: AC DİMMER
Gönderen: F.T - 18 Kasım 2018, 18:37:13
O zaman zerocross olmayınca resetle.Bir sayaç koştur ana kodda.Kesme olunca içinde sayacı resetle.Eğer kesme oluşmazsa sayaç değeri belirlediğin değeri aşmış ise sistemi resetle.
Başlık: Ynt: AC DİMMER
Gönderen: algorist - 19 Kasım 2018, 00:02:19
https://www.pcbway.com/project/shareproject/TDA1085C___NEU.html
Motor için bu devre ideal gözüküyor tabi seri motorsa.
Başlık: Ynt: AC DİMMER
Gönderen: mustafa_cmbz - 19 Kasım 2018, 01:13:59
Merhabalar.

Motor (ac fan motoru) sürerken triac kısmı tam olarak nasıl olmalı ?  Elinde motor sürmek için sorunsuz çalışan şeması olan varmı acaba ?
Başlık: Ynt: AC DİMMER
Gönderen: ete - 19 Kasım 2018, 10:16:12
Programın yeniden düzenlenmiş hali ile şemada yapılan ilaveler ilişikte dosyalarda göterilmiştir.
Hex dosyasıda içindedir.

Ete

https://1drv.ms/u/s!AvTLMS2z03FNgYMUu70OwsNq-sbFQg
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 19 Kasım 2018, 16:38:20
ete hocam programı denedim  similasyonda çalışıyor gözükküyor gerçekte devre üstünde sıkıntı var
 GPIO.1 giriş portuna 5v verdiğim zaman 5 volt çöküyor 5 voltu çıkarıp osilaskopla porta baktığımda  iğne sinyal görüyorum porta sanki çıkış portu gibi similasyondada porta 5v buton ile veriyorum çalışıyor fakat ordada port boşta iken baktığımda karasız bir kare dalga görüyorum...
pic bozuk olabilirdiye başka pic ilede denedim olmadı..
mantık olarak sistem çalışıyor..
similasyondada açılışta maksimumdan başlıyor gibi geldi bana 
https://yadi.sk/d/jGsC3pM6Ed_4sg
Başlık: Ynt: AC DİMMER
Gönderen: ete - 19 Kasım 2018, 17:13:02
Önceki programdan bir komut satırı kalmış kesme içinde (toggle GPIO.1) bu yapıyordur mutlaka. Düzlttim aşağıdaki linkten yükle. Denemeler yapıyordum. Yüksekten başlamayı ayarlamıştım. Onuda düzelttim.
Bak bakalım çalışıyormu?

https://1drv.ms/u/s!AvTLMS2z03FNgYMV_SOBTiEH9NiVUg

Ete
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 19 Kasım 2018, 22:22:39
deniyeceğim...
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 20 Kasım 2018, 12:34:18
Ete hocam programı denedim ac giriş portunu sıfıra çektiğim anda çıkış kesiliyor.. tamam
fakat ac girişi low da iken  triyak tetikleme çıkışında  rastgele tetiklemeler oluyor..
ve canlı devrede kesme yaparken  aniden kesmiyor  nerde yakalarsa bazen hızlı bazen gecikmeli kararsız kesiyor..
birde minumum seviyede alt limitte zero cros 20ms de bir tetikliyor

  Alt_limit=80  alt limit 100 ün altına düştüğünde  tetikleme problem oluyor 10ms yerine 20ms oluyor   voltajı sıfıra kadar indirmem 100 altına
düşmesi gerekiyor..
  Ust_limit=230
https://yadi.sk/d/_wa860Lz20NP7g
Başlık: Ynt: AC DİMMER
Gönderen: ete - 20 Kasım 2018, 16:16:35
Bu sıfır geçiş yakalama şemasını hiç beğenmedim. Bana kalırsa sorun şemada. Benim verdiğimi dene opto izolatörlü olan. Sorun olmaması gerek. Benim başka yapabileceğim bir şey yok maalesef.

Ete
Başlık: Ynt: AC DİMMER
Gönderen: ete - 20 Kasım 2018, 17:13:52
Bahsettiğin sorunla ilgili olarak simulasyonu epeyce inceledim.
Gördüğüm kadarı ile şebeke kesilince sistemi başa döndürmek yetmiyor. Zira program sürekli başa gidiyor orada kesmeler yeniden aktive ediliyor ve kesme oluşuncada istenmeyen triac tetiklemesi meydana geliyor. Burada çözüm şebeke kesilince o iki kesmeyide kapatmak ve programı başa göndermeden önce şebekein gelmesini beklemek olacak. Bu şekilde yaparsam sorun kalmıyor gözüküyor. Derleme yapabiliyor isen aşağıdaki programı bir dene. Bu arada programın başına açılış gecikmesi ekledim bu olmadan da sorun çıkıyor.

'Device 12F675
#CONFIG
  __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF
#ENDCONFIG
Define OSC 4

;I/O symbols
Symbol Triac_out = GPIO.0 ;triac pin
SYMBOL Test_giris= GPIO.1 ; Şebeke var yok girişi
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
Load_Value VAR Word 56
I VAR word 58
SURE VAR WORD 60
tus_basili VAR Byte
Alt_limit var byte
Ust_Limit var byte
'***********************************************************************************
 PAUSE 500
On Interrupt GOTO Interrupt_Detect
GoTo BEGIN
'************************************************************************************


'************************************************************************************
BEGIN:
  ANSEL=0
  SURE=0
  CMCON = 7 ;comparator kapali
  'OPTION_REG.7 = 0 ;pull-ups aktif
  OPTION_REG = %01010101 ;presc 1:64 ,External Interrupt Edge to rising edge
  TRISIO = %000111110;1-giris, 0-cikis
  WPU =%00110000
 
  ;interrupt (kesme) tanimlamalari
  T0IF = 0 ;TMR0 overflaw bayragini sil
  INTF = 0 ;External Interrupt bayragini silg
  Alt_limit=110
  Ust_limit=235
  Load_Value = ALt_limit
'  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 Test_Giris=0 then
       INTE=0:T0IE=0
       PAUSE 100
       WHILE TEST_GIRIS=0:WEND
       INTE=1:T0IE=1
       clear
       @  clrf PCLATH
       @  goto 0
   endif


  IF Dim_UP_Button=0 THEN
    WHILE DIM_UP_BUTTON=0 AND LOAD_VALUE<Ust_Limit
      LOAD_VALUE= LOAD_VALUE+1
'      if load_value=181 then load_value=180
      gosub DELAY 'pause 29
    WEND 
  ENDIF
 
    IF Dim_DOWN_Button=0 THEN
    WHILE DIM_DOWN_BUTTON=0 AND LOAD_VALUE>ALt_Limit
      LOAD_VALUE= LOAD_VALUE-1
'      if load_value=109 then load_value=110
      GOSUB DELAY 'pause 29
    WEND 
  ENDIF   
 
 
GoTo MAIN

delay:
      for I=0 to 500:next
      return
       
';bu degerler 50Hz gore ayarlidir
''*********************************************************************************************
DISABLE
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
  pauseus 100 'triyak tetiklemesi 100 uSn
  Low GPIO.0
  T0IF = 0
EndIf

Resume
ENABLE

Derleme yapamıyorsan ben derleyip koyayım.

Ete
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 20 Kasım 2018, 17:46:49
ete hocam bende picbasic yok proton var protona çevrip derliyicem siz derlermisiniz hata olmasın
bende derleyip bakıcam.. 
proton bunlara hata veriyor SURE VAR WORD 60 sondaki 60 değerini kapatmam gerekiyor...
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 20 Kasım 2018, 18:05:48
protonda derledim kesme yapıyor fakat maksimum ayarlanan değere çıktıktan sonra yapıyor  (port sıfırda iken gelen tetiklemeler düzelmiş  ...)

anında kesemiyor... böyle olduğunu kabul edelim sorun şuki ac den opto ile bu girişi
kontrol ediyorum optonun çıkışı ile anahtarlama yapıcam yerdeki sinyal Ac den okuduğu için zero cross sinyali gibi tetiklemeli oluyor velhasıl olması mümkün olmuyor bu işi soft olarak yapmamız gerek düşüncem optodan gelen 10ms niyelik tetikleme bilgileri ile bi sayaç saydırmak sayaç durduğu zaman işlem kesilsimesi... veya daha mantıklı bir yol...
Başlık: Ynt: AC DİMMER
Gönderen: ete - 21 Kasım 2018, 13:49:18
BU sistemin çalışması için AC şebeke girişinin tamamen kesilmesi gerekir.
Pic beslemesi çalışıyor ama AC beslemesi yani sıfır geçiş kısmı çalışmıyor ise sorun çıkıyor. Ama bu son hali simulasyonda kusursuz çalışıyor vede gerçek devrede de çalışması gerekir.
İşte derleme linki ;  https://1drv.ms/u/s!AvTLMS2z03FNgYMaxgV-J-5TFl92yQ

Bu işi soft olarak yapmamız gerek lafınınıda çözemedim bir türlü bu şekilde değilde soft olarak ne yapmak gerek onu anlat istersen.

Bu arada sıfır geçiş kesmelerini Timer-1 ile de zaman vererek denedim. Oda başka sorunlar getiryor. Şunu yaptım. Bizde her bir sıfır kesmesi 10 ms de bir oluyor. Ben maksimum süreyi 20 ms kabul ettim ve 21 ms içinde bir kesme gelmez ise sistemi resetle dedim. Çünki bu AC sinyalin kesilmesi anlamına geliyor. Sistem çalıştı ancak onda da kesmeler hemen sona ermiyor maalesef. Asıl sorun rest sonrası sistemin yeniden kurulup çalışır hale getirilmesi. Bu aşamda sistem kesmeleri aktif ediyor (program baştan başladığında) ve anında bir kesme oluşuyor. Buda yaşadığın sorunları oluşturuyor maalesef. Derleyip verdiğim en sorunsuz ve iyi çalışanı. Onun dışındakiler işe yaramazlar.
Unutma sistem resetlenince yeni baştan herşey aktif hale getiriliyor ve bu esnada yeniden bir iki kesme oluşuyor. Bunu önlemenin yolu şu sistem reset edecek hale geldiğinde hemen resetleme kesmeleri kapat sistem olduğu yerde beklesin ve şebeke yeniden gelidiğinde en baştan başlat. Bu son yolladığım bunu yapıyor onun dıındakilerin bunu yapması zor.

Ete
Başlık: Ynt: AC DİMMER
Gönderen: ete - 21 Kasım 2018, 15:46:41
Kendi sıfır geçiş devrem ile çalıştırdığımda alt limitin 103 ve üst limitinde 243 olduğunu görüyorum. Sen ise alt limit için 80'in altına düşmem gerek diyorsun halbuki simulasyondan bakarsan kesmenin ötesine geçiyor bu değerlerde ve sistem ozaman sapıtıyor. Çalışma alanın iki kesme arasıdır. Bu alanın dığına çıkarsan problemlerin başlar. Kısa yoldan o sıfır geçiş devreni değiştir derim.
Ete
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 22 Kasım 2018, 12:13:28
Ete hocam devreyi denedim similasyonda ve gerçekte çalışıyor fakat similasyonda bakarsanız sürekli
tekrarlıyor... Yani elektriği verdiğimde  çıkış yükseliyor ve kendiliğinden kesiliyor..
herhalde ben yapmak istediğimi analatamadım ...
Gerçek devrede similasyon daki  ac takip butonu yok.... (GPIO.1  GPIO.2 beraber  zero corosa bağlı  optocoupler ile...)
ben butonu similasyona denemek için koydum gerçekte yok 
Devrenin çalışma şekli AC gerilimi hem pic ve triaca verdiğimde yani komle beslemeyi..
Çıkış rampalı olarak yükselecek ayarladığım değere kadar buton ile maksimuma orada kalacak taaaki beslemeyi kesene kadar... tekrar beslemeyi komle kesip verdiğimde aynısını yapacak...


hocam birde ayarlama butonları çalışmıyor   maksimum değeri butonla ayarlamam gerekiyor  açılıp kapandığında
ayarladığım değeri hafızasında tutabilirmi...







     


Başlık: Ynt: AC DİMMER
Gönderen: ete - 22 Kasım 2018, 16:35:01
Ne istediğini ben anlayamıyorum maalesef. Devrenin beslemesini kesersen sistem duruyor. Tekrar gelene kadar bekliyor fazla kesik kalırsa kondansatörde boşalacağı için zaten sistem yeniden başlar. Butonlarda çalışıyor. Kusura bakma fazlası elimden gelmiyor.
Ete
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 22 Kasım 2018, 16:48:13
Ete hocam gönderdiğin dosyayı linkten indirip kontrol edermisin yanlış dosya olmasın...
emekler boşa gidcek yüzdük kuruğuna geldik...
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 22 Kasım 2018, 16:50:40
Devre enerji deyken up butona basılı tutunca yükselip tekrar sıfıra iniyor buton ile ayar yapılamıyor enson yazdığın kodu silince butonlar çalışıyor..
Başlık: Ynt: AC DİMMER
Gönderen: ete - 22 Kasım 2018, 17:12:52
Program doğru. Senin devrende bir şey var. İlişikte yeniden veriyorum. Yanında benim simulasyon devremle birlikte yolluyorum. Bu devre ile bir dene ve özellikle butonları dene.
Triac sinyalinin iki sıfır noktası arasında (skop da) nasıl ilerlediğine şahit ol.
AC girişi kes ve sinyalin nasıl kesildiğinide gör.
Benim başka yapacak bir şeyim yok maalesef.
Ete

https://1drv.ms/u/s!AvTLMS2z03FNgYMcGczxW1gWkaP5IQ

Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 22 Kasım 2018, 17:49:43
ete hocam denedim kendi simalasyonumda bir değişiklik yok sizin program 8.7 version bende çalışmıyor.. indirim ondad deniceğim..
up butanuna bastığın sürece yükseliyor sona gelince sıfırlıyor butona basmayı bırakınca da sıfırlıyor..
size bendeki simalasyonu ve gönderdiğiniz dosyayı gönderiyorum kontrol edersniz memnun olurum..

https://yadi.sk/d/6LlEqMNqciC4hw
Başlık: Ynt: AC DİMMER
Gönderen: F.T - 22 Kasım 2018, 18:46:54
Buton takılı kalıyor dikkat ettinmi.
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 22 Kasım 2018, 19:17:15
evet haberim var...butonu off yaptınmı sistem sıfıra dönüyor zaten....
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 22 Kasım 2018, 19:47:20
Ete hocam sizin similasyonu çalıştırınca problemi anladım...

GP1 portuna siz 1-0 veriyorsunuz  oysa ben ac den zeroo cros bilgisi veriyorum....zero cros kesilince  kesme işlemini yapsın diye ...

GP1 Portuna  ac gerilimden  0 -1 bilgisi veremiyorum doğrultmam gerekiyor tam doğrultunca kondastör kullanmam gerekli ozamanda gecikme oluyor başka bir çaresi varmı ac den 1-0 bilgisi nasıl alırım..
ac var yok bilgisi..  oraya role takabilirim fakat role takmak saçmalık olur.. ne yapabilirim...
Başlık: Ynt: AC DİMMER
Gönderen: ete - 22 Kasım 2018, 22:02:00
1 diyot ile DC ye çevirip 1uF kondansatör hatta 10uF kondansatörle filtre ederek kullanabilirsin. Bu kadarı bir sorun yaratmaz. KOndansatör sorun olur ise 100nf bağla yeterli olur.

Ete
Başlık: Ynt: AC DİMMER
Gönderen: harmanx - 04 Aralık 2018, 17:01:06
Selam  Ete hocam up tuşu basılı iken ac gerlim  kesime gittiği anda rampa tamamlanmadan kesime gitmiyor rampa tamamlanınca kesime gidiyor  tetikleme ...
vede gp3 girişine bir start butonu eklesek basılı iken program başlasın değilse çalışmasın... mümkünmü

https://yadi.sk/d/NZCOgs-Hi3ZEkA
Başlık: Ynt: AC DİMMER
Gönderen: mustafa_cmbz - 28 Aralık 2018, 10:45:05
Merakımdan soruyorum konuyu açan arkadaşın adı murat tezcan mıdır ?
Başlık: Ynt: AC DİMMER
Gönderen: dagadami - 20 Eylül 2023, 16:16:32
tarafımdan kaldırılmıştır
Başlık: Ynt: AC DİMMER
Gönderen: ete - 21 Eylül 2023, 09:06:39
Bu programı ben yazmadım. Yalnızca çalıştırılmasına yardımcı oldum.
Programda alt ve üst limitler var. Bunlar belirli bir amaca hizmet eden limitler.
Gerçekte böyle bir şey olmaması gerek. Ama gecikme için TMR1 sayacı kullanıdığı için pot bu limitler arasında bir değer vermesi gerekir.
Devreye pot ilave etmek zor bir iş değil. Buton pinlerinden birini Analog girişe çevirmek gerek. Mesela GPIO.4 (yani AN3). Bunun için TRISIO zaten giriş olarak ayarlanmış. ANSEL.4=1 yapınca o giriş analog hale gelir. Yapılacakları sırası ile yazarsam belkide kendin yaparsın.

-Symbol Dim_UP_Button = GPIO.4 satırı silinecek
- Değişken tanımlama kısmına bir değişken eklenecek HAM VAR WORD şeklinde
- programın baş tarafına;
DEFINE ADC_BITS 10    ' ADCIN resolution  (Bits)
DEFINE ADC_CLOCK 1    ' ADC clock source  (Fosc/8)
DEFINE ADC_SAMPLEUS 20 ' ADC sampling time (uSec)
satırları eklenecek.

-Programın baş taraflarına bir yere aşağıdaki komut satırını ekle;
- ADCON0=%00000000:ANSEL=%00011000

- Programa alt program olarak aşağıdaki satırlar eklencek DISABLE satırından öncesine.

ADC_BAK:
ADCIN 3,HAM
Load_Value=(ham*/3129)/100+110
RETURN

- Programdaki buton kontrollerini kaldıracaksın.
Programın MAIN etiketi altına bir yere,
GOSUB ADC_BAK  satırını ekleyeceksin hepsi bu kadar.

Ete

Başlık: Ynt: AC DİMMER
Gönderen: ajanda_ - 21 Eylül 2023, 11:31:09
ac dimmer deyince  aklıma  geldi. kullandığımız kalem havyalar için dimmer tarzı bir devre tasarlanabilir mi acaba ? 220 v AC  kablo ucunu kesip dimmere bağlayacaz uzun süreli çalışmalarda ısıyı kısacak  bir sistem olsa nasıl olurdu  ??
Başlık: Ynt: AC DİMMER
Gönderen: dagadami - 21 Eylül 2023, 13:08:33
yazılan iletilerin   mod onayı uzun suruyor konuyu başaka plartforma taşıyorum...
Başlık: Ynt: AC DİMMER
Gönderen: dagadami - 21 Eylül 2023, 18:31:44
Ete hocam değişikleri yaptım ama olmadı...
eksik bişey var...

Device 12F675
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_ON, CP_OFF, MCLRE_OFF,
Xtal 4

  ADCON0=%00001100  '11 = Channel 03 (AN3)
  ANSEL=%00011000  '= FOSC/8
  Declare Adin_Res 10      ' 10-bit çözünürlük
  Declare Adin_Tad FRC 8    '  osilatörü seçildi   
  Declare Adin_Stime 20    ' Örnekleme zamanı 20us
 
;I/O symbols
Symbol Triac_out = GPIO.0 ;triac pin
Symbol Test_giris= GPIO.1 ; Şebeke var yok girişi
Symbol Zero_cross = GPIO.2 ;zero-cross algilama pini                          =
''''''''''''''''  slindi  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
HAM VAR  Word  ' EKLENDİ
Load_Value VAR Word '56
I VAR Word '58
SURE VAR Word '60
tus_basili VAR Byte
Alt_limit var Byte
Ust_Limit var Byte
'***********************************************************************************
DelayMS 500
On Interrupt GoTo Interrupt_Detect
GoTo BEGIN
'************************************************************************************


'************************************************************************************
BEGIN:
  ANSEL.4=1  ''ekkkkk
  ANSEL=0
  SURE=0
  CMCON = 7 ;comparator kapali
  'OPTION_REG.7 = 0 ;pull-ups aktif
  OPTION_REG = %01010101 ;presc 1:64 ,External Interrupt Edge to rising edge
  TRISIO = %111110;1-giris, 0-cikis
  WPU =%110000
  '*********************************************************************************
  '  ANSEL=0
  'CMCON = 7 ;comparator kapali
  'OPTION_REG.7 = 0 ;pull-ups aktif
  'OPTION_REG.7 = 1 ;pull-ups pasif
  'OPTION_REG = %01010101 ;presc 1:64 ,External Interrupt Edge to rising edge 
 
  'TRISIO = %111110;1-giris, 0-cikis
  'WPU =%110000  ' Enable pull-ups On GP4, GP5
  '********************************************************************************
 
  ;interrupt (kesme) tanimlamalari
  T0IF = 0 ;TMR0 overflaw bayragini sil
  INTF = 0 ;External Interrupt bayragini silg
  Alt_limit=101
  Ust_limit=255
  Load_Value = ALt_limit
'  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 Test_giris=0 Then
      INTE=0:T0IE=0
      DelayMS 100
      While Test_giris=0:Wend
      INTE=1:T0IE=1
      Clear
      @  clrf PCLATH
      @  GoTo 0
    EndIf
 
' If Dim_UP_Button=0 Then
  ' While Dim_UP_Button=0 And LOAD_VALUE<Ust_Limit
    '  LOAD_VALUE= LOAD_VALUE+1
     
    ' GoSub delay 'pause 29
    'Wend 
  'EndIf
 
    'If Dim_DOWN_Button=0 Then
    'While Dim_DOWN_Button=0 And LOAD_VALUE>ALt_Limit
    ' LOAD_VALUE= LOAD_VALUE-1

    ' GoSub delay 'pause 29
  ' Wend 
  'EndIf 
 

GoTo MAIN

ADC_BAK:
ADCIN 3,HAM
Load_Value=(HAM*/3129)/100+110
Return

'delay:
    ' For I=0 To 2000:Next
    ' Return
       
';bu degerler 50Hz gore ayarlidir
''*********************************************************************************************
Disable
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

Resume
Enable
Başlık: Ynt: AC DİMMER
Gönderen: ete - 21 Eylül 2023, 18:58:35
Yapılmışı var ve halen kullanmaktayım.

https://etepic.com/index.php/topic,67.0.html

Ete
Başlık: Ynt: AC DİMMER
Gönderen: dagadami - 21 Eylül 2023, 21:33:10
Ete hocam
kodları düznledim bir yerde hata var    çalışmıyor
'****************************************************************
'*  Name    : AC_Dimmer_Control.bas                            *
'*  Author  : Your Name Here                                   *
'*  Date    : September 2023                                   *
'*  Version : 1.0                                               *
'*  Notes   : AC Dimmer Control with PIC12F675                  *
'****************************************************************

Device = 12F675
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_ON, CP_OFF, MCLRE_OFF
Xtal = 4

' ADC Configuration
ADCON0 = %00001100  ' Select Channel 3 (AN3)
ANSEL = %00011000   ' Set AN3 as analog input, Fosc/8
Declare Adin_Res = 10  ' 10-bit resolution
Declare Adin_Tad = FRC  ' Use the internal oscillator
Declare Adin_Stime = 20 ' Sampling time of 20us

' I/O Pin Symbols
Symbol Triac_out = GPIO.0   ' Triac control output
Symbol Test_giris = GPIO.1  ' Mains presence input
Symbol Zero_cross = GPIO.2  ' Zero-crossing detection input

' Interrupt Symbols
Symbol GIE = INTCON.7  ' Global Interrupt Enable
Symbol T0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
Symbol INTE = INTCON.4 ' External Interrupt Enable
Symbol T0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
Symbol INTF = INTCON.1 ' External Interrupt Flag

' Variables
Dim HAM As Word       ' ADC result
Dim Load_Value As Word ' Dimming level
Dim I As Word         ' General-purpose variable
Dim SURE As Word      ' General-purpose variable
Dim Alt_limit As Byte ' Lower dimming limit
Dim Ust_Limit As Byte ' Upper dimming limit

'********************************************************************
' Initialization Section
'********************************************************************

DelayMS 500

On Interrupt GoTo Interrupt_Detect

GoTo BEGIN

'********************************************************************
' Main Program Loop
'********************************************************************

BEGIN:

  ' Analog and I/O Setup
  ANSEL.4 = 1 ' Enable AN4 for analog input
  ANSEL = 0    ' Configure other pins as digital
  CMCON = 7    ' Disable the comparator
  OPTION_REG = %01010101 ' Prescaler 1:64, External Interrupt Edge: Rising
 
  ' TRISIO = %111110 ' Set GP1 as input, others as output
  ' WPU = %110000   ' Enable pull-ups on GP4 and GP5 (if needed)

  ' Interrupt Configuration
  T0IF = 0    ' Clear TMR0 overflow flag
  INTF = 0    ' Clear the external interrupt flag
  Alt_limit = 101 ' Set the lower dimming limit
  Ust_Limit = 255 ' Set the upper dimming limit
  Load_Value = Alt_limit ' Initialize the dimming level

  ' Enable Interrupts
  INTE = 1    ' Enable External Interrupt
  GIE = 1     ' Enable global interrupts

' Main Program Loop
MAIN:
  If Test_giris = 0 Then
    INTE = 0
    T0IE = 0
    DelayMS 100
    While Test_giris = 0
    Wend
    INTE = 1
    T0IE = 1
    Clear
    @clrf PCLATH
    @GoTo 0
  End If
 
  ' Add your main program logic here
 
  GoTo MAIN

'********************************************************************
' Subroutines
'********************************************************************

ADC_BAK:
  ADCIN 3, HAM
  Load_Value = ((HAM * 3129) / 100 + 110) / 10 ' Adjust scaling if needed
  Return

'********************************************************************
' Interrupt Service Routine
'********************************************************************

Interrupt_Detect:
  If INTF = 1 Then
    TMR0 = Load_Value
    T0IE = 1 ' Enable TMR0 overflow interrupt
    INTF = 0 ' Clear INT Flag
  End If

  If T0IF = 1 Then
    High Triac_out
    DelayUS 100 ' Triac trigger delay (adjust as needed)
    Low Triac_out
    T0IF = 0
  End If
  Resume
End
Başlık: Ynt: AC DİMMER
Gönderen: ajanda_ - 22 Eylül 2023, 17:49:45
Alıntı yapılan: ete - 21 Eylül 2023, 18:58:35Yapılmışı var ve halen kullanmaktayım.

https://etepic.com/index.php/topic,67.0.html

Ete


evet bende  biliyorum birkaç defa yaptım çok hoşuma  gitmedi bu devre çok kararlı çalışan bişey değil..
benim dediğim bu tarz  birşey olacak  :  https://www.pttavm.com/ac-220v-2000w-motor-hiz-kontrol-dimmer-devresi-voltaj-regulatoru-p-258239071?utm_source=akakce.com&utm_medium=fiyat-kiyaslama&utm_campaign=akakce&v=1.18
Başlık: Ynt: AC DİMMER
Gönderen: EGE - 22 Eylül 2023, 18:57:20

(https://i.ibb.co/1Rz5tgz/D-M.jpg) (https://ibb.co/1Rz5tgz)
Başlık: Ynt: AC DİMMER
Gönderen: mg1980 - 22 Eylül 2023, 21:43:29
Ete hocamın projesini ben de yapmıştım... gayet de güzel çalışıyor. Verdiğiniz linkteki proje falan değil, her yerde bulunabilen basit bir şey...