Iki PIC ararsinda char tipinde veri iletisiminde sorun yasiyorum

Başlatan Digimensch, 21 Kasım 2011, 21:48:37

Digimensch

Iki Pic arasinda seri baglanti var.




Simdi bu Devre ISIS de gayet iyi calisiyor ama bir türlü gercek denemede calismiyor.
PIC18F4550 USB üzerinden aldigi char formatindaki veriyi PIC16F84'e gönderecek ve bu PIC bazi islemler yapacak.
USB üzerinden veri almayi anlatmiyacagim burada sorun yok, USB den veriyi sorunsuz aliyorum.

Sorunum PIC18F4550 ile PIC16F84 arasindaki seri baglantida.
PIC18F4550 den karekteri PIC16F84'e söyle gönderiyorum
char temp;
putc(temp);

PIC16F84 de  veriyi söyle aliyorum.
char temp;

temp=getch();
if(temp=='s')
      { 
         output_high(PIN_A1);

      }
                 
      if(temp=='a')
      { 
         output_high(PIN_A2);   

      }
...............
.........


Simdi acaba pic18f4550 den gönderdigim karekter ASCII  seklinde falan mi gidiyor pic16f84'e.
Cünkü gelen veriyi bir türlü algilamiyor.
gelen veriyi tekradan char'a falan cevirmem gereklimi?
Bu iki Pic arasinda baska hic bir elaman yok yani direk PIC18f4550 nin TX ucunu PIC16F84 ün RB1 ucuna bagladim ve
su tanimlamalari kullandim.
PIC18f4550 icin:
#include <18F4550.h>
#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,PLL1,CPUDIV1,VREGEN,NOPBADEN         // 4MHZ
#use delay(clock=48000000)
#USE RS232 (baud=2400,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7)  //Seri iletisim icin

PIC16F84 icin:
   
#include <16F84A.h>
#fuses XT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=2400,xmit=PIN_B2, RCV=PIN_B1,parity=N)

iki pic arasinda baglanti oldugu icin INVERT falan gereklimi su MAX232 entegresi ile?
Veri gidiyor ama pic16f84 aligilamiyor.

LukeSkywalker


Digimensch

Peki o zaman yukarda anlattigim neden gercek denemede calistiramiyorum ?

fryrmnd

Fazla tecrübem yok. Gerçi mssp kullanarak registerlar ile iki 877a yı haberleştirdim. CCS yi pek bilmem. Sağolun sizin usb uygulamanız sayesinde biraz biraz baktım.
Anladığım kadarı ile yazılımsal seri haberleşme yapıyorsunuz. Sıkıntı bundan kaynaklanabilir gibi geliyor bana. Elinizde varmıdır bilmem ama 628a kullansanız usart modülü de var.

skara1214

bir konuda geçmişti de diğer kullanmadığınız tx rx i boşta bırakmayın,sapıtıyor 10 k ile toprağa çekin deneyin
Herkes ölür ama herkes gerçekten yaşamaz

OG

CCSC bilmiyorum, genel anlamda;

gönderim yapacağınız pin, devre daha enerjilendiği anda H olsun ve H da beklesin. Alıcı pic ise gönderenden birkaç ms sonra çalışmaya başlasın. Yani TX LOW da iken RX hemen alış kontrolu yapmaya başlayınca problem çıkabilir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ErsinErce

Alıntı yapılan: skara1214 - 21 Kasım 2011, 23:23:53
bir konuda geçmişti de diğer kullanmadığınız tx rx i boşta bırakmayın,sapıtıyor 10 k ile toprağa çekin deneyin
Toprağa değil Vcc ye çekin

Digimensch

Alıntı yapılan: ErsinErce - 22 Kasım 2011, 04:49:54
Toprağa değil Vcc ye çekin
Alici olrak kullanacagim PIC demi yoksa verici olarak kullanacagim
PIC'demi?

ErsinErce


Digimensch

Alıntı yapılan: ErsinErce - 22 Kasım 2011, 18:48:40
bütün Rx pinlerinde
Alici olarak kullandigim PIC16F84'de normalde RX pini
Yok.Onu yazilim olarak fuses satirinda ben belirliyorum
Simdi bu Pine 10k direnc baglayip Vcc yemi
Baglayacagim?
Peki bu pine vericidende baglanti var.Tam
Nasil yapmaliyim?

Erol YILMAZ

PIC16F84A da donanımsal UART yok,
PIC16F628A olursa aynı yere oturur ve daha ekonomik fiyat sağlanır.

Ayrıca UART tan veri geldiğinde kesme oluşur sizde kesmede uygun UART datası gelip gelmediğini
kontrol ederek gereken işlemi yapabilirsiniz.

Uygun donanım çözümü varsa böyle yazılımsal olaylara girmemek lazım.

Digimensch

Elimde bir kac tane 16f84 var ama 16f628 yok.
En iyisi 16f628 satin alayim bu sorundan
Kurtulayim ...
Eger 16f628 ilede sorun yasarsam bilgilerinize
Basvururm.

fryrmnd

Dün yazarken ccs help ten getch() fonksiyonuna bir göz attım.

"If a built-in USART is used the hardware can buffer 3 characters otherwise GETC must be active while the character is being received by the PIC®."

yanlış anlamıyorsam dahili usart birimi varsa 3 karaktere kadar buffer a alabilir. eğer yoksa alma esnasında  GETC fonksiyonu aktif olmalı gibi bir açıklama.