Pic ve Seri Port Haberleşmesi

Katılım
18 Ocak 2008
Mesajlar
1,069
Puanları
156
Yaş
39
Arkadaşlar öncelikle selamun aleyküm Ben bilgisayarın portları ve picler ile ilgili bir çalışma yapıyordum bi sebepten dolayı yarım kaldı ama şimdi sorunumu hallettim herşeyi yoluna koydum tekrar projeme dönebildim ( birçok bilgi kaybı ile ) şimdi arkadaşlar pic ile pic arasında seri iletişim yapmak istediğim zaman hiç bir problem yaşamadan çok rahat bir şekilde istediğim dataları yollayıp istediğim şifreleri kodları yazabiliyorum ama işi daha ileri götürmem bir sistemi bilgisayar ile çalıştırmam ve geri bildirimlerini bilgisayarda değerlendirmem yine bilgisayar ortamında kullanıcıya uyarılar ve kontrol imkanları sağlayacak bir sistem tasarlamam gerekmekte bu tasarımı yaparken bilgisayarın seri portunu kullanmakdaha yaptığım araştımalar sonucunda daha cazip geldi bu konu üzerine derinleştim visual basic i genel olarak kullanmaya başladım görsel olarak ufaktan ufaktan bişeyler yapmaya başladım ama iş seri port kontrolune gelince ne bir karakter veri alabildim nede bir karakter veri yollayabildim.
Pic12F675 antegresi kullanarak pc nin seri portuna hyper terminal aracılığı ile veri yollamaya çalıştım bu defa bir sonuç aldım pic ile seri port a veri diyo ama saçma sapan veriler örnğin pic in içinde sayac diye bir değişken atıyıp içini sıfırlıyorum ardından döngü içinde sayacın içini yarım saniyede bir arttırıp göndermesini sağlıyorum hyper terminal ekranında sayı olarak değil de ne türkçede ne ingilizcede olan karakterlerin dışında karakterler çıkıyor sanırım ansi karakterleriymiş
Pic i programlarken pic basic kullandım...

Arkadaşlar elinde Visual basic ile seri port kontrolu hakkında döküman bilgi program örnekleri olanlar şu işe bir el atsınlar lütfen
 
arkadaşım galiba bu konu için önceden de konu açmıştın
benim tavsiye bu tür sorunlarda en garanti yolu denemen
pic basicpro ile seri olarak otomatik göndertiyosun büyük ihtimal
ama bir de basit olarak sadece A karakterini (ASCII 65) asembly dili ile yazılan bir program ile gönder
sorunu tam olarak anlayamazsak kesin sonuç çıkaramayız ben şu anda seri iletişimi yeni öğrenmeye başladım bu yüzden hemen yardım edemem kusuruma bakma ama olabildiğince yardımcı olamaya çalışacam kolay gelsin
 
Arkadaşım pic basic ile yazıyorum bu yüzden asm ile yazılmış kaynak kod gönderemem :) ama bana genelde yardımcı olmanı da beklerim
Yani seri iletişimi genel olarak biraz daha kavramamda yardımcı olabilirsen çok memnun olurum bilhassa visual basic kullanarak pc nin seri portunu pic ile haberleştirme konusunda...
 
Sn.has_artvin_li üzgünüm tek kullandığım dil malesef asembler

o sebebten sana sadece bu dille yazılmış bir örnek göndere biliyorum

Vt1 kutucuğuna yazılan seri bilgiyi pic aynen alıp göndermekte Pc seri port unu da kullanmak istersen dosyada mevcuttur Sadece pc nde bulunan seri portun 2. ve 3. terminalini bir birine bağlaman yeterli bu şekilde deneme yapabilirsin

(Dosya proteus 7.2 Sp6 ile çizilmiştir)

Saygılar
 

Ekli dosyalar

  • RS232.zip
    40.2 KB · Görüntüleme: 18
sn has_artvin_li seri iletişim ile ilgili ansiklopedik bilgileri netten bulursun ben genel olarak sana şöyle anlatim seri iletişim bitleri tek hattan göndermeyle olur
asenkron ve senkron iletişim vardır asenkron iletişim senkrona göre daha yavaştır çünkü bitlerin yanında bir start bir de stop biti kullanılır seri porttan asenkron olarak iletişim yapıyoruz senkron ise fazladan bir clock hattı start ve stop bitinin yerine kullanılır.

