Picler ve Seri Haberleşme Yardım..

Başlatan barishlee, 21 Mart 2006, 13:40:24

barishlee

Arkadaşlar Merhaba;
2 adet 16f84 ile bir devre tasarladım.bunlardan biri gönderici biri alıcı görevi görüyor. arada sadece bir adet 20 cm uzunluğunda kablo kullandım. Şimdi olay şu devre proteus üzerinde sorunsuz çalışıyor fakat devreyi breadboard üzerine yapınca çalışmadı.
Devre Nasıl Çalışıyor:
Gönderici devrede pic'e bağladığım butona basılınca porta.1 den 9 verisini gönderiyor eğer buton basılı değilse 0 bilgisini gönderiyor.
alıcı devre ise porta.2 bacağına gelen bu değerlere göre led'i yakıyor veya söndürüyor. kodları size gönderiyorum. Şüphem şu; proteus üzerinde seri haberleşmede belirttiğimiz baund hızı pratikte farklı mı oluyor? Şimdiden teşekkür ederim. Allaha Emanet Olun.

Gönderici:

GONDER VAR WORD
START
gonder = "9"
IF PORTA.0 THEN
SEROUT PORTA.1,16780,[GONDER]
ELSE
GONDER ="0"
SEROUT PORTA.1,16780,[GONDER]
ENDIF
GOTO START
END


Alıcı:

GIRIS VAR WORD
START
SERIN PORTA.2,16780,GIRIS
IF GIRIS="9" THEN
HIGH PORTA.1
ELSE
LOW PORTA.1
ENDIF
GOTO START
END

Logan

Programda sorun yok gibi.İstersen baud rate hızını biraz düşür.Mesela 4800 veya 2400 falan yap.Büyük ihtimale çalışır.Kolay gelsin.
İmza.

Lütfi AYYILDIZ

Aşağıdaki programı bir dene senin programında biraz eksiklikler var, bu sana eksikliklerinde yardımcı olabilir.

'verici kısmı
include "modedefs.bas"
CIKIS VAR PORTA.1
veri var byte
buton var PORTA.0
basla:
if BUTON=1 THEN 
veri=%00000000
else
veri=%00001001
endif
pause 10
serout2 CIKIS,396,[veri]
goto basla

'alıcı kısmı
include "modedefs.bas"
veri var byte
led var PORTA.3
GIRIS VAR PORTA.2
basla:
serin2 GIRIS,396,[veri]
if veri=%00001001 then
high led
endif
if veri=%00000000 then
low led
endif
goto basla

elektromadrid

dostum gönderici kısmında if ile bir şart koymuşsun ama referans belirtmemişsin dikkatini çekmiştir umarım
PIC 16F877

dalavi

Arkadasim belki coktan soruna cevap bulmussundur ama...

sanirim önce osc yi belirlemen gerekli.

"define OSC ..."
ayrica iki pic arasinda iletisim kullandigin icin 16780 yerine 84 kullansan (yani terslenmeden) bekli daha iyi sonuc alabilirsin.

Kolay gelsin

vale9

Gönderici:

SEROUT2 PORTB.1,16780,["A",SONUC]

Alıcı:

SERIN2 PORTB.1,16780,10,ETIKET2,[WAIT ("A"),DATAAL1]

DOSTUM ZAMANLAMA FARKINDAN DOLAYI ÇAKIŞIYOR OLABİLİR. BENİM YUKARIDAKİ KODUM ÇALIŞIYOR. SERIN2 KOMUTUNDA "10,ETIKET2" KODU 10MS BOYUNCA DATA ALMAYI BEKLE GELMEZSE ETIKET2 ETİKETİNE DALLAN ANLAMINA GELİYOR. INCLUDE KULLANMANA GEREK YOK.
Hayat 1'ler ve 0'lardan ibarettir.