pc ile pic seri port haberleştirme [yardım]

Başlatan rahman1445, 11 Şubat 2016, 21:36:36

rahman1445

merhabalar,
c# kullanarak seri porttan haberleşme yapmak istiyorum sanal seri port kullanarak isis üzerinden virtual terminale veri gönderdim fakat hserin komutunu kullanamadım.
pic16f628 için pic basic pro kodları örnek verebilirmisiniz.

basitçe c# dan gönderdiğim veri şu şekilde;
serialPort1.WriteLine("deneme");


teşekkürler.
Otomasyoncu çırağı

ete

sitede bir sürü seri haberleşme örneği mevcut. Pc ile olan haberleşmenin komut açısından farkı yok aynıdır.
ancak seviye tutturma sorunu vardır. Zira PC RS232 lojik seviyesinde çalışır (HIGH=-10V  , LOW=+10V) Pic ise TTL deiğimiz seviyede çalışır (HIGH=5V , LOW=0V)  birinin yoladığı bilgiyi diğerinin algılaması için seviye düzeltmesi yapılması gerekir bunuda max232 entegresi yapar. Gerisi normal haberleşme işidir.

Ete

İlyas KAYA

#2
PL2303 TTL USB dönüştürücü kullanın. Hatta direk cihaz içine de koyabilirsiniz. Çok da uygundur fiyatı.
Haberleşme de dikkat etmeni gereken 8n1 formatında 2 tarafında baud hızlarının aynı olması gerekir. Alıcı 9600 ise verici de 9600 olmalı.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Bahri Bilir

#3
Rahman ete hocanın bahsettiği lojik farklılıklar gerçek devrede dikkate alınması gereken bir durum.Ama isiste dikkate almana gerek yok.
C# gördüğüm kadarıyla veri göndermede bir problem yok.Ama başlangıç için string veri göndermek seni pic basic de çok zorlayacaktır.O yüzden şimdilik c# taki verini "BLR125" olarak değiştir.Baştaki BLR pice verinin doğru ulaştığını anlaması için kilittir.Eğer pic BLR ifadesini alırsa ardından gelen veriyide değişkene yazacaktır.(BLR ve 125 anlatım içindir.Projene özgü değiştirebilirsin)
İsise Compim nesnesini ekle.Ve virtual serial port programı ile 2 farklı com hattını birbirine bağla(hem c# tan hemde isisten bağlanabilmek için)

Sonra c# uygulamanın ve compin nesnesinin ayarlarını (veri hızı.bit...) aynı olacak şekilde ayarla.Sonra compinin bağlantılarını yapmadan c# ile veriyi gönder.Eğer compin nesnesinin üzerindeki kırmızı noktalarda renk değişimi oluyorsa verin compim nesnesine kadar doğru bir şekilde geliyor demektir.

Şimdi devam etmeden önce eğer bakmadıysan ete hocanın pic basic eğitimindeki seri iletişim kısmını gözden geçirmeni öneririm.Çünkü şimdi sırada pic için yapman gereken bazı iletişim ayarları olacak.Bunları ete hocanın eğitimini okuduktan sonra geçici olarak örnek projelerden alabilirsin.Daha sonra biraz haşır neşir olunca zaten çok basit bir şey olduğunu anlayacaksın.

Sonra compimin rx pinini picin rx pinine,tx pininide tx pinine (Gerçektekinin tam tersi) bağla.Ve pic ana döngünün içine hserin [wait("BLR"),A] komutunu yaz.Ve isisi çalıştır.
Şimdi c# tan veriyi gönderdiğinde picteki A değişkeni 125 değerini alacaktır.
Eğer kaçırdığım birşey yoksa dediklerimi adım adım uyguladığında problem yaşamazsın.Ama eğer dikkatimden kaçan bir nokta varsa ve sıkıntı yaşarsan yaptığın çalışmaları (isis+bas+c# uygulama) zipleyip konuya eklersen daha çabuk ve net cevap alabilirsin.
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

rahman1445

Yardımlarınız için teşekkürler
yarım yamalakta olsa çalışan bi devre kurmayı başardım.
devrenin sorunlarının veri formatından oluştuğunu düşünmekteyim.
include "modedefs.bas"
trisb=%01111110
trisa=0
sayi var word
sayi=0
dongu:
porta=sayi
serin portb.1,T2400, sayi
pause 1
goto dongu
end

kodunu kullanarak şu şekilde bi devre kurdum;

devreye 0-9 arası rakamlar gönderiyorum ledlerde binary karşılğını görüyorum fakat 10 gönderdiğimde saçmalamaya başlıyor.
harf gönderdiğimde sorunsuz bi şekilde binary karşılık görüyorum.

a=0001
b=0010
c=0011
.
.
.
o=1111


gibi bu sorunu aşamadım ve pc ye veri göndermeyi başaramadım.
Otomasyoncu çırağı

kudretuzuner

Merhaba,
Bordunuzda 5 adet led gördüm.Her bir karakterin 8 bit değeri vardır.00-FF gibi.Siz klavye ile "1"yolladığınız zaman PC PIC'e HEX'31'yollar yani  0011 0001.Siz bu 5 led ile doğru datanın geldiğini nasıl  anladınız?

rahman1445

8 bitlik veri geliyor fakat porta da 5 bit olduğu için sadece 8 bitlik verinin ilk 4 ünü ledlere yansıtttım. sondaki led boşta
resimdeki ledler pc den gelen 5 verisini temsil ediyor.ascii karşılığı  0011 0101
şuan anladımki ascii fotmatında geliyormuş veriler ascii tablosuna göre yaptığım denemelerde ilk 5 bit doğru bi şekilde geldi geri kalanını test etmedim kuvvetle muhtemel doğru geliyor.
C# tan veriyi desimal olarak göndermenin bir yolu varmı?
Otomasyoncu çırağı

kudretuzuner

Alıntı yapılan: rahman1445 - 16 Şubat 2016, 20:18:57
8 bitlik veri geliyor fakat porta da 5 bit olduğu için sadece 8 bitlik verinin ilk 4 ünü ledlere yansıtttım. sondaki led boşta
resimdeki ledler pc den gelen 5 verisini temsil ediyor.ascii karşılığı  0011 0101
şuan anladımki ascii fotmatında geliyormuş veriler ascii tablosuna göre yaptığım denemelerde ilk 5 bit doğru bi şekilde geldi geri kalanını test etmedim kuvvetle muhtemel doğru geliyor.
C# tan veriyi desimal olarak göndermenin bir yolu varmı?
Merhaba,
Elektronikte muhtemel diye bir düşünceye kapılmayın.Sekiz bitin tamamını görmeniz gerekir. C# tan gönderdiğiniz tüm datalar ASCII formatında ve HEX 00-FF arası değerler ile gider.Özelden yolladığım dosyayı incelediniz mi?İyi günler.

Powered by EzPortal