Pic 18f452 ye VBasic veri gönderme sorunu!

Başlatan baddog777, 28 Mart 2010, 04:10:17

baddog777

Arkadaslar, hazırladıgım isis simulasyonunda, vbasic de program hazırlayıp gonderdıgım metni picin epromuna atmaya calısıyorum, sorunum, vbasıc de yaptıgım programdan giden veri pic tarafında alındıgında gonderdiğim text ile hıc bır alakası olmayan sekilde pic epromuna kaydediliyor!

aynı işlemi diger bır ısıs simulasyonu ile pic1 den pic2 simulasyonuna text gönderdiğimde alınan veri bozulmadan eproma kaydediliyor! devrede max232 kullanıyorum. sorun nerde bırturlu anlayamadım, devrede herhangı bir sorun bulamadım, ki iki ayrı sımulasyon bırbırı ıle duzgun olarak iletişim saglıyor,
vb kodu kısaca asagıdakı gıbı, gonderim seklımde mı hata var yardımcı olursanız sevınırım!
karakterleri tek tek gonderdım olmadı ascii kodu olarak gonderdım yıne olmadı! programda bu deneme satırlarıda var zaten!

Private Sub Command1_Click()

yazi = Text1.Text
uz = Len(yazi)
For t = 1 To uz
' yazi1 = Asc((Mid(yazi, t, 1)))
' MSComm1.Output = Str$(yazi1)
MSComm1.Output = Mid(yazi, t, 1)
'MSComm1.Output = yazi
Next

End Sub

Private Sub Form_Load()
MSComm1.Settings = "9600,N,8,1"
       MSComm1.CommPort = 3
       MSComm1.InputLen = 1
       MSComm1.PortOpen = True
       MSComm1.RThreshold = 1
   
End Sub

hasangurlek

#1
Öncelikle tavsiyem .NET sürümlerinden birine geçmeniz yönünde olur.

1- Bir özellik devreye alınmadan ayarlarının yapılması gerekir;

Form_Loadda MSComm1.PortOpen = True ile portu açmadan önce MSComm1.RThreshold = 1 atamasını yapın.

2- Devreye alınan özellik kullanılmadan önce kullanılır durumda olup olmadığına bakılır;

If MSComm1.OutBufferCount <> 0 Then
TEKRAR TEST ET
Else
DATAYI GÖNDER
End If

3- Özelliğin kullanımı mümkün olan en basit şekilde yapılır;

Mscomm1.output="MERHABA ALICI" komutunu verirseniz string katarındaki her bir eleman char tipinde tek tek gönderilir. Dolayısıyla for döngüsü içinde her elemanı MID ile alıp ayrı ayrı göndermeye çalışmanız gereksiz. Basic dereleyicisi bunu sizin yerinize halleder.

4-  Data gönderim yöntemi önceden belirlenir;

Mscomm1.output="65" komutu ile alıcıya "6" ve "5" olarak iki bayt veri gönderilirken, Mscomm1.output=Chr(65) ile tek bayt 65 sayısının ascii karşılığı olan "A" karakteri gönderilir.

Eğer epromda "A" karakterini görmek ve datayı tek tek göndermek istiyorsanız CHR kullanılan ikinci yöntemi tercih edebilirsiniz.

Başkaca MSComm1.Output = Chr(78) & "Z" & Chr(0) &  "17" & Chr(0) & Chr(65) & "OK" vs. gibi karma yapılarda tek seferde yazılabilir.


Eğer dediğiniz gibi donanım hatasız ise birincil probleminiz buffer dolu iken yeniden yazmaya çalışmanız veya RThreshold = 1 ile belirlediğiniz alıcının gönderdiği 1 bayt veriyi okuyup read bufferini boşaltmadan yeni veri göndermeye çalışmanızdır. (If MSComm1.CommEvent = comEvReceive Then, X = Asc(MSComm1.Input) veya benzeri şekilde MSComm1_OnComm olayını işliyormusunuz ?)
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

baddog777

#2
cvp için tesekkurler, gönderimi vb ztn tek tek yapıyor biliyorum deneme ıcın mid ile yaptım, dinleme olayında da sıkıntı yok, picden gonderilen verileride okuyorum, fakat sorun dedıgım gıbı karakterlerin degısıme ugraması! baund rate ayarları da tamam, sorun haelen devam ediyor!
bu arada hyperterminal ile denemede yaptım,  aynı sorun oldu, acaba sırf simulasyon sorunumu diye dusunmeye basladım, uygulama yapıp pratıkde gormek gerek galıba.

baddog777

max232 yi devreden kaldırdıgımda sorun olmuyr, 18f452 nin rc6 ve rc7 seri haberlesme pinlerini kullanıyorm, pratikde max232 olmadan bu pic için baglantı yapmak mumkunmudur, bu özelliği tasımayan piclerde direkt baglantı olmuyor ama seri haberlesme portu ıceren pıc ıcın de mı aynı sey gecerlı?

hasangurlek

Alıntı yapılan: baddog777 - 28 Mart 2010, 18:20:40
max232 yi devreden kaldırdıgımda sorun olmuyr, 18f452 nin rc6 ve rc7 seri haberlesme pinlerini kullanıyorm, pratikde max232 olmadan bu pic için baglantı yapmak mumkunmudur, bu özelliği tasımayan piclerde direkt baglantı olmuyor ama seri haberlesme portu ıceren pıc ıcın de mı aynı sey gecerlı?

max232 türü dönüştürücü kullanmadan direk bağlantı yapamazsınız.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

baddog777

peki sorun nerdedir o zaman ? arada max232 olmadıgında verilerde bozulma yok! max232 kullandıgımda vb de veriyi tersleyip göndermem gerekecak bunu vbasıc de nasıl yapabilirim?

hasangurlek

Alıntı yapılan: baddog777 - 28 Mart 2010, 19:05:25
peki sorun nerdedir o zaman ? arada max232 olmadıgında verilerde bozulma yok! max232 kullandıgımda vb de veriyi tersleyip göndermem gerekecak bunu vbasıc de nasıl yapabilirim?

Donanımda problem yok diyorsunuz ama simulasyonda max232 yi devreden çıkartınca problemin düzeldiğini söylüyorsunuz. 232 nin görevi pc tarafında +/- olan sinyal seviyelerini PIC tarafında lojik seviyelere çevirmesi veya tersidir, 232nin her iki tarafında bağlantıları nasıl yapıyorsunuz ? şema paylaşabilirmisiniz ? Bir diğer konuda PC tarafında gönderdiğiniz her bayt 7 bit olarak değerlendirilir, yani standart ascii kodları olarak 0-127 arası değer alabilir. Sadece 127 den sonrası değerlerde problem yaşıyorsanız datayı char tipi değil, byte tipi göndermeniz gerekir.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

baddog777

7 bit olarakda denedim, dediğim gibi, virtual terminal ile deneme yaparken inverted ettıgımde sorun olmuyor ama aynı haldeyken VB programında karakterler degısıyor..

[IMG]http://img687.imageshack.us/img687/9575/max232.th.jpg[/img]

hasangurlek

#8
Max232 nin PC tarafındaki bağlantılarını yer değiştirirseniz probleminiz düzelir.

Max232 - DB9
R1In(13) <-> TXD (3)
T1Out(14) <-> RXD (2)

Ayrıca RTS, CTS vs. donanımsal kontrol yapmadığınıza göre TXD, RXD, GND hariç tüm bağlantıları iptal edebilirsiniz.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

baddog777

malesef ucları o sekılde degıstırdıgım zaman , hıc verı alıp gonderemıyorum! sorunun sımulasyondan kaynaklandıgını dusunmeye basladım , virtual port yuzunden baund rate sorunu olabılır .

hasangurlek

Alıntı yapılan: baddog777 - 29 Mart 2010, 09:32:17
malesef ucları o sekılde degıstırdıgım zaman , hıc verı alıp gonderemıyorum! sorunun sımulasyondan kaynaklandıgını dusunmeye basladım , virtual port yuzunden baund rate sorunu olabılır .

TX, TX e bağlı iken data transferi yapılabilirmi ? Gerçekte bu şekilde bağladığınızda iki taraftan biri hasar görür. Virtual port ise sorun kaynağı olamaz, PC tarafında iki terminal çalıştırıp kolayca test edebilirsiniz. Son olarak söyleyebileceğim 232ye bağlı kapasitörlerin yönlerini kontrol edin, onlarda doğruysa probleminiz MCU yazılımıdır.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!