4 buton 4 röle açma - kapama sorunu

Başlatan hakerten, 31 Ağustos 2015, 02:37:13

hakerten

Arkadaşlar merhaba,

PIC16F877A ile 4 buton kullanarak, 4 röleyi açıp kapayacak bir devre programlamaya çalışıyorum. Devremi proteus üzerinde oluşturdum.  Tam olarak çalıştığından emin olmadan, gerçek devreye aktarmak istemedim. Ekte devre şemalarını ve yazılımı da koydum.  Yardımcı olabilirseniz çok makbule geçer.

Bir kaç sorum var:
1- her bir röle için bir buton var.  Aynı tuşa basarak röleyi açabilmek, sonra da aynı tuşla kapatabilmek istiyorum.  Açmasına açıyorum ama kapatmayı başaramadım.
2 - Ayrıca, mesela 2 numaralı motor çalışırken, 3 numaralı motorun butonuna basında 2 numaralı motoru kapatıp, 3'ü açıyor.  halbuki ben ikisi de çalışsın istiyorum.  Program da aslında 2 numarayı kapatmaya yönelik bir yazılım yok, ama acaba atladığım bir şey mi var? Neyi kaçırıyorum?
3 - her bir röle devresine led koymak istedim, ancak led'lere gelen voltajı ölçtüğümde çok düşük olduğunu bunun da LED'i beslemeye yetmediğini görüyorum.  Acaba PORTD'yi kullanmamla ilgili bir sorun olabilir mi? Yoksa, röle devresinde BDX darlington'ları kullanmamdan  mı kaynaklanıyor?

Ekteki şemada PIC'in diğer çıkışlarında başka konular olduğunu göreceksiniz, devre biraz daha büyükçe bir projeyi içerdiği için, diğer kısımlarını şemadan ayıkladım. Daha sonra modülleri birleştireceğim.  Dolayısıyla onlara takılmamanızı rica ediyorum.

Teşekkürler.

Selamlar.

Hakan

blueboard

#1
Isis dosyasını bulamıyorum. "PDSRJ" uzantılı bir dosya var ama açılmıyor.

ete

Bir çok kez dile getirdim ama hep atlanıyor. Simulasyon versiyon 8.xx kullananlar lütfen devre şemasını jpg olarak da eklesinler. Pek çok kişi versiyon 8 kullanmıyor (ben dahil). Hal böyle olunca da simulasyon dosyalarını açamadığımız gibi şemayı görme imkanımızda olmuyor.

Programında bazı kusurlar var önce onları açıklayacağım.

Kusur-1: 16F877A işlemcisinde A portu default olarak komparataör olarak açılır. Programında A portunu kullanmıyorsun ama kullanabilirdinde.
Belkide kullanıyorsun çünki şemayı göremedim. Her neyse Komparatörlerin iptali için CMCON=7 komutunu programın başına eklemen gerekir.

Kusur-2: Programına sistemin hangi frekansta çalıacağını yazmamışsın. Bunu yazmazsan zamana bağlı komutların doğru çalışmaz. Bunu yazmayı alışkanlık haline getiriniz. Define OSC 4 olarak eklenecek programın başına.

Kusur-3: Sistemde LCD kullanılıyor ise mutlaka LCD açılış işleminin yapılması gerekir. Buna Intitalize deniliyor. LCDOUT $fe,1 ve peşine 200 ms lik bir gecikme koyarak bu işi halledebilirsin. Bu işlem LCD yi açar registerleri ayarlar ve ekranı silip bir şey gösterecek hale getirir.
Bu işlem mutlaka bütün tanımlamalar yapıldıktan sonra BASLA satırından evvel yapılmalıdır. Burada verilen 200 ms aynı zamanda PİC açılış gecikmesi olarak kabul edilebilir. Bu gecikme 200-500 ms aralığında bir değer olarak LCD kullanılmasa bile BASLA satırından evvel verilmelidir.

Kusur-4: Programında bolca LOW Role2, HIGH Role1 şeklinde komutlar kullanmışsın. Bu komutlar ilgili pini önce çıkış olarak ayarlar sonra pine gerekli değeri verir. Halbuki senin röle pinlerin zaten çıkış olarak ayarlanmış durumda. Bu komutları kullandığın için portun diğer pinleride bundan etkileniyor. Bu nedenle LOW ROLE1 yerine ROLE1=0 , HIGH ROLE2 yerine ROLE2=1 şeklinde komut kullanman daha doğru olur.
Bir pini tek tuşla açıp kapatmak için en doğru komut TOGGLE komutudur. TOGGLE Role1 denildiği zaman o pin önceden LOW ise HIGH yapılır , önceden HIGH ise LOW yapılır. Verdiğim programda bu mantığı kullandım.

