C

gps modul data bilgilerini okuma

Başlatan compacta, 29 Haziran 2012, 17:36:39

compacta

merhabalar! herkes nasıl? herkes iyidir inşallah... arkadaşlar bir gps ile yapmayı düşündüğüm bir devre var.yalnız gps deneyimim olmadığından sadece gps data bilgilerini alıp bunlara şart dallandırmalarıyla cihazları açıp kapatmayı planlıyorum.yani ben evden çıkıp 100m uzaklaşınca ev ışıklarının kapanmasını sağlıcam.benim rica ettiğim sadece bir pic ile data verilerini okuyabilmek daha sonrasını ilerletebilirim diye düşünüyorum.herzaman siz yardımlarınızı esirgemeyen arkadaşlardan bir yardım daha rica ediyorum.herkese kolay gelsin.

ete

Gps ile hiç uğraşmadım. Haberlesme sekli standart olmalı. Ancak firmadan firmaya veri cinsi farklı olabilir. Bu nedenle varsa elindeki aletin data sheet ini buraya ekle de bakalım nasıl haberleşiyormuş.
Ete

compacta

hocam ilgili cevabınız için teşekkür ederim.elimdeki gps modül özellikleri
Chipset MTK MT3329
Frequency L1, 1575.42MHz
C/A Code 1.023 MHz
Channels 66 channels
SBAS WAAS, EGNOS,MSAS Supported
Datum WGS84(Default), Tokyo-M, Tokyo-A, User
Define
CPU ARM7EJ-S

elimde bir yazılım var.burda gps uydulrındaki atom saatten aldığı bilgileri ve hız faktörlerini lcd üzerinde veriyor.
üsste olan gps modülle ben sadece gps data bilgilerini mesela  35 78.05N-032 45.67 olduğunda ledi yak şeklinde koşullamak.bundan sonrasını şekillendirip bunu ev cihazlarına uyarlamaya çalışacağım.şimdilik ledi yaksam yeter.proteusta çizim yaptım.ama proteusta tx sinyalini similasyonunu yapamadım böyleliklede yazılımı kontrol edemedim.yazılımı ekliyorum.bakabilirseniz sevinirim.....

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 29.06.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

DEFINE OSC 4
CMCON = 7




GPSin VAR PORTB.1
RPMin VAR PORTB.4 'input from rpm module optical with 2 marks on flyweel
TRISB.1=1 'define port B1 as input
TRISB.5=1 'define port B5 as input
TRISB.4=1 'define port B4 as input
TRISA.0=0 'define PORT A output for LCD DB4
TRISA.1=0 'define PORT A output for LCD DB5
TRISA.2=0 'define PORT A output for LCD DB6
TRISA.3=0 'define PORT A output for LCD DB7
TRISA.4=0 'define PORT A output for LCD RS
TRISB.3=0 'define PORT B output for LCD E


PORTA=0
PORTB=0

'Allocate Variables for GPS:
TimeOut CON 3000
baudGPS CON 24764 '16572 + 8192 (bit 13)
RPM VAR WORD 'motor revolutions

truecourse VAR WORD 'true course to WP
magcourse VAR WORD 'magnetic course to WP
dist VAR BYTE 'distance to WP units
distten VAR BYTE 'distance to WP tens
wpid VAR BYTE 'WP id nb
wp VAR BYTE[16] 'WP name



hh VAR BYTE 'hours
mm VAR BYTE 'minutes
j VAR BYTE 'day
m VAR BYTE 'month
a VAR BYTE 'year
knots VAR WORD 'speed in knots (units)
knotsten VAR BYTE 'speed in knots (tens)
course VAR WORD 'heading
latdeg VAR BYTE 'degrees latitude
latmin VAR BYTE 'minutes latitude
NS VAR BYTE 'north or south
londeg VAR BYTE 'degrees longitude
lonmin VAR BYTE 'minutes longitude
EO VAR BYTE 'east or west


fix VAR WORD 'GPS fix

'initialize variables
hh=0
mm=0
j=0
m=0
a=0
knots="0"
knotsten=0
course=0
latdeg=0
latmin=0
NS="N"
londeg=0
lonmin=0
EO="S"
truecourse=0
magcourse=0
dist="0"
distten=0
wpid=0