bizim yaptığımız iletişim asenkron olduğu için zamanlamalara yani baudrate (bit hızı) e dikkat etmek gerekir
örn 2400 baud için her bitin süresi 417 us dir (1/2400 sn)
donanımsal olarak asenkron kullanımı daha güvenlidir çünkü yazılımsal da komutların gecikmesi de bu süreyi uzatabilir bunlar gözardı edilmemelidir
asenkron veri göndermeden önce stopbiti olan sürekli lojik 1 (high) ilk 0 düştüğünde start biti dir veri
gönderilmeye başlanır sonra belli bir süre yine 1 yapılarak stop biti 1 gönderilerek verinin gönderildiği bildirilir.

şimdilik bu kadar
kolay gelsin
 
Sn Pic_Achu arkadaşım yazdığın bilgiler için çok teşekkür ederim ama bu anlattıkların zaten elimdeki kitaplarda mevcut ben donanım olarak ve pic olarak asenkron seri iletişimi değil de bilgisayarın seri portu ile olan asenkron seri iletişimi istiyorum.
Şöyle ki Visual Basic ile bir arayüz programı yaptığımızı düşünelim programda 4 buton var birinci buton a bastığımızda seri porttan en az rf iletişimi de destklemesi için 5byte veriyi şu şekilde yollayacak

biraz uygunsuz oldu yazılımı ama

private_sub command1.clik()
'mesela 5 adet değişken tanımladık visual basicde bunlar sırası ile
dim komut as byte
dim sifre_1 as byte
dim sifre_2 as byte
dim sifre_3 as byte
dim sifre_4 as byte
sifre_1=1
sifre_2=9
sifre_3=8
sifre_4=4
komut=50
'burada mscomm ayarları
mscomm1.settings falan
||
||
||
mscomm1.output=val(sifre_1) and val(sifre_2) and val(sifre_3) and val(sifre_4) and val(komut)

endsub

diğer butona bastığınız zaman şifreler aynı kalacak komut kısmı değişecek örneğin 25 olarak her butonda şifreler aynı komut değişkenini değişerek datalar yollayacak

Bu güne kadar yaptığım araştırmalarımın neticesinde bütün olay visual basic de bitiyor ...ben daha önce rf uzaktan kumandalar yaptım ARX34 ve ATX34 ler ile bi problem olmadı pic ile pic arasında seri iletişim yaptım bi problem olmadı seri iletişimi mantığını baud rate olaylarını sabit baud rate değerlerini n2400 mü t2400 veya max232 ile bağlantıda n2400 mü t2400 mü dineç ile bağlantıda t2400 yada n2400 gibi şeyleri yani elektronik kısımları sormuyorum arkadaşlar...
Visual basic de mscomm diye bir nesne var bu nesnenin özelliklerine bakıyorum ondan da pek bişey anlayamadım bana visual basic ile olan kısmından bahs ederseniz çok memnun olurum hatta şöyle de bir deney yaptım elimde usb portundan çalışan bir pic programlayıcım var onun arkasında FT232BM entegresi var bu da usb portunu yazılım ile seri port a çevirerek işlem yapmasını sağlıyor bu entegrenin sürücüsünü pc ye kurduğunuz zaman usb to serial port diye bir yol içinde o usb portunu çevirdiği seri portun numarası ile ilişkilendiriyo örneğin benim pc de 2 seri port var ama onu kurduğumda bi de 4. seri portum oluyo onunla beraber ben de visual basic de com port olarak 4.com portu yani o usb to com port olayını tanımlıyorum pic programlayıcıdaki program ledi göz visual basicden veriyi yolladıkca göz kırpıp duruyo bu da datayı yolldaığımı kanıtlıyo ama datayı anlamlı bir şekilde yollayamıyorum.
Picden pc ye data yolluyom mscomm input özelliği ile ilişkilendirdiğim bir değişken yada text in içine sayılar geliyo fareyi üstünde tuttummu onu da görüyom ama anlamlı hiç bişey yine yok

