SERI PORT YARDIM

Başlatan demirkan1, 06 Ekim 2004, 15:02:03

demirkan1

Selam Arkadaşlar,

Yapmış oldugum bir kayan yazı devresinde pic'e hyperterminal
ile baglanarak yazı metnini degiştiriyorum.

Bu işlemler kısaca şöyle oluyor : pic (16f628) her 10 saniyede bir rx
portunu kontrol ediyor şayet bir sinyal var ise(bu arada ben devamlı enter
tusuna basıyorum) program moduna geçiyor ve tx portundan hyperterminale yeni metin girişi diye bir bilgi yolluyor ve bilgi bekliyor
gelen harfleri tek tek (her karakter geldikçe) harici eeproma (24c256)
yazıyor ve tekrar hyperterm. gönderiyor (yazılan harfi monitörde görmek için) harf gönderme işlemi sonunda ben hypetterminalden é tusuna
basınca pic program modundan çıkarak başa dönüyor ve hafızadaki yazılar led ekrandan geçmeye başlıyor. Devrenin çalışması kısaca böyle
ve sorunsuz bir şekilde çalışıyor.

Benim sorunum : hyperterminal ile baglantı sağlandıkdan sonra her tusa
bastıgımda o tusun karsılıgı dogrudan 24c256 yazılıyor onun için yazı
yazarken bir hata yaparsam bu işlemleri sil baştan yapmam gerekiyor.
mesala 200 karakter yazı girdikden sonra yanlışlıkla bir harfe basarsam
daha önce yazdıgım 200 karakteri tekrar girmem gerekiyor.

benim sizlerden ricam: bir arayüz programı yaparak word veya not pad'de yazılmış bir yazıyı kes yapıştır ile bu arayüz programına yapıştırarak pic'e göndermek. Ancak gönderme işlemi başlamadan önce bir tusa basarak enter bilgisi göndermesi gerekiyor (pic'in prog. moduna geçmesi için) ardından gönder tuşuna basarak yapıştırdığımız yazıyı gönderecek ve gönderilen her karakter arasında 20 milisaniye
gecikme olması lazım. (24c256'ya yazma süresi bırakması lazım)
böyle küçük bir programı delphi veya visual basic gibi programlarla
yazabilirmiyiz.Bende delphi3 var ve ofis97 word'de visual basic
var bunları kullanarak olurmu. Ancak ben programcılıkdan anlamıyorum
bana bu konuda yardımcı olabilirmisiniz. veya ihtiyacımı görecek
elinizde program var ise gönderebilirmisin. veya yararlanabilecegim
web adresi biliyormusunuz.

herkese şimdiden teşekkürler.

demirkan1@yahoo.com

cozturk

Konforlu bir program yazmak elbette mümkün. Ancak bunun için öğrenci olmayan bir arkadaş  en az >1000$ ister.   Delphide mümkün. bazı hazır komponentler gerekebilir.

Bu günlerde benim kullandığım bir program var. hyper terminalden daha konforlu. istersen denemeler için bunu kullanabilirsin. 5-10 tane preset tuş ayarlıyorsun. Bunlşara istediğin stringleri veya hex kodları yüklüyorsun. buna Basınca  direk onları gönderiyor. Hex kısmı önemli. Çünkü enter vb. karekterleri de göndermek için kaydetmek lazım. ister hex, ister ascii, ister bin. modunfda ayarlayabiliyorsun.Program : Docklight V1.4 bu verisyon için crack yok. fakat siz 1.3 krekini aynı klasöre kopyalayıın. işlem tamam. Her halde bu işlem in adı Upgrade değil Downgrade olur :D

arif

merhabalar,
Hocam bence hemen bir Visual Basic derleyicisi al. Gerçekten çok kısa sürede öğrenirsin. Bu söylediğin programı hemen yaparsın. Fazla uğraşmassın.
Seri port kullanımı VB de gerçekten çok kolay.

axanc

   MSComm1.CommPort = 1
    MSComm1.Settings = "19200,N,8,1"
    MSComm1.Handshaking = 0
    MSComm1.DTREnable = False
    MSComm1.RThreshold = 1
    On Error Resume Next
    MSComm1.PortOpen = True
    MSComm1.InBufferCount = 0
    If Err Then MsgBox "Cannot open comm port " & MSComm1.CommPort


selam...

bak buradaki kod VB'de form'a koyduğun bir MSComm ile seri port'a bağlantı açmayı gösteriyor.. bunun kadar basit seri port ile bağlantı kurmak.. pic her karakteri yazdığında bunu bilgisayara özel bir karakter ile yazdığını bildiren bir işaret gönderirse işin daha da güzelleşir.. sistem yazmayı bitirdiğinde de otomatik olarak programı kapattırabilirsin.. program biraz karışık olur ancak bunun gibi bir bilgisayar arayüzünü yazmak @cozturk ustanın yazdığı kadar pahalı olacağını sanmıyorum, @cozturk hocam gerçekten o kadar alırlar mı?.. arkadaşım bununla ilgili biraz daha araştırma yaparsan biraz daha az masrafla bu istediğin programı büyük ihtimalle kendin yapabilirsin.
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    MSComm1.DTREnable = True
    MSComm1.DTREnable = False
    If MSComm1.PortOpen Then MSComm1.PortOpen = False
    End
End Sub

bu arada programın sonunda port'a olan bağlantıyı kapatmayı unutma..
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

demirkan1

arkadaşlar verdiğiniz bilgiler bayagı işeme yarıyacak hepinize teşekkur ederim

Digimensch

su VB ile Serial Porta bagli bir  PIC 16F84'lü bir devreye bende komut gönderip o  komuta göre PIC 16F84'ün islev yapmasini istiyorum.
Örnegin Serial Porta bagli PIC 16F84 ile olsusturdugum bir Devre var.
Ben bu Devreye  örnegin VB (Mscomm1 kullanarak) ile kendi yazacagim Programdan binäry veri göndermek , bu veriyi alan PIC 16F84'ün PortA daki ikinci Bacagina bagli olan Led Lambayi yakmasini istiyorum.
Simdi burda;
VB ile nasil bir kod yazmaliyim??
PIC 16F84 icine yazacagim Programin ASM kodu nasil olmali? Yani PIC 16F84'e Serial Porttan söyle bir Komut geldiginde söyle yap islevini nasil yazmaliyim??
Bana bu konuda bilgi verirseniz sevinirim.
saygilarimla

axanc

arkadaşım, önceki sorudaki gibi tekar yardımcı olmak isterdim yanlız bilgisayar'ımla ilgili bir sorun nedeniyle size yardımcı olamıyorum.. aslında olay oldukça basit, google'da Türkçe sitelerde biraz arayın isterseniz..
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

cozturk

Delphide yapacaksanız kimse sizi tutamaz. free SerialNG komponentlerini tepe tepe kullanınız. Absolutely free :)

Digimensch

Peki Com1 'dan gelen veriye göre PIC16f84'ün islev yapmasi icin bu PIC16F84'e gerekli asm kodunu yazarken Com1'den veri gelince söyle yap veya böyle yap diye belirtilmelimi?
Evet ise nasil?
bir örnek asm kodu yazabilirmisiniz??
Örnegin Com1 üzerinden gelen komuto göre PortA'nin 1.ayagi  1 olsun.
Yine gelen baska bir komuta göre bu PortA'nin 1.ayagi tekrar o olsun.
Bunu asm olarak nasil yazmaliyim??

ufuk0106

selam.
Ben Pc den gönderdiğim veri ile pic'i konrol ettim. PicTen veriyi VB'ye nasıl gönderebilirim. Pic çıkışını max232'nin 11 nolu bacağına, Max232'nin 14 nolu bacağınıda Portun 2 nolu bacağına bağladım.(Doğru mu?)

VB'deki Porttan veriyi alan program konusunda yardımcı olabilirmisiniz? Kodları nasıl acaba?

koordinat

Alıntı yapılan: "cozturk"Delphide yapacaksanız kimse sizi tutamaz. free SerialNG komponentlerini tepe tepe kullanınız. Absolutely free :)
hocam cok doğru söylemişsin.vb deki dandik mscomm u görüp daha sonra delphi de komponenti programın içine çekip atmak çok garip geliyor insana.boşuna mı kastım diyo insan ya... :D

