pic neden bozulur

Başlatan vatandas30, 21 Kasım 2005, 12:14:48

vatandas30

cevap veren yokmu.
buton hatlarının yanından lambaların enerji hatları geçiyor zannedersem. ve buton hatları bundan etkileniyor. bunun önüne nasıl geçebiliirim. devrenin beslemesinde bir problem yok.
fikirlerinizi bekliyorum.
arkadaşlarla kafamız durdu bir çözüm bulamadık.

mhk

Bence 16F84 yerine 16F628 ve bu işlemcinin dahili OSC sini kullanarak yap. Bütün bacak bağlantıları 16f84 ile aynı ayrıca kod hazıfzası 2K parazitlerden daha az etkileniyor. Bu konuda forumda şu sayfaları okumanda yarar var.
http://picproje.com/index.php/topic,5971&highlight=16f628

http://picproje.com/index.php/topic,2588&postdays=0&postorder=asc&highlight=16f628&start=15

Kolay gelsin
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

Macera

beslemende problem var gibi gözüküyor.
Ani voltaj değişikliği pici sapıttırıyor olabilir.
7805 yerine FAST denilen switch mode power supply takıp denesene.
Yada daha kolay ve ucuzu  bir bilgisayar güç kaynağından alacağın 5 volt ile devreni test amacıyla çalıştır.
"Art without engineering is dreaming; engineering without art is calculating." -- Steven K. Roberts

vatandas30

devreyi yerine bağlamadan günlerce çalıştırdık. bir problem çıkmadı.
ama yerine (okulun duvarına) bağladık. yalnızca odaların lambalarını söndürünce (bazen) butonlardan birisi basılmış gibi davranıyor.
sebebini tahmin ediyorum. buton hatlarının yakınından lambaların hatları geçiyor. ve lambaları söndürdüğümüzde (fluoresan) balasttaki zıt emk dan dolayı buton hattındaki kablolarda gerilim indükleniyor. böylece pic butonları basılmış gibi algılıyor. butonlara paralel 100nf. kondansatör bağladık hiç bir işe yaramadı.

balkes10

benimde başımda aynı şey 16f628 i programlıyorum hatasız fakat devrede çalışmıyor başka taktığımda çalışıyor. bir tane var programladığım halde bir türlü çalışmadı entegre sağlam eminim ?
SADECE ŞAHLAR HAMLELERİ ÖNCEDEN SEZER

vatandas30

balkes arkadaşım
hatasız programlanıyor diye picin sağlam olduğundan emin olma. yukarıda benim yazdıklarıma bir bak. picin portb.5 pini , gnd' si ile kısa devre oldu. ölçmesem bu durumun farkında bile değildim. pic hatasız bir şekilde yine programlanabiliyor.

ete

Bir pic programlanır iken yalnızca data giriş bacağı, clock giriş bacağı ve programlama voltajının verildiği bacak aktif oluyor. Diğer bacaklar bozuk bile olsa pic programlanabiliyor. Bu yüzden vatandaş30'un dedikleri doğru.
Çok başıma gelmiştir. Yanlışlıkla pic'in bazı bacaklarını bozuyorum ama fazladan bacak var ise işimi diğer bacağa aktarıp (programı değiştirerek) pici yine kullaıyorum. Ancak yanmış olan bacağın tabiiki bir daha kullanılma şansı yok.
ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

nurim

Alıntı yapılan: "vatandas30"cevap veren yokmu.
buton hatlarının yanından lambaların enerji hatları geçiyor zannedersem. ve buton hatları bundan etkileniyor. bunun önüne nasıl geçebiliirim. devrenin beslemesinde bir problem yok.
fikirlerinizi bekliyorum.
arkadaşlarla kafamız durdu bir çözüm bulamadık.

100nF,ve 1uF kondansatörleri paralel olarak,doğrudan pic'in üstünden besleme bacakları arasına bağlayıp bir denemeni öneririm.Benim bir devremde işe yaramıştı.

Kolay gelsin
nurim
"Bilgi paylaştıkça artar ,acı ve keder paylaştıkça azalır"

