Seri port üzerinden uydu koordinat datalarını okumak

Başlatan dyonizos, 18 Ekim 2011, 00:52:09

dyonizos

selamlar arkadaşlar,
Orbitron , Satpc32 Nova gibi programlarla uyduların takibi yapılabiliyor. Esas sorum şu;
bu programların neredeyse tamamında seri port üzerinden uyduların koordinatlarını data olarak verdiği yazılı. Yani Azimuth ve Elevator acılarını seri porttan sürekli gönderiyormuş. Ancak nasıl bır data formatında gönderim yaptıgını bulamadım. Nette bu programlarda kullanılan arabirim devreleri var ancak acık kod olan bir yer bulamadım bu nedenle dataların formatına dair bir fikrim yok. Bu dataları nasıl okuyabilirim yada bunlar için standart bir format varmıdır?

dyonizos

Birde wispDDE gibisinden bir yardımcı yazılım kullanılıyor. Sanırım dataların gönderiminde bu yazılım yardım ediyor. Başka programlarda da kullanılıyor bu yazılım. Bu wispDDE nedir. Benım data formatını bulmam yada seri porttan verı okuyabılmemde faydası olacak bır programmı?

cicjoe

NMEA 0183 kullanıyordur büyük ihtimalle, mesaj başlığına bakıp, koordinatları içeren mesajdaki data'yı, virgül ( , )'e göre ayırarak, istediğin veriyi çekebilirsin.

format-> $--GGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx
örnek -> $GPGGA,182808.036,3731.9404,N,10601.6992,W,2,05,2.2,2312.7,M,-20.6,M,4.7,0000*7A

37.319404 Kuzey
106.016992 Batı

dyonizos

peki ben seri porttan gelen datanın formatını bilmeden oradan gelen datayı nasıl okuyabilirim. serin komutunda degiskeni yazmamız gerekmiyormu. hangi komutla datanın tamamını herhangibir kriter belirtmeden okuyabilirim.

dyonizos

Bu arada pic olarak 16f876, 16f877, 16f88 kullanabilirim. Sanirim bu konuda isimi gorebilmeleri gerek.

Klein

GPS alıcıları veriyi çoğunlukla NMEA protokolü ile gönderir. NMEA protokolünün formatı da belli. Ama bendeki alıcının  formatı bilmiyorum , bu yüzden tüm veriyi alıp hiç dokunmadan başka bir yere göndereceğim dersen , muhtemelen timeout koyman yeterliolacaktır. Yani 10-15mS hiç veri gelmezse veriyi almış kabul edersin.

dyonizos

Burada bahsettiklerim gps alicisi degilki. Yukarida bahsettigim programlar net uzerinden aldiklari uydu koordinatlarini seri port uzerinden veriyor.

Peki ben hangi komutu kullanarak seri porttan gelen bilgiyi lcd ye yazdirabilirim. (veri formatini bilmeden)
Devrede standart seriport ile pic arasinda max232 bulunuyor. 

cicjoe

eko yapabilirsin. seriden geleni oldugu gibi yazdirarak. lcd'de degil de, bilgisayarda yaparsan daha okunakli olabilir sanki. hangi siklikla kac satir veri gelecegini bilmedigim icin.

Klein

Muhtemelen o programların çıktısı da NMEA'dır. Proton bilmiyorum. Komutlar konusunda yardımcı olamam.

The Gariban

Aşağıda protokol ve ürünlerhakkında açıklamalar var
http://wiki.ham-radio-deluxe.com/index.php?title=Rotator_controllers
Örnek uygulama
http://www.ah6le.net/emeinterface.html
(Bu linkin açtığı sayfanın alt kısımında Hem programın algoritması hemde kaynak kod var(Calibration Procedure Başlığının Hemen Üstünde ki satır)


dyonizos

çok güzel bir link vermişsin hocam. teşekkürler.
Buradaki kodları çözmem biraz zaman alacak sanırım. Hiç aşina olmadığım kodlar var . hiçbiryerinde serin hserin gibi seri port komutları bulamadım :)

dyonizos

#11
Device 16F628A
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_OFF, LVP_OFF, CP_OFF, MCLRE_OFF, DATA_CP_OFF
XTAL = 4
TRISA=%00000000
TRISB=%00000010
CMCON=7
OPTION_REG.7=1
ALL_DIGITAL true   

Declare LCD_DTPIN = PORTB.4 ;LCD data line starting port.pin
Declare LCD_ENPIN = PORTB.3 ;LCD EN line
Declare LCD_RSPIN = PORTB.0 ;LCD RS line
Declare LCD_LINES = 4       ;LCD number of display lines

Declare RSIN_PIN PORTB.1
Declare SERIAL_BAUD 9600
Declare RSIN_MODE TRUE
Declare RSIN_TIMEOUT 10


Dim GELEN_DATA As Word

basla:

RSIn GELEN_DATA
Print At 2,1, GELEN_DATA

GoTo basla


bu şekilde bir kod ile seri porttaki datayı alıp lcd ye yazdırabilirmiyim acaba? Devre olarak https://www.picproje.org/index.php?topic=12771.0 linkteki standart max232 kullanıyorum.

dyonizos

yukarıdaki kod ile herhangibir veri alamadım. nerede bir terslik olabilir.

dyonizos

Tekrar selamlar arkadaşlar,
yazdıgım kodlarla programı çalıştırdıgım zaman şcd ekranda değişim görüyorum. Giriş cıkısları ters baglamısım o nedenle calıştıramamısım. Ancak lcd ekranda program data gonderdıkce anlamsız karakter cıkıyor. Yani program her 5sn de bir data gonderdıgınde j sonrakinde & sonra S ardından klavye ile yazamadıgım bır karakter :) sonra yine j ve boyle boyle karakterler yazıyor.
ne yapmam lazım bu gonderılen datanın ıcerıgını duzgun gorebılmem ıcın?

Device 16F628A
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_OFF, LVP_OFF, CP_OFF, MCLRE_OFF, DATA_CP_OFF
XTAL = 4
TRISA=%00000000
TRISB=%00000010
CMCON=7
OPTION_REG.7=1
ALL_DIGITAL true   

Declare LCD_DTPIN = PORTB.4 ;LCD data line starting port.pin
Declare LCD_ENPIN = PORTB.3 ;LCD EN line
Declare LCD_RSPIN = PORTB.0 ;LCD RS line
Declare LCD_LINES = 4       ;LCD number of display lines

Declare RSIN_PIN PORTB.1
Declare SERIAL_BAUD 9600
Declare RSIN_MODE TRUE
Declare RSIN_TIMEOUT 10


Dim GELEN_DATA As Word
Cls
Print At 1,1,"test"
DelayMS 500

basla:

RSIn GELEN_DATA
Print At 2,1, GELEN_DATA

GoTo basla

dyonizos

SerIn pin, 84,2000, MAIN,[Wait("AZ"), Dec Azimuth] bu komut ıle okuma yapılabılıyormus. sorunsuz calısıyor.