vatandas30

arkadaşlar yeni bir başlık açmamak için buraya yazmayı uygun gördüm.
sorunum şu:
yaptığım kayan yazı devresine seri porttan hyperterminal üzerinden metin gönderebiliyorum. ama daha kullanışlı olması için visual basicde program yazmaya çalıştım. siteden ve diğer kaynaklardan faydalanarak yazdığım program:
Private Sub Command1_Click()
MSComm1.Output = "#"
MSComm1.Output = Text1.Text
MSComm1.Output = "#"
End Sub

Private Sub Form_Load()
Text1.Text = "yazıyı giriniz"
MSComm1.CommPort = 2
    MSComm1.Settings = "2400,N,8,1"
    MSComm1.Handshaking = 0
    MSComm1.DTREnable = False
    MSComm1.RThreshold = 1
    On Error Resume Next
    MSComm1.PortOpen = True
    MSComm1.InBufferCount = 0
    If Err Then MsgBox "Cannot open comm port " & MSComm1.CommPort
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    MSComm1.DTREnable = True
    MSComm1.DTREnable = False
    If MSComm1.PortOpen Then MSComm1.PortOpen = False
    End
End Sub


bir buton ve text kutusu bulunuyor. metni yazıp butona bastığımda  metnin ilk 4 karakteri gidiyor. sebebini bulamadım. yardımlarınızı bekliyorum.

mhk