vatandas30

cevabın için teşekkür ederim.
anladığım kadarıyla devremde pic resetlenmiyor. buton hatlarında bir problem var . dediğini zaten başta yaptım. fayda etmedi. benim buton hatlarındaki paraziti gidermem gerek.

vatandas30

şunu da belirteyim. buton hatlarından bazıları uzun. 10-15 metre civarı. ama lambaları söndürmeden gayet güzel çalışıyor :D

ete

@Vatandas30,

Sorunun ilgimi çekiyor. Öyle anlaşılıyorki ya senin B portunda açmış olduğun pullup lar iş görmüyor yada gerçekten uzun olan buton kabloları bazen bir anten gibi etraftan sinyal alıp bunu pic e tuşa basılmış gibi iletebiliyor. Kabloların alacağı sinyalin çok kuvvetli olmaması gerekir. Bunu yenebilirsin sanırım. Öncelikle basılmış imajını veren tuş sabit bir tuşmudur onu bir açıkla istersen. Yoksa rastgele bir tuşmudur. Daha önce RB.5 pininin bozulduğunu söylemişti. Yoksa yine bu pinle alakalı bir problem midir. Yani RB.5 e bağlı butona basılmış gibimi oluyor?.
Tedbir olarak iki şey önerebilirim.
1. Sen kendin ayrıca birer Pull-up direnci ekle buton girişlerine
2. Tuş girişlerini birer 470 ohm dirençten geçirerek pic'e girmeye çalış.
Bir önerim daha olacak, buda programla belkide soruna bir çözüm bulabiliriz.
Şöyleki gerçekten tuşa basıldığı zaman belirli bir süre basılı tutulsun , örneğin 200-300 ms ve program bunu algılasın ondan sonra tuşla ilgili işlevi yerine getirsin. Bundan daha kısa basılan sürelerde işlem yapmasın. Süre üzerinde dahada oynayabiliriz. İstersen bu kısmı ben halledebilirim.
Programında bazı eksikler gördüm.
Sayaç-1 i saydırıyorsun. 60.000 olunca sayac-2 yi saydırıyorsun. Bu arada sayac-1'i sıfırlamıyorsun. Yalnızca bir tuşa basılırsa sayac-1 sıfırlanıyor. Tusa basılmaz ise sayac-1 65535'e kadar sayar ve kendi kedine sıfırlanır. Sence doğrumu?.

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

vatandas30

teşekkür ederim sayın ete.
söylediklerini deneyeceğim.
programa gelince sayaçlar buton basıldıktan sonra yaklaşık 10 dk. kadar sonra ekranı resetlemek için. buton basılmadığı sürece zaten ekranda birşey olmayacağı için saymasının da bence bir mahzuru yok. süre de çok hassas olmadığı için 60000 değerini kullandım.
lambalar söndürüldüğünde 5-6-7 rakamları düşüyor displayde. ama her zaman değil. (burada ac nin sıfırdan geçişi vs. durumundan dolayı her zaman etkilenmediğini düşünüyorum). 5, 6, 7 rakamlarının düşmesi de şundan. o botonların bağlı olduğu odalar koridorun bir tarafında. yani enerji hatları da aynı yerden gidiyordur büyük ihtimalle.

ete

Bir deneme daha yapmanı öneriyorum. Bakalım sorunu pic mi yaratıyor anlamak için. Program içinde pic'in buton girişleri ile ilgili kısmı iptal et. B portunu çıkış olarak set et ve bakle bakalım yine aynı sorunu yapacakmı?.
Bu nu sırf merakımdan istedim. Çünki sanki bu işte pic suçlu değil gibi geliyor bana. Her neyse diğer lerini bir deneyelim de görelim ona göre karar veririz.
Ben sana birazdan tuşlarla ilgili yeni bir program göndereceğim.

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

ete

Cevabım biraz gecikti. Kusura bakma. Devreyi aynı zamanda simule edeyim istedim.
Neyse programını aşağıdaki şekilde değiştirdim.
option_reg.7=0
trisa=%00000
trisb=%11111111