Arkadaşlar yani bana visual basic in mscomm nesnesi ile alakalı ve onun çalışması ile alakalı çok şey lazım
Arkadaşlar bu arada visual basic de şart deil bu işlem C dilinde de çok basit olduğunu görüyorum bi printf komutu bi çok şeyi çözüyo ama görsel özelliklere sahip güzel bir c programı bulamıyorum daha doğrusu ne kullanmam lazım hangi versiyonu daha iyi hangisi görsel butonları form a nasıl koyarım vs vs vs
Bana bu söylediğim şekilde bir C programı da önerseniz razıyım biraz da onunla kavga ederiz ya o beni yener yada ben onu :)

mscomm :) mscomm :)mscom :)
ilgileriniz için çok teşekkür ederim saolun arkadaşlar.
 
Kardeş öyle desene ;D mscomm ile ilgili takıldığın yerler varsa sorarsın kullanımı şöyle: ;)


MSCOMM Seri iletişim kontrolü:

Bu kontrolü kullanabilmek için araç kutusuna sağ tıklayıp Components i açın
Sonra mscomm control yanındaki kutucuğu işaretleyip projeye ekleyin

1.CommPort
Kullanılacak com portunun numarası bildirilir

Kod:
MSComm1.CommPort = 2		‘COM2 yi kullan


2.Settings
Kullanılacak com portun ayarları yapılır

Kod:
MSComm1.Settings = “9600,N,8,1”		‘Hız, Parity, Data uzunluğu, Stop biti


3.PortOpen
True değeri verilince kullanılacak portu açar
False değeri verilince kullanılacak portu kapar
Kod:
MSComm1.PortOpen = True		‘Com portu aç


4.Input
Comm porttan bilgi okunur
Porta gelen ve buffer da bekleyen bilgi bu özellikle öğrenilir.

Kod:
Text1.Text = MSComm1.Input		‘Textbox a gelen bilgiyi yaz


5.Output
Comm porta bilgi yazılır

Kod:
MSComm1.Output = “Merhaba”		‘seri porttan Merahaba bilgisini gönder

6.InputLen
Porta gelen bilgiler alınıncaya kadar Buffer da tutulur. InputLen özelliği ile okuma yapılırken
Kaç karakterlik bloklar halinde okuma yapılacağı belirlenir. Bu özelliğe 0 verilirse Bufferdeki
Tüm karakterler tek seferde okunur.

Kod:
MSComm1. InputLen = 1		‘1 karakterlik blok halinde buffer dan bilgi oku
MSComm1. InputLen = 0		‘Bufferdaki tüm karakterleri oku

7.InputMode
Text modunda gelen bilginin ascii karşılığı olan karakter olarak okuma yapılır
Binary modunda gelen bilginin binary karşılığı olan bir bytelık bilgi olarak okuma yapılır

Kod:
MSComm1. InputMode = 1			‘ text modunda bilgi okur

MSComm1. InputMode = 0			‘ binary modunda bilgi okur

8.InBufferSize

Normalde Buffer uzunluğu 1024 byte ve buffer dolmadığı sürece problem çıkmaz.
Eğer bu değer yeterli değilse InBufferSize özelliği ile buffer belleği artırılabilir.
Kod:
MSComm1.InBufferSize = 2048	‘Buffer belleği 2048 byte


9.InBufferCount
Bufferde bekleyen karakter sayısı bu özellikle öğrenilir.
Okuma yapmadan önce bu özelliğe bakılarak buffer de bekleyen karakterlerin olup olmadığını anlayabiliriz. Ayrıca bu özelliğe 0 verilirse buffer temizlenir

Kod:
MSComm1.InBufferCount = 0	‘Buffer belleği temizle

Text1.Text = MSComm1.InBufferCount 	‘Buffer da varsa bekleyen karakter sayısını textbox a yaz
 
Pic_achu Kardeş vallahi inan bana bunlar tam aradığım özelliklerdi ne biliyim daha söyleyecek bi sözüm yok ALLAH razı olsundan başka.
AMA dersen ki yok çok fazla olmadın daha istersen bi de en basitinden uygulama yollarım hiç de yok demem :)
saol kardeş
 
lafı bile olmaz biz bunun için varız zaten program konusunda da yardımcı olurum
vb 6 kullanırım ;)
 
İlginizden dolayı çok teşekkür ederim pic_achu arkadaşım size ulaşmaya çalışacağım

hayırlı çalışmalar dileğiyle...
 

Forum istatistikleri

Konular
128,158
Mesajlar
915,532
Kullanıcılar
449,908
Son üye
EFZA

Yeni konular

Geri
Üst