Virtual Terminal iletişim problemi

Başlatan Mucit23, 07 Haziran 2012, 12:12:00

Mucit23

Merhabalar Arkadaşlar.
PC ile Pici seri iletişim yolu ile haberleştirmeye çalışıyorum. Arada USB seri dönüştürücü kullanıyorum. Driverleri felan tamam. Herşey sağlam görünüyor fakat bir türlü PCden veri çıkartamadım.

Terminal programı olarak Advanced Seri Port Terminal Programını kullanıyorum. USB seri dönüştürücüyü taktığımda sanal com noktası oluşuyor. Terminal programıda bağlanıyor bağlantı noktasına. Veri gönderiyorum ama nafile Seri port çıkışından hiçbirşey görünmüyor.

Pic Tarafında ise Veriyi almak için Uart kesmesi kullanıyorum. Aynı zamanda sürekli olarak PCye veri gönderiyorum. Picte sorun yok.
Örnek olarak aşağıdaki gibi bir kod yazdım. Arada İse Max232 Devresi var. Max232 nin PC tarafına baktığımda Picten gönderdiğim verileri görüyorum. Her nedense PC den hiç veri gelmiyor.
Örnek olarak yazdığım kod budur.
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [Ferhat YOL]                                      *
'*  Notice  : Copyright (c) 2012 [Mucit23]                      *
'*          : All Rights Reserved                               *
'*  Date    : 07.06.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
DEFINE OSC 20

@  __config _HS_OSC & _WDT_ON & _PWRTE_ON & _LVP_OFF & _CP_OFF

TRISA=%00000000
TRISB=%00000000
TRISC=%10000000
PORTA=0:PORTB=0
PORTC=0

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 129 ' 9600 Baud @ 20MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
DEFINE HSER_BAUDRATE 9600 'Baud_rate = 9600

INTCON=%11000000
ON INTERRUPT GOTO KESME
PIE1.5=1

DLY  VAR WORD
TEMP VAR BYTE
VERI VAR BYTE
CHAR VAR BYTE


PORTC.0=1

PAUSE 50
BASLA:
IF VERI="A" THEN PORTB=255
IF VERI="B" THEN PORTB=0
CHAR="A"
HSEROUT [CHAR]
GOSUB DELAY
GOTO BASLA

DELAY:
FOR DLY=0 TO 10000
PAUSEUS 1
NEXT
RETURN

DISABLE
KESME:
INTCON.7=0
PORTC.1=1
HSERIN 50,ATLA,[VERI]
ATLA:
TEMP=RCREG
INTCON.7=1
Resume
enable
END


Burada mesela picin TX pini ile RX pinin birleştirsem kesme oluşuyor gelen veri alınıyor.
İlginç bir durumla karşı karşıyayım. Sorun nerde olabilir. Acaba terminal programındamı sıkıntı var. Önerilerinizi bekliyorum..

ibrsel

@ Mucit23 hocam; öncelikle seri portu olan bir masa üstü bilgisayarda arayüzünüzü ve devrenizi deneyin derim.. Çünkü buna benzer sorunları USB - SERİ dönüştürücüde bende yaşadım. Direk seri port çıkışı olan bilgisayarda sistem çalışırken dönüştürücü kullandığımda iletişim sağlanmıyordu..Bence bir deneyin derim .. İyi çalışmalar..

kudretuzuner

Merhaba
PC ile PIC bağlantı şemasını verebilir misin?asm olarak PIC tarafındaki yazılımı ve de VB.Net olarak da PC tarafındaki yazılımı vereyim.
Amatör

Mucit23

Hocam Şemam yok malesef. Pic için yazdığım programı deney seti üzerinde deniyorum.
Kullandığım işlemci 16F876, 20Mhz de çalışıyor. İletişim hızı ise 9600 Baud.

Pic İle PC arasında Max232 Devresi var. RX ve TX pinleri Pic üzerinde RC7(RX) ve RC6(TX) Pinlerine bağlanmış. İletişim için gerekli bağlantılar bunlardan ibaret.

USB seri dönüştürücülerin çalıştığına eminim. Çünkü başka bir bilgisayarda başka bir arkadaşım kullanıyordu. İşin ilginç tarafı Picten PCye gönderdiğim veriler Terminalin ekranındada görünmüyor. Yani PC ne veri alıyor nede gönderiyor. Sorun burada.


Mucit23

Sanırım Terminal programında sorun vardı.

FxDev isimli arkadaşımızın hazırladığı terminal programı ile denedim. O programda sıkıntı çıkmadı çalışıyor. Yani USB seri dönüştürücünün çıkışından osiloskop ile dataları görebiliyorum.

Eren Eraslan

merhabalar

öncelikle şunu söylemeliyim bende usart devresi yaptığımda ilk usb seri çeviriciyle denedim ama çalışmadı sonra rs232 portu olan bir bilgisayarda denediğimde çalıştı..
benimde driverları yüklü filandı çevirici için..

o çeviricilerin çoğunun adi olduğunu öğrendim sonra içini açarsanız öprenirsiniz :)

insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

kudretuzuner

