iki pic arasında bilgi alışverişi nasıl olacak

Başlatan tmr01, 25 Eylül 2006, 14:37:17

tmr01

merhaba.
bir devre tasarladım.
özeti:
bir kablodan geçen palsi sayıyor
pals sayıları istenilen düzeye indiğinde
pic'in bir bacağından 100 ms (değişebilir) boyunca sinyal gönderiyor
sonra tekrar pals saymaya dallanıyor
her işlem sonrasında toplam yapılan işi hafızaya atıyor.

benim istediğim bu 100 ms saniye süresini başka bir picten bilgi yollayarak değiştirmek.

mantık olarak şöyle düşündüm
pause 100 yerine
pause degisken

bu degisken degerini diğer pic yolladıktan sonra hafızaya yazdırmak ve sonra bunu kendi hafizasından çağırıp o süre kadar beklemek.

pic basic komutlarıyla bunu nasıl yaparım
teşekkürler

Logan

Bilgi göndereceğin picten 1 adet başlangıç biti gönderirsin.Daha sonra senkron olarak başlangıç bitinden belli bir süre sonra "OWOUT" komutu ile bilgi gönderirsin.Diğer işlemcide ise başlangıç bitini  portb'nin 0. bacağına bağlayıp kesme oluşturur ve kesmeden sonra yine belli bir süre bekleyip "OWIN" komutu ile bilgiyi alırsın.Bu şekilde haberleşebilirsin. Eğer olmaz dersen 3 adet bacak kullanarak (Data-clock-RB0) ve yine kesme kullanarak aynı işlemi yapabilirsin.Fakat bu sefer alıcı pic 76164 gibi çalışır ve seri olarak gelen bilgiyi bir register içerisine atar.8 bitlik bilgiden sonra programı, ana programa döndürürsün.Kolay gelsin.
İmza.

tmr01

şimdi iki picte birbirine bilgi yollayacak
anladığım kadarı ile bilgi gönderecek bacak herhangi bi bacak olabilir ama bilgi girişi rb0 olmak zorunda doğru mu?

yapacağım işler şunlar: bunları pic basic olarak yazarmısınız

1.pic RA0 dan iki adet bilgi yollayacak
     1. bekle   (word tipi)
     2. toplam (word tipi)

bunları porta.0 dan göndermek için nasıl bir komut dizisi yazmamız lazım

karşı taraftan gönderilecekleri bu örneğe  bakarak ben yazarım.

teşekkürler

Logan

Kardeş, RB0 olmasının amacı seni sürekli bilgi geldi mi diye bakmaktan kurtarmaktır.RB0 kesmesini kullanman için o bacağı tavsiye ettim.Program için örnek kodu şuan yazamam çünkü çok yoğunum. "OWOUT" komutu kullanmak zorunda değilsin. İkinci tavsiyemi kullanman senin için daha kolay olacaktır.Mesela;
trisa=$ff  :  porta=0
i var byte  :  toplam var word  :  bekle var word
sda var porta.0  :  scl var porta.1

on interrupt goto myint

myint: disable
for i=1 to 16
if scl=1 then
toplam.0=sda  :  toplam=toplam<<1
myint_go: 
if scl=0 then
goto git
endif
goto myint_go
git: next i
resume
enable

gibi bir program yazabilirsin.Kolay gelsin.
İmza.