Sorun , muhtelemen mikroişlemcinin  bilgisayar hızına erişememesinden kaynaklanıyordur.
Bu gibi durumlarda ; Karşılıklı haberleşmeyi kullanmak daha mantıklı. Şöyleki, mikroişlemciye bilginin geldiğini anlatan başlangıç karakteri gönderildi. Mikroişlemci bunu aldı ve veri almaya hazır bekliyor. Sonra yazının ilk karakterini gönderilecek ve bilgisayar bekleyecek, mikroişlemci bunu alıp ilgili yere yazdıktan sonra işlem tamam (belirlenen bir karakter , başlangıçtaki bilginin geldiğini belirtmek için kullanılan karakter gibi. ) karakterini yollayacak. Bekleyen bilgisayar verinin ilk karakterinin yazılmış olduğunu anlayacak ve 2. veri 3. veri ..... en son veri. Son olarakta yazım işlemi bitti karakteri gönderilecek ve sistem karşılıklı olarak veri alışveriş işlemlerini tamamlamış olacaktır. Bu tip haberleşmenin avantajları ise, Bilgilerin mikroişlemci tarafından ilgili yerlere yazılımının tamamlandığını bildirir. Haberleşme kablosu takılı değilse belirli süre karşılık karakteri gelmediğinde "haberleşme sağlanamadı..." uyarısı ile ekrana yazı çıkarılabilir.  
 Bu tip bir program için ise VB 'de textbox larda verinin nasıl teker teker alınması gerektiği araştırılmalı.
Örnek olması açısından;

Private Sub gonder_Click()

uzun = Len(Text1.Text)
kar = Text1.Text

MSComm1.Output = Chr$(251)    'Veri başlama karakteri

For yer = 1 To uzun
     
             karakter = Mid(kar, yer, 1)
                 MSComm1.Output = karakter
                         
        dblEndTime = Timer + 1#
            Do While dblEndTime > Timer
                If sData = Chr(250) Then GoTo serbityaz
                  DoEvents
            Loop
      GoTo seribitir
     
serbityaz:
Next yer
     
    MSComm1.Output = Chr$(200)
mydat = MsgBox(" Bilgiler gönderildi...")

exit sub
    
seribitir:
   mydat = MsgBox(" Haberleşme sağlanamadı...", 48, " H A T A ")

End Sub
'*************************************
Private Sub MSComm1_OnComm()
    
If MSComm1.CommEvent = comEvReceive Then
    sData = MSComm1.Input
End If


End Sub


sData değişkeni global tanımlanmıştır.
Burda incelenecek olursa, İlk olarak textbox'ta ne kadar karakter olduğu uzun değişkenine (LEN komutu ile aktarılıyor) , Bilgisayar veri başlama sayısı olarak 251 gönderiyor ve 1 sn süre içerisinde 250 verisini bekliyor bu süre içerisinde veri gelmezse haberleşme sağlanamadı uyarısında bulunup gönderme işlemini kesiyor. Mikroişlemci normal rutin işlemlerini yaparken kendisine 251 verisi geldiğinde alma moduna geçiyor ve bilgisayarın beklediği 250 verisini gönderiyor. Bundan sonra textbox'ta bulunan karakterler for next ile teker teker MID komutu kullanılarak gönderiliyor. Her gönderimden sonra bilgisayar başlangıçta ki gibi 250 verisini bekliyor. Her şey yolunda ise gönderim sonuna kadar gerçekleşiyor. Textbox'ta yazının sonuna gelindiğinde , bilgisayar mikroişlemciye yazının bittiğini anlatmak için 200 verisini gönderiyor ve işlem sona ermiş oluyor. Burda yazdığım 200 ,250 ve 251 sayıları benim daha önceden belirlediğim sayılardır. Başka bir sayıda belirlenebilir. Lakin bu tip belirleme işleminde sayının karşılığı olan ASCII kod bir harfe denk geliyorsa bu tip sayılardan kaçınılmalı. Örneğin A harfi ASCII de 65 tir bu yüzden 65 66 67 .... vs gibi sayılar kullanmak yanıltıcı olabilir. Daha detaylı bilgi için ASCII kod tablosundan hiç kullanmayacağınız kısımlar seçilip kontrol kodları oluşturulabilir ( 200,250,251,255 vs gibi )
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

vatandas30

üstadım.
seri porttaki cts ucunu kontrol ediyorum. yani bir karakter alınca picten cts ucuna bağlı olan pini 1 yapıyorum. bu esnada zaten bildiğim kadarı ile bilgisayar diğer veriyi göndermiyor. picin işlemleri bitince cts=0 yaparak ikinci karakteri alıyorum. hyperterminalde hiçbir karakter kaçırma olmuyor.

mhk

Alıntı yapılan: "vatandas30"üstadım.
seri porttaki cts ucunu kontrol ediyorum. yani bir karakter alınca picten cts ucuna bağlı olan pini 1 yapıyorum. bu esnada zaten bildiğim kadarı ile bilgisayar diğer veriyi göndermiyor. picin işlemleri bitince cts=0 yaparak ikinci karakteri alıyorum. hyperterminalde hiçbir karakter kaçırma olmuyor.

Evet haklısın bu tür kontroller mümkün. Hatta adres bilgileri için diğer kontrol ucu rts de kullanılabilir. Lakin uzun mesafe devreye girdiğinde haberleşmeler genellikle 2 kablo üzerinden ( RS485 gibi ) yapıldığı için bu yöntemi kullandım. Senin bahsettiğin yöntem daha sağlıklı elbette.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana