avatar_jun

Pic'in boş uçları hakkında

Başlatan jun, 25 Mart 2012, 19:42:49

jun

Sayın arkadaşlar bir süredir rf ile ugraşıyorum f628 kullanıyorum.haliyle sadece veri alış verişi için kullandıgım için baya bir pin boşta kalıyor.bunlarıda giriş olarak tanımlayıp şaseledim fakat.butona basılınca gitmesi gereken data,pic'e el yaklaştıgı anda kendi kafasına göre veri göndermeye başlıyor.Mclr ucunu 4.7k ile +5 e bagladım fakat sonuç aynı sizce neden olabilir?yardımlarınız için teşekkürler.

ete

#1
Besleme bacaklarına 100nf bağla.
Programda CMCON=7 komutu yoksa en başa ekle.

Ete

jun

Beslemenin uçlarında kondansatör var ete abi CMCON=7 'de tanımlı.

jun

Program aşagıda

VERİCİ

include"modedefs.bas"
CMCON=7
TRISA=%11110
TRISB=%11111111
PORTA=0
PORTB=0 
BILGI VAR BYTE
   BILGI=0
   PAUSE 200

BASLA:     
    IF PORTB.0=0 THEN
   BILGI=10
   GOSUB GONDER
PAUSE 100
ELSE
BILGI=0
GOTO BASLA
   ENDIF    
    GOTO basla   
GONDER:
serout2 PORTA.0,396,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 PORTA.0,396,["A","B","C","D",BILGI]   
RETURN
end

ALICI

include"modedefs.bas"
CMCON=7
ADCON1=7
TRISA=%11011
TRISB=%1111100
PORTA=0
PORTB=0



PORTA.2=1
PAUSE 150
PORTA.2=0
PAUSE 150
PORTA.2=1
PAUSE 150
PORTA.2=0
PAUSE 150
PORTA.2=1
PAUSE 150
PORTA.2=0
PAUSE 150
PORTA.2=1




ALICI VAR BYTE
ALICI=0
PAUSE 200

BASLA:

SERIN2 PORTA.0,396,[WAIT("ABCD"),ALICI]


   
   IF ALICI=10 THEN
   PORTB.0=1 :PORTB.1=1
   PAUSE 500
   PORTB.0=0 :PORTB.1=0
   ENDIF
   
   
   GOTO BASLA
   
   END

F®T

#4
MCLR ucunun 4k7 ile artıya bağlı olduğundan eminmisin.ölçü aleti ile bağlantını ölçmeni öneririm.

include"modedefs.bas" bu dosyanın içeriği nedir.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

jun

evet kontrol ettim direnç sağlam.modedefs.bas ı mode ismi ile kullanırken yazmıştım.silmeyi unutmuşum.işin garip tarafı pic'in altına parmagımı koyunca normal butonla çalışıyor.fakat çektigim anda sanki buton takılı kalmış gibi devamlı gönderme yapıyor...

F®T

yaptığın devrenin çizimini koyarsan daha faydalı olunabilir.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

jun


mhmtklhci


jun

cmcon=7 o cmxcon=7 diye birşey yok

ete

Pratik olarak bu sistemin çalışması pek muhtemel gibi gözükmüyor.
Verici kısımda pek sorun yok. Sorun alıcı kısımda.
Sebepleri şunlar;
Devre şemasın bakınca alıcınında 16F628 olduğu görülüyor. Ama programda ADCON1=7 şeklinde bir komut var.
Bu komut 16F628'e ait değil. Bu komut orada olduğu müddetçe bu program derlenemez. Nasıl derlenip te çalıştırıldı?

Ayrıca dikkat edilirse

Programda bir sürü Pause kullanılmış. Bunların her biri seri haberleşmeyi olumsuz etkileyen komutlardır.
Başta verilen pause leri geçelim. Onlar yalnızca bir kere açılışta çalışacaklar.
Ama aşağıda;
   IF ALICI=10 THEN
   PORTB.0=1 :PORTB.1=1
   PAUSE 500
   PORTB.0=0 :PORTB.1=0
   ENDIF