veri   var byte
a      var byte
b      var byte
k      var byte
sayac1 var word
sure   var word
sayac2 var byte
sayac3 var byte
ILK    var bit
RES    var portb.0
b1     var portb.1
b2     var portb.2
b3     var portb.3
b4     var portb.4
b5     var portb.5
b6     var portb.6
b7     var portb.7
role   var porta.2

clear
'-----------------------------------------------------------------------------
START:
      sayac1=sayac1+1
      if sayac1=60000 then
        sayac2=sayac2+1
        sayac1=0
      endif
      sure=0
      while portb<255
        sure=sure+1
        IF sure=8000 then atla
       wend 
      IF sure<8000 then yak_sondur
atla:    
      if res=0 or sayac2=20 then reset
      if b1=0 then veri=%00000110  
      if b2=0 then veri=%01011011  
      if b3=0 then veri=%01001111
      if b4=0 then veri=%01100110
      if b5=0 then veri=%01101101
      if b6=0 then veri=%01111101
      if b7=0 then veri=%00000111
      if PORTB<254 then karar 'tüm port değeri 255 dir. Portb.0 reset olduğu için onu çıkartırsak 254 kalır
      goto bir'start

KARAR:
      sayac1=0
      sayac2=0
      sayac3=0
      role=1
      pause 200
      role=0

bir:      
      if a=0 and b=0 then hatirla1
      if a<>0 and b=0 then hatirla2
      if a<>0 and b<>0 then hatirla3
      goto start

HATIRLA1:
         b=0
         a=veri
         k=veri
         gosub goster
         goto start
HATIRLA2:
         b=veri
         if a=b then hatirla1
         goto yak_sondur

HATIRLA3:
         a=b
         b=veri

yak_sondur:
           sayac3=sayac3+1
           if sayac3=250 then reset
           k=a
           gosub goster
           pause 500
           IF PORTB<255 then start
           k=b
           gosub goster
           pause 500
           IF PORTB<255 then start'hiç tuşa basılmaz ise portB=255 basılınca <255
           goto yak_sondur

RESET:
      sayac1=0
      sayac2=0
      sayac3=0
      veri=0
      k=0
      a=0
      b=0
      gosub goster
      goto start
GOSTER:
       SHIFTOUT PORTA.0,PORTA.1,1,[k]  'tek komut aşağıdaki işi yapar
       pause 100
       SURE=0
       return
       end

Tuşa basılma süresini SURE isimli değişken belirliyor. Programın başlarında göreceksin. Ben default süreyi 8000 aldım. Az bulursan artır(daha uzun basılması için) çok bulursan azalt (daha kısa süre basılması için). Tabiiki 8000 yerine koyacağın yeni değeri 8000 gördüğün iki satırda da düzeltmelisin.
Programında bazı gereksiz satırlar vardı onları kaldırdım. Bazı uzun komutların yerine tek komut yazdım. dallanma noktalarında da biraz oynadım. Simulasyonda güzel gözüküyor. Dene istersen. Her şeyden önemlisi buton sorununun ortadan kalkması. Sanırım bu program sorunu halledecek.
Kolay Gelsin
ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

vatandas30

cevabın için teşekkürler. önceki dediklerini yaptım. butonlara seri 470 ve 10 k pull up dirençlerini taktım. ama yine aynı sorun var.
senin programını inceledim.
IF sure<8000 then yak_sondur
bu kkomutla buton basılmasada sürekli yak_sondur etiketine dallanmaz mı.
display kısmında sürekli tarama yapınca displayde titreme oluyor. bu yak_sondurde belli olmuyor ama tek numara yanınca titreme bariz bir şekilde belli oluyor. o nedenle arka arkaya iki numara basılınca sadece yak_sondur işini yaptırmıştım. tek numara basınca hatirla1 ve hatirla2 sayesinde displayde tarama yapmıyordu.
bu dediklerim simulasyonda belli olmuyor ama gerçekte çok belli oluyor.