U

Shiftout ve ve Shiftin komutlarıyla 2 Pic arası iletişim

Başlatan umitco, 10 Ekim 2011, 18:47:36

umitco

  Selem. Bir işlemci tuş takımı,sensörler,saat entegresi v.b kontrolünü yapıp gerekli bilgileri toplayıp bu bilgileri 2. bir işlemciye gönderecek. 2. işlemci shift register kullanmadan yalnızca 4 adet 7led displayi tarama sistemiyle tarayarak kendisine verilecek bilgiyi dislaylerde gösterecek. Bu 2 işlemci arasındaki iletişimi önce SEROUT2 komutuyla yaptım (dislaylerde hafif oynamalar olmasına rağmen iletişimi sağladı) ama bunun yerine Shiftout komutunu kullanarak yapmanın daha pratik ve hızlı olacağını düşündüm. Fakat birtürlü haberlemeyi yapamadım,gönderdiğim karaterlerden hep farklı karakerler alıyor. Her 2 picinde haberleşmeye aynı anda başlaması gerektiğini düşünerek ve 2 hat kullanarak  haberleşmeye aynı anda başlanmasını sağadım ama oda fayda ermedi. Yardımcı olabilirmisiniz?

inventor

SHIFTIN DataPin,ClockPin,Mode,[Var{\Bits}...]
SHIFTOUT DataPin,ClockPin,Mode,[Var{\Bits}...]

Kullandığınız komutlar ve kullanım şekli yukarıdaki gibidir muhtemelen. Burada dikkat eidlecek bir kaç konu var. Öncelikle bu sistemle sadece 8 bitlik verinin default olarak gönderileceğini bilmeniz gerekiyor. Eğer göndermek istediğiniz veri 8 bitten fazla ise bazı yapılandırmalar gerekecek. Diğer bir konuda mod ayarı. İsterseniz göndermek istediğiniz veri satırını tam olarak buraya yazın,komutta kullanım hatası var mı bakalım.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

ete

Shift komutları iki ünite arasında senkron var ise iyi çalışır. Yok ise biri diğerinden haberdar olamadığı için haberleşmede sıkıntılar meydana gelir.  SHift komutunun ayrıca parametreleri bulunur. Bunlar ;
-en düşük bit den mi başlansın yoksa yüksek değerlikli bit den mi başlansın
- Önce clk sonra data mı verilsin yoksa önce data sonra clk mu verilsin
gibi parametrelerdir. Bu parametrelerin de dikkatlice incelenip doğru ayarlanması gerekir.
Verici tarafından önce data verip sonra CLK uygular isen alıcıda ince data alıp sonra clk uygulaması yapması gerekir.
Verici yolladığı bilgide önce LSB yi veriyor ise alıcıda bunu bilmelidir.

Sonuç olarak yazdığınkodaları buraya koyarsan bir bakarız diyorum.

Ete

umitco

Kullandığım komutlar:

1.pic (işlemci olarak adlandırdım)
Fare=123
shiftout PORTB.0,PORTB.1,[Fare]
PORTA.2=1
pauseus 10
PORTA.2=0

2.Pic (ekran kartı olarak adlandırdım)

shiftin PORTA.0,PORTA.1,0,[Fare]
while PORTA.2=0:wend

Mod parametreleri olarak 1,2,4 ve 5 değerlerinin hepsinide denedim.

ete

Peki senkronu nasıl sağladın?
Yani birisi komutu verdiği esnada diğeri başka bir iş yapıyorsa nasıl eş zamanlı olarak alacak bilgiyi?
Akis gibi hiç denemediğim bir kullanım şekli bu. Mutlaka bir yolu vardır ama şu anda aklıma gelmiyor.
Aslında komutun bu işi halletmesi gerekir. Zira paket başını yakalamak önemlidir. Yakalayınca biri diğerini yönetmesi gerekir.
Düşünmek lazım. Aklıma bir şey gelirse yazarım.
Ete

umitco

Ete hocam ,aslında ben iletişimi sağladım fakat ısrarla 16F628A kullanmak istiyorum,işlemcinin hafızası dolmak üzere olduğu için Shiftout ve Shiftin komutlarıyla yaparsam hafızadan biraz daha yer kazanmış olurum,kodlama daha pratikleşir.Bu kodları devrede kullanmadım henüz,isiste denemeler yapıyorum.İletişim yaptığım kodları veriyorum,ayrıca dosyalarıda ekledim.