Kusur-5: Programda Tuş (buton) kullanıyorsanız mutlaka butonun bırakıldığından da emin olmanız gerekir. AKsi halde çok hızlı çalışan programda aynı tuşun henüz bırakılmamış olması yeniden butona basılmış gibi işlem görerek yeniden konum değiştirilmesine sebep olacaktır.

Kusurlar bu kadar.  Genelde bir porta bağlı pinlerin bir birlerini etkilemeden açılıp kapanmalarını sağlamak için lojik operatörler kullanılması daha doğru olur. Şayet verdiğim sistem (toggle) doğru çalışmaz ise aşağıdaki sistemi denemeni öneririm.

Role1 in aktif edilmesi:  PORTD=(PORTD & %11111110)+1
Role1 in pasif edilmesi  PORTD=PORTD & %11111110

Role2 nin aktif edilmesi: PORTD=(PORTD & %11111101) + 2
Role2 in pasif edilmesi  PORTD=PORTD & %11111101

Role3 ün aktif edilmesi: PORTD=(PORTD & %11111011) + 4
Role3 ün pasif edilmesi  PORTD=PORTD & %11111011

Role4 ün aktif edilmesi: PORTD=(PORTD & %11110111) + 8
Role4 ün pasif edilmesi  PORTD=PORTD & %11110111

Ete




















sonmoikan

#3
Yapmak istediğin şey basit aslında.
if buton1=0 then toggle role1
Şeklinde bir kod yazarsan butona her bastığında, motor duruyor ise çalışır, çalışıyor ise durur.

Diğer ayrıntıları ETE Hocamız yazmış zaten
ABDULLAH

hakerten

Ete Hocam ve sevgili Son Moikan,
Yönlendirmeleriniz için ve tecrübelerinizi paylaştığınız için çok teşekkür ederim.
Şu anda PIC üzerinden ve daha önce yaptığımz tek pin girişli analog keypad üzerinden, istediğim röleyi açıp kapatabiliyorum.
Teşekkürler.

Selamlar.

Hakan

hakerten

Arkadaşlar merhaba,
Benzer sorunları yaşayan arkadaşlar için konunun devamını da yazmak istedim.  Ete Hocam ve Son Moikan'ın yönlendirmeleri sayesinde keypad üzerinden istediğim röleyi açar kapar duruma geldim.  (Bu arada analog tek pin girişli keypad uygulamasından vazgeçtim, çünkü tutarlı voltajlar alamıyorum, her seferinde beni çok uğraştırıyordu.  Doğrudan 8 pini PIC'e bağlayarak keypad sorununu aştım.)

Şimdi 4 rölenin uçlarına yeşil led bağladım.  Ayrıca 1.röleye step motor, 2.röleye DC motor bağladım. Devreyi 7805 üzerinden 5 voltla besliyorum.  Rölenin bobin uçlarına giden besleme voltajı 9 volt, röle çıkışlarını da şimdilik 9 volt yaptım.  Rölenin bobin uçlarınde bc547 üzerinden geliyor ve ters EMK için 1N4007 diyotlarım var.

Şöyle bir sorun yaşıyorum.  Step motorda sorun yok.  Ancak 2.röledeki dc motoru kapatırken, sanıyorum devreye ters emk geliyor, ve LCD'de görüntülerim yana kayıyor.  Bunu engellemek için ne yapabilirim bilemiyorum.  Başka bir sorun olabilir mi acaba?  bu motoru 2. röleden çıkarıp, 1.röleye bağladım, orada da aynı sorun karşıma çıktı.

Devremin proteus'taki şemasını ekte gönderiyorum.  Yardımcı olabilirseniz çok makbule geçer.

Teşekkürler.

Hakan

Hattuşa

kanımca besleme girişinize 1000uF gibi değerlerde cond. girerseniz ani voltaj değişimlerinde devreniz ve lcd ekranınız etkilenmez.

Burak

#7
Alıntı yapılan: hakerten - 03 Eylül 2015, 00:04:01
Arkadaşlar merhaba,
Benzer sorunları yaşayan arkadaşlar için konunun devamını da yazmak istedim.  Ete Hocam ve Son Moikan'ın yönlendirmeleri sayesinde keypad üzerinden istediğim röleyi açar kapar duruma geldim.  (Bu arada analog tek pin girişli keypad uygulamasından vazgeçtim, çünkü tutarlı voltajlar alamıyorum, her seferinde beni çok uğraştırıyordu.  Doğrudan 8 pini PIC'e bağlayarak keypad sorununu aştım.)

Şimdi 4 rölenin uçlarına yeşil led bağladım.  Ayrıca 1.röleye step motor, 2.röleye DC motor bağladım. Devreyi 7805 üzerinden 5 voltla besliyorum.  Rölenin bobin uçlarına giden besleme voltajı 9 volt, röle çıkışlarını da şimdilik 9 volt yaptım.  Rölenin bobin uçlarınde bc547 üzerinden geliyor ve ters EMK için 1N4007 diyotlarım var.

