Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

ccs c de wdt

Başlatan fahri-, 25 Haziran 2010, 11:20:03

fahri-

Arkadaşlar,
Projemde çift yönlü bir AC motoru sağa ve sola döndürerek bir vanayı açıp kapatıyorum.
Kullandığım pic 18F2520 I/P, kullandığım program CCS S v4.104 .
Fuse leri dışarıdan en az etkilencek şekilde konfigire ettim. NOMCLR, INTRC (osc yi 4MHz de çalıştırıyorum)
Motoru, optolarla izole ettiğim rölelerle sürüyorum.
PCB de bildiğim her türlü önlemi aldım. 100n lar, pic şasesi ve röle şaseleri ayrı (besleme de ayrı. 2x12 trafo kullanarak)
Röle kontaklarına RC snubber koydum.

Problem:  Resetlenme problemi yok. Pic bir süre çalıştıktan sonra kitleniyor.Bu süre belli değil. bazen 1 günde bazen 3 günde bir kilitleniyor.
Çözmek için WDT ı kullandım. Programın döngüsünde restart_wdt()  rutini ile kitlenmeleri engelleyebiliyorum. Fakat programda sadece 1 adet ve program döngümün başında kullanırsam cihazım kitlendiğinde kendini wdt ile resetliyor ve normal çalışmaya devam ediyor.
Ancak tek bir yerde restart_wdt()  kullanmak yetmiyor. Programın içerisinde çeşitli alt fonksiyonlarda da restart_wdt()  kullanmak zorundayım. İşte problem de burada başlıyor. Birden fazla restart_wdt()  kullandığımda kilitlenme tekrar başlıyor.
Benim aklıma gelen şu: pic dışarıdan parazit ve gürültülerden etkilendiğinde programda istem dışı yerlere atlama oluyor ve rastgele bir döngüye giriyor. Bu döngü içerisinde kullandığım restart_wdt()  rutini denkgeldiğinde  cihaz döngüden resetlenerek çıkamıyor.
Konuyla ilgili çok araştırma yaptım. Bu problemin çok rastlanan genel bir olay olduğunu gördüm. Ama çözüm önerilerinin hiç biri problemimi çözmeye yetmedi. Bu konuda sıkıntı yaşamış  ve çözmüş arkadaşların ya da bu konuyla ilgili fikri olan arkadaşların fikirlerini öğrenmek isterim.
Teşekkürler.

JKramer

Alıntı yapılan: fahri- - 25 Haziran 2010, 11:20:03
...
Ancak tek bir yerde restart_wdt()  kullanmak yetmiyor. Programın içerisinde çeşitli alt fonksiyonlarda da restart_wdt()  kullanmak zorundayım. İşte problem de burada başlıyor. Birden fazla restart_wdt()  kullandığımda kilitlenme tekrar başlıyor.
...
Bu WDT kullanımına biraz ters olmaz mı? Programın ana döngüsünü, mesela 2304 ms'den önce tamamlayacak şekilde değiştirmek mümkün değil mi?

fahri-

#2
Kontrol tuşlarıyla setup değerlerini değiştirmek gerekiyor. Setup değerlerini ayarlamak için ana döngüden çıkıp setup fonksiyonu oluşturmam gerekiyor. Bu fonksiyonda kalma süresi çok uzun olabiliyor. 1dk 2 dk gibi. Bu yeni fonksiyonda iken pic in wdt reseti atmaması için mecburen bu fonksiyon içerisinde de restart_wdt() kullanmak zorundayım. Bu nedenle tek yerde kullanmak yetmiyor. 

controller

Örneğin WDT 2304 ms ise, 2000 ms ye bir timer kurup, timer kesmesine bir adet  restart_wdt(); yazmanız sorununuzu çözebilir. Programın çalışma noktasından bağımsız her 2000 ms de bir restart_wdt(); çalışmış olur.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

fahri-

Alıntı yapılan: controller - 25 Haziran 2010, 11:55:54
Örneğin WDT 2304 ms ise, 2000 ms ye bir timer kurup, timer kesmesine bir adet  restart_wdt(); yazmanız sorununuzu çözebilir. Programın çalışma noktasından bağımsız her 2000 ms de bir restart_wdt(); çalışmış olur.
Dediğinizi yaptım. Kilitlenme sırasında da timera gidip restart_wdt() olduğundan kilitlenmeden kurtulunmuyor.

picmanya

#5
işlemciyi değiştirip bir daha denermisin?senin devre mantığını yitirmiş durumda şu anda.
ikinci sıfır işlemcidede aynı sorun varsa senin devre üzerine gitmemiz gerekebilir kıristal kısmdan ve beslemeden başlamak üzere.

fahri-

2. değil 10. cu işlemciyi kullandım. problem aynı. Devrede dahili osilatörü kullanıyorum. besleme 7805 li basit bir regülatör. En son olarak beslemeyi 34063 lü smps ile yapacağım.

picmanya

fahri kartın şematik çizimi yani devre elemanlarının bağlantılarının göründüğü çizimin varmı?
ben bu güne kadar hiç dahili işlemci osc si kullanmadım profesyonel uygulamalardada buna hiç rastlamadım.işlemcinin en ufak ısınmasında sorun çıkarttığı bilgisi en azından zamansa lolarak bir yerden kulağımda kalmış

fahri-

şema bu:
http://rapidshare.com/files/402881547/sema.png.html

zamanlama problemim olmadığı için dahili osc yi kullanıyorum. Harici osc de kullandım. Yine de kilitlenmeyi önleyemedim


JKramer

Alıntı yapılan: fahri- - 25 Haziran 2010, 11:45:09
Kontrol tuşlarıyla setup değerlerini değiştirmek gerekiyor. Setup değerlerini ayarlamak için ana döngüden çıkıp setup fonksiyonu oluşturmam gerekiyor. Bu fonksiyonda kalma süresi çok uzun olabiliyor. 1dk 2 dk gibi.
Bu kısmı biraz açmanız mümkün mü? Belki farklı bir mantıkla kodda değişiklik yapıp tek restart_wdt() kullanmanız mümkün olabilir.(Bir tane kullandığınızda sorunun çözüldüğünü yazdığınız için soruyorum.) Set değerleriyle vana pozisyonunu mu belirliyorsunuz?

fahri-

#10
Set değerleri ile vana pozisyonlarını ayarlıyorum. Dediğinizde haklısınız. Program mantığını değiştirerek dediğiniz yapılabilir. Ama oldukça zor olacak. Çünkü program yaklaşık 1000 satır. Şu anda aklıma gelen tek çözüm de sizin dediğiniz gibi. Program mantığını değiştirmeye çalışıyorum.
Ama esas araştırdığım konu bu olay neden kaynaklanabilir? Pic in birçok endüstriyel uygulamarda kullanıldığını gördüm. Hatasız çalışıyor. Ama böyle bir problem neden oluşuyor ve bu problemin gerçek çözümü nedir?
program mantığım basit şekilde şu şekilde

main () {
        for( ;; ){     
              restart_wdt();
              if (tus_basildi) menu();
              pozisyon_olc();
              pozisyon_ayarla();
              pozisyon_goster();
         }
}
menu(){
       for( ;; ){
              restart_wdt();
              yeni_deger_gir();
              if (giris_tamam) break;
       }
       return;
}
"
"
"
     

JKramer

#11
Besleme hatları ayrı olduğuna göre hattan kaynaklanan bir girişim olamaz sanırım. Bence burada önemli olan cihazınızı kilitlenmeye zorlamaya çalışıp dediğiniz gibi sorunun kaynağını bulmaktır.

Mesela yazılımdan kaynaklı bir sorun olmadığına emin olmak için sahada değil de masaüstünde uzun süre çalıştırabilirsiniz. Olmazsa cihazın çalıştığı yerde başka hangi makinalar varsa onları yoğun bir biçimde kullanabilirsiniz.

Bir de kilitlenme sonuçları neler? Vana pozisyon ayarı için birkaç buton ve bir gösterge olduğunu varsayarsak kilitlenme yaşandığında gösterge ve butonlara tepki ne durumda? Belki B0 portuna geçici olarak bir buton koyup INT_EXT kesmesi yardımıyla bir led yakmayı deneyebilirsiniz.

Ek:

Kesinlikle menu()'deki sonsuz döngüden kurtulmalısınız.

fahri-

Sorun yazılımla ilgili değil. Masa üzerinde 1 ay çalıştırdım. Hiç sıkıntı yok. Vana motorunu bağladığımda kilitlenme oluyor.
Problemin sebebi motorun sağa ve sola döndürülürken meydana gelen zıt emk nın röle kontaklarında meydana getirdiği arklar olduğunu düşünüyorum. Röle kontaklarına 22n kondansatör bağladığımda problem çok azalıyor.
Benim anlamak istediğim, bu arklar pici ve picdeki programımı nasıl etkiliyor ve kilitliyor. Pic parazitten resetlense anlarım. ama reset de yok.
pic kilitlendiğinde sonsuz bir döngüye mi giriyor yoksa tamamen mi çalışmayı durduruyor.
Dediğinizi deneyeceğim. int_ext ile hariçden müdahale ettiğim de belli olacak.

picmanya

#13
siz niye optoları pic üzerinden sıfıra çekerek sürüyorsunuz bence bunu +5V ile bir direnç bağlayarak sürün derim.
olmadı madem böyle yaptınız direnci picin bacağının hemen dibine bağlayıp burdan optonun şase beslemesini sürün optonun diğer + besleme bacaklarını direkt +5 volta bağlayın.

ama sizin asıl büyük sorun bence şurda;
trafoyu iptal edecen kardeş! anladığım kadarı ile sizin valf bobin veya röleler dc 24V.
bir adet uygun güçde 220V AC girişli 24V dc düz çıkışlı bir power supply anahtarlamalı güç kaynağı alacaksın çok pahalı değil bunlar fiyatını koy bir kenara düzgün iş çıksın istiyorsan bunu kullanman şart evde masada çalışır saniyede şişer devren.burdan uygun diyot ve kondansatörlerle iki hat oluşturacan bir hat röle valf bobinleri sürecek diğer yalıtılmış hat pic için gerekli dc beslemeyi sağlayacak elemanlara gidecek.
toprak hatları aynı olacak ama valf ve rölelerinki kalınca ve kısa olacak
döner dolaşır bu noktaya gelirsin ilk bence bunları uygula.
senin şemadaki gibi bağlantı olmazki direkt sorunlu görüyorum şemayı trafo ve bağlantısından kaybediyor.

SiVRiSiNEK

Alıntı yapılan: fahri- - 26 Haziran 2010, 14:13:28
Röle kontaklarına 22n kondansatör bağladığımda problem çok azalıyor.

röle ile sürdüğün yük AC ise röle kontaklarına uygun voltajda varistör takıp dene bence
yok eğer DC ise röle yerine transistör mosfet kullanmayı dene