LCDOut $FE, 1 'Clear Screen
LCDOut " BARIS GPS"
LCDOut $fe,$c0
LCDOut " HOSGELDiNiZ"
Pause 2000
LCDOut $FE, 1 'Clear Screen



GPS: 'read GPS

'read motor revolutions
Count RPMin,600,RPM
IF RPM<2Then
GoTo readgps
Else
RPM=RPM*50
LCDOut $FE, 1 'Clear Screen
LCDOut "MOTOR HIZI:"
LCDOut $fe,$c0
LCDOut #RPM," RPM"
Pause 2000
EndIF



readgps:
SerIn2 GPSin,baudGPS,Timeout,Nogps,[wait("$GPRMC"),wait(","),DEC2 hh,DEC2 mm,wait(","),fix,wait(","),DEC2 latdeg,DEC2 latmin,wait(","),NS,wait(","),DEC3 londeg,DEC2 lonmin,wait(","),EO,wait(","),knots,wait("."),DEC2 knotsten,wait(","),DEC3 course,wait(","),DEC2 j,DEC2 m,DEC2 a]



IF fix="V" Then 'if no GPS fix
GoTo Nofix
EndIF


LCD:


'normal display if fix ok
LCDOut $FE, 1 'Clear Screen
LCDOut "HIZ :",knots,",",DEC2 knotsten,"KNT"
LCDOut $fe,$c0
LCDOut "YON:",DEC3 course,223,"GERCEK"
Pause 3000


LCDOut $FE, 1 'Clear Screen
LCDOut DEC2 j,"-",DEC2 m,"-",DEC2 a," ",DEC2 hh,":",DEC2 mm
LCDOut $fe,$c0
LCDOut DEC2 latdeg,223,DEC2 latmin,39,NS," ",DEC2 londeg,223,DEC2 lonmin,39,EO
Pause 3000

'Get route informations from serial port
SerIn2 GPSin,baudGPS,Timeout,norte,[wait("$ECBWC"),wait(","),wait(","),DEC2 latdeg,DEC2 latmin,wait(","),NS,wait(","),DEC3 londeg,DEC2 lonmin,wait(","),EO,wait(","),DEC3 truecourse,wait(","),wait(","),DEC3 magcourse,wait(","),wait(","),DEC2 dist,wait("."),DEC2 distten,wait(","),wait(","),DEC2 wpid,wait("-"),STR wp\16\"*"]


'display route informations
LCDOut $FE, 1 'Clear Screen
LCDOut "ROTA ",DEC2 wpid,":"
LCDOut $fe,$c0
LCDOut STR wp
Pause 3000

LCDOut $FE, 1 'Clear Screen
LCDOut "POZISYON ",DEC2 wpid
LCDOut $fe,$c0
LCDOut DEC2 latdeg,223,DEC2 latmin,39,NS," ",DEC2 londeg,223,DEC2 lonmin,39,EO
Pause 3000

LCDOut $FE, 1 'Clear Screen
LCDOut "ROTA ",DEC2 wpid
LCDOut $fe,$c0
LCDOut DEC3 truecourse,223,"GERCEK",61,DEC3 magcourse,223,"MAG"
Pause 3000

LCDOut $FE, 1 'Clear Screen
LCDOut "VARIS ",DEC2 wpid
LCDOut $fe,$c0
LCDOut DEC2 dist,",",DEC2 distten," NM"
Pause 2000


GoTo GPS


'display if no gps is present
Nogps:
Pause 1000
LCDOut $FE, 1 'Clear Screen
LCDOut "SiNYAL YOK!"
LCDOut $fe,$c0
LCDOut "KABLO KONTROLU"
Pause 1000
GoTo GPS

'display if no gps fix
Nofix:

'display last valid from GPS
Pause 1000
LCDOut $FE, 1 'Clear Screen
LCDOut " GPS DUZELMEDi"
LCDOut $fe,$c0
LCDOut " SON KAYIT"
Pause 2000
LCDOut $FE, 1 'Clear Screen
LCDOut "LAT:",DEC2 latdeg,223,DEC2 latmin,39,NS
LCDOut $fe,$c0
LCDOut "LON:",DEC2 londeg,223,DEC2 lonmin,39,EO
Pause 2000
GoTo GPS

norte:
'display if no active route
Pause 1000
LCDOut $FE, 1 'Clear Screen
LCDOut "ROTA iSLEMEDi"
Pause 1000
GoTo GPS


pwm.c

elimde pbp ile yapılmış bir örnek vardı. umarım işine yarar.
dosyayı buraya ekledim.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

compacta

hocam ilginize teşekkür.yazılımı inceledim.şimdi benim
sorunum bu proteustaki virtual terminali kullanamamam.yani yazılımdaki 9600 baund frekansı yolluyorum virtual terminal penceresinde uydunun arandığı yazıyor ama ne yaptıysam yazıları lcd de basdıramadım.yardımcı olursanız sevinirim.kolay gelsin......

compacta

ete hocam nasılsınız?
son gönderdiğim gps ile ilgili yazılıma bakma zamanınız oldumu.kolay gelsin...

ete

Detaylı bakmadım yalnızca şöyle bir baktım. Zira detaylı incelemek gerek. Ne geliyor gelenlerin anlmaı nedir. Hiçbirisini henüz bilmiyorum. O nedenle elimde bir proje olmadan incelemem zor.

Ete

compacta

#7
ete hocam kabaca anlatmaya çalışayım.yazılım içinde benim için önemli olan enlem ve boylam bilgilerini gps modülden alıyor.devre çalıştığında en az 3 uyduya bağlantı şartı koyuyor.3 uydu şartını sağladıktan sonra lcd ekranda enlem ve boylam bilgilerini basıyor.işte burada bilgilerinize ihtiyacım var.buda gelen bu bilgiler yani lcd de basılan enlem ve boylam bilgileri benim belirlediğim şarta göre kullandığım 16f84a picinin müsait bir portundan bir ledi yakması sonra şart bozulunca ledin sönmesi.yani örneğin 34.05.67N-032.45.50E arz tuluna gelince led yanacak.bu şart ortadan kalkınca led sönecek.proje olarakta ben normalde bu led yakma yerine bunu evdeki bir cihazıma bağlayıp açıp kapatmak.kafamdaki düşünceler bunlar...açıklayabildiysem ne mutlu bana.iyi günler

compacta

hocam anlattığım yazılımı göndermeyi unutmuşum pardon...yazılım....

LCD_TX CON     0 ' serial output to LCD
GPS_SIO CON 1 ' connects to GPS Module SIO pin

' -----[ Constants ]-------------------------------------------------------

'---- [LCD Constants] ----

LcdBaud CON 84 'mode LcdBaud corresponds to 9600 Baud

LcdBkSpc        CON     $08             ' move cursor left
LcdRt           CON     $09             ' move cursor right
LcdLF           CON     $0A             ' move cursor down 1 line
LcdCls          CON     $0C             ' clear LCD (use PAUSE 5 after)
LcdCR           CON     $0D             ' move pos 0 of next line
LcdBLon         CON     $11             ' backlight on
LcdBLoff        CON     $12             ' backlight off
LcdOff          CON     $15             ' LCD off
LcdOn1          CON     $16             ' LCD on; cursor off, blink off
LcdOn2          CON     $17             ' LCD on; cursor off, blink on
LcdOn3          CON     $18             ' LCD on; cursor on, blink off
LcdOn4          CON     $19             ' LCD on; cursor on, blink on
LcdLine1        CON     $80             ' move to line 1, column 0
LcdLine2        CON     $94             ' move to line 2, column 0

LcdCC0          CON     $F8             ' define custom char 0
LcdCC1          CON     $F9             ' define custom char 1
LcdCC2          CON     $FA             ' define custom char 2
LcdCC3          CON     $FB             ' define custom char 3
LcdCC4          CON     $FC             ' define custom char 4
LcdCC5          CON     $FD             ' define custom char 5
LcdCC6          CON     $FE             ' define custom char 6
LcdCC7          CON     $FF             ' define custom char 7

DispCC0 CON     $00 ' display custom char 0

'---- [GPS Constants] ----

GPSBaud CON 188 'mode 188 corresponds to 4800 Baud

DegSym          CON     176   ' degrees symbol for report
MinSym          CON     39    ' minutes symbol
SecSym          CON     34    ' seconds symbol

' GPS Module Commands
GetInfo         CON     $00
GetValid        CON     $01
GetSats         CON     $02
GetTime         CON     $03
GetDate         CON     $04
GetLat          CON     $05
GetLong         CON     $06
GetAlt          CON     $07
GetSpeed        CON     $08
GetHead         CON     $09