Şöyle bir sorun yaşıyorum.  Step motorda sorun yok.  Ancak 2.röledeki dc motoru kapatırken, sanıyorum devreye ters emk geliyor, ve LCD'de görüntülerim yana kayıyor.  Bunu engellemek için ne yapabilirim bilemiyorum.  Başka bir sorun olabilir mi acaba?  bu motoru 2. röleden çıkarıp, 1.röleye bağladım, orada da aynı sorun karşıma çıktı.

Devremin proteus'taki şemasını ekte gönderiyorum.  Yardımcı olabilirseniz çok makbule geçer.

Teşekkürler.

Hakan

1N4007'nin iletime geçme süresinde bi sıkıntı olabilir .. BAT54C türevi schottky diyotlar kullanmayı dene ... Ayrıca güç kaynağının gücünde yani bastığı akımda bir problem olabilir anlık olarak .. SMPS'ten şaşma ...

Burak
Ω Gens Una Sumus Ω

İlyas KAYA

Alıntı yapılan: hakerten - 03 Eylül 2015, 00:04:01
Arkadaşlar merhaba,
Benzer sorunları yaşayan arkadaşlar için konunun devamını da yazmak istedim.  Ete Hocam ve Son Moikan'ın yönlendirmeleri sayesinde keypad üzerinden istediğim röleyi açar kapar duruma geldim.  (Bu arada analog tek pin girişli keypad uygulamasından vazgeçtim, çünkü tutarlı voltajlar alamıyorum, her seferinde beni çok uğraştırıyordu.  Doğrudan 8 pini PIC'e bağlayarak keypad sorununu aştım.)

Şimdi 4 rölenin uçlarına yeşil led bağladım.  Ayrıca 1.röleye step motor, 2.röleye DC motor bağladım. Devreyi 7805 üzerinden 5 voltla besliyorum.  Rölenin bobin uçlarına giden besleme voltajı 9 volt, röle çıkışlarını da şimdilik 9 volt yaptım.  Rölenin bobin uçlarınde bc547 üzerinden geliyor ve ters EMK için 1N4007 diyotlarım var.

Şöyle bir sorun yaşıyorum.  Step motorda sorun yok.  Ancak 2.röledeki dc motoru kapatırken, sanıyorum devreye ters emk geliyor, ve LCD'de görüntülerim yana kayıyor.  Bunu engellemek için ne yapabilirim bilemiyorum.  Başka bir sorun olabilir mi acaba?  bu motoru 2. röleden çıkarıp, 1.röleye bağladım, orada da aynı sorun karşıma çıktı.

Devremin proteus'taki şemasını ekte gönderiyorum.  Yardımcı olabilirseniz çok makbule geçer.

Teşekkürler.

Hakan

Role besleme girişlerine ters olan diyotlar roleden gelen zıt emk içindir.

Motor için de ayrıca aynı rolede olduğu gibi hızlı diyotlar kullanmalısınız.
Eğer motor tek yön ise 1 tane ters diyot yeter iken , iki yönlü çalışıyor ise 4 adet BYV26 gibi hızlı diyot bağlamalısınız.
Hızlı diyotlar köprü diyot mantığı ile motorun kablolarından gelen artılar bir tarafa eksiler bir tarafa toplanır ve besleme gerilimine verilir.
byw26 serisi bulamaz iseniz UF4007 ile yaptığım birçok deneyde herhangi sorun teşkil etmedi.

Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

hakerten

İlyas Bey merhaba,

Tavsiyeniz üzerine, ters diyotu doğrudan motorun altına lehimledim. Elimde sadece 1n4007 olduğu için, onu kullandım.  LCD'deki kayma düzeldi.  Tavsiyeniz için çok teşekkür ederim.

Ancak motor çalışırken, birkaç saniye sonra kendiliğinden duruyor. Devre voltajlarımı ayarlı regülatörden alıyorum.  Motor rölesini ayrı beslemeyle 9V besliyorum. PIC'i 7805 üzerinden ayrı besliyorum.  Bu motor çalıştığında, motorun bağlı olduğu kanalda amperaj artıyor (ki bu normal, bunda sorun yok), ancak PIC'i beslediğim kanaldaki amperaj'da da artık görüyorum. 200mA'lara çıkıyor. Belki de, rölenin birkaç saniye sonra durmasının sebebi bu fazla akımdan dolayı PIC'in kendini reset'lemesidir diye düşünüyorum.  Acaba bu düşüncem doğru mudur? Doğruysa şayet, bu akımı nasıl kontrol altına alabilirim.   Elimdeki 1n4007 diyot yetersiz kalıyor olabilir mi?

Devremi breadboard üzerinde kurmuş olmamdan kaynaklı bir durum da olabilir.  Bu konudaki tecrübelerinizi paylaşırsanız sevinirim.
Teşekkürler.

Hakan

Powered by EzPortal