PIC---PC String String

Başlatan elektroombank, 06 Kasım 2005, 19:34:01

elektroombank

Merhabalar Arkadaşlar

PIC16f877 ile Pc arasında max232 aracışığı ile rc6 ve rc7 pinlerinden bağlantı kurdum.Amacım PC'den Visual Basic ile yapacağım programdan
Değerleri oku dediğimde PIC dahili eproomundaki bu değerleri okuyup pc ye ulaştıracak.

 Mesela;

PC'den Verileri OKu butonuna bastım.Comport açılıp gerekli ayarlamalar yapıldı.Ve verileri okuması için PIC'de "OKU" strıngı gonderıldı.

PIC zaten bu sırada hserın ile veri bekliyordu.Gelen veri OKU ise OKU alt programına, yaz ise yaz alt programına gideceketi.PIC oku emirini aldı ve OKU alt programına gidip dahili eeproom'dan değerleri okumata başladı.Burda önemli nokta bir tek veri yok..

Yani eproomdaki veriler ayrı ayrı okunup ayrı ayrı değişkenlere atanıyor.

yani kısacası okunan verilerim

veri1
veri2
veri3
veri4
veri5
veri6
veri7 oluyor.

Bu verileri PC'ye gondermemiz gerekiyor.Fakat bu verileri yoplucamı yoksa tek tekmi gondereceğim.Bunu prtaik bir yolu varmı.

Ben şöyşe düşündüm.Her veri istek gondersin otomatik olarak ama program çok uzuyor.

Aynı şekilde yazma içinde geçerli

mesela PC'den yaz butonunna bastığımda
Comport açılıp ayarlar yapılıp "yaz" stringi PIC'e gonderılıyor.PIC bunu alıp anlıyor.Ve YAZ alt programına gıdıyor.

PIC "YAZ"  alt programında yazılcak olan verileri bekliyor.Ancak burda onemli nokta yine 7 tane verim var..
Yani ben pc'de

tex1.text
tex2.text
tex3.text
tex4.text
tex5.text
tex6.text
tex7.text

içeriklerini pc den gonderip pıc'de bunları alıp parçalayıp.Eproomun ilgili yerlerine ayrı ayrı kaydetmesi lazım.

 Ancak ben tek verili bağlantı yapabilmeme rağmen.Çok verilir bu işlemi yapamıyorum.Yapsamda aşırı uzuyor.

 Elinizde çoklu veri iletişi ilgili Visual basic ve PIC Basic örnek kodları varsa yardımcı olursanız sevinirim..

ete

Veri alış verişinde önemli olan senkron tutturmaktır. Senkron bir defa tutturulursa veriler arka arkaya sorunsuz olarak gönderilebilir.
Bu yüzden her bir değişkeni ayrı ayrı göndermende yarar var. Verilerin başında yer alacak bir string (header) senkronun tutulmasını sağlayacaktır. Arkasından verileri verdiğinde ise haberleşme sorunsuz olarak yapılacaktır.

KOlay Gelsin
ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

elektroombank

Hıım anladım galiba.yani

hserın [wait("veri1header"),veri1]

ile PIC16f877 bu şekilde veri1header gelmesini beklerim. yani pc den veriyi gonderirken  veri1header+veri1 şeklinde göndereceğim..

Proteusta denedim bunu fakat protus terminalde sadece tek veri gonderibildim yani x y z filan bu yuzden veriyı gonderemedim.
Bunu duzeltmenın bir yolu varmı.

Birde gonderdimi verilerin Ascıı Dec hex karşıolıkları tamamen karıştı.
Benim göndermek istediğim değerler 100 50 255 a34fg gibi
veriler.Bu verileri hangi formatta gonderip hangi formatta almalıyım

elektroombank

DEFINE HSER_RCSTA 90h '    (alma yazmacının Enable edilmesi) 
DEFINE HSER_TXSTA 20h '    (gönderme yazmacının Enable edilmesi) 
DEFINE HSER_BAUD 9600 '     (Haberlesme hızının belirlenmesi)


VERI1  VAR BYTE
VERI2  VAR BYTE
VERI3  VAR BYTE
VERI4  VAR BYTE
VERI1ADRESI VAR BYTE
VERI2ADRESI VAR BYTE
VERI3ADRESI VAR BYTE
VERI4ADRESI VAR BYTE

VERI1ADRESI = 10
VERI2ADRESI = 20
VERI3ADRESI = 30
VERI4ADRESI = 40 
'-------------------------------------------------------------------------------
BASLAT:
     PAUSE 300
     LCDOUT $fe,1,    "    BAGLANTI    "
     LCDOUT $fe, $C0, "   BEKLENIYOR   "
     PAUSE 500
'-------------------------------------------------------------------------------
BAGLANTIDENETLE:
     HSERIN 300,BAGLANTIDENETLE,[BAGLANTIDENETLEDEGISKENI]
     IF BAGLANTIDENETLEDEGISKENI="asdsd" then 'EĞER PC DEN asdsd
     HSEROUT ["Y"]
     LCDOUT $FE,1,    "    CIHAZ BAGLANTI    "
     LCDOUT $fe, $C0, "    BAGLANDI    "
     pause 2000                                   
     GOTO DEGEROKU
     ELSE                                                        
     HSEROUT [50]
     LCDOUT $FE,1,    "BAGLANDI       "
     LCDOUT $fe, $C0, "SAGLANAMADI    "
     GOTO  BAGLANTIDENETLE:
     ENDIF 
'-------------------------------------------------------------------------------
DEGEROKUDOKU:
     PAUSE 300
     LCDOUT $FE,1,    "     DEGERLER   "
     LCDOUT $fe, $C0, "    OKUNUYOR    "
     HSEROUT ["DEGERLER OKUNUYOR"] 'PC YE GONDERİLİYOR
' (ANCAK NUNU PC DE NE OLARAK ALGILAYACAĞIM
     PAUSE 20
     READ VERI1ADRESI, PICDEKIVERI1
     PAUSE 20
     READ VERI2ADRESI, PICDEKIVERI2
     PAUSE 20
     READ VERI3ADRESI, PICDEKIVERI3
     PAUSE 20
     READ VERI4ADRESI, PICDEKIVERI4
     PAUSE 50
     'AŞAIDA PC YE BU OKUDUKLARIMI GONDERIYOM FAKAT PCDEN    
    'BUNLARI NASIL ALACAĞIM
     'BUTUN HALDEMI ALACAĞIM VE ASCII MI ALACAĞIM
     HSEROUT [PICDEKIVERI1,PICDEKIVERI2,PICDEKIVERI3,PICDEKIVERI4]
     PAUSE 800
     LCDOUT $FE,1,    "    DEGERLER       "
     LCDOUT $fe, $C0, "    OKUNDU      "
     GOTO BAGLANTIDENETLE
     END




kodlarım yukarıdaki gibi.Yukardaki programı doğru dürüst çalıştıramadım.
Çünkü verileri nası ayrıp parçalayacağım bunları bilmiyorum.Netten orneklere baktığımmda hep 0 1 2 gibi değerler gönderip
o ise
1 ise şu
2 ise şu ile yap gibi komutlar kullanılmış.Bu yüzden hadiseyi tam olarak çözemiyorum.Yani daha veriler Ascıı mi gidiyo nası alınıyo onu bile anlamadım.Denemelerde farklı farklı çıkıyor.

Ufacıkda olsa ufak bir kod orneği çak makbule geçecektir

Yardımlarınızı bekliyorum
Saygılar