şeklinde verilen komutlara bir bakın.
Diyelimki seri yoldan ALICI=10 bilgisi geldi.
PORB.0 ve 1 hemen HIGH oldu.
500 ms bu şekilde bekledi. Bu arada yeni bir bilgi gelse program onu alamayacak elbette. Çünki Pause komutunu bekliyor.
500 ms sona erdi ve PORTB.0 ve 1 LOW oldu.  Program yeniden başla satırına gitti. Orada seri yoldan bilgi beklemeye başlayacak. 65535 ms bekler bir şey geldi ise alır gelmedi ise alt satıra geçer. Ama hala ALICI=10 olduğu için yeniden portB.0 ve 1'i high yapar 500 ms bekler ve ardından pinleri low yapar. Bu prtaikte portB.0 ve PortB.1 pinlerinin sürekli Hıgh da kalması gibi gözükür ve arada bir göz kırpıyormuş (arada bir low olmadan dolayı) gibi gözükürler.

Bu tür sorunlar nedeni ile bu tür sistemlerin USART kesmesi ile çalıştırılması en doğrusudur.
Kesme kullanılsa bile Pause komutlarından kaçınılmalıdır. Her bir pause gelecek olan yeni bilginin alınma ihtimalini düşürür. Rastgele çalışır program. AKlına estiği zaman bilgi alınır(denk gelirse) aklına estiği zaman alınmaz.
Bu nedenle bu tür led flash işlemlerinde daha akıllıca sistemler kullanmak gerekir.
Bunlardan birisi TMR0 veya TMR1 kesmesi kullanmaktır. Led yekıldıktan sonra Timer kesmesi kurulur kesme oluşunca led söndürülür ve kesme yeniden kurulur. Bu seferde kesme oluşunca yeniden yakılır. Yalnızca yanma sönme adedi sayılark uygun sayıya ulaşınca Timer kesmesi iptal edilir. En kolya ve en doğru çalışacak sistem budur.

Ete



jun

#11
Evet ete hocam yukarıda verdigim programlarda bazı şeyleri eksik ve yanlış yapmış oldugumu farkedip aşagıda ki gibi düzenledim fakat usart kesmesini tam kavrayamadıgım için çözemedim yorumlarınız için teşekküredrim.

CMCON=7
TRISA=%11011
TRISB=%1111100
PORTA=0
PORTB=0   

PORTA.2=1

ALICI VAR BYTE
ALICI=0
PAUSE 200

BASLA: 
SERIN2 PORTA.0,396,[WAIT("ABCD"),ALICI]   
   IF ALICI=10 THEN
   PORTB.0=1 :PORTB.1=1
   PAUSE 1000
   PORTB.0=0 :PORTB.1=0
   else
   ALICI=0
   GOTO BASLA
   ENDIF
   
   GOTO BASLA
   
   END

birde yazılımı bu şekilde degiştirdikten sonra alıcı sorunsuz çalışıyor fakat vericiye 5v verdigim anda alıcı devamlı röle acıp kapıyor.sorun sanki verici kısmında gibi.birde derleyici @ ile tanımlanan konfigürasyonları kabul etmiyor.ama adcon1=7 yi sizinde söylediginiz gibi derliyor.neden anlamıyorum.

ete

Sorunun vericide olup olmadığını anlamak son derece kolay.
İşin en başında vericiyi çalıştırmadan yalnızca alıcıyı çalıştır bakalım. BU saçmalığı yapıyormu?
Yapmıyor ise birde şunu dene;
- Verici ve alıcıyı birlikte çalıştır ve bir kere butona basarak vericiye 10 emrini yolla. Ardından verici yi kapat. Aynı saçmalık devam ediyormu gözlemle.

Son olarak birde şu alternatifi dene bakalım.
Basla satırından itibaren programı aşağıdaki şekilde değiştir.
BASLA: 
SERIN2 PORTA.0,396,[WAIT("ABCD"),ALICI]   
   IF ALICI=10 THEN
   PORTB.0=1 :PORTB.1=1
   PAUSE 1000
   PORTB.0=0 :PORTB.1=0
   ALICI=0
   else
   ALICI=0
   GOTO BASLA
   ENDIF
   
   GOTO BASLA
   
   END


Ete

jun

Sonuç aynı ete abi vericinin enerjisini kesince saçmalıkta sona eriyor.Alıcı normal

ete

Ben sana birden fazla alternatif sundum sen bana bir cevap yazdın. Neyin karşılığı olduğu anlaşılmıyor.
Bütün alternatifler için vericiyi kapatınca sorun ortadan kalkıyor şeklinde algılayacaksam şayet o zaman RF modülleri değiştir demem gerekiyor. Başkada bir alternatif yok maalesef.

Ete

Powered by EzPortal