İşlemci diye adlandırdığım verici pic:

Tus var word
Fare var byte
i var byte
X var byte
True var bit[7]         

PORTA.1=0
tus = 0
pause 100
     
BASLA:
for x=3 to 0 step -1        ;Dört hane data gönderimi için 4 döngü (yüksek bayteden başlıyor)
fare=tus dig x              ;tus değişkeninin X hanesi gönderilecek
call DataGonder
next
tus=tus+1                  ;gönderilecek sayı bir arttırılıyor
pause 1000
goto basla

DataGonder:
;PORTA.0 ve PORTA.1 portları burada senkronizasyon için kullanılıyor
PORTA.0=1                ;data gönderimine başlamak istiyorum
TRISA.1=1               
while PORTA.1=0:wend    ;müsait olduğunda beni haberdar et,seni bekliyorum (senkronizasyon burada sağlanıyor)
TRISA.1=0               
true[0]=fare.0
true[1]=fare.1
true[2]=fare.2
true[3]=fare.3
true[4]=fare.4
true[5]=fare.5
true[6]=fare.6
true[7]=fare.7

;PORTA.0 ve PORTA.1 portları burada data ve clock hattı olarak kullanılıyor
for i=0 to 7
PORTA.0=true
PORTA.1=1
pauseus 100
PORTA.1=0
next
return


Ekran kartı diye adlandırdığım alıcı pic:

fare=0                               
BASLA:
tus=0
for x=0 to 3
While PORTA.0=0:wend
TRISA=%00000011
PORTA.1=1
TRISA=%00000001

for i=0 to 7
while PORTA.1=0:wend
true=PORTA.0
while PORTA.1=1:wend
next i
fare.0=true1[0]
fare.1=true1[1]
fare.2=true1[2]
fare.3=true1[3]
fare.4=true1[4]
fare.5=true1[5]
fare.6=true1[6]
fare.7=true1[7]

if x=0 then tus= fare*1000
if x=1 then tus=(fare*100)+tus
if x=2 then tus=(fare*10)+tus
if x=3 then tus=fare+tus
next x
                         
serout2 portb.0,84,[dec4 tus,13]
goto basla

inventor

Alıntı yapılan: umitco - 10 Ekim 2011, 23:45:22

shiftout PORTB.0,PORTB.1,[Fare]

shiftin PORTA.0,PORTA.1,0,[Fare]
Mod parametreleri olarak 1,2,4 ve 5 değerlerinin hepsinide denedim.

Shiftout kısımnda mod bilgisini göremedim. Sorun bundan kaynaklanıyor olmasın.Her ikisinin de mod ayarını 0 yapıp dener misin?
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

ete

Mod bilgisi komutun birisinde eksik gözüküyor ama herhalde buraya yazarken eksik yazdı. Umarım öyledir.
Ama zaten derleme hatası verir o satırda. Değilse senin de dediğin gibi mod bilgisi eksik gözüküyor.

Ete

umitco

Evet,kodu dosyadan kopyala yapıştır yapmadım,kendim yazdım forma,bu yüzden eksik. Mod parametrelerinin tüm ihtimallerini denedimiştim önceden..

Mucit23

Eğer pin sorunun yok ise 3 adet pin ve SPI kullanarak iyi bir şekilde haberleşebilirsin. Bu pinlerden 2 tanesi data ve clok hattı olsun diğeri ise uyandırma çıkışı olsun. Uyandırma çıkışı Alıcı picde RB0' bacağında RB0 kesmesini tetiklerse alıcı pic için kesme alt programında gelen dataların alınabileceğini düşünüyorum.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

umitco

  Evet pin sıkıntım vardı ama data iletimi için bazı fedakarlıklar yaparak 4 der pini iletişim için ayırmak zorunda kaldım ve sonunda yeni çalıştırabildim. Tarama ile beraber data iletimi de olunca zaman aldı benim için biraz. Herkeze teşekkür ederim yardımlar için..
  Ete hocam daha önce verdiğim dosyaları silebilirsiniz isterseniz..

ete

Dosya Silmeye gerek yok.  Merak eden farkıda görebilmeli bence.
Ete

Powered by EzPortal