Merhaba
Yazdığım programı direk C:\ ye kaydet(C'ye göre derledim)PC'nin TX-RX pinlerini dikkatlice kısa devre yap.PC'den yolladığın datayı msgbox'ta görmen lazım.Bu PC'den yolladığın datanın tekrar dönüp PC'ye geri geldiğini gösterir.Bu aşamadan sonra araya max232'yi bağla PC'den çıkan TX ucunu max232'nin R1 in pinine gir.R1out çıkışını max232'nin T1in pinine gir.T1 out çıkışını PC'nin RX'ine gir böylece datayı max232 girip çıkıp sonra tekrar PC'ye giriş yap.Text boxtan girilen datayı tekrar görmen lazım.Bu demektir ki PC-max232 bağlantısı çalışıyor.Bu bağlantının çalıştığını gördükten sonra max232'den sonra PIC'i gerektiği şekilde bağla.Yanlız bir problem var ben profilik USB convert serial port kablosundan(dönüştürücüden) sadece PC'den PIC'e data yollayabildim.PIC'ten PC'ye data yollayamadım.Ama masa üstü PC'den direk seri port bağlantısı yapıldığı zaman(kablo ile veya kablosuz)hem data yollama hem de data alma olayı çalışıyor.Benim verdiğim test programında data alma özelliği yok arzu edersen onu da yazarım.Datanın PC tarafından alınma olayı yazılımda biraz değişiklik gösterir.Örneğin PIC'in klavye "1"olarak yolladığı data (hex31) PC'de 49 olarak görülür. Bknz:
http://www.table-ascii.com/
https://rapidshare.com/files/2351983141/MUCT_SERL_PORT_TEST.rar
Amatör

F.T

 Advanced Seri Port Terminal bu programla alakalı bir durumdur.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Mucit23

#8
Arkadaşlar şimdi verileri pice gönderebiliyorum ama alıcı taraf doğru düzgün alamıyor verileri. Sebebi ise kesinlikle işaretçi kullanmamamdan kaynaklanıyor. Bunu nasıl önlerim. Pic tarafında düzgün alamıyorum. Yoksa terminal programının bir suçu yok ascii olarak A gönderiyorsam Pice A ulaşıyor ama pici tam
olarak alamıyor.
İşin ilginç  tarafı Picin gönderdiği veri PC yede ulaşmıyor
Ne yapabilirim.

Pardon Pic için kodu yukarıda vermiştim ama yine vereyim. Görmeyen olmuştur belki
Alıntı YapDEFINE OSC 20

@  __config _HS_OSC & _WDT_ON & _PWRTE_ON & _LVP_OFF & _CP_OFF

TRISA=%00000000
TRISB=%00000000
TRISC=%10000000
PORTA=0:PORTB=0
PORTC=0

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 129 ' 9600 Baud @ 20MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
DEFINE HSER_BAUDRATE 9600 'Baud_rate = 9600

INTCON=%11000000
ON INTERRUPT GOTO KESME
PIE1.5=1

DLY  VAR WORD
TEMP VAR BYTE
VERI VAR BYTE
CHAR VAR BYTE

PAUSE 50
BASLA:
CHAR="A"
PORTB=VERI
HSEROUT [CHAR]
GOSUB DELAY
GOTO BASLA

DELAY:
FOR DLY=0 TO 10000
PAUSEUS 1
NEXT
RETURN

DISABLE
KESME:
INTCON.7=0
PORTC.1=1
HSERIN 5,ATLA,[VERI]
ATLA:
TEMP=RCREG
INTCON.7=1
Resume
enable
END


Mucit23

Sorunu çözemedim birtürlü :S

Emin değilim ama ben yine USB seri dönüştürücüden şüpheleniyorum. Yazılımsal olarak sizce Problem yaratabilecek sorunlar varmı ben bunu göremiyorum şuanda

Mucit23

#10
Sorunu kısmende olsa çözdüm.

Sorun benim croslanmış kablo kullanmamdan kaynaklanıyormuş. Ben RX>>TX, TX>>RX işlemini kabloyla yapıyordum ama zaten deney kartı üzerinde bu işlem yapılmış Dolayısıyla TX>>TX e RX>>RX e bağlıymış.
Bilgisayardan Pice gönderdiğim verileri alıyorum ama picden pcye gönderdiğim verileri alamıyorum. Pic den PC ye giden data hattına osiloskopla baktığımda çok aşırı bir gürültü var. ve Datalar bu gürültünün üzerine binmiş şekilde görünüyor. Bunada anlam veremedim

İyi Haber benim C# ile hazırladığım programcıkda çalışıyor :)

Şimdi Picden gelen dataların neden bu kadar gürültülü olduğunu anlamaya çalışıyorum. Resmen sinüs dalganın üzerinde dataları görüyorum.

Edit;

Kendimi şizofren insanlar gibi hissetmeye başladım   ???

Ama neyse tüm sorunları çözdüm. Sorun Bendeki deney kartının stardartlara uymamasından kaynaklanıyor. Mesela normalde seri protta 5 numaralı pin GND olması lazım. Kart üzerinde 1 Numaralı pini GND yapmışlar. Dolayısıyla kartları PC ile Pic Arasında GND hattı bağlanmıyormuş RX TX pinlerininde yeri yanlışmış. Ben bunları hepsini kablo ile düzelttim ama öyleki Kabloyu ters çevirip taksam yine çalışmayacak.