' -----[ Variables ]-------------------------------------------------------

degrees VAR      BYTE     ' latitude degrees/longitude degrees
minutes VAR BYTE 'latitude/Longitude minutes
minutesD VAR WORD 'latitude/LONGITUDE DECIMAL MINUTES
dir        VAR      BYTE     ' direction (latitude: 0 = N, 1 = S / longitude: 0 = E, 1 = W)

sats VAR BYTE

temp      VAR      WORD     ' for numeric conversions
char   VAR    BYTE

' -----[ EEPROM Data ]-----------------------------------------------------

'                       C#----  Data----------------------------------
CC0             DATA    LcdCC0, $08, $14, $08, $00, $00, $00, $00, $00   ' degree symbol


' -----[ Initialization ]--------------------------------------------------

Reset:
  HIGH LCD_TX                           ' setup serial output pin
  PAUSE 100                             ' allow LCD to initialize

DnLoad_Custom_Chars:
  FOR temp = 0 TO 8                      ' download custom characters
    READ CC0 + temp, char                ' get data from table
    serout2 LCD_TX, LcdBaud, [char]           ' send to LCD
  NEXT

  serout2 LCD_TX, LcdBaud, [LcdBLoff, LcdOn1, LcdCls]
  PAUSE 250
  serout2 LCD_TX, LcdBaud, [LcdBLon] ' turn backlight on (only works with backlit serial LCD module)

' -----[ Program Code ]----------------------------------------------------
SAT:
  ' get satellite data from GPS
  serout2 GPS_SIO, GPSBaud, ["!GPS", GetSats]
  serin2 GPS_SIO, GPSBaud, 3000, No_Response, [sats]
 
  ' check if GPS has found at least 3 satellites
  IF sats < 3 THEN
  serout2 LCD_TX, LcdBaud, [LcdCls, LcdLine1," UYDU ARANIYOR"]
  'serout2 LCD_TX, LcdBaud, [LcdLine2, "satellites..."]
  PAUSE 1000
  GOTO SAT
  IF sats > 3 THEN GPS
  ENDIF

GPS:
  ' get latitude from GPS
  serout2 GPS_SIO, GPSBaud, ["!GPS", GetLat]
  SERIN2  GPS_SIO, GPSBaud, 3000, No_Response, [degrees, minutes, minutesD.HIGHBYTE, minutesD.LOWBYTE, dir]

  ' convert decimal minutes to tenths of seconds
  temp = minutesD ** $0F5C  ' minutesD * 0.06

  ' display latitude on LCD line 1
  serout2 LCD_TX, LcdBaud, [LcdLine1, DEC3 degrees, DispCC0, " ", DEC2 minutes, MinSym, " "]
  serout2 LCD_TX, LcdBaud, [DEC2 (temp / 10), ".", DEC1 (temp // 10), SecSym, " ", "N" + (dir * 5)]

   ' get longitude from GPS
  serout2 GPS_SIO, GPSBaud, ["!GPS", GetLong]
  SERIN2  GPS_SIO, GPSBaud, 3000, No_Response, [degrees, minutes, minutesD.HIGHBYTE, minutesD.LOWBYTE, dir]

  ' convert decimal minutes to tenths of seconds
  temp = minutesD ** $0F5C  ' minutesD * 0.06

  ' display longitude on LCD line 2
  serout2 LCD_TX, LcdBaud, [LcdLine2, DEC3 degrees, DispCC0, " ", DEC2 minutes, MinSym, " "]
  serout2 LCD_TX, LcdBaud, [DEC2 (temp / 10), ".", DEC1 (temp // 10), SecSym, " ", "E" + (dir * 18)]

  PAUSE 1000  ' wait 1 second, then do it all again
 
  GOTO SAT

  END


' -----[ Subroutines ]-----------------------------------------------------

No_Response:
  serout2 LCD_TX, LcdBaud, [LcdCls, LcdLine1, "GPS ALICI"]
  serout2 LCD_TX, LcdBaud, [LcdLine2, "MODUL HATASI!"]
  PAUSE 5000
  GOTO SAT


compacta

ete hocam proje ve kodlar hakkında bir düşünce kafanızda oluştumu.iyi günler.....

compacta

ete hocam kodlar için yardımcı olurmusunuz?

Powered by EzPortal