121
UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Domen Murn POTOVALNI RAČUNALNIK Z GPS Diplomsko delo Maribor, julij 2014

POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

  • Upload
    halien

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

UNIVERZA V MARIBORU

FAKULTETA ZA ELEKTROTEHNIKO,

RAČUNALNIŠTVO IN INFORMATIKO

Domen Murn

POTOVALNI RAČUNALNIK Z GPS

Diplomsko delo

Maribor, julij 2014

Page 2: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

POTOVALNI RAČUNALNIK Z GPS

Diplomsko delo

Študent:

Domen Murn

Študijski program: VS ŠP Elektrotehnika

Smer: Elektronika

Mentor: doc. dr. Boštjan Vlaovič, telekomunikacije

Lektorica: Natalija Zmazek, prof. slovenščine in biologije

Page 3: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

II

Page 4: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

III

ZAHVALA

Zahvaljujem se mentorju, doc. dr. Boštjanu

Vlaoviču, za vodenje pri opravljanju diplomskega

dela. Prav tako se zahvaljujem tudi mag. Slavku

Senica za vse nasvete in pomoč pri tehničnih

zadevah.

Hvala tudi moji mami, ki je vedno verjela vame.

Posebna zahvala moji ţeni Franji, za potrpeţljivost

v času mojega študija.

Page 5: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

IV

Potovalni računalnik z GPS

Ključne besede: GPS, protokol NMEA, mikrokrmilnik, PIC, MPLAB X IDE, grafična

knjiţnica, prikazovalnik na dotik, potovalni računalnik

UDK: 004.3/.4:621.396.969.3(043.2)

Povzetek

V diplomskem delu je predstavljena zasnova in izdelava potovalnega računalnika, ki z

uporabo sistema GPS prikazuje trenutno hitrost, pot, porabo goriva ter prevožene

kilometre vozila. Diplomsko delo je razdeljeno na teoretični in praktični del. V teoretičnem

delu je predstavljena kratka zgodovina razvoja sistema GPS in njegovo delovanje.

Podrobno so opisane vse periferne naprave, ki smo jih potrebovali za izdelavo

potovalnega računalnika z GPS.

V drugem, praktičnem delu, je natančno opisano delovanje programa, kateri je napisan v

programskem jeziku ANSI C, s pomočjo razvojnega okolja MPLAB X IDE. Predstavljen je

tudi izdelan prototip, ki vključuje prikazovalnik na dotik.

Page 6: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

V

Travel computer with GPS

Key words: GPS, NMEA protocol, microcontroller, PIC, MPLAB X IDE, graphics

library, touchscreen display, travel computer

UDK: 004.3/.4:621.396.969.3(043.2)

Abstract

The diploma thesis includes the design and making of an travel computer which uses GPS

in order to display the vehicle's current speed, route, fuel consumption and kilometres run.

The thesis consists of a theoretical and practical part. The theoretical part covers a brief

historical overview of the development of the GPS system and its application. Also

included is a detailed description of all the peripheral devices needed to construct the

travel computer with GPS.

The second part details the performance of the programme, written in ANSI C

programming language and using MPLAB X IDE programming tool.

The goal of our thesis, namely to construct a touch screen travel computer which enables

access to vehicle data, was therefore realised.

Page 7: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

VI

VSEBINA

1 UVOD ........................................................................................................................... 1

2 SISTEM GLOBALNEGA DOLOČANJA POLOŢAJA ......................................... 3

2.1 STANDARD NMEA ............................................................................................. 9

2.1.1 Strojna povezava ............................................................................................... 9

2.1.2 Stavki NMEA ................................................................................................... 10

3 STROJNA OPREMA ................................................................................................ 15

3.1 SPREJEMNIK GPS ............................................................................................. 15

3.1.1 Pregled izdelka ................................................................................................ 15

3.1.2 Komunikacija ................................................................................................... 16

3.1.3 Navigacijski načini .......................................................................................... 16

3.1.4 Delovna stanja in zahteve ................................................................................ 17

3.1.5 Vmesnik ............................................................................................................ 17

3.2 MULTIMEDIJSKA RAZVOJNA PLOŠČA ....................................................... 20

3.2.1 Prikazovalnik na dotik ..................................................................................... 22

3.2.2 Grafični procesor SSD1926 ............................................................................ 22

3.2.3 Dotična ploščica .............................................................................................. 24

3.3 TESTNA PLOŠČA .............................................................................................. 25

3.3.1 Mikrokrmilnik PIC32MX795F512L ................................................................ 27

3.4 PROTOTIP POTOVALNI RAČUNALNIK ....................................................... 30

4 PROGRAMSKA OPREMA ..................................................................................... 33

4.1 RAZVOJNO OKOLJE MPLAB X IDE ..................................................................... 33

4.1.1 Grafična knjižnica ........................................................................................... 34

4.1.2 Grafična zasnova zaslona ................................................................................ 37

4.2 PROGRAMSKA KODA ..................................................................................... 39

4.2.1 Povezava s sprejemnikom GPS ....................................................................... 40

4.2.2 Pomožne funkcije ............................................................................................. 44

4.2.3 Funkciji GOLMsgCallback in GOLDrawCallback ......................................... 52

5 SKLEP ........................................................................................................................ 55

Page 8: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

VII

6 LITERATURA .......................................................................................................... 56

7 PRILOGE ................................................................................................................... 59

7.1 PROGRAMSKA KODA ..................................................................................... 59

7.2 NASLOV ŠTUDENTA ............................................................................................ 103

7.3 KRATEK ŢIVLJENJEPIS......................................................................................... 103

Page 9: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

VIII

KAZALO SLIK

Slika 1.1: Blok shema potovalnega računalnika z GPS......................................................... 2

Slika 2.1: 24 satelitov sistema GPS, razporejenih v 6 kroţnicah .......................................... 6

Slika 2.2: Razporeditev nadzornih postaj .............................................................................. 6

Slika 2.3: Demodulacija in dekodiranje GPS signala ............................................................ 7

Slika 2.4: Stavki, poslani od GPS ........................................................................................ 14

Slika 3.1: Rockwell »Jupiter« sprejemnik GPS .................................................................. 16

Slika 3.2: 2 x 10 priključni vmesnik .................................................................................... 18

Slika 3.3: Sprednji del Multimedijske razvojne plošče ....................................................... 21

Slika 3.4: Zadnji del Multimedijske razvojne plošče .......................................................... 22

Slika 3.5: 3.2-palčni QVGA TFT prikazovalnik na dotik ................................................... 24

Slika 3.6: Dotična ploščica .................................................................................................. 24

Slika 3.7: Princip delovanja dotične ploščice. ..................................................................... 25

Slika 3.8: Sprednja in zadnja stran Microchip »PIC32 Ethernet Starter Kit« ..................... 26

Slika 3.9: PIC32MX blok diagram ...................................................................................... 28

Slika 3.10: PIC32 prekinitveni način ................................................................................... 29

Slika 3.11: Blok diagram UART sprejemnika .................................................................... 30

Slika 3.12: Razstavljen prototip potovalnega računalnika GPS .......................................... 31

Slika 3.13: Sestavljen prototip potovalnega računalnika GPS ............................................ 31

Slika 3.14: Vezava sprejemnika GPS .................................................................................. 32

Slika 4.1: Razvojno okolje MPLAB X IDE ........................................................................ 33

Slika 4.2: Struktura Microchipove grafične knjiţnice ......................................................... 34

Slika 4.3: Osnovna uporaba grafične knjiţnice ................................................................... 35

Slika 4.4: Stilne komponente objekta .................................................................................. 36

Slika 4.5: Tvorba objekta gumb, »edit box« ....................................................................... 36

Page 10: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

IX

Slika 4.6: Sporočilna struktura GOL_MSG ........................................................................ 37

Slika 4.7: Potek izvajanja sporočilne strukture ................................................................... 38

Slika 4.8: Datoteka GDD_Screen.c -1- ............................................................................... 38

Slika 4.9: Datoteka GDD_Screen.c -2- ............................................................................... 39

Slika 4.10: Osnovno delovanje zaslonov potovalnega računalnika .................................... 41

Slika 4.11: Konfiguracija UART1 ....................................................................................... 42

Slika 4.12: Prekinitvena funkcija......................................................................................... 43

Slika 4.13: Zaslon z izpisom točnega časa .......................................................................... 44

Slika 4.14: Funkcija za razčlenjevanje stavka NMEA ........................................................ 45

Slika 4.15: Funkcija za izpis časa ........................................................................................ 45

Slika 4.16: Izpis časa za Avstralijo ...................................................................................... 46

Slika 4.17: Funkcija za izpis datuma -1- ............................................................................. 46

Slika 4.18: Funkcija za izpis datuma -2- ............................................................................. 47

Slika 4.19: Funkcija za izpis datuma in ure -1- ................................................................... 48

Slika 4.20: Funkcija za izpis datuma in ure -2- ................................................................... 49

Slika 4.21: Zaslon za merjenje hitrosti ................................................................................ 50

Slika 4.22: Funkcija za izpis hitrosti ................................................................................... 50

Slika 4.23: Zaslon za prikaz povprečne porabe vozila ........................................................ 51

Slika 4.24: Funkcija za izračun porabe ................................................................................ 51

Slika 4.25: Funkcija GOLMsgCallback .............................................................................. 52

Slika 4.26: Funkcija GOLDrawCallback ............................................................................ 53

Slika 4.27: Določitev spremenljivke »Flag« ....................................................................... 53

Slika 4.28: Izpis podatkov na zaslonu 4 .............................................................................. 54

Page 11: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

X

KAZALO TABEL

Tabela 3.1: Priključitvene zahteve »Jupiter« sprejemnika GPS .......................................... 18

Tabela 3.2: Opis priključkov 2 x 10-pinskega vmesnika .................................................... 18

Tabela 3.3: Konfiguracija serijskega vmesnika »Jupiter« sprejemnika GPS ...................... 20

Page 12: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

XI

UPORABLJENI SIMBOLI

m – meter (merska enota za dolţino)

km – kilometer (merska enota za dolţino)

m/s – meter na sekundo (merska enota za hitrost)

km/h – kilometer na uro (merska enota za hitrost)

V – volt (merska enota za električno napetost)

Hz – Hertz (merska enota za frekvenco)

min – minuta (merska enota za čas)

sec – sekunda (merska enota za čas)

h – ura (merska enota za čas)

A – amper (merska enota za električni tok)

VDC – enosmerna napetost (merska enota za napetost)

bpp – bitov na slikovno piko

Ω ohm (merska enota za električno upornost)

Page 13: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

XII

UPORABLJENE KRATICE

ADC – analogno-digitalni pretvornik (Analog to Digital Converter)

ANSI – ameriški nacionalni inštitut za standardizacijo (American National

Standards Institute)

ASCII – ameriška standardna koda za izmenjavo informacij (American Standard

Code for Information Interchange)

C/A – grobo pridobivanje (Coarse/Acquisition)

CAN – območje upravljanega omreţja (Controller Area Network)

CPU – centralna procesna enota (Control Processing Unit)

CR – prehod na začetek vrstice (Carriage Return)

DCT – diskretna kosinusna transformacija (Discrete Cosine Transformation)

DDD – gonilnik prikazovalnika (Display Device Driver)

DGPS – diferencialno GPS pozicioniranje (Differential Global Positioning System)

DMA – neposreden pomnilniški dostop (Direct Memory Access)

DNSS – obrambni navigacijski satelitski sistem (Defense Navigation Satellite

System)

DOP – faktor zmanjšanja točnosti (Dilution of Precision)

DSP – digitalni signalni procesor (Digital Signal Processor)

EEPROM – električno izbrisljiv in programiljiv bralni pomnilnik (Electricaly Erasable

Programmable Read Only Memory)

Flash RAM – bliskovni pomnilnik (Flash Random Access Memory)

FIFO – prvi noter prvi ven (First In First Out)

GPS – sistem globalnega določanja poloţaja (Global Positioning System)

GDD – oblikovalec zaslona (Graphics Display Designer)

GOL – sloj grafičnih objektov (Graphics Objects Layer)

HDOP – faktor zmanjšanja točnosti v vodoravni ravnini (Horizontal Dilution of

precision)

ICBM – medcelinski balistični izstrelek (Intercontinental Ballistic Missile)

ICD – označevalec mednarodne kode (International Code Designator)

iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine

Transformation)

Page 14: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

XIII

IDE – integrirano razvojno orodje (Integrated Development Environment)

KAL – korejska letalska druţba (Korean Air Lines Flight)

LCD – zaslon s tekočimi kristali (Liquid Crystal Display)

LED – svetleča dioda (Light Emitting Diode)

MCS – glavni nadzorni center (Master Control Station)

MLA – Microchipova aplikacijska knjiţnica (Microchip Libraries for

Applications)

MOSAIC – mobilni sistem za natančen ICBM nadzor (Mobile System for Accurate

ICBM Control)

NAVSAT – mornarski navigacijski satelitski sistem (Navy Navigation Satellite

System)

NAVSTAR – ameriški program za vzpostavitev sistema GPS (Navigation System Using

Timing and Ranging)

NMEA – standardizirana elektronska sporočila (National Marine Electronic

Association)

NRZ – modulacija brez povratka na ničlo (Non Return to Zero)

OEM – proizvojalec originalne opreme (Original Equipment Manufacture)

P – natančno pridobivanje (Precision)

PDOP – kakovost določitve poloţaja (Position Dilution of Precision)

PRN – pseudonaključno število (Pseudo Random Number)

RAM – pomnilnik z naključnim dostopom (Random Access Memory)

RF – radijska frekvenca (Radio Frequency)

RISC – procesorsko jedro z reduciranim naborom inštrukcij (Reducet Instruction

Set Core)

ROM – bralni pomnilnik (Read Only Memory)

RTC – sodelovanje v realnem času (Real Time Callaboration)

RTCC – realni čas ure in koledarja (Real Time Clock and Calender)

RTCM – sklop standardov za pomorsko navigacijo (Radio Technical Commission

for Maritime services)

SFR – posebni funkcijski register (Special Function Register)

SPI – serijsko periferijsko vodilo (Serial Peripheral Interface bus)

Page 15: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

XIV

SRAM – statični pomnilnik z naključnim dostopom (Static Random Access

Memory)

TTFF – čas do prve določitve (Time To First Fix)

UART – univerzalni asihroni sprejemnik oddajnik (Universal Asynchronous

Receiver Transmitter)

USB – univerzalno serijsko vodilo (Universal Serial Bus)

VDOP – faktor zmanjšanja točnosti v navpični ravnini (Vertical Dilution of

Precisio

Page 16: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 1

1 UVOD

Potovalni računalnik najdemo ţe skoraj v vsakem vozilu. Gre za napravo, ki nam na poti

pokaţe povprečno porabo in hitrost, trenutno stanje števca, stanje prevoţenih kilometrov,

ipd. Ključni element potovalnega računalnika je sistem GPS (Global Positioning System).

GPS je satelitski navigacijski sistem, ki se uporablja za določanje natančnega poloţaja in

časa kjerkoli na Zemlji 1. Osnovna funkcija sprejemnika GPS je prikaz točnih

geografskih koordinat. Sprejemnik lahko koristi različne komunikacije z mikrokrmilnikom

ali računalnikom. Najpogostejši način komunikacije je preko zaporednega vmesnika,

najpogosteje uporabljen protokol za pošiljanje teh informacij pa je protokol NMEA

(National Marine Electronic Association). Uporabniku ţelimo ponuditi čim laţje

spremljanje funkcionalnosti potovalnega računalnika, zato smo se odločili, da vključimo

tudi grafični prikazovalnik na dotik. Diplomsko delo predstavlja izdelavo prototipa

potovalnega računalnika z GPS, ki uporabniku na poti omogoča prikaz trenutne in

povprečne hitrosti, stanje prevoţenih kilometrov in porabe goriva avtomobila. Ker nimamo

dovoljenja za poseg v vozilo, smo poskušali narediti podobno zunanjo napravo za vozila,

ki nimajo vgrajenega potovalnega računalnika. Naprava bo uporabniku omogočila dostop

do podobnih informacij, brez fizičnega posega vanj. Pri tem smo uporabili mikrokrmilnik

in grafični prikazovalnik na dotik. Slednji uporabniku omogoča celovit nadzor nad napravo

(slika 1.1). Po uvodnem študiju knjiţnice za grafični prikaz in modula GPS smo izvedli

izbiro primernega mikrokrmilnika, grafičnega prikazovalnika in ostalih perifernih naprav.

Sledila je izdelava programske opreme za dosego zastavljenih ciljev. Pri delu smo

uporabili strokovne knjige in literaturo.

Diplomsko delo Potovalni računalnik z GPS obsega sedem poglavij. V drugem poglavju, z

naslovom »Sistem globalnega določanja poloţaja«, predstavimo kratko zgodovino sistema,

njegovo osnovno delovanje in protokol NMEA. V tretjem poglavju je opisana strojna

oprema, ki je bila uporabljena pri izdelavi projekta. To so Rockwell-ov sprejemnik GPS,

Microchip-ova multimedijska razvojna ploščica in Microchip-ova testna ploščica »PIC32

Page 17: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 2

ethernet starter kit«. V četrtem poglavju predstavimo razvojno orodje MPLAB X IDE

(Integrated Development Environment), dodatek Grafični oblikovalec zaslona GDD

(Graphics Display Deisigner), grafično knjiţnico in programsko kodo.

Slika 1.1: Blok shema potovalnega računalnika z GPS

Izpis

podatkov

$GPRMC NMEA Sprejemnik

GPS

Testna

plošča

Prikazovalnik

na dotik

Page 18: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 3

2 SISTEM GLOBALNEGA DOLOČANJA POLOŢAJA

Prvi operativni satelitski navigacijski sistem je razvila ameriška mornarica leta 1960.

Poimenovali so ga sistem TRANSIT, znan tudi kot NAVSAT (Navy Navigation Satellite

System) 2. Istega leta so ameriške zračne sile začele z radio navigacijskim sistemom,

imenovanim MOSAIC (Mobile System for Accurate ICBM Control) [4]. V nadaljevalni

projektni študiji Project 621B se je rodil koncept sistema GPS, katerega lastnosti so

prisotne v današnjem sistemu GPS 3. Na praznik dela, leta 1973, so na srečanju

dvanajstih vojaških častnikov v Pentagonu razpravljali o oblikovanju obrambno-

satelitskega navigacijskega sistema DNSS (Defense Navigation Satellite System), kjer je

bila ustvarjena sinteza o sistemu GPS. Kasneje istega leta se je DNSS program

preimenoval v NAVSTAR-GPS (Navigation System Using Timing and Ranging), katerega

so kasneje skrajšali v GPS [4]. Po sestrelitvi korejskega civilnega letala KAL 007 (Korean

Air Lines Flight 007), ki je zašlo zaradi navigacijske napake v prepovedan zračni prostor

takratne Sovjetske zveze, kjer je umrlo vseh 269 potnikov, je ameriški predsednik Ronald

Reagan napovedal, da bo sistem GPS na voljo tudi za civilno uporabo [4,5]. Do leta 1985

je bilo izstreljenih več deset poizkusnih satelitov tipa Block-I. Leta 1989 pa je bil izstreljen

prvi sodobni satelit tipa Block – II. Prva večja uporaba sistema GPS je bila v Zalivski

vojni, leta 1990–1991. Do decembra leta 1993 je sistem GPS prvič dosegel zmogljivosti

določanja poloţaja s pomočjo 24 satelitov. Zastarelo tehnologijo sistema TRANSIT je leta

1996 povsem zamenjal sistem GPS. Novejši sistem uporablja večje število satelitov, ki

omogočajo nenehno pošiljanje podatkov uporabniku, medtem ko je bil sistem TRANSIT

zmoţen pošiljati podatke le vsako uro ali več. Istega leta je takratni ameriški predsednik

Bill Clinton podal direktivo, da se sistem GPS uporablja tako v civilne kot tudi v vojaške

namene. Leta 1998 so bili s strani Bele hiše objavljeni načrti za nadgradnjo sistema GPS za

civilne namene z dvema novima signaloma, in sicer za izboljšanje natančnosti in

zanesljivosti podatkov, s čimer so ţeleli doseči večjo varnost v letalstvu. Objavljena

nadgradnja je bila izvedena leta 2005, ko je bil izstreljen prvi moderniziran satelit GPS.

Page 19: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 4

Podjetju Qualcomm je leta 2004 uspel test za uspešno uporabo podatkov GPS z mobilnimi

telefoni. Istega leta je ameriška vlada podpisala sporazum z Evropsko Unijo o načrtovanju

evropskega sistema Galileo. Ameriške zračne sile so leta 2010 oddale naročilo za razvoj

satelitov GPS naslednje generacije. S tem so ţeleli izboljšati točnost in razpoloţljivost

navigacijskih signalov GPS. V orbito so prvi satelit GPS naslednje generacije izstrelili leta

2011 4. V tabeli 2.1 so kronološko predstavljeni izstreljeni sateliti v zemeljsko orbito.

Tabela 2.1: Izstreljeni sateliti v zemeljsko orbito

Leto

izstrelitve

Izstreljeni sateliti

Uspešno Neuspešno V pripravi Načrtovani

Trenutno

delujoči

sateliti v orbiti

1978–1985 10 1 0 0 0

1989–1990 9 0 0 0 0

1990–1997 19 0 0 0 9

1997–2004 12 1 0 0 12

2005–2009 8 0 0 0 7

od 2010 4 0 10 0 4

od 2014 0 0 0 12 0

SKUPNO 61 2 10 12 31

Sistem GPS je sestavljen iz sprejemnika in oddajnika. Oddajnik zajema mreţo 24 satelitov,

ki kroţijo v zemeljski orbiti v več kroţnih tirnicah okoli Zemlje (slika 2.1). Vsak satelit

ima vgrajeno natančno atomsko uro in neprestano pošilja podatek o času poslanega

sporočila in o svojem poloţaju v trenutku, ko je bilo sporočilo poslano. Sateliti oddajajo na

dveh različnih visokofrekvenčnih kanalih, in sicer L1=1575,42 MHz in L2=1227,60 MHz.

Ti dve frekvenci sta bili izbrani kot kompromis med potrebno močjo oddajnika in

ionosferskimi pogreški. Vpliv ionosfere upada s kvadratom frekvence nosilca in je zelo

majhen na frekvencah nad 1 GHz. L1 in L2 sta nato modelirani s pseudo naključno kodo

PRN (Pseudo Random Number) in navigacijskim sporočilom. To omogoča oddajanje

posameznih satelitov, ne da bi se med seboj motili in ne da bi motili druge signale [4].

Sateliti oddajajo dve vrsti signalov, in sicer:

Page 20: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 5

- C/A (Coarse/Acquisition) koda, ki modulira zelo kratek signal (1023 bitov) frekvence

L1 in se uporablja za civilno rabo. Ta signal se ponavlja vsako milisekundo [4].

- P (Precision) koda je modulirana iz frekvence L1 in L2. Ta koda je zelo dolga in se

oddaja z desetkratno hitrostjo C/A kode. Uporablja se izključno v ameriški vojski 6.

Obe kodi vsebujeta navigacijska sporočila z informacijami o orbiti satelita, korekcijah ure

in druga sistemska sporočila. Sprejemniki, ki se nahajajo na Zemlji, s svojo strojno in

programsko opremo prejeti signal ustrezno dekodirajo, dobljene podatke pa uporabijo kot

osnovo za izračun podatkov [4,7]. Celoten sistem GPS je sestavljen iz treh segmentov:

a) vesoljski segment,

b) nadzorni segment,

c) uporabniški segment.

a) Vesoljski segment

Vesoljski segment je sestavljen iz satelitov GPS, ki kroţijo v orbiti na višini 20.200 km

nad Zemljo. Gibljejo se v šestih ravneh, ki so glede na ekvator nagnjene za 55 . Prvotno

so bile mišljene tri kroţnice po osem satelitov, vendar so izbrali sistem šestih kroţnic s

štirimi sateliti na vsaki kroţnici (slika 2.1) [6]. Glavna naloga vesoljskega segmenta je, da

generira in oddaja podatek ter navigacijsko sporočilo [4,6]. Sateliti GPS sprejemajo in

shranjujejo informacije, ki jih dobijo od nadzornega segmenta. Njihova naloga je tudi, da

natančno merijo čas s pomočjo astronomskih ur, ter pošiljajo podatke uporabnikom preko

signalov 6.

b) Nadzorni segment

Nadzorni segment je sestavljen iz glavnega nadzornega centra in štirih nadzornih postaj

(slika 2.2). Glavni nadzorni center se nahaja v Coloradu, medtem ko se ostale štiri

nadzorne postaje nahajajo na območju Havajskega otočja (Hawaii), Indijskega oceana

(Diego Garcia), Atlantskega oceana (Ascension) in na območju zahodnega Tihega oceana

(Kwajalein) [4,6]. Vse satelite GPS v zemeljski orbiti nadzirajo nadzorne postaje, tako da

vsako sekundo merijo razdaljo do njih. Dobljene podatke pošiljajo v glavni nadzorni center

MCS (Master Control Station) v Colorado Springs, kjer se odloča o zamenjavi satelitov na

podlagi njihovega poloţaja, delovanja ter stanja [4]. Glavna nadzorna postaja nato te

informacije pošlje trem povezovalnim postajam (zemeljske antene), katere dobljene

Page 21: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 6

informacije posredujejo satelitom. Glede na razpršenost nadzornih postaj po svetu je

sledljivost satelitov 92 % 6.

Slika 2.1: 24 satelitov sistema GPS, razporejenih v 6 kroţnicah

Slika 2.2: Razporeditev nadzornih postaj

c) Uporabniški segment

V uporabniški segment sodijo uporabniki, ki s svojimi sprejemniki določajo svoj poloţaj.

Za dešifriranje signalov GPS mora sprejemnik sprejemati signal več satelitov, slediti PRN

kodi in osveţevati navigacijske podatke 6.

Glavni nadzorni center Nadzorna postaja Povezovalna postaja

Page 22: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 7

Demodulacija in dekodiranje signala GPS

Vsi signali satelitov GPS se prenašajo na frekvenci L1, zato je potrebno te signale po

demodulaciji ločiti [4]. Vsak satelit ima dodeljeno svojo binarno sekvenco, imenovano

»Gold Code«, ki vsebuje PRN identifikacijo satelita (slika 2.3). Sprejemnik generira enako

PRN kodo kot satelit in jo primerja s prejeto kodo od satelita toliko časa, dokler ne pride

do korelacije s kodo. Čas, ko je korelacija največja, imenujemo čas prihoda. Po

demodulaciji se signal s pomočjo »Gold Code« kode modulira z modul 2 dodajnikom,

katerega rezultat je navigacijsko sporočilo posameznega satelita. Če je bil zbor informacij

poslan, sprejemnik izbere satelite in jih razvršča po njihovih PRN določenih številkah (od

1 do 32) [4, 8]. Sprejemnik s pomočjo navigacijskega sporočila dobi informacije o satelitih

in njihovih poloţajih. Na ta način lahko določi, katerim satelitom naj sledi [8].

Slika 2.3: Demodulacija in dekodiranje GPS signala

Iskanje satelitov

Da bi se sprejemnik lahko povezal s satelitom GPS, mora opraviti dvo-dimenzionalno

iskanje signala. Prva dimenzija je čas. Struktura signala GPS za posamezen satelit je

sestavljena iz psevdonaključnega zaporedja dolţine 1023 bita, ki se prenaša s hitrostjo

1,023 Mb/s. To pomeni, da se zaporedje ponovi vsako milisekundo. Za omogočanje

sprejema v tej dimenziji mora sprejemnik nastaviti notranjo uro tako, da bo sovpadala z

eno izmed 1023 razpoloţljivih časovnih reţ, pri čemer mora poskusiti vse moţne

vrednosti. Večina sprejemnikov se ustavi in miruje na vsaki izmed moţnih vrednosti nekaj

Navigacijsko

sporočilo satelita n2

Navigacijsko sporočilo

satelita n1

demoduliran

signal

frekvenca L1

1575,42 MHz

demodula

tor

C/A Gold

Code

n2 1023 b/ms

C/A Gold

Code

n1 1023 b/ms

modul

2

dodajni

k

modul

2

dodajni

k

Page 23: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 8

milisekund, kar pomeni, da sprejemnik potrebuje 1 do 2 sekundi za preizkušanje vseh

moţnih vrednosti. Druga dimenzija je frekvenca. Sprejemnik mora odpraviti napake

navidezne Dopplerjeve frekvence satelita ter odpraviti zaznano razliko v frekvenci.

Frekvenčni koraki satelitov so v fazi začetnega sprejemanja 500 Hz, vendar je lahko

kristalni oscilator na sprejemniku netočen tudi za +/- 10 kHz, zato je potrebno opraviti do

dvajset popravkov frekvence. Ta proces je potrebno ponoviti za vsakega izmed N

uporabljenih satelitov [26].

Najpogostejša strategija iskanja je iskanje na začetni frekvenci oscilatorja, ki jo napovemo

na podlagi:

a. kakšen je naš pribliţen poloţaj (sklepamo glede na zadnji znan poloţaj)?

b. kje so sateliti zdaj in kakšna je njihova navidezna hitrost (Ta temelji na shranjenem

katalogu podatkov, ki so pridobljeni iz satelita.)?

c. napake kristalnega oscilatorja sprejemnika (Iskanje pričnemo glede na zadnjo znano

napako.).

Na začetni frekvenci oscilatorja sprejemnik preizkusi vseh 1023 moţnih kodnih faz,

natančno iskanje pa bo sproţil v primeru, da detektira signal. Če nobena izmed 1023 kod

ne ustreza kodi satelita, sprejemnik nastavi oscilator na naslednjo testno vrednost ter

proces ponavlja, dokler ne naleti na ustrezno kodo satelita. Ko sprejemnik prejme signal,

oblikuje dve sledilni zanki – prvo v frekvenčni domeni, drugo pa v 1023-bitni kodni

prostorski domeni, z namenom sledenja tako kodi kakor fazam prenosa signala [26].

Signal je strukturiran iz 1500-bitnega sporočila, poslanega s hitrostjo 50 b/s, kar traja 30

sekund. Večina sprejemnikov zahteva kopiranje celotnega neprelomljenega 1500-bitnega

sporočila, da bi lahko uporabili signale. Če z dekodiranjem pričnemo na začetku, bo to

trajalo 30 sekund. Če pričnemo en bit pozneje, se bo prvi celoten komplet sporočil, ki jih

lahko dekodiramo, pričel 30 sekund pozneje, tako da sporočilo prejmemo šele 60 sekund

po prvotnem pridobivanju, s povprečno zamudo 45 sekund [26].

Za grob 2-D pozicijski popravek ter zagotavljanje natančnosti ure sprejemnika

potrebujemo podatke treh satelitov. Po tem, ko so najdeni prvi trije, pridobi sprejemnik

celotno sliko časa in frekvence ter se nato poveţe z več sateliti, katere prične uporabljati po

30–60 sekundah [26].

Page 24: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 9

Pri začetnih nastavitvah sprejemnik predvideva, da sta pozicija in katalog podatkov

neveljavna, ter prične z iskanjem PRN1, PRN2 ..., vse do PRN32, z namenom iskanja

prvih treh uporabnih satelitov. To iskanje lahko traja tudi več kot 20 minut [26].

2.1 STANDARD NMEA

Standard NMEA – 0183 je razvilo društvo National Marine Electronics Association

(NMEA). Standard NMEA – 0183 definira vmesnik za povezovanje pomorske elektronske

opreme, med drugim tudi s sprejemnikom GPS. Osnovna ideja standarda NMEA je, da

pošilja vrstice podatkov, imenovane stavki, ki so popolnoma samostojni in neodvisni od

drugih stavkov. Vsak stavek se začne z znakom $ in konča z znakom za prehod v novo

vrstico <CR> in znakom za pomik v novo vrstico <NL> [9]. Znaku $ sledi pet znakov;

prva dva znaka predstavljata tip naprave, naslednji trije pa predstavljajo namen stavka [10].

Primer: $GPRMC …, kjer je GP kratica za GPS, RMC pa Recommended Minimum Data

Podatki v stavku so ločeni z vejicami, s pomočjo katerih lahko razčlenimo stavek in tako

pridemo do ţeljenega podatka v stavku 10].

NMEA – 2000, skrajšano NMEA2k ali N2K, je standard za komunikacijo, namenjen

povezovanju senzorjev in nadzorne enote s prikazovalnikom znotraj ladij, čolnov in

avtomobilov. Hitrost prenosa podatkov je 250 kb/s in zagootavlja povezavo nadzorne enote

prikazovalnika s katerokoli napravo na vodilu. NMEA 2000 je zdruţljiv z vodilom CAN

(Controller Area Network) vodilom [25].

2.1.1 Strojna povezava

Komunikacija poteka preko zaporednega prenosa po protokolu RS232, čeprav je

priporočen standard RS422. Pri standardu NMEA – 0183 je hitrost vmesnika 4800 baud/s,

ima 8-bitni prenos podatkov, brez paritete in z enim start in stop bitom. Vse naprave, ki

podpirajo standard NMEA, morajo podpirati to hitrost in te nastavitve. Pri 4800 baud/s

lahko pošljemo 480 znakov na sekundo. Stavki NMEA so lahko dolgi do 82 znakov, kar

nam omogoča, da lahko dobimo 6 stavkov na sekundo 9.

Page 25: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 10

2.1.2 Stavki NMEA

Slika 2.4 prikazuje primer podatkov, prejetih iz sprejemnika GPS, kjer so zapisani stavki,

ki nakazujejo, da so poslani od naprave GPS. Vsak stavek nosi niz podatkov, ki jih

sprejemnik sprejema. Opisani so le stavki, prikazani na sliki 2.4.

RMC – Stavek zajema minimalne podatke GPS.

$GPRMC,211628,A,4600.9270,N,01517.9597,E,0.000,0.0,171213,2.8,E*7B

1 2 3 4 5 6 7 8 9 10 11 12

1. 211628 To je čas, določen ob 21:16:28.

2. A Status podatka (A je aktiven, V je prost).

3. 4600.9270 Podatek o zemljepisni širini.

4. N Sever (N je sever, S je jug).

5. 01517.9597 Podatek o zemljepisni dolžini.

6. E Vzhod (E je vzhod, W je zahod).

7. 0,000 Hitrost v vozlih.

8. 0,0 Kot gotove poti v stopinjah.

9. 171213 Datum, določen dne 17.12.2013.

10. 2.8 Magnetno odstopanje v stopinjah.

11. E Preračunan (A je neodvisen, D je diferencialen, E je preračunan, S je simulator).

12. 7B Kontrolna vsota.

GSV – Stavek zajema število vidnih satelitov.

$GPGSV,3,1,09,26,70,146,00,15,62,292,41,28,48,054,00,24,29,278,42*7F

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

1. 3 Število poslanih GSV stavkov je 3.

2. 1 Stavek številka 1.

3. 09 Število vidnih satelitov je 9.

4. 26 PRN številka satelita je 26.

5. 70 Višina satelitov v stopinjah je 70.

6. 146 Azimut (smer) v stopinjah je 146.

7. 00 SNR (razmerje signal:šum) je 00.

8. 15 PRN številka satelita je 15.

9. 62 Višina satelitov v stopinjah je 62.

10. 292 Azimut (smer) v stopinjah je 292.

11. 41 SNR (razmerje signal:šum) je 41.

Page 26: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 11

12. 28 PRN številka satelita je 28.

13. 48 Višina satelitov v stopinjah je 48.

14. 054 Azimut (smer) v stopinjah je 54.

15. 00 SNR (razmerje signal:šum) je 00.

16. 24 PRN številka satelita je 24.

17. 29 Višina satelitov v stopinjah je 29.

18. 278 Azimut (smer) v stopinjah je 278.

19. 42 SNR (razmerje signal:šum) je 42.

20. 7F Kontrolna vsota.

$GPGSV,3,2,09,17,29,124,00,09,25,082,00,08,23,076,00,18,18,312,31,*75

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

1. 3 Število poslanih GSV stavkov je 3.

2. 2 Stavek številka 2.

3. 09 Število vidnih satelitov je 9.

4. 17 PRN številka satelita je 17.

5. 29 Višina satelitov v stopinjah je 29.

6. 124 Azimut (smer) v stopinjah je 124.

7. 00 SNR (razmerje signal:šum) je 00.

8. 09 PRN številka satelita je 9.

9. 25 Višina satelitov v stopinjah je 25.

10. 082 Azimut (smer) v stopinjah je 82.

11. 00 SNR (razmerje signal:šum) je 00.

12. 08 PRN številka satelita je 08.

13. 23 Višina satelitov v stopinjah je 23.

14. 076 Azimut (smer) v stopinjah je 76.

15. 00 SNR (razmerje signal:šum) je 00.

16. 18 PRN številka satelita je 18.

17. 18 Višina satelitov v stopinjah je 18.

18. 312 Azimut (smer) v stopinjah je 312.

19. 31 SNR (razmerje signal:šum) je 31.

20. 75 Kontrolna vsota.

$GPGSV,3,3,09,05,13,200,26*41

1 2 3 4 5 6 7 8

1. 3 Število poslanih GSV stavkov je 3.

2. 3 Stavek številka 3.

Page 27: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 12

3. 09 Število vidnih satelitov je 9.

4. 05 PRN številka satelita je 05.

5. 13 Višina satelitov v stopinjah je 13.

6. 200 Azimut (smer) v stopinjah je 200.

7. 26 SNR (razmerje signal:šum) je 26.

8. 41 Kontrolna vsota.

PRWIZCH – Stavek je last Rockwellovega sprejemnika in dopolnjuje stavek GSV s

podatkom o statusu kanala, na katerem oddaja 12. Stavek je sestavljen iz 12 parov. Prvi

del para je podatek o številki PRN satelita, drugi pa podatek o statusu kanala 13. Če kanal

ni v uporabi, je vrednost nič za oba para. Status kanala je zapisan kot en digit

heksadecimalne vrednosti:

0 – Podatki satelitov na tem kanalu so za uporabo v navigacijskem sistemu.

1 – Na tem kanalu je za satelite dostopen astronomski koledar.

2 – Sateliti na tem kanalu so v iskanju.

3 – Dostopna DGPS korekcija za satelite 12.

$ PRWIZCH,08,0,00,0,28,0,17,0,00,0,24,7,09,0,18,7,15,7,00,0,05,2,26,0*4F

1 2 3 4 5 6 7 8 9 10 11 12 13

Par 1 08,0 Kanal 1, PRN številka satelita 08, uporaba v navigacijskem sistemu.

Par 2 00,0 Kanal 2, ni v uporabi.

Par 3 28,0 Kanal 3, PRN številka satelita 28, uporaba v navigacijskem sistemu.

Par 4 17,0 Kanal 4, PRN številka satelita 17, uporaba v navigacijskem sistemu.

Par 5 00,0 Kanal 5, ni v uporabi.

Par 6 24,7 Kanal 6, PRN številka satelita 24, dostopna DGPS korelacija za satelite.

Par 7 09,0 Kanal 7, PRN številka satelita 09, uporaba v navigacijskem sistemu.

Par 8 18,7 Kanal 8, PRN številka satelita 18, dostopna DGPS korelacija za satelite.

Par 9 15,7 Kanal 9, PRN številka satelita 15, dostopna DGPS korelacija za satelite.

Par 10 00,0 Kanal 10, ni v uporabi.

Par 11 05,2 Kanal 11, PRN številka satelita 05, sateliti so v iskanju.

Par 12 26,0 Kanal 12, PRN številka satelita 26, uporaba v navigacijskem sistemu.

13. 4F Kontrolna vsota.

Page 28: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 13

GGA – Stavek zajema podatke o poloţaju s 3D lokacijo in točnost zadetka.

$GPGGA,211629,4600.9270,N,01517.9597,E,1,03,0.91,226.9,M,43.4,M,,*74

1 2 3 4 5 6 7 8 9 10 11 12 13

1. 211629 To je čas, določen ob 21:16:29.

2. 4600.9270 Podatek o zemljepisni širini.

3. N Sever (N je sever, S je jug).

4. 01517.9597 Podatek o zemljepisni dolţini.

5. E Vzhod (E je vzhod, W je zahod).

6. 1 GPS (0 = neveljavno, 1 = GPS, 2 = DGPS).

7. 03 Število satelitov v uporabi.

8. 0.91 Horizontalna slabitev HDOP (Horizontal Dilution of Precision).

9. 226.9 Višina, globina.

10. M Enota meter za višino in globino.

11. 43.4 Nadmorska višina.

12. M Enota meter za nadmorsko višino.

13. 74 Kontrolna vsota.

GSA – Stavek izpiše faktor zmanjšane točnosti DOP (Dilution of Precision) in status

satelitov.

$GPGSA,A,2,24,18,15,,,,,,,,,,1.68,0.91,1.41,*0B

1 2 3 4 5 6 7

1. A Avtomatski način (A je avtomatski način, R je ročni način).

2. 2 2D podatek (1= ni podatka, 2 = 2D podatek, 3 = 3D podatek).

3. 24,18,15,,,,,,,,,, PRN številke satelitov v uporabi (za neuporabne se izpiše prazno polje).

4. 1.68 Kakovost določitve poloţaja PDOP (Position Dilution of Precision).

5. 0.91 Horizontalni faktor zmanjšanja točnosti (HDOP).

6. 1.41 Vertikalni faktor zmanjšanja točnosti VDOP (Vertical Dilution of Precision).

7. 0B Kontrolna vsota.

Page 29: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 14

Slika 2.4: Stavki, poslani od GPS

Page 30: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 15

3 STROJNA OPREMA

Strojna oprema, ki je bila uporabljena pri izdelavi projekta, zajema Rockwell-ov

sprejemnik GPS, Microchip-ovo multimedijsko razvojno ploščico in Microchip-ovo testno

ploščico »PIC32 ethernet starter kit«.

3.1 SPREJEMNIK GPS

Rockwell »Jupiter« sprejemnik GPS je sprejemnik z 12-kanalno tehnologijo, ki omogoča

sledenje do 12 satelitov za izračun in obnavljanje informacije. Digitalni sprejemnik

uporablja čip Zodiak, ki skupaj z "Gemini/Pisces" MonoPac ™ in "Scorpio" DSP (Digital

Signal Processor) omogočajo nizko porabo sprejemnika GPS [14].

3.1.1 Pregled izdelka

»Jupiter« sprejemnik dekodira in procesira signale vseh vidnih satelitov GPS. Ti sateliti, ki

v različnih orbitah kroţijo okoli Zemlje, oddajajo RF (Radio Frequency) kode in

navigacijska podatkovna sporočila. Sprejemnik uporablja vse razpoloţljive signale za

proizvajanje natančnih in zanesljivih navigacijskih rešitev, ki se lahko uporabljajo v

različnih aplikacijah končnega izdelka [14].

»All-in-view« sledenje »Jupiter-jevega« sprejemnika omogoča zmogljivost v aplikacijah,

ki zahtevajo visoko dinamičnost vozil in v aplikacijah, ki delujejo na področjih blokiranja

signala, kot so gosto naseljena urbana središča. Sprejemnik nenehno spremlja vse vidne

satelite GPS in uporablja vse meritve za izdelavo navigacijskih rešitev. Ta rešitev je

relativno imuna na poloţajne skoke, ki se lahko pojavijo v sprejemnikih z manj kanalov

[14].

Page 31: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 16

Sprejemnik potrebuje za pravilno delovanje 5 V enosmerne napetosti. Deluje lahko s

pomočjo aktivne ali pasivne antene za sprejem frekvenčnega pasu L1. Sprejemnik določa

svoj poloţaj s pomočjo signala iz treh ali več satelitov GPS, ki kroţijo okoli Zemlje.

Sateliti morajo imeti vidljivost na nebu. To na splošno ni problem, ko je sprejemnik

uporabljen na prostem. Zato ga postavimo tako, da ima neoviran pogled na nebo. Če so

satelitski signali v nevidnem polju, bo čas, da sprejemnik sprejme signal in določi poloţaj,

večji [14].

3.1.2 Komunikacija

Komunikacija s sprejemnikom je vzpostavljena na podlagi dveh enakih, neodvisnih,

asinhrono serijskih V/I vrat. Sprejemnikova primarna serijska vrata posredujejo

navigacijske podatke in sprejemajo ukaze iz OEM (Original Equipment Manufacture)

naprave v formatu NMEA 0183 ali v »Rockwell-ovi« binarni obliki sporočila [14].

Slika 3.1: Rockwell »Jupiter« sprejemnik GPS

3.1.3 Navigacijski načini

Sprejemnik podpira tri različne načine navigacije. Tridimenzionalni (3D),

dvodimenzionalni (2D) in DGPS (Differential Global Positioning System) način [14].

a) Tridimenzionalni navigacijski način (3D)

Ta način navigacije je privzeti način, kadar so na voljo vsaj štirje sateliti. V 3D načinu

sprejemnik izračuna zemljepisno dolţino, zemljepisno širino, nadmorsko višino in čas

informacije satelitskih meritev [14].

b) Dvodimenzionalni navigacijski način (2D)

Page 32: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 17

Sprejemnik preide v 2D navigacijski način, kadar so na voljo samo trije sateliti. V

primeru, da sprejemnik v 3D načinu uporablja stalno vrednost o nadmorski višini

preide iz 3D v 2D navigacijski način z vsemi informacijami dobljenimi v 3D načnu. V

2D načinu je natančnost horizontalne meritve odvisna od razmerja stalne vrednosti in

dejanske vrednosti nadmorske višine antene. V nasprotnem primeru se horizontalna

natančnost smatra kot napak stalne nadmorske višine[14].

c) DGPS navigacijski način.

Sprejemnik procesira popravek DGPS preko svojih pomoţnih serijskih vrat (port 2). Ti

popravki morajo biti v skladu z standardom RTCM (Radio Technical Commission for

Maritime services), znanim tudi kot RTCM SC-104. Glede na konfiguracijo DGPS je

navigacijsko natančnost mogoče izboljšati v 3D načinu DGPS, saj sprejemnik podpira

natančnosti, opisane v dokumentu RTCM SC-104 [14].

3.1.4 Delovna stanja in zahteve

Sprejemnik uporablja tri delovna stanja, in sicer stanje izklopa, stanje delovanja in stanje

pripravljenosti. Tabela 3.1 ponazarja signalne pogoje in zahteve za vsakega od teh stanj.

Ko je sprejemnik izklopljen, pomeni, da na sprejemnik ni priklopljena napajalna napetost.

Sprejemnik preide v delovno stanje, ko nanj priklopimo +5 ± 0,25 V enosmerne napetosti.

Sprejemnik preide iz delovnega načina v način pripravljenosti, ko bo napetostni signal

»PWRIN« odstranjen, pod pogojem, da bo zunanja enosmerna napetost na voljo na

vhodnem signalu »VBATT«. V tem stanju zunanja napetost omogoča napajanje za SRAM

(Static Random Access Memory) in RTC (Real Time Callaboration). V trenutku preklopa

v to stanje sprejemnik uporabi trenutni čas, vzdrţevan v RTC-ju, kot tudi ključne satelitske

podatke, shranjene v SRAM-u [14].

3.1.5 Vmesnik

Priključni vmesnik sprejemnika prikazuje slika 3.2. V tabeli 3.2 so predstavljeni vsi

priključki konektorja [14].

Page 33: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 18

Tabela 3.1: Priključitvene zahteve »Jupiter« sprejemnika GPS

Vhodna napetost

Zahteve stanj

Delovno stanje Način pripravljenosti

(5 VDC)

Način pripravljenosti

(3 VDC)

PRVIN napetost +5 ± 0,25 V 0 V ali GND 0 V ali GND

PRVIN (normalno) 195 mA (975 mW) / /

PRVIN (maksimalno) 230 mA (1150 mW) / /

VBATT napetost / +5 ± 0,25 V +3 ± 0,50 V

VBATT tok / 75 μA 40 μA

VBATT moč / 0,38 mW 0,12 mW

Slika 3.2: 2 x 10 priključni vmesnik

Tabela 3.2: Opis priključkov 2 x 10-pinskega vmesnika

PIN IME OPIS PIN IME OPIS

1 PREAMP Napetost predojačevalnika 11 SDO1

2 PWRIN_5 Napajanje + 5 VDC 12 SDI1

3 VBATT Napajanje preko baterije 13 GND ozemljitev

4 N/C / 14 N/C

5 M_RST Master Reset 15 SDI2

6 N/C / 16 GND ozemljitev

7 GPIO2 Izbira NMEA protokola 17 GND ozemljitev

8 GPIO3 ROM privzeti način 18 GND ozemljitev

9 GPIO4 / 19 TMARK

10 GND ozemljitev 20 10kHz

Priključek 1: Napajanje predojačevalnika za aktivno anteno (PREAMP). Največja

napetost je lahko 12 V. Tok ne sme presegati 100 mA. Večina aktivnih anten uporablja

enosmerno napetost 5 V [14].

Priključek 2: Napajanje (PWRIN_5). To je glavno napajanje. Zahteve za enosmerno

napajanje so prikazane v tabeli 3.1 [14].

Page 34: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 19

Priključek 3: Napajanje preko baterije (VBATT). Ta priključek se uporabi za napajanje

SRAM in RTC. Sprejemnik se samodejno preklopi v način pripravljenosti (VBATT),

ko je glavno napajanje odstranjeno. Ta funkcija omogoča sprejemniku sposobnost

vzdrţevanja podatkov o točnem času, izvoru in uporabi satelitov, ki se shranijo v

SRAM, ko je glavno napajanje odstranjeno. Obstaja pa tudi moţnost vgradnje

shranjevalnega kondenzatorja, kapacitivnosti 0,22 F ter maksimalne napetosti 5,5 V

[14].

Priključek 5: Master Reset (M_RST). Ta signal je potreben za vzpostavitev sistemskega

reseta sprejemnika. Lahko ga poganja neposredno zunanji mikrokrmilnik ali katero

drugo zunanje logično vezje, brez potrebe po uporabi dviţnih uporov. Sistemski reset

sprejemnika se generira tako, da se postavi signal M_RST na logično nizki nivo. Ta

signal se lahko uporablja tudi za zagotovitev nadzora, ko je sprejemnik v delovnem

stanju, ne da bi bilo potrebno sprejemnik izklopiti. Ko je signal M_RST postavljen na

logično nizki nivo, bo sprejemnik prešel v stanje nizke moči (za pribliţno 150 ns). Ko

signal postavimo nazaj na logično visok nivo, sprejemnik prične normalno delovati v

delovalnem načinu [14].

Priključek 7: Izbira protokola NMEA (GPIO2). Sprejemnik ima na voljo dva

sporočilna protokola, s katerima lahko komunicira preko V/I serijskih vrat. To sta

Rockwell-ov binarni sporočilni format in NMEA ASCII (American Standard Code for

Information Interchange) sporočilni format. Ko je ta signal (GPIO2) postavljen na

logično nizki nivo, prične sprejemnik komunicirati v sporočilnem formatu NMEA

(4800 baud/s, brez paritet, 8 podatkovnih bitov in 1 start in stop bit). Ko je signal

postavljen na logično visok nivo, pa sprejemnik prične uporabljati format, določen v

ROM (Read Only Memory) pomnilniku (privzeti način pin 8) [14].

Priključek 8: Privzeti način ROM (GPIO3). Ta signal določa, ali bodo oblike sporočila

privzete iz polnilnika ROM ali pa bodo uporabniško nastavljive shranjene v

SRAM/EEPROM (Electricaly Erasable Programmable Read Only Memory). Ko je ta

signal (GPIO3) postavljen na logično nizki nivo, se uporabljajo tovarniško privzete

vrednosti, shranjene v polnilniku ROM. Ko pa je signal postavljen na logično visok

nivo, sprejemnik začne uporabljati vrednosti, shranjene v SRAM/EEPROM. Privzete

vrednosti za protokol NMEA so 4800 baud/s brez paritete, 8 podatkovnih bitov ter 1

Page 35: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 20

start in stop bit. Privzete vrednosti za binarni protokol pa so 9600 baud/s, brez paritete,

8 podatkovnih bitov ter 1 start in stop bit (tabela 3.3) [14].

Priključeka 11 in 12: asinhrono serijska V/I vrata (SDO1 in SDI1). Ta dva priključka

se uporabljata za komunikacijo s sprejemnikom preko asinhrono serijskih V/I vrat, kjer

je SDO1 serijski izhod, SDI1 Pa serijski vhod.

Priključki 10, 13, 16, 17 in 18: ozemljitev (GND).

Tabela 3.3: Konfiguracija serijskega vmesnika »Jupiter« sprejemnika GPS

Izbira NMEA

protokola

(priključek 7)

Izbira ROM privzetega

načina (priključek 8) Rezultat

0 0

Izbrani protokol NMEA.

Komunikacijske nastavitve: 4800 baud/s, brez

paritete, 8 podatkovnih bitov, start in stop bit.

Sprejemnik uporabi privzete vrednosti, shranjene v

polnilniku ROM.

0 1

Izbrani protokol NMEA.

Komunikacijske nastavitve: 4800 baud/s, brez

paritete, 8 podatkovnih bitov, start in stop bit.

Sprejemnik izbere vrednosti podatkov, shranjenih

v SRAM ali EEPROM.

1 0

Izbrani binarni protokol.

Komunikacijske nastavitve: 9600 baud/s, brez

paritete, 8 podatkovnih bitov, start in stop bit.

Sprejemnik uporabi privzete vrednosti, shranjene v

polnilniku ROM.

1 1 Obliko sporočila določajo podatki, shranjeni v

SRAM ali EEPROM.

3.2 MULTIMEDIJSKA RAZVOJNA PLOŠČA

Multimedijska razvojna plošča je razširitvena plošča, ki jo je moţno priključiti na

katerikoli Microchipov komplet »PIC32 Starter Kit« [17].

Sprednja stran razvojne plošče (slika 3.3) vključuje:

1. 3,2-palčni (8,1 cm) QVGA ekran z dotično ploščico,

Page 36: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 21

2. uporabniško-kontrolne LED diode,

3. štirismerni »joystick«,

4. ukazni gumb,

5. priključek za slušalke,

6. izhodni audio priključek,

7. mikrofonski priključek,

8. napajalna LED dioda,

9. vhodno/izhodni razširitveni konektor.

Slika 3.3: Sprednji del Multimedijske razvojne plošče

Zadnja stran razvojne plošče (3.4) vključuje:

1. Solomon Systech SSD1926 grafični procesor,

2. reţa za microSD kartico,

3. priključek za napajanje (9-14 VDC),

4. merilec pospeška in temperaturni senzor (BMA150),

5. 24LC08 EEPROM,

6. 2 MB SPI Flash RAM (Flash Random Access Memory) (SST25VF016),

7. 24-bitni stereo audio kodek (WM8731),

8. CPLD za SPI in Chip Select konfiguracija,

1

2

3 4

5 6 7

8

9

Page 37: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 22

9. »PIC32 Starter kit« priključek,

10. vhodno/izhodni razširitveni konektor.

3.2.1 Prikazovalnik na dotik

Pravilno delovanje prikazovalnika nadzoruje grafični procesor Solomon System SSD1926.

Prikazovalnik je lahko nastavljen na 8-bitni ali 16-bitni prikaz [17]. Na sliki 3.5 je prikazan

3,2-palčni QVGA TFT prikazovalnik na dotik.

3.2.2 Grafični procesor SSD1926

Grafični procesor SSD1926 je namenjen za naprave, katere zajemajo in procesirajo slike.

Vsebuje enoto za obdelovanje slik in kodek JPEG za dekodiranje zajete slike v JPEG

format. Datoteke se lahko shranjujejo na SD/MMC kartico preko SD vmesnika. Prav tako

pa lahko datoteke, kot so JPEG, dekodira in prikazuje na prikazovalnik preko LCD (Liquid

Crystal Display) vmesnika. Ta vmesnik podpira različne vrste LCD-jev, kot so STN,

CSTN in TFT. SSD1926 LCD krmilnik podpira razločljivost z barvno globino 1, 2, 4, 8,

16 in 32-bitov na slikovno piko (b/p). Za 16 in 32 b/p SSD1926 ponuja grafični

pospeševalnik, kot so virtualni prikaz, zasuk slike, kazalčni zaslon, ipd. [15].

Slika 3.4: Zadnji del Multimedijske razvojne plošče

1 2 3

4 5

6

7 8

9

Page 38: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 23

Glavne značilnosti SSD1926 procesorja:

JPEG dekoder

a) Moţnost dekodiranja JPEG slik do velikosti 1280 x 1024 [15].

b) JPEG strojni moduli:

- diskretna kosinusna transformacija DCT (Discrete Cosine Transformation) in

inverzna diskretna kosinusna transformacija iDCT (Inverse Discrete Cosine

Transformation). Transformacija DCT se uporablja za kodiranje in dekodiranje

slikovnih in video signalov. To je tehnika, ki izraţa končno zaporedje podatkovnih

točk glede na vsoto kosinusne funkcije, oscilirane na različnih frekvencah, in je

prikazana kot mnoţica podatkovnih točk. iDCT pa je postopek obnove mnoţice

podatkovnih točk [15, 18];

- kvantizacijski izračun – kvantizacija je proces zmanjševanja števila moţnih

podatkovnih točk glede na velikost slike [15, 18];

- cik-cak zaporedje binarnega kodiranja [15];

- shranjevanje s pomočjo Huffmanove tabele [15].

c) JPEG dekoder lahko za ogled slike na LCD prikazovalniku sliko poveča za osem krat

[15].

2D grafični pospeševalnik omogoča:

a) obračanje zaslona in drsno pomikanje po zaslonu;

b) obračanje slik za 0, 90, 180 in 270 stopinj;

c) dva kurzorja s tremi barvami za izbiro preglednosti;

d) utripanje kurzorjev;

e) risanje črt, pravokotnikov in elipse …

LCD grafični krmilnik

Podpira razločljivost z barvno globino 1, 2, 4, 8, 16 in 32 b/p. V 32 b/p načinu je vsaka

pika sestavljena iz 8 bitov rdeče, 8 bitov zelene, 8 bitov modre in 8 bitov alpha kanalom za

nadzor preglednosti slike. V 1, 2, 4 in 8 b/p načinu lahko prikaţemo statično sliko, 2D

grafični pospeševalnik ni na voljo. Poljubna velikost slike je podprta do 512 horizontalne

razločljivosti [15].

LCD vmesnik podpira naslednje LCD prikazovalnike:

a) enobarvne in barvne prikazovalnike STN z 4/8/12/16-bitnim vmesnikom;

b) prikazovalnike TFT z 9/12/18/24-bitnim vmesnikom;

Page 39: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 24

c) 8-bitni Delta prikazovalnik s »sub-pixel« algoritmom natančnosti;

d) »Smart« LCD prikazovalnik z 8-bitnim MCU vmesnikom preko SPI.

3.2.3 Dotična ploščica

Ploščica, občutljiva na dotik, deluje na principu merjenja upornosti. Z mikrokrmilnikom

analogne napetosti digitaliziramo in na podlagi te informacije točno vemo, na katerem delu

zaslona smo pritisnili ploščico. Ploščica je samostojna in ima na spodnji strani ţe

predvideno lepilo, s katerim jo nalepimo na LCD [19].

Ploščica, občutljiva na dotik, je sestavljena iz dveh ploščic z uporovno plastjo na notranji

strani. Upornost teh plasti ne presega 1 kΩ. Na nasprotni strani ploščice so kontakti, s

katerimi komuniciramo z mikrokrmilnikom preko ploščatega kabla [19].

Slika 3.5: 3.2-palčni QVGA TFT prikazovalnik na dotik

Slika 3.6: Dotična ploščica

Page 40: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 25

Postopek določanja koordinat točke dotika razdelimo na določitev koordinat X in Y (slika

3.6). Za določanje koordinate X je potrebno povezati "levi" kontakt površine A na maso,

"desni" kontakt pa na napajalno napetost. To povzroči napetostni delilnik, ki ob pritisku na

ploščico odčita napetost preko kontakta "spodaj", na površini B. Napetost je v območju 0

V in napajalne napetosti. Če je točka pritiska na ploščico na "levi" strani, se bo napetost

pribliţevala 0 V in obratno, če je točka pritiska na "desni" strani, se bo napetost

pribliţevala napajalni napetosti. Za določanje koordinate Y pa je potrebno povezati

"spodnji" kontakt površine B na maso, "zgornji" kontakt pa na napajalno napetost. V tem

primeru se napetost odčita na "levem" kontaktu površine A. Kontakt "spodnje" površine B

in kontakt na "levi" strani površine A sta povezana na A/D konektor mikrokrmilnika. Z

merjenjem napetosti na teh kontaktih se dodeljujejo koordinate X, Y pritisnjene točke

(slika 3.7) [19].

Slika 3.7: Princip delovanja dotične ploščice.

3.3 TESTNA PLOŠČA

Uporabili smo testno ploščo Microchip »PIC32 Ethernet Starter Kit«, ki vsebuje 32-bitni

mikrokrmilnik PIC32MX795F512L, z 72 MHz jedrom MIPS32M4K, ki omogoča 1,5

DMIPS/MHz. Mikrokrmilnik ponuja do 512 kB bliskovnega pomnilnika in 32 kB RAM

pomnilnika [20]. Na sliki 3.8 je prikazana sprednja in zadnja stran testne plošče.

Sprednja stran vsebuje:

1. 32-bitni mikrokrmilnik PIC32MX795F512L;

2. mikrokrmilnik PIC32MX440F512H za prenos podatkov preko USB (Universal Serial

Bus);

Page 41: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 26

3. zeleni napajalni LED (Light Emitting Diode) indikator;

4. 8 MHz kristal;

5. USB priključek, tipa mini-A, za komunikacijo in prenos podatkov;

6. oranţni LED indikator za prenos podatkov;

7. potisna stikala za uporabniško definirane vhode;

8. LED diode za uporabniško definirane vhode;

9. USB priključek, tipa A, za komunikacijo in prenos podatkov;

10. »Jumper« za določitev načina dela;

11. RJ-45 Ethernet vrata;

12. Ethernet merilnik hitrosti 10/100;

13. 50 MHz Ethernet PHY oscilator;

14. 32 kHz oscilator;

15. USB OTG napajalnik za napajanje PIC32 USB aplikacije.GOL.

Slika 3.8: Sprednja in zadnja stran Microchip »PIC32 Ethernet Starter Kit«

Page 42: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 27

Zadnja stran vsebuje:

1. +3,3 V regulator napetosti za napajanje testne plošče preko USB ali razširitvene

plošče;

2. konektor za priklop razširitvene plošče;

3. USB, tipa micro AB, za priklop USB in OTG naprave;

4. zunanji Ethernet PHY.

3.3.1 Mikrokrmilnik PIC32MX795F512L

Mikrokrmilnik PIC32MX temelji na 32-bitnem procesorskem jedru M4K. Vsi procesorji

druţine PIC32MX uporabljajo visoko zmogljivo RISC (Reducet Instruction Set Core) CPU

(Control Processing Unit) in so programljivi v 32 in 16-bitnem načinu [21]. Slika 3.9

prikazuje blok diagram mikrokrmilnika PIC32MX.

PIC32 uporablja koncept, imenovan gospodarji na vodilu (Bus Master). Gospodarji na

vodilu vsebujejo nabor modulov, kateri lahko berejo ali pišejo transakcije v druge module.

Na primer, CPU lahko bere in piše v pomnilnik SRAM ali v katerokoli drugo periferno

napravo. Podobno lahko krmilnik DMA (Direct Memory Access) bere ali piše v katerokoli

periferno napravo na vodilu. Gospodarji na vodilu so CPU, ICD (International Code

Designator), USB, DMA in delujejo z enako hitrostjo kot CPU. Vsi gospodarji, razen CPU,

podpirajo sposobnost DMA krmilnika za samostojno opravljanje bralnih in pisalnih

transakcij. Prav tako lahko prenašajo V/I podatke brez pomoči CPU. Ne morejo pa

dostopati do CPU registrov. Samo CPU lahko dostopa do svojih registrov [21].

SYSCLK in PBCLK

Periferne enote, kot so predpomnilnik, USB, DMA, SRAM, prekinitve in V/I vrata

uporabljajo SYSCLK. Te periferije uporabljajo enako hitrost kot CPU, kar omogoča, da se

izvedejo v enem ciklu, medtem ko SPI (Serial Peripheral Interface bus), UART (Universal

Asynchronous Recive Transmitter), ADC (Analog to Digital Converter), RTCC (Real

Time Clock and Calender), I2C, ipd. uporabljajo PBCLK. Točna vrednost PBCLK je

določena z nastavitvijo perifernega mostu. PBCLK lahko deluje pri 1:1, 1:2, 1:4 in 1:8

hitrosti SYSCLK. Te enote so počasne in ne zahtevajo hitre odzivnosti podatkov. Če je

razmerje PBCLK z SYSCLK 1:1, bodo CPU in drugi gospodarji na vodilu dostopali do

PBCLK perifernih enot v času enega cikla. Če pa je razmerje 1:8, pa bodo potrebovali 8

Page 43: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 28

SYSLCK za dostop do PBCLK perifernih enot. Kadar CPU piše na SFR (Special Function

Register) pri razmerju 1:8, bo matrično vodilo prevzelo operacijo pisanja, ki se izvede v

času enega cikla, vendar bo dovolilo izvajanje naslednje operacije šele po izteku 8 ciklov.

Ko pa CPU izvaja operacijo branje, CPU čaka na natančno vrednost PBCLK delilnika in

nadaljuje operacijo po njegovem izteku [22].

Slika 3.9: PIC32MX blok diagram

Prekinitve

Prekinitev pri PIC32MX se lahko izvaja v samostojnem ali v več-vektorskem načinu. V

samostojnem načinu vse prekinitve uporabljajo isti vektor (slika 3.10). Pri več-vektorskem

182-bit

JTAG/BSCAN

US

B

Matrično vodilo

Prefetch

predpomnilnik

RAM

pomnilnik

Bliskovni

pomnilnik

Bli

skov

ni

krm

iln

ik

PMP/PSP

ADC

Generator

urinih

impulzov

RTCC

Prekinitveni krmilnik

DM

AC

ICD

PIC32MX CPU

DS

Priključki

Časovniki

Vhodno

zajemanje

I2C

UART

SSP/SPI

Periferni most

Dvojna

primerjava

Izodnja

primerjava

Generator

RESET

INT

IS

EJTAG

Page 44: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 29

načinu pa je na voljo 64 vektorjev. Vsak vektor ima do 8 različnih prioritetnih nivojev.

Vrednost 7 kaţe na najvišjo proriteto, 1 pa označuje najniţjo. Vrednost 0 nakazuje, da je

vektor onemogočen. Tako lahko določimo en prioritetni nivo za več kot en prekinitveni

vektor. Poleg privzete prioritete ima lahko vsak vektor do 4 podprioritetne nivoje.

Podprioritete določajo vrstni red, po katerem se bodo prekinitve izvajale, zlasti če obstaja

več kot ena prekinitev istega prioritetnega nivoja [23].

Slika 3.10: PIC32 prekinitveni način

UART

Univerzalni asinhroni sprejemnik in oddajnik (UART) je asinhronski komunikacijski

kanal, ki komunicira s perifernimi napravami preko RS-232, RS-485 in IrDA [24]. Modul

UART vključije »Baud Rate Generator« za določanje hitrosti komunikacije. Register

UxBRG nadzoruje 16-bitni časovnik. Najpogostejša oblika podatkov je 8 bitov, brez

paritete in 1 stop bitom, označen kot 8, N, 1. Število podatkovnih bitov, paritete in stop

bitov se določi v PDSEL<1:0> (UxMODE<2:1>) in ST"SEL (UxMODE<0>) registru. Za

pravilno komunikacijo mora biti nastavljen isti format podatkov in hitrost prenosa tako na

periferni napravi kot tudi na mikrokrmilniku. Komunikacijo UART omogočimo s

postavitvijo bita ON (UxMODE<15>), RXEN (UxSTA<12>) in TXEN (UxSTA<10>)

(slika 3.12). Ko je komunikacija omogočena, sta UxTX in UxRX priključka konfigurirana

kot izhod in vhod. Podatki se prejemajo preko priključka UxRX. Po vzorčenju signala

UxRX se s stop bitom prejeti podatek UxRSR prenese v vmesni pomnilnik FIFO (First In

First Out). Sprejem je omogočen z nastavitvijo bita RXEN (UxSTA<12>). Ko je FIFO

pomnilnik poln oziroma ko register UxRSR prejme vse znake, se bit OERR (UxSTA<1>)

postavi na ena. Podatki se hranijo v registru UxRSR, vendar se bo prenos v FIFO

5

3

1

Po

dp

rio

rite

tni

niv

oji

1

4 7

6

4

2

2

0

Pri

ori

tetn

i n

ivo

ji

62

63

0

Vek

torj

i

3

2

Page 45: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 30

pomnilnik nadaljeval šele po izbrisu bita OERR, zato je potrebno iz pomnilnika FIFO vse

znake najprej prebrati in nato počistiti OERR bit. S tem resetiramo pomnilnik FIFO in so

tako vsi predhodno prejeti podatki izgubljeni [24].

Slika 3.11: Blok diagram UART sprejemnika

3.4 PROTOTIP POTOVALNI RAČUNALNIK

Prototip potovalnega računalnika je sestavljen iz testne ploščice »PIC 32 starter kit«,

multimedijske razvojne plošče in Rockwell »Jupiter« sprejemnika GPS (slika 3.12 in slika

3.13). Prototip deluje na napetosti +5 V. Na priključka 1 in 2 sprejemnika GPS smo

BLCK

/ UxRTS

UxCTS

/ UxRTS

UxRTS

/ UxRTS

UxCTS

/ UxRTS

BCLK/UxRTS

/ UxRTS

UEN1

Izbira

UEN

UEN0

UxMODE UxSTA

UxRSR

Podatkovno vodilo

/ UxRTS

UxRXIF

/ UxRTS

UxTX

/ UxRTS

UxRX

/ UxRTS

RX8 FIFO pomnilnik

Predpomnilnik sprejemnika:

- ustvari zastavice;

- ustvari prekinitev;

- preusmeri podatkovne znake.

- zaznavanje start bita

- preverjanje paritete

- zaznavanje stop bita

- premik generator ure

1

0

UxRSR

Page 46: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 31

priključili napetost +5 V. Priključek 1 je napajanje aktivne antene, priključek 2 pa

napajanje sprejemnika. Z dviţnim uporom 10 kΩ postavimo priključek 8 na logično visok

nivo. S tem omogočimo uporabo podatkov shranjenih v polnilniku SRAM/EEPROM. To

so podatki o zadnjih koordinatah, datumu, času, satelitih, itd. Priključke 7, 10, 13, 16, 17 in

18 so priključeni na ozemljitev. S priključitvijo priključka 7 na ozemljitev izberemo

protokol NMEA. Priključek 11 in 12 pa se uporabljata za komunikacijo sprejemnika z

mikrokrmilnikom (slika 3.13).

Slika 3.12: Razstavljen prototip potovalnega računalnika GPS

Slika 3.13: Sestavljen prototip potovalnega računalnika GPS

Page 47: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 32

Slika 3.14: Vezava sprejemnika GPS

antena GPS

UxRX

UxTX

GND

5 V

10 kΩ

PIC 32 Rockwell »Jupiter«

sprejemnik GPS

1 V (antena)

2 V (sprejemnik)

8 izbira ROM

7 izbira NMEA

10 ozemljitev

13 ozemljitev

16 ozemljitev

17 ozemljitev

18 ozemljitev

11 serijski izhod

12 serijski vhod

Page 48: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 33

4 PROGRAMSKA OPREMA

Za razvoj programske opreme smo izbrali programski jezik ANSI (American National

Standards Institute) C in razvojno okolje MPLAB X IDE. Za izdelavo vizualne podobe

zaslona prikazovalnika smo uporabili dodatek »Graphics Display Designer« za MPLAB X.

Za pravilno delovanje dodatka je bilo potrebno namestiti najnovejšo različico aplikacijske

knjiţnice.

4.1 Razvojno okolje MPLAB X IDE

MPLAB X IDE je razvojno okolje, ki podpira razvoj aplikacij za mikrokrmilnike PIC in

dsPIC [16]. Program je brezplačen in je na voljo na spletni strani proizvajalca Microchip.

Slika 4.1 prikazuje razvojno okolje MPLAB X IDE.

Slika 4.1: Razvojno okolje MPLAB X IDE

Page 49: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 34

4.1.1 Grafična knjiţnica

Na Microchipovi spletni strani je brezplačno na voljo Microchipova aplikacijska knjiţnica

MLA (Microchip Libraries for Applications). MLA je zbirka več knjiţnic. Med njimi je

tudi grafična knjiţnica, ki smo jo uporabili pri razvoju programske opreme. Knjiţnice so

zapisane v obliki izvorne kode, kar uporabniku omogoča laţje načrtovanje strojne in

programske opreme za izdelavo aplikacije.

Knjiţnica je optimizirana za 16- in 32-bitne mikrokrmilnike in je namenjena za izdelavo

primitivnih grafičnih objektov, kot so črte, elipse, trikotniki ter za napredne grafične

objekte, kot so gumbi, drsniki, merilniki, ipd.

Knjiţnica omogoča enostavno vključevanje vhodnih naprav preko uporabniškega

vmesnika in podpira naslednje funkcije [27]:

1. 2D objekti, kot so črte, krogi, napisi, trikotniki, ipd.;

2. 3D objekti, kot so gumbi, merilniki, potrditvena polja, polja za vnos, drsniki, ipd.;

3. različno tipografijo in podporo več jezikov;

4. uporabniški vmesnik za zaznavanje dotika, tipkovnico, miško, ipd.;

5. slike, animacije.

Slika 4.2: Struktura Microchipove grafične knjiţnice

Uporabniški vmesnik

(miška, tipkovnica, dotična ploščica, ipd.)

Aplikacijski sloj

Sloj grafičnih objektov (GOL)

(gumb, drsnik, merilnik, ipd.)

Gonilniki prikazovalnika (DDD)

Sloj primitivnih grafičnih objektov

(črta, napis, trikotnik, ipd.)

Grafični prikazovalnik

Page 50: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 35

Na sliki 4.2 je prikazana struktura grafične knjiţnice. Program se nahaja v aplikacijskem

sloju, ki uporablja grafično knjiţnico. Sloj grafičnih objektov GOL (Graphics Objects

Layer) vsebuje napredne grafične objekte, do katerih dostopamo preko uporabniškega

vmesnika, ki sprejema sporočila, poslana iz aplikacije. Ta vmesnik podpira različne

vhodne naprave, kot so tipkovnica, miš, dotična ploščica, ipd. DDD (Display Divece

Driver) pa vsebuje gonilnike prikazovalnikov [27]. Osnovno uporabo grafične knjiţnice

prikazuje slika 4.3.

Slika 4.3: Osnovna uporaba grafične knjiţnice

Funkcija InitGraph (slika 4.3, vrstica 1) postavi kazalec pozicije X in Y na nič, ter

zaslon inicializira na črno barvo . Funkcija GOLCreateScheme (slika 4.3, vrstica 3)

določi stil uporabljenih objektov. Vsi objekti uporabljajo stilno shemo, s pomočjo katere

določimo barve objekta ter tipografijo uporabljenih črk. Stilne komponente objektov so

prikazane na sliki 4.4 [27].

Obe funkciji, InitGraph in GOLCreateScheme, izvedemo s klicem funkcije

GOL_Init (slika 4.3, vrstica 2) [27].

grafična inicializacija

ustvari stil sheme

ustvari objekt

risanje objekta

vhodne naprave

proces delovanja

GOLinit()

initGraph()

GolCreateScheme()

ObjCreate(,,)

GOLDraw()

Sporočilna struktura

GOLMsg()

2

2

.

4

.

5

.

6

.

7

.

1

.

3

.

Page 51: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 36

Slika 4.4: Stilne komponente objekta

Za tvorbo objektov je potrebno klicati funkcijo ObjCreate (slika 4.3, vrstica 4). Ta

funkcija zastopa objekte, kot so gumb, drsnik, merilnik, edit box, ipd. Sika 4.5 pa prikazuje

postopek tvorbe objekta gumb ter »edit box« [27].

Slika 4.5: Tvorba objekta gumb, »edit box«

TextColorDisabled

ColorDisabled

TextColor0

Color0

EmbossLtColor

EmbossDkColor

EmbossDkColor temna barva za 3D efekt objekta

EmbossLtColor svetla barva za 3D efekt objekta

TextColor0 barva teksta ki jo uporablja objekt

TextColorDisabled barva teksta ko je objekt izbran

Color0 barva objekta

ColorDisabled barva objekta ko je izbran

1 BtnCreate

2 BTN_3, //identifikacijsko ime objekta

3 10, //kazalec pozicije gumba levo

4 48, //kazalec pozicije gumba zgoraj

5 155, //kazalec pozicije gumba desno

6 127, //kazalec pozicije gumba spodaj

7 BTN_DRAW, //stanje objekta - risanje

8 NULL, //brez bitmap slike

9 "Poraba", //ime oziroma napis gumba

10 gumb1 //ime stilne sheme

11 ;

12 EbCreate

13 EDB_66, //identifikacijsko ime objekta

14 169, //kazalec pozicije gumba levo

15 127, //kazalec pozicije gumba zgoraj

16 256, //kazalec pozicije gumba desno

17 147, //kazalec pozicije gumba spodaj

18 EB_DRAW, //stanje objekta - risanje

19 " ", //napis objekta

20 16, //velikost pisave

21 editbox //ime stilne sheme

22 ;

Page 52: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 37

BtnCreate in EbCreate (slika 4.5, vrstici 1 in 12) zastopata funkcijo ObjCreate,

kjer Btn zastopa objekt gumb, Eb pa objekt »edit box«. Vsak od objektov v knjiţnici ima

svojo ObjCreate funkcijo. Ta funkcija vrača kazalec na novo narejen objekt. Tvorjene

objekte narišemo z uporabo funkcije GOLDraw (slika 4.3, vrstica 5), ki preveri stanje

risanja objekta. Spremembe stanja objekta lahko spreminjamo preko vhodnih naprav,

katere primerjamo s klicem funkcije GOLMsg (slika 4.3, vrstica 7). Če ustreza pogojem, ta

spremeni stanje objekta in zopet kliče funkcijo GOLDraw. Zunanje naprave komunicirajo z

objekti s pomočjo GOL_MSG sporočilne strukture. Slika 4.6 prikazuje osnovno strukturo

komunikacije, kjer polje type (slika 4.6, vrstica 2) določa tip vhodne naprave, ki je v

našem primeru dotična ploščica, medtem ko polje event (slika 4.6, vrstica 3) določa tip

dogodka. Polji type in event določata, kako bosta param1 in param2 (slika 4.6,

vrstici 4 in 5) interpretirana. Primer: ko pritisnemo na ekran, se podatki dotika prenesejo v

sporočilno strukturo GOL_MSG, ki jo ta prenese v knjiţnico sporočilne funkcije GOLMsg.

Objekt z X in Y pozicijama bo spremenil svoje stanje glede na prej nastavljeno stanje in

dogodek. To se stori s klicem funkcije GOLMsgCallback. Ta funkcija se kliče za vsako

novo sporočilo objekta (primer ali je gumb pritisnjen ali ne). Slika 4.7 prikazuje potek

izvajanja sporočilne strukture [27].

Slika 4.6: Sporočilna struktura GOL_MSG

4.1.2 Grafična zasnova zaslona

Grafični zasnova zaslona GDD je dodatek za MPLAB, ki omogoča uporabniku enostaven

dostop do objektov, katere ţeli uporabiti na zaslonu prikazovalnika. Na osnovi pripravljene

grafične zasnove se generira izvorna koda v jeziku C, ki se avtomatsko prenese v projekt

1 typedef struct

2 BYTE type;

3 BYTE event;

4 int param1;

5 int param2;

6 GOL_MSG;

type → TYPE_TOUCHSCREEN

event → možni dogodki so naslednji:

- EVENT_INVALID

- EVENT_MOVE

- EVENT_PRESS

- EVENT_RELEASE

parma1 → pozicija x-koordinate dotika

parma2 → pozicija y-koordinate dotika

Page 53: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 38

MPLAB X. GDD ustvari številne datoteke. Med njimi tudi datoteko GDD_Screen.c, kjer

so v obliki programske kode zapisani grafični zasloni. V GDD_Screen.c datoteki najdemo

stavke oziroma imena, ki se uporabljajo na zaslonu. To so predvsem imena objektov in

statični napisi (slika 4.8, vrstice od 1 do 13). V funkciji Createscreen1 so zapisane

stilne komponente tvorjenega objekta ter njihove pozicije na zaslonu (slika 4.8, vrstice od

18 do 23, slika 4.9, vrstice od 24 do 50). Funkcija CreatePrimitivesForscreen1

pa je namenjena tvorjenju primitivnih objektov, uporabljenih na zaslonu (slika 4.9, vrstice

od 54 do 64).

GDD X se lahko uporablja tudi kot samostojna aplikacija. V samostojnem načinu GDD X

prav tako ustvari C kodo, vendar jo shrani v mapo, ki jo lahko v projekt MPLAB X

vključimo ročno.

Slika 4.7: Potek izvajanja sporočilne strukture

Slika 4.8: Datoteka GDD_Screen.c -1-

1 const XCHAR screen1_BTN_1text[ ] = "Potrdi";

2 const XCHAR screen1_STE_2text[ ] = "Vpisi stanje stevca vozila";

3 const XCHAR screen1_EDB_218text[ ] = " ";

4 const XCHAR screen1_xstevecxtext[ ] = " ";

5 const XCHAR screen2_STE_9text[ ] = " ";

6 const XCHAR screen2_STE_200text[ ] = " ";

7 const XCHAR screen2_STE_8text[ ] = " ";

8 const XCHAR screen2_BTN_3text[ ] = "Poraba";

9 const XCHAR screen2_BTN_4text[ ] = "Hitrost";

10 const XCHAR screen2_BTN_5text[ ] = "Ura";

11 const XCHAR screen2_BTN_6text[ ] = "Koordinate";

12 const XCHAR screen2_BTN_7text[ ] = "Stevec";

13 const XCHAR screen2_xmenuextext[ ] = " ";

.

.

.

18 void Createscreen1(void)

19

20 GOLFree();

21 SetColor(RGBConvert(0, 0, 0));

23 ClearDevice();

24

25 if(gumb2 != NULL) free(gumb2);

26 gumb2 = GOLCreateScheme();

27

28 gumb2->Color0 = RGBConvert(0, 0, 0);

29 gumb2->Color1 = RGBConvert(0, 0, 0);

30 gumb2->TextColor0 = RGBConvert(200, 204, 248);

31 gumb2->TextColor1 = RGBConvert(248, 252, 248);

32 gumb2->EmbossDkColor = RGBConvert(0, 0, 0);

33 gumb2->EmbossLtColor = RGBConvert(0, 0, 0);

34 gumb2->TextColorDisabled = RGBConvert(248, 252, 248);

35 gumb2->ColorDisabled = RGBConvert(208, 224, 240);

36 gumb2->CommonBkColor = RGBConvert(208, 236, 240);

37 gumb2->pFont = (void*)&CordiaUPC_26;

GLAVNI

PROGRAM

Aplikacijski sloj

GOLMsgCallback(,,,)

GOLMsg( )

Sloj grafičnih objektov (GOL)

Page 54: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 39

Slika 4.9: Datoteka GDD_Screen.c -2-

4.2 PROGRAMSKA KODA

Uporabniški vmesnik potovalnega računalnika z GPS temelji na uporabi desetih zaslonov,

ki smo jih tvorli s pomočjo programskega dodatka GDD. Vsak zaslon ima svojo funkcijo, s

katero z gumbi, kot so »Potrdi«, »Vnesi«, »Nazaj«, omogočimo uporabniku celoten nadzor

nad napravo. Slika 4.10 prikazuje osnovno delovanje zaslonov potovalnega računalnika.

Po vklopu se najprej izriše zaslon 1, na katerem se izpiše »Vpiši stanje števca ter pritisni

tipko Potrdi«. S pritiskom na polje »EditBox« preidemo iz zaslona 1 na zaslon 2, kjer se

24

25 if(gumb2 != NULL) free(gumb2);

26 gumb2 = GOLCreateScheme();

27

28 gumb2->Color0 = RGBConvert(0, 0, 0);

29 gumb2->Color1 = RGBConvert(0, 0, 0);

30 gumb2->TextColor0 = RGBConvert(200, 204, 248);

31 gumb2->TextColor1 = RGBConvert(248, 252, 248);

32 gumb2->EmbossDkColor = RGBConvert(0, 0, 0);

33 gumb2->EmbossLtColor = RGBConvert(0, 0, 0);

34 gumb2->TextColorDisabled = RGBConvert(248, 252, 248);

35 gumb2->ColorDisabled = RGBConvert(208, 224, 240);

36 gumb2->CommonBkColor = RGBConvert(208, 236, 240);

37 gumb2->pFont = (void*)&CordiaUPC_26;

38

39 BUTTON *pBTN_1;

40 pBTN_1 = BtnCreate( BTN_1, //name

41 226, //left

42 163, //top

43 291, //right

44 217, //bottom

45 0, //radius

46 BTN_DRAW, //state

47 NULL, //bitmap

48 (XCHAR*)screen1_BTN_1text, //text

49 gumb2 //scheme

50 );

.

.

.

54 void CreatePrimitivesForscreen2(void)

55

56 SetLineType(0);

57 SetLineThickness(0);

58 SetColor(RGBConvert(248, 252, 248));

59 while(!Line( 7, //x1

60 37, //y1

61 306, //x2

62 37 //y2

63 )

64 );

.

.

.

Page 55: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 40

izriše polje številk za vnos podatka. Po vnešenem podatku o stanju števca vozila s tipko

»Vnesi« preidemo nazaj na zaslon 1, kjer s tipko »Potrdi« vnos potrdimo in preidemo na

zaslon »Glavni meni«. Na zaslonu se poleg ure in datuma izrišejo še tipke »Poraba«,

»Hitrost«, »Ura«, »Koordinate« ter »Števec«. V primeru slabega signala sprejemnika se na

zgornjem delu zaslona izpiše »NI SIGALA«. S pritiskom tipke »Poraba« preidemo na

zaslon 3, katerega namen je spremljanje porabe vozila. S pritiskom na polje »EditBox«

preidemo na zaslon 7, katerega namen je vnos podatkov o natočenem gorivu (zaslon 8) ter

o ceni natočenega goriva (zaslon 9). Po vnosu teh dveh podakov s tipko »Vnesi« preidemo

nazaj na zaslon 3, kjer se izpiše datum vnosa, trenutno stanje števca, natočeno gorivo v

litrih ter povprečna poraba vozila. S pritiskom tipke »Hitrost« na zaslonu »Glavni meni«

preidemo na zaslon 4, katerega namen je izpis trenutne hitrosti.

4.2.1 Povezava s sprejemnikom GPS

Za pridobivanje podatkov iz sprejemnika GPS, je bilo potrebno v programu uporabiti

prekinitveno rutino UART. Ta sproţi prekinitev, ko dobi informacijo, da je na voljo nov

podatek. Vsak prejeti znak se shrani v predpomnilnik za nadaljnjo obdelavo. Na začetku

programa je bilo potrebno določiti hitrost komunikacije UART, ki smo jo nastavili na

4800, saj sprejemnik komunicira na hitrosti 4800 baud/s, ter velikost predpomnilnika za

shranjevanje prejetih znakov, ki smo ga nastavili na 120. S tem smo se izognili

prekoračitvi predpomnilnika, saj so stavki NMEA lahko dolgi do 82 znakov.

#define UART1_BAUD (4800)

#define RX_BUFFER_SIZE 120

UART smo pravilno nastavili v funkciji main. PIC32 ima do šest komunikacijskih

kanalov UART, med njimi so tudi kanali UART z moţnostjo rokovanja s podatki. Z

ukazom UARTConfigure določimo uporabo komunikacijskega kanala UART1, z

UART_ENABLE_PINS_TX_RX_ONLY pa določimo osnovno delovanje kanala UART1

brez moţnosti rokovanja s podatki (slika 4.11, vrstica 5). Ko je polnilnik FIFO poln se

izvede prekinitev. Z ukazom UARTSetFifoMode določimo, kdaj naj se prekinitev

izvede. V našem primeru je to, za vsak na novo prejet podatek. S tem se izognemo

prekoračitvi polnilnika FIFO (slika 4.11, vrstica 7).

Page 56: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 41

Slika 4.10: Osnovno delovanje zaslonov potovalnega računalnika

Zaslon 9 Zaslon 8 Zaslon 7

Zaslon 6 Zaslon 5 Zaslon 4 Zaslon 3

Glavni meni Zaslon 2

Zaslon 1

EditBox Potrdi Vnesi

Poraba Hitrost Ura Koordinate

Vklop

Števec

Nazaj

EditBox Litri

EUR

Vnesi

Nazaj Nazaj Nazaj

Vnesi Vnesi

Page 57: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 42

Z ukazom UARTSetLineControl določimo komunikacijski protokol, ki ga zahteva

sprejemnik. Ta je 8-bitov, brez paritete in en stop bit (slika 4.11, vrstica 9). Z ukazom

UARTSetDataRate pa določimo hitrost komunikacije, ki smo jo pred tem nastavili na

4800 baud/s (slika 4.11, vrstica 11). Z ukazom UARTEnable omogočimo komunikacijo

UART1. Z ukazom INTEnable pa določimo, kdaj saj se prekinitev izvaja. V našem

primeru jo izvede priključek U1Rx za vsak prejeti podatek (slika 4.11, vrstica 15).

Potrebno je bilo nastaviti še prioritete UART ISR (slika 4.11, vrstici 17 in 18), prekinitveni

sistem na več-vektorski način (slika 4.11, vrstica 20), ter na koncu klicati funkcijo za

omogočanje prekinitve (slika 4.11, vrstica 22).

Slika 4.11: Konfiguracija UART1

V __ISR(_UART1_VECTOR,ipl2)IntUart1Handler prekinitveni funkciji

določimo spremenljivko SerRx (slika 4.12, vrstica 8), v katero shranjujemo vsak na novo

prejeti znak. Ker nas zanimajo le vrednosti podatkov GPRMC stavka NMEA, je bilo

potrebno določiti začetek in konec stavka NMEA. Zato smo vsak prejeti znak primerjali z

$GPRMC znaki, ter vsebino stavka, s pomočjo RxCtr števca, shranjevali v pomnilnik

rx_buffer. Števec RxCtr ob vsakem prejetem znaku povečujemo za ena (slika 4.12,

vrstica 9) oziroma ga postavimo na nič (slika 4.12, vrstica 16) v primeru, ko prejeti znak ni

enak znaku $, G, P, R, M, C, ali v primeru prekoračitve predpomnilnika

1 mPORTFClearBits(BIT_8);

2 mPORTFSetPinsDigitalOut(BIT_8);

3 mPORTFSetPinsDigitalIn(BIT_2);

4

5 UARTConfigure(UART1, UART_ENABLE_PINS_TX_RX_ONLY);

6

7 UARTSetFifoMode(UART1,UART_INTERRUPT_ON_TX_NOT_FULL|UART_INTERRUPT_ON_RX_NOT_EMPTY);

8

9 UARTSetLineControl(UART1,UART_DATA_SIZE_8_BITS|UART_PARITY_NONE|UART_STOP_BITS_1);

10

11 UARTSetDataRate(UART1, GetPeripheralClock(), UART1_BAUD);

12

13 UARTEnable(UART1,UART_ENABLE_FLAGS(UART_PERIPHERAL|UART_RX|UART_TX));

14

15 INTEnable(INT_U1RX, INT_ENABLED);

16

17 SetPriorityIntU1(UART_INT_PR2);

18 SetSubPriorityIntU1(UART_INT_SUB_PR0);

19

20 INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);

21

22 INTEnableInterrupts();

Page 58: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 43

RX_BUFFER_SIZE. Z zadnjim prejetim znakom GPRMC stavka CR (Carriage Return)

(oziroma 0x0d heksadecimalno), vsebino pomnilnika rx_buffer prestavimo v

pomnilnik gps_buffer, ki ga kasneje uporabimo za obdelavo prejetih podatkov (slika

4.12, vrstice od 52 do 56).

Slika 4.12: Prekinitvena funkcija

1 void __ISR(_UART1_VECTOR, ipl2)IntUart1Handler(void) 2

3 unsigned int SerRx;

4 RSFlag=0;

5 if (mU1RXGetIntFlag())

6

7 IFS0bits.U1RXIF = 0;

8 SerRx = ReadUART1();

9 RxCtr++;

10 switch (RxCtr)

11

12 case 0:

13 if (SerRx=='$')

14 rx_buffer[RxCtr]=SerRx;

15 else

16 RxCtr=0;

17 break;

18 case 1:

19 if (SerRx=='G')

20 rx_buffer[RxCtr]=SerRx;

21 else

22 RxCtr=0;

23 break;

24 case 2:

25 if (SerRx=='P')

26 rx_buffer[RxCtr]=SerRx;

27 else

28 RxCtr=0;

29 break;

30 case 3:

31 if (SerRx=='R')

32 rx_buffer[RxCtr]=SerRx;

33 else

34 RxCtr=0;

35 break;

36 case 4:

37 if (SerRx=='M')

38 rx_buffer[RxCtr]=SerRx;

39 else

40 RxCtr=0;

41 break;

42 case 5:

43 if (SerRx=='C')

44 rx_buffer[RxCtr]=SerRx;

45 else

46 RxCtr=0;

47 break;

48

49 rx_buffer[RxCtr]=SerRx;

50 if (RxCtr == (RX_BUFFER_SIZE-1))

51 RxCtr = 0;

52 if ((SerRx == 0x0d)&&(RxCtr != 0))

53

54 memmove (gps_buffer,rx_buffer,RxCtr);

55 RSFlag = 1;

56

57 mU1RXClearIntFlag();

58

59

Page 59: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 44

4.2.2 Pomoţne funkcije

Namen uporabe pomoţnih funkcij je, da program razdelimo na več manjših

podprogramov. Vsak podprogram oziroma pomoţno funkcijo obravnavamo posebej. S tem

omogočimo boljšo preglednost programa. Funkcije so lahko napisane v poljubnem vrstnem

redu, v eni sami ali več izvornih datotekah. Klic funkcij je lahko kjerkoli v programu.

Funkcija razcleni_nmea se uporablja za razčlenjevanje stavka NMEA. Z ukazom

strtok(niz,",") razčlenimo stavek NMEA (slika 4.14) na podatke, ki so med seboj

ločeni z vejicami. Stavek NMEA je zapisan v formatu ASCII. Da lahko dobljene podatke

pravilno obdelujemo, jih je potrebno pretvoriti v ustrezno obliko. Podatek o uri (slika 4.14,

vrstice od 7 do 9) in datumu (slika 4.14 vrstice od 23 do 25) pretvorimo z ukazom atoi

(ASCII to intiger). Podatek o zemljepisni širini (slika 4.14, vrstice od 11 do 13),

zemljepisni dolţini (slika 4.15, vrstice od 15 do 17) in hitrosti (slika 4.14, vrstice od 19 do

21) pa pretvorimo z ukazom atof (ASCII to float).

IzpisUra funkcijo kličemo pri izpisu časovnih pasov na zaslonu 5 za izpis ure. Razpon

časovnega pasu je od UTC-12 do UTC+14. Na zaslonu se izpiše čas za Slovenijo, ki je v

časovnem pasu UTC+1 (v poletnem času UTC+2), Sydney (Avstralija) UTC+11 (v

zimskem času UTC+10), Shanghai (Kitajska) UTC+8, London (Velika Britanija) UTC (v

poletnem času UTC+1), Moskva (Rusija) UTC+4, Tokyo (Japonska) UTC+9 in Kairo

(Egipt) UTC+2. Slika 4.13 prikazuje zaslon z izpisi točnega časa.

Slika 4.13: Zaslon z izpisom točnega časa

Page 60: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 45

Slika 4.14: Funkcija za razčlenjevanje stavka NMEA

Stavek GPRMC vsebuje podatek o UTC času. S klicem funkcije IzpisUra (slika 4.15)

podatek o času s pomočjo ukaza atoi (slika 4.15, vrstica 7) pretvorimo v celo število

(primer 120529). Ta podatek nato razčlenimo na ure (slika 4.15, vrstica 10), minute (slika

4.15, vrstici 12 in 14) in sekunde (slika 4.15, vrstici 16 in 17), da lahko zapišemo čas v

ţeljeni obliki (12:05:29). Slika 4.16 in slika 4.17 prikazujeta primer programske kode za

izpis časa v Sydney-ju, Avstralija.

Slika 4.15: Funkcija za izpis časa

1 void IzpisUra(char *niz)

2

3 int aus,u_aus,m1_aus,m2_aus,s1_aus,s2_aus,c = 0;

4 int zacasni;

5 if (niz)

6

7 zacasni = atoi (niz);

8 aus = zacasni;

9 aus = aus + 110000;

10 u_aus = aus/10000;

11 aus = aus-(u_aus*10000);

12 m1_aus = aus/1000;

13 aus = aus-(m1_aus*1000);

14 m2_aus = aus/100;

15 aus = aus-(m2_aus*100);

16 s1_aus = aus/10;

17 s2_aus = aus-(s1_aus*10);

18 niz1=0x00;

19

1 int razcleni_nmea (char *niz)

2

3 int ura, datum;

4 float sirina,dolzina, hitrost;

5

6 char *tok = strtok(niz,","); //gprmc

7 tok = strtok(0,","); //utc ura

8 ura = atoi (tok); //pretvorimo v intiger

9 sprintf (UraBuffer,"%d",ura); //shranimo v buffer

10 tok = strtok(0,","); //status

12 sirina = atof (tok); //pretvotimo v float

13 sprintf (ZemljepisnaSirina,"%4.4f",sirina); //shranimo v buffer

14 tok = strtok(0,","); //orientacija1

15 tok = strtok(0,","); //zemljepisna dolzina

16 dolzina = atof (tok); //pretvotimo v float

17 sprintf (ZemljepisnaDolzina,"%4.4f",dolzina); //shranimo v buffer

18 tok = strtok(0,","); //orientacija2

19 tok = strtok(0,","); //hitrost

20 hitrost = atof (tok); //pretvotimo v float

21 sprintf (hitrost_buffer,"%4.7f",hitrost); //shranimo v buffer

22 tok = strtok(0,","); //track

23 tok = strtok(0,","); //datum

24 datum = atoi (tok); //pretvorimo v intiger

25 sprintf (datum_buffer,"%d",datum); //shranimo v buffer

26 tok = strtok(0,","); //magnetic

27 tok = strtok(0,","); //orientacija3

28 tok = strtok(0,","); //mode indicator

29 tok = strtok(0,","); //checksum

30

31

Page 61: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 46

UTC čas se izpisuje od 0 do 23, UTC+11 čas pa se izpisuje od 11 do 34. Kadar je UTC+11

enak 24 (slika 4.16, vrstica 1), smo izpisali vrednost ure 00 (slika 4.16, vrstica 4), če je

vrednost UTC+11 večja od 24 (slika 4.16, vrstica 6), pa smo odšteli 24 (slika 4.16, vrstica

13). Ko je vrednosti UTC+11 enaka 34 (slika 4.16, vrstica 9), smo izpisali vrednost ure 10

(slika 4.16, vrstica 10).

Slika 4.16: Izpis časa za Avstralijo

Funkcijo IzpisDatum kličemo za izpis datuma. Podatek o datumu najprej pretvorimo v

celo število, ki ga nato razčlenimo na dan, mesec in leto. Nato s pomočjo switch stavka

izpisujemo datum v ţeljeni obliki (slika 4.17, slika 4.18).

Slika 4.17: Funkcija za izpis datuma -1-

1 if (u_aus == 24)

2

3 c = 1;

4 sprintf(izpis_sydney,"00:%d%d:%d%d",m1_aus,m2_aus,s1_aus,s2_aus);

5

6 if (u_aus > 24)

7

8 c = 1;

9 if (u_aus == 34)

10 sprintf(izpis_sydney,"10:%d%d:%d%d",m1_aus,m2_aus,s1_aus,s2_aus);

11 else

12

13 u_aus-=24;

14 sprintf(izpis_sydney,"0%d:%d%d:%d%d",u_aus,m1_aus,m2_aus,s1_aus,s2_aus);

15

16

17 if (c == 0)

18 sprintf(izpis_sydney,"%d:%d%d:%d%d",u_aus,m1_aus,m2_aus,s1_aus,s2_aus);

1 void IzpisDatum (char *niz)

2

3 int zacasni;

4 int dan1,dan2,mesec,leto;

5

6 if (niz)

7

8 zacasni = atoi (niz);

9 dan1 = zacasni/100000;

10 zacasni = zacasni-(dan1*100000);

11 dan2 = zacasni/10000;

12 zacasni = zacasni-(dan2*10000);

13 mesec = zacasni/100;

14 zacasni = zacasni-(mesec*100);

15 leto = 2000+zacasni;

16

17 switch (mesec)

18

19 case 1:

20 sprintf 21(izpis_datum1,"%d%d.01.%d",dan1,dan2,leto);

22 break;

23 case 2:

24 sprintf 25(izpis_datum1,"%d%d.02.%d",dan1,dan2,leto);

25 break;

26 case 3:

27 sprintf (izpis_datum1,"%d%d.03.%d",dan1,dan2,leto);

28 break;

29 case 4:

30 sprintf (izpis_datum1,"%d%d.04.%d",dan1,dan2,leto);

31 break;

32 case 5:

33 sprintf (izpis_datum1,"%d%d.05.%d",dan1,dan2,leto);

34 break;

35 case 6:

Page 62: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 47

Slika 4.18: Funkcija za izpis datuma -2-

IzpisUraDatum funkcijo (slika 4.19, slika 4.20) uporabimo za izpis datuma in ure na

zaslonu »Glavni meni«, 3, 4, 5 in 6. niz1 (slika 4.19, vrstica 54) vsebuje podatek o času,

niz2 (slika 4.20 vrstica 71) pa podatek o datumu. Oba podatka najprej razčlenimo, ter ju

nato izpisujemo v ţeljeni obliki. Razčlenjen podatek o datumu s pomočjo switch stavka

izpisujemo tako, da se meseci izpisujejo poimensko. V primeru slabega signala se na

ekranu izpiše NI SIGNALA. Informacijo o signalu dobimo s pomočjo statusnega podatka

stavka GPRMC. Kadar je statusni podatek enak A, pomeni, da je signal aktiven, če pa je

statusni podatek enak V, je signal neaktiven.

20 sprintf 21(izpis_datum1,"%d%d.01.%d",dan1,dan2,leto);

22 break;

23 case 2:

24 sprintf 25(izpis_datum1,"%d%d.02.%d",dan1,dan2,leto);

25 break;

26 case 3:

27 sprintf (izpis_datum1,"%d%d.03.%d",dan1,dan2,leto);

28 break;

29 case 4:

30 sprintf (izpis_datum1,"%d%d.04.%d",dan1,dan2,leto);

31 break;

32 case 5:

33 sprintf (izpis_datum1,"%d%d.05.%d",dan1,dan2,leto);

34 break;

35 case 6:

36 sprintf (izpis_datum1,"%d%d.06.%d",dan1,dan2,leto);

37 break;

38 case 7:

39 sprintf (izpis_datum1,"%d%d.07.%d",dan1,dan2,leto);

40 break;

41 case 8:

42 sprintf (izpis_datum1,"%d%d.08.%d",dan1,dan2,leto);

43 break;

44 case 9:

45 sprintf (izpis_datum1,"%d%d.09.%d",dan1,dan2,leto);

46 break;

47 case 10:

48 sprintf (izpis_datum1,"%d%d.10.%d",dan1,dan2,leto);

49 break;

50 case 11:

51 sprintf (izpis_datum1,"%d%d.11.%d",dan1,dan2,leto);

52 break;

53 case 12:

54 sprintf (izpis_datum1,"%d%d.12.%d",dan1,dan2,leto);

55 break;

56

57 niz=0x00;

58

59

Page 63: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 48

Slika 4.19: Funkcija za izpis datuma in ure -1-

1 void IzpisUraDatum(char *niz1, char *niz2)

2

3 int u1,u2,m1,m2,s1,s2;

4 int zacasni;

5 int dan1,dan2,mesec,leto;

6 int zacasni1;

7

8 if (stevec2 != 0)

9

10 sprintf (izpis_ura," ");

11 sprintf (izpis_datum," ");

12 if (stevec2 == 15)

13 stevec2 = 7;

14 switch (stevec2)

15

16 case 3:

17 sprintf (ni_signala," NI SIGNALA ");

18 break;

19 case 4:

20 sprintf (ni_signala,". NI SIGNALA ");

21 break;

22 case 5:

23 sprintf (ni_signala,".. NI SIGNALA ");

24 break;

25 case 6:

26 sprintf (ni_signala,"... NI SIGNALA ");

27 break;

28 case 7:

29 sprintf (ni_signala,"....NI SIGNALA ");

30 break;

31 case 8:

32 sprintf (ni_signala," ...NI SIGNALA. ");

33 break;

34 case 9:

35 sprintf (ni_signala," ..NI SIGNALA.. ");

36 break;

37 case 10:

38 sprintf (ni_signala," .NI SIGNALA... ");

39 break;

40 case 11:

41 sprintf (ni_signala," NI SIGNALA....");

42 break;

43 case 12:

44 sprintf (ni_signala," .NI SIGNALA... ");

45 break;

46 case 13:

47 sprintf (ni_signala," ..NI SIGNALA.. ");

48 break;

49 case 14:

50 sprintf (ni_signala," ...NI SIGNALA. ");

51 break;

52

53

54 if (niz1)

55

56 zacasni = atoi (niz1);

57 zacasni = zacasni + 10000;

58 u1 = zacasni/100000;

59 zacasni = zacasni-(u1*100000);

60 u2 = zacasni/10000;

61 zacasni = zacasni-(u2*10000);

62 m1 = zacasni/1000;

63 zacasni = zacasni-(m1*1000);

64 m2 = zacasni/100;

65 zacasni = zacasni-(m2*100);

66 s1 = zacasni/10;

67 s2 = zacasni-(s1*10);

68 niz1=0x00;

69 sprintf (izpis_ura,"%d%d:%d%d:%d%d",u1,u2,m1,m2,s1,s2);

70

71 if (niz2)

72

73 zacasni1 = atoi (niz2);

74 dan1 = zacasni1/100000;

75 zacasni1 = zacasni1-(dan1*100000);

76 dan2 = zacasni1/10000;

77 zacasni1 = zacasni1-(dan2*10000);

= zacasni1-(dan1*100000);

dan2 = zacasni1/10000;

zacasni1 = zacasni1-(dan2*10000);

mesec = zacasni1/100;

zacasni1 = zacasni1-(mesec*100);

if (zacasni1 != 97)

Page 64: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 49

Slika 4.20: Funkcija za izpis datuma in ure -2-

Funkcija IzpisHitrostUraDatum je namenjena za izpis podatkov na zaslonu 4 (slika

4.21). Poleg točnega časa in datuma se izpisuje tudi podatek o hitrosti vozila. niz1

70

71 if (niz2)

72

73 zacasni1 = atoi (niz2);

74 dan1 = zacasni1/100000;

75 zacasni1 = zacasni1-(dan1*100000);

76 dan2 = zacasni1/10000;

77 zacasni1 = zacasni1-(dan2*10000);

78 mesec = zacasni1/100;

79 zacasni1 = zacasni1-(mesec*100);

80 if (zacasni1 != 97)

81

82 stevec2 = 0;

83 sprintf (ni_signala," ");

84

85 else

86 stevec2++;

87 leto = 2000+zacasni1;

88

89 switch (mesec)

90

91 case 1:

92 sprintf (izpis_datum,"%d%d. januar %d",dan1,dan2,leto);

93 break;

94 case 2:

95 sprintf (izpis_datum,"%d%d. februar %d",dan1,dan2,leto);

96 break;

97 case 3:

98 sprintf (izpis_datum,"%d%d. marec %d",dan1,dan2,leto);

99 break;

100 case 4:

101 sprintf (izpis_datum,"%d%d. april %d",dan1,dan2,leto);

102 break;

103 case 5:

104 sprintf (izpis_datum,"%d%d. maj %d",dan1,dan2,leto);

105 break;

106 case 6:

107 sprintf (izpis_datum,"%d%d. junij %d",dan1,dan2,leto);

108 break;

109 case 7:

110 sprintf (izpis_datum,"%d%d. julij %d",dan1,dan2,leto);

111 break;

112 case 8:

113 sprintf (izpis_datum,"%d%d. avgust %d",dan1,dan2,leto);

114 break;

115 case 9:

116 sprintf (izpis_datum,"%d%d. september %d",dan1,dan2,leto);

117 break;

118 case 10:

119 sprintf (izpis_datum,"%d%d. oktober %d",dan1,dan2,leto);

120 break;

121 case 11:

122 sprintf (izpis_datum,"%d%d. november %d",dan1,dan2,leto);

123 break;

124 case 12:

125 sprintf (izpis_datum,"%d%d. december %d",dan1,dan2,leto);

126 break;

127

128 niz2=0x00;

126

127

Page 65: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 50

vsebuje podatek o hitrosti, niz2 podatek o času in niz3 podatek o datumu. Slika 4.22

prikazuje programsko kodo za izpis hitrosti. Hitrost se izpisuje v vozlih, zato je potrebno

podatek pretvoriti v kilometre na uro (1 vozel = 1,85200 km/h). Dobimo enačbo 1.

Enačba 1: Izračun hitrosti km/h.

Za izpis prevoţene poti pa je potrebno podatek pretvoriti v metre na sekundo. Tako se

vrednost prevoţene poti vsako sekundo prišteva prejšnji vrednosti prevoţene poti (1 vozel

= 0,5144444444 m/s). Dobimo enačbo 2.

Enačba 2: Izračun hitrosti m/s

Slika 4.21: Zaslon za merjenje hitrosti

Slika 4.22: Funkcija za izpis hitrosti

m 1

s 0,51444

1,9438449

km 1

h 1,85200

0,539956803

1 void IzpisHitrostUraDatum(char *niz1, char *niz2, char *niz3)

2

3 float hitrostkmh, hitrostms;

4 float zacasni;

5 float x = 0.539956803;

6 float y = 1.9438449;

7 int u1,u2,m1,m2,s1,s2;

8 int zacasni2;

9 int dan1,dan2,mesec,leto;

10 int zacasni3;

11 // priprava za izpis UTC ure

12 if (niz1)

13

14 zacasni = atof (niz1);

15 hitrostkmh = zacasni/x;

16 sprintf (izpis_hitrost_kmh,"%4.2f",hitrostkmh);

17 hitrostms = zacasni/y;

18 sprintf (izpis_hitrost_ms,"%4.2f",hitrostms);

19

20

21 niz1=0x00;

22 .

23 .

Page 66: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 51

Funkcijo IzracunPoraba uporabimo za izračun povprečne porabe vozila (slika 4.23),

kjer EditBox1 vsebuje podatek o vneseni količini goriva, stevec_km pa vsebuje

podatek o prevoţenih kilometrih vozila (slika 4.24). Prikaz porabe vozila smo omejili na

najmanj 4 litre na 100 kilometrov in največ 10 litrov na 100 kilometrov. Kar je manj od 4

oziroma več od 10, se smatra kot napaka ali narobe vneseni podatek. Stevec3 šteje

pravilno izračunane rezultate porabe vozila. S tem omogočimo izračun povprečne porabe

vozila po enačbi 3, skupna poraba je vsota vseh pravilno izračunanih porab.

Enačba 3: Izračun porabe.

Slika 4.23: Zaslon za prikaz povprečne porabe vozila

Slika 4.24: Funkcija za izračun porabe

1 void IzracunPoraba ()

2

3 float a,b,c,d;

4 b = atof (EditBox1);

5 c = atof (stevec_km);

6 a = (b/c)*100;

7 if ( (a < 4) || (a > 10))

8

9 if (poraba < 4)

10 sprintf (Izracun,"....");

11 else

12 sprintf (Izracun,"%4.1f",poraba);

13

14 else

15

16 stevec3++;

17 poraba = poraba + a;

18 d = poraba/stevec3;

19 sprintf (Izracun,"%4.1f",d);

20

21

skupna poraba

stevec3

poraba

Page 67: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 52

4.2.3 Funkciji GOLMsgCallback in GOLDrawCallback

Za spremembo stanja objekta (primer, ali je tipka pritisnjena ali ne) je potrebno uporabiti

funkcijo GOLMsgCallback. Za odziv na spremenjeno stanje objekta pa uporabimo

funkcijo GOLDrawCallback. Na primer: identifikacijsko ime tipke Hitrost je BTN_4

(slika 4.25, vrstica 9). V funkciji GOLMsgCallback s pomočjo if stavka opazujemo

spremembo stanja objekta. Ko pride do spremembe, postavimo spremenljivko

tipkaHitrost na 1 (slika 4.25, vrstica 13), ter izberemo objekt xhitrostx (slika

4.25, vrstica 14). Pri izbiri objekta xhitrostx postavimo spremenljivko screen4

(slika 4.25, vrstica 20) na 1. S tem nakaţemo, da se nahajamo na zaslonu 4.

Slika 4.25: Funkcija GOLMsgCallback

V funkciji GOLDrawCallbac pa s pomočjo if stavka opazujemo, ali je spremenljivka

tipkaHitrost na 1 (slika 4.26, vrstica 5). Če je, izrišemo zaslon 4 (slika 4.26, vrstica

7) ter vse uporabljene primitivne objekte za zaslon 4 (črte, statične napise, ipd.) (slika 4.26,

vrstica 8). Po izrisu zaslona 4 postavimo spremenljivki tipkaHitrost (slika 4.26,

vrstica 10) ter screen2 (slika 4.26, vrstica 11) na 0.

Podatki iz sprejemnika se neprestano osveţujejo, zato je bilo potrebno določiti

spremenljivko, na katero se sklicujemo pri izpisu podatkov na zaslonih na katerih se

izpisuje čas. V GOLDraw funkciji kličemo podprogram PrimerjajUra (slika 4.27,

1 WORD GOLMsgCallback(WORD objMsg, OBJ_HEADER *pObj, GOL_MSG *pMsg)

2

3 WORD objectID;

4

5 objectID = GetObjID(pObj);

6

7 GDDDemoGOLMsgCallback(objMsg, pObj, pMsg);

8

9 if (objectID == BTN_4) // tipka Hitrost

10

11 if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

12

13 tipkaHitrost = 1;

14 objectID = xhitrostx;

15

16

17

18 if (objectID == xhitrostx)

19

20 screen4 = 1;

21

22 return (1);

23

Page 68: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 53

vrstice od 11 do 15), v katerem smo ob vsaki spremembi časa (vsako sekundo)

spremenljivko Flag postavili na ena. Vsak zaslon ima svojo spremenljivko Flag. Primer:

zaslon 4 za spremljanje hitrosti ima spremenljivko Flag 2 (slika 4.27, vrstica 24).

Slika 4.26: Funkcija GOLDrawCallback

Slika 4.27: Določitev spremenljivke »Flag«

S sklicem na spremenljivko screen4 izpisujemo podatke na zaslonu 4. Slika 4.28

prikazuje zaslon 4 z vsemi identifikacijskimi imeni statičnih tekstovnih objektov. Z

1 WORD GOLDrawCallback(void)

2

3 GDDDemoGOLDrawCallback();

4

5 if (tipkaHitrost == 1)

6

7 Createscreen4();

8 CreatePrimitivesForscreen4();

9 pogoj=1;

10 tipkaHitrost = 0;

11 screen2 = 0;

12

1 if(GOLDraw()) // Draw GOL object

2

3 TouchGetMsg(&msg); // Get message from touch screen

4 if (RSFlag == 1)

5

6 razcleni_nmea (gps_buffer);

7 razcleni_nmea2 (rx_buffer2);

8 RSFlag=0;

9

10

11 PrimerjajUra (UraBuffer, ura_buffer);

12 PrimerjajUra1 (UraBuffer, ura1_buffer);

13 PrimerjajUra2 (UraBuffer, ura2_buffer);

14 PrimerjajUra3 (UraBuffer, ura3_buffer);

15 PrimerjajUra4 (UraBuffer, ura4_buffer);

16

17

18 void PrimerjajUra2 (char *niz1, char *niz2)

19

20 int a;

21 a = memcmp (niz1, niz2, (unsigned)strlen(niz1));

22 if (a !=0)

23

24 Flag2 = 1;

25 memcpy (niz2, niz1, (unsigned)strlen(niz1));

26

27

Page 69: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 54

ukazom StSetText (slika 4.28, vrstica 6) izberemo objekt, na katerega bomo izpisovali

podatek, z ukazom SetState (slika 4.28, vrstica 7) pa ta podatek zapišemo.

Primer: stanje števca shranimo v pomnilnik editbox3 (slika 4.28, vrstica 5), ki ga nato

izpišemo na objekt STE_194.

Slika 4.28: Izpis podatkov na zaslonu 4

1 if (screen4 == 1)

2

3 if (pogoj == 1)

4

5 editbox3 = EditBox4;

6 StSetText(((STATICTEXT*)(GOLFindObject(STE_194))), editbox3);

7 SetState(((STATICTEXT*)(GOLFindObject(STE_194))), ST_DRAW);

8 pogoj = 0;

9

10 if (Flag2 == 1)

11

12 IzpisHitrostUraDatum(hitrost_buffer, ura2_buffer, datum_buffer);

13 datum = izpis_datum;

14 hitrost_kmh = izpis_hitrost_kmh;

15 ms = atof (izpis_hitrost_ms);

16 pot_izracunana = pot_izracunana + ms;

17 pot_izpisana = pot_izracunana/1000;

18 sprintf(izpis_pot,"%4.2 km",pot_izpisana);

19 pot = izpis_pot;

20

21 StSetText(((STATICTEXT*)(GOLFindObject(STE_46))), ura);

22 SetState(((STATICTEXT*)(GOLFindObject(STE_46))), ST_DRAW);

23 StSetText(((STATICTEXT*)(GOLFindObject(STE_53))), datum);

24 SetState(((STATICTEXT*)(GOLFindObject(STE_53))), ST_DRAW);

25 StSetText(((STATICTEXT*)(GOLFindObject(STE_47))), hitrost_kmh);

26 SetState(((STATICTEXT*)(GOLFindObject(STE_47))), ST_DRAW);

27 StSetText(((STATICTEXT*)(GOLFindObject(STE_195))), pot);

28 SetState(((STATICTEXT*)(GOLFindObject(STE_195))), ST_DRAW);

29 Flag2 = 0;

30

31

screen4

Stanje števca – STE_194

Trenutna pot – STE_195

Merilec hitrosti – STE_47

Datum – STE_53

Ura – STE_46

Page 70: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 55

5 SKLEP

V okviru diplomskega dela smo izdelali prototip potovalnega računalnika z GPS. Pri tem

smo uporabili Microchipove testne ploščice, saj bi bilo v primeru izdelave lastne ploščice

cenovno veliko draţje. Raziskali smo standarde, po katerih podobne naprave komunicirajo

s sateliti GPS in izdelali prototip, ki je sposoben zajemati podatke ter jih ustrezno

prikazovati na prikazovalniku z dotično ploščico. Pri izdelavi programske opreme smo

naleteli na teţave, predvsem pri vzpostavljanju povezave s sprejemnikom, ter pri

odstranjevanju nezaţeljenega utripanja prikazovalnika. Teţave smo uspešno rešili.

Testiranje prototipa potovalnega računalnika z GPS se je izvajalo večkrat. Pri testiranju

smo dobili vse ţeljene podatke. Podatki o uri, datumu, nadmorski višini, zemljepisni širini

in dolţini, ki smo jih prejeli preko sprejemnika GPS so bili pravilni. Vidnih je bilo devet

satelitov. Prototip bi lahko tudi nadgradili z dodatnimi moduli, kot so brezţična

komunikacija z drugimi napravami, dodatne V/I naprave, ki bi lahko izboljšale preglednost

nad vozilom, ter večjim zaslonom za lepši in bolj funkcionalni pregled podatkov.

Dosegli smo vse cilje, ki smo si jih zadali na začetku naloge. Osvojili smo veliko novih

spoznanj na področju programiranja mikrokrmilnikov in navigacije. Podrobneje smo

spoznali delovanje mikrokrmilnika PIC32 ter uporabo grafičnega prikazovalnika na dotik.

Page 71: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 56

6 LITERATURA

[1] The Library of Congress, Science Reference Services, (2011). [Spletni vir].

Dostopno na: http://www.loc.gov/rr/scitech/mysteries/global.html [3.3.2014].

[2] Wikipedia, Transit. [Spletni vir].

Dostopno na: http://en.wikipedia.org/wiki/Transit_%28satellite%29 [3.3.2014].

[3] Steven R. Strom (2002), Charting a Course Toward Global Navigation. [Spletni vir].

Dostopno na:

http://web.archive.org/web/20021101215923/http://www.aero.org/publications/rosslink

ummer2002/01.html. [3.3.2014].

[4] Wikipedia, Global Positioning System. [Spletni vir].

Dostopno na: http://en.wikipedia.org/wiki/Global_Positioning_System#cite_note-15.

[5.3.2014].

[5] Wikipedia, KAL 007. [Spletni vir].

Dostopno na: http://en.wikipedia.org/wiki/Korean_Air_Lines_Flight_007. [3.3.2014].

[6] Mitja Erţen (2008). GPS. Seminar pri Izbranih poglavjih iz uporabne fizike, FRI,

Univerza v Ljubljani. [Spletni vir].

Dostopno na: http://www-f1.ijs.si/~ziherl/GPS.pdf. [5.3.2014].

[7] Anes Durgutović (2005), Izbira in določevanje prostornin nepravilnih teles z uporabo

metode »RTK-GPS«, Diplomsko delo Naravoslovnotehniška fakulteta, Univerza v

Ljubljani. [Spletni vir]. Dostopno na:

http://www.geo.ntf.unilj.si/mvulic/diplome/GRADUATION_THESIS/Durgutovic/Anes

_Durutovic_IZMERA_DOLOcANJE_PROSTORNIN_NEPRAVIL_teles_rtk-gps.pdf.

[3.3.2014].

[8] Wikipedia, GPS signals. [Spletni vir].

Dostopno na: http://en.wikipedia.org/wiki/GPS_signals. [10.3.2014].

[9] Index of Dale DePriest's Navigation and GPS Articles, NMEA data. [Spletni vir].

Dostopno na: http://www.gpsinformation.org/dale/nmea.htm. [10.3.2014].

[10] Purg Damjan (2012), Sledenje vozil z napravo GPS v aplikacijah v okolju.net,

Diplomsko delo, FERI, Univerza v Mariboru. [Spletni vir].

Dostopno na: http://dkum.uni-mb.si/IzpisGradiva.php?id=38015. [10.3.2014].

[11] Raner Simon (2008), Zajemanje in obdelava podatkov navtične navigacijske naprave,

Diplomsko delo, FRI, Univerza v Ljubljani. [Spletni vir].

Dostopno na: http://dkum.ukm.si/Dokument.php?id=6566&lang=slv. [10.3.2014].

[12] Edge of space sciences, PRWIZCH stavek. [Spletni vir].

EDB_56

EDB_98

Page 72: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 57

Dostopno na: http://www.eoss.org/aprs/aprs_formats_eoss.htm. [20.3.2014].

[13] Jupiter GPS receiver module designer's guide, PRWIZCH stavek. [Spletni vir].

Dostopno na:

http://gpsd.berlios.de/vendordocs/jupiter/MN002000A_JupiterReceiver_DesignerGuide_p

rint.pdf. [10.3.2014].

[14] “Jupiter” GPS Receiver TU30-D145-027 Data Sheet. [Spletni vir].

Dostopno na: http://www.gpskit.nl/documents/rockwell/jupiter-gps-board.pdf.

[25.3.2014].

[15] Solomon SSD1926 Image Processor Data Sheet. [Spletni vir].

Dostopno na: http://www.allshore.com/pdf/SSD1926.PDF. [20.3.2014].

[16] MPLAB Integrated Development Enviroment. [Spletni vir]. Dostopno na:

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1408.

[22.3.2014].

[17] Multimedia Expansion Board User's Guide. [Spletni vir].

Dostopno na:

http://ww1.microchip.com/downloads/en/DeviceDoc/Multimedia%20Board%20Users

20Guide%20(DS61160A).pdf. [22.3.2014].

[18] Mladen Mikulić (2012), Izvedba hitre diskretne kosinusne transformacije z vezji FPGA,

Diplomsko delo FERI , Univerza v Mariboru. [Spletni vir].

Dostopno na: http://dkum.uni-mb.si/Dokument.php?id=48336. [22.3.2014].

[19] OK. Now you need a touchscreen. [Spletni vir].

Dostopno na:

http://www.mikroe.com/downloads/get/460/en_mikroe_article_c_avr_01_09.pdf.

[15.4.2014].

[20] PIC32 Starter Kit User's Guide. [Spletni vir].

Dostopno na:

http://www.silica.com/fileadmin/02_Products/Productdetails/Microchip/PIC32_Starter_Ki

ts_Users_Guide.pdf. [15.4.2014].

[21] PIC32MX Family Data Sheet – Section 2. MCU. [Spletni vir].

Dostopno na:

http://eecs.wsu.edu/~aofallon/ee234/handouts/refMaual/PIC32%20Family%20Reference

%20Manual,%20Sect.%2002%20MCU.pdf. [15.4.2014].

[22] PIC32MX Family Data Sheet – Section 6. Oscillators. [Spletni vir].

Dostopno na: http://ww1.microchip.com/downloads/en/DeviceDoc/61112H.pdf.

[15.4.2014].

Page 73: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 58

[23] PIC32MX Family Data Sheet – Section 8. Interrupts. [Spletni vir].

Dostopno na: http://ww1.microchip.com/downloads/en/DeviceDoc/61108G.pdf.

[15.4.2014].

[24] PIC32MX Family Data Sheet – Section 21. UART. [Spletni vir].

Dostopno na: http://ww1.microchip.com/downloads/en/DeviceDoc/61107G.pdf.

[29.4.2014].

[25] NMEA – 2000. [Spletni vir].

Dostopno na: http://en.wikipedia.org/wiki/NMEA_2000. [29.4.2014].

[26] How a GPS Receiver Gets a Lock. [Spletni vir].

Dostopno na: http://www.gpsinformation.net/main/gpslock.htm. [29.4.2014].

[27] How to Use Widgets in Microchip Graphics Library. [Spletni vir].

Dostopno na: http://ww1.microchip.com/downloads/en/AppNotes/01136a.pdf.

[29.4.2014].

Page 74: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 59

7 PRILOGE

7.1 PROGRAMSKA KODA

/*****************************************************************************

* Microchip Graphics Library

* Graphics Display Designer (GDD) Template

*****************************************************************************

* FileName: Main.c

* Processor: PIC24F, PIC24H, dsPIC, PIC32

* Compiler: MPLAB C30/C32

* Company: Microchip Technology Incorporated

*

* Software License Agreement

*

* Copyright © 2010 Microchip Technology Inc. All rights reserved.

* Microchip licenses to you the right to use, modify, copy and distribute

* Software only when embedded on a Microchip microcontroller or digital

* signal controller, which is integrated into your product or third party

* product (pursuant to the sublicense terms in the accompanying license

* agreement).

*

* You should refer to the license agreement accompanying this Software

* for additional information regarding your rights and obligations.

*

* SOFTWARE AND DOCUMENTATION ARE PROVIDED ?AS IS? WITHOUT WARRANTY OF ANY

* KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY

* OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR

* PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR

* OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION,

* BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT

* DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL,

* INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA,

* COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY

* CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF),

* OR OTHER SIMILAR COSTS.

*

* Date Comment

*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*

*****************************************************************************/

#include "Main.h"

#include "GDD_Screens.h"

#define GetSystemClock() (80000000ul)

#define UART1_BAUD (4800)

#define RX_BUFFER_SIZE 120

UXCHAR rx_buffer[RX_BUFFER_SIZE];

UXCHAR rx_buffer2[RX_BUFFER_SIZE];

UXCHAR gps_buffer[RX_BUFFER_SIZE];

UXCHAR ni_signala [33];

UXCHAR UraBuffer[14];

UXCHAR ura_buffer[14]; //screeb2

UXCHAR ura1_buffer[14]; //screen5

UXCHAR ura2_buffer[14]; // screen4

Page 75: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 60

UXCHAR ura3_buffer[14]; //screen3

UXCHAR ura4_buffer[14]; //screen6

UXCHAR izpis_ura[30]; // v vseh screenih

UXCHAR izpis_sydney[30]; //screen5

UXCHAR izpis_shanghai[30]; //screen5

UXCHAR izpis_london[30]; //screen5

UXCHAR izpis_moskva[30]; //screen5

UXCHAR izpis_tokyo[30]; //screen5

UXCHAR izpis_kairo[30]; //screen5

XCHAR *ura; //v vseh screenih

XCHAR *ura_sydney; //screen5

XCHAR *ura_shanghai; //screen5

XCHAR *ura_london; //screen5

XCHAR *ura_moskva; //screen5

XCHAR *ura_tokyo; //screen5

XCHAR *ura_kairo; //screen5

UXCHAR hitrost_buffer[30]; //screen4

UXCHAR izpis_hitrost_kmh[30]; //screen4

UXCHAR izpis_hitrost_ms[30]; //screen4

XCHAR *hitrost_kmh; //screen4

XCHAR *signal; //screen2

UXCHAR StatusBuffer[14];

XCHAR *pot; //screen4

float ms, pot_izracunana,pot_izpisana; //screen4

UXCHAR izpis_pot[30]; //screen4

UXCHAR datum_buffer[14]; //v vseh screenih

UXCHAR izpis_datum[30];

UXCHAR izpis_datum1[30];

UXCHAR ZemljepisnaSirina[30];

UXCHAR ZemljepisnaDolzina[30];

UXCHAR NadmorskaVisina[30];

UXCHAR cena_izracun[30];

XCHAR *cena;

float litri,eur,izracun,poraba;

XCHAR *editbox1;

XCHAR *editbox2;

XCHAR *editbox3;

XCHAR *editbox4;

XCHAR *s9podatek;

XCHAR *s10podatek;

XCHAR *s11podatek;

XCHAR *s12podatek;

UXCHAR EditBox1[30];

UXCHAR EditBox2[30];

UXCHAR EditBox3[30];

UXCHAR EditBox10[30];

UXCHAR EditBox4[30];

UXCHAR stevec_km[30];

EDITBOX *pEb1;

EDITBOX *pEb2;

EDITBOX *pEb3;

EDITBOX *pEb4;

EDITBOX *pEb5;

EDITBOX *pEb6;

EDITBOX *pEb7;

EDITBOX *pEb8;

EDITBOX *pEb9;

EDITBOX *pEb10;

EDITBOX *pEb11;

EDITBOX *pEb12;

EDITBOX *pEb13;

Page 76: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 61

EDITBOX *pEb14;

EDITBOX *pEb15;

int s9 = 0;

int s10 = 0;

int s11 = 0;

int s12 = 0;

int a = 0;

int b = 0;

int c = 0;

int d = 0;

int e = 0;

int f = 0;

int g = 0;

int h = 0;

int i = 0;

int j = 0;

int pogoj = 0;

int pogoj1 = 0;

int stanje1,stanje2,stanje_skupno;

XCHAR *datum;

XCHAR *dolzina;

XCHAR *sirina;

XCHAR *nadmorska;

XCHAR *datum1;

XCHAR *datum2;

XCHAR *datum3;

XCHAR *datum4;

XCHAR *datum5;

XCHAR *kilometri1;

XCHAR *kilometri2;

XCHAR *kilometri3;

XCHAR *kilometri4;

XCHAR *kilometri5;

XCHAR *litri1;

XCHAR *litri2;

XCHAR *litri3;

XCHAR *litri4;

XCHAR *litri5;

int izracun1,izracun11,izracun2,izracun22;

XCHAR *poraba1;

XCHAR *poraba2;

XCHAR *poraba3;

XCHAR *poraba4;

XCHAR *poraba5;

XCHAR *poraba_izracun;

UXCHAR PorabaIzracun[30];

UXCHAR PorabaIzracun_[30];

UXCHAR Izracun[30];

UXCHAR stevecxy[30];

UXCHAR porabaxy[30];

UXCHAR izpis_poraba[30];

UXCHAR izpis_poraba2[30];

UXCHAR izpis_poraba3[30];

UXCHAR izpis_poraba4[30];

UXCHAR izpis_poraba5[30];

UXCHAR izpis_datum2[30];

UXCHAR izpis_datum3[30];

UXCHAR izpis_datum4[30];

UXCHAR izpis_datum5[30];

UXCHAR izpis_kilometri2[30];

UXCHAR izpis_kilometri3[30];

UXCHAR izpis_kilometri4[30];

UXCHAR izpis_kilometri5[30];

UXCHAR izpis_litri2[30];

UXCHAR izpis_litri3[30];

UXCHAR izpis_litri4[30];

UXCHAR izpis_litri5[30];

unsigned int RxCtr=0; // stetje prispelih znakov

unsigned int RxCtr2=0; // stetje prispelih znakov

unsigned char RSFlag=0; // zastavica za signaliziranje, ali je podatek prispel

unsigned char TxCtr=0; // stetje oddajnih znakov

unsigned char TxMaxChr=0; // maksimalno st. znakov ki jih moramo oddati

unsigned int zastavica;

Page 77: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 62

unsigned int Flag;

unsigned int Flag1;

unsigned int Flag2;

unsigned int Flag3;

unsigned int Flag4;

unsigned int DatumFlag;

unsigned int tipkaOK, tipkaPoraba, tipkaHitrost, tipkaUra, tipkaKoordinate, tipkaStroski;

unsigned int tipkaNazaj1, tipkaNazaj2, tipkaNazaj3, tipkaNazaj4, tipkaNazaj5, tipkaNazaj6;

unsigned int vnos, vnos1, vnos2, vnos3, vnos4, vnesi;

unsigned int

s9tipka1,s9tipka2,s9tipka3,s9tipka4,s9tipka5,s9tipka6,s9tipka7,s9tipka8,s9tipka9,s9tipka0;

unsigned int s9tipkaDEL,s9tipkavejica,s9tipkaVnesi;

unsigned int

s10tipka1,s10tipka2,s10tipka3,s10tipka4,s10tipka5,s10tipka6,s10tipka7,s10tipka8,s10tipka9,s

10tipka0;

unsigned int s10tipkaDEL,s10tipkavejica,s10tipkaVnesi;

unsigned int

s11tipka1,s11tipka2,s11tipka3,s11tipka4,s11tipka5,s11tipka6,s11tipka7,s11tipka8,s11tipka9,s

11tipka0;

unsigned int s11tipkaDEL,s11tipkavejica,s11tipkaVnesi;

unsigned int

s12tipka1,s12tipka2,s12tipka3,s12tipka4,s12tipka5,s12tipka6,s12tipka7,s12tipka8,s12tipka9,s

12tipka0;

unsigned int s12tipkaDEL,s12tipkaVnesi;

unsigned int stanje_tipke = 0;

unsigned int screen1 = 0;

unsigned int screen2 = 0;

unsigned int screen3 = 0;

unsigned int screen4 = 0;

unsigned int screen5 = 0;

unsigned int screen6 = 0;

unsigned int screen7 = 0;

unsigned int screen8 = 0;

unsigned int screen9 = 0;

unsigned int screen10 = 0;

unsigned int screen11 = 0;

unsigned int screen12 = 0;

unsigned int stevec = 0;

unsigned int stevec2 = 1;

int stevec3 = 0;

int stanje = 0;

//int a = 0;

void checkForSerialCommand(void);

// Configuration bits

#if defined(__dsPIC33F__) || defined(__PIC24H__)

_FOSCSEL(FNOSC_PRI);

_FOSC(FCKSM_CSECMD &OSCIOFNC_OFF &POSCMD_XT);

_FWDT(FWDTEN_OFF);

#elif defined(__dsPIC33E__) || defined(__PIC24E__)

_FOSCSEL(FNOSC_FRC);

_FOSC(FCKSM_CSECMD & POSCMD_XT & OSCIOFNC_OFF & IOL1WAY_OFF);

_FWDT(FWDTEN_OFF);

_FPOR(FPWRT_PWR128 & BOREN_ON & ALTI2C1_ON & ALTI2C2_ON);

_FICD(ICS_PGD1 & RSTPRI_PF & JTAGEN_OFF);

#elif defined(__PIC32MX__)

#pragma config FPLLODIV = DIV_1, FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FWDTEN = OFF,

FCKSM = CSECME, FPBDIV = DIV_1

#pragma config OSCIOFNC = ON, POSCMOD = XT, FSOSCEN = ON, FNOSC = PRIPLL

#pragma config CP = OFF, BWP = OFF, PWP = OFF

#endif

/////////////////////////////////////////////////////////////////////////////

// SPI Device Initialization Function

/////////////////////////////////////////////////////////////////////////////

#if defined (USE_SST25VF016)

// initialize GFX3 SST25 flash SPI

#define FlashInit(pInitData) SST25Init((DRV_SPI_INIT_DATA*)pInitData)

#elif defined (USE_MCHP25LC256)

// initialize EEPROM on Explorer 16

#define FlashInit(pInitData) MCHP25LC256Init((DRV_SPI_INIT_DATA*)pInitData)

#elif defined (USE_M25P80)

Page 78: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 63

#define FlashInit(pInitData) SST25Init((DRV_SPI_INIT_DATA*)pInitData)

#endif

/////////////////////////////////////////////////////////////////////////////

// SPI Channel settings

/////////////////////////////////////////////////////////////////////////////

#if defined (SPI_CHANNEL_1_ENABLE) || defined (SPI_CHANNEL_2_ENABLE) || defined

(SPI_CHANNEL_3_ENABLE) || defined (SPI_CHANNEL_4_ENABLE)

#if defined (USE_SST25VF016)

#ifdef __PIC32MX

const DRV_SPI_INIT_DATA SPI_Init_Data = SST25_SPI_CHANNEL, 1, 0, 0, 1, 1, 0;

#ifdef USE_TOUCHSCREEN_AR1020

const DRV_SPI_INIT_DATA ar1020SpiInit = AR1020_SPI_CHANNEL, 44, 0, 0,

0, 0, 0;

#endif

#else

const DRV_SPI_INIT_DATA SPI_Init_Data = SST25_SPI_CHANNEL, 3, 6, 0, 1, 1, 0;

#ifdef USE_TOUCHSCREEN_AR1020

const DRV_SPI_INIT_DATA ar1020SpiInit = AR1020_SPI_CHANNEL, 2, 3, 0,

0, 0, 0;

#endif

#endif

#elif defined (USE_MCHP25LC256)

const DRV_SPI_INIT_DATA SPI_Init_Data = MCHP25LC256_SPI_CHANNEL, 6, 3, 0, 1, 1,

0;

#elif defined (USE_M25P80)

const DRV_SPI_INIT_DATA SPI_Init_Data = SST25_SPI_CHANNEL, 3, 6, 0, 1, 1, 0;

#endif

#endif

/////////////////////////////////////////////////////////////////////////////

// TouchScreen Init Values

/////////////////////////////////////////////////////////////////////////////

#ifdef USE_TOUCHSCREEN_RESISTIVE

#define TOUCH_INIT_VALUES (NULL)

#endif

#ifdef USE_TOUCHSCREEN_AR1020

#define TOUCH_INIT_VALUES ((void *)&ar1020SpiInit)

#endif

/////////////////////////////////////////////////////////////////////////////

// LOCAL PROTOTYPES

/////////////////////////////////////////////////////////////////////////////

void TickInit(void); // starts tick counter

void InitializeBoard(void);

int razcleni_nmea (char *niz);

int razcleni_nmea2 (char *niz);

void IzpisUra(char *niz);

void IzpisDatum (char *niz);

void IzpisPoraba ();

void IzracunPoraba ();

void IzpisUraDatum(char *niz1, char *niz2);

void PrekopirajBuffer (char *niz1, char *niz2);

void PrimerjajUra (char *niz1, char *niz2);

void PrimerjajUra1 (char *niz1, char *niz2);

void PrimerjajUra2 (char *niz1, char *niz2);

void PrimerjajUra3 (char *niz1, char *niz2);

void PrimerjajUra4 (char *niz1, char *niz2);

void IzpisHitrostUraDatum(char *niz1, char *niz2, char *niz3);

//typedef enum START_WAIT, RECEIVING, MSG_RECEIVED state = START_WAIT;

/* */

int main(void)

mPORTFClearBits(BIT_8);

mPORTFSetPinsDigitalOut(BIT_8);

mPORTFSetPinsDigitalIn(BIT_2);

// nastavitve za UART1 - 4800-N-8-1, brez RTS in CTS (handshake)

UARTConfigure(UART1, UART_ENABLE_PINS_TX_RX_ONLY);

UARTSetFifoMode(UART1, UART_INTERRUPT_ON_TX_NOT_FULL|UART_INTERRUPT_ON_RX_NOT_EMPTY);

UARTSetLineControl(UART1, UART_DATA_SIZE_8_BITS|UART_PARITY_NONE|UART_STOP_BITS_1);

Page 79: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 64

UARTSetDataRate(UART1, GetPeripheralClock(), UART1_BAUD);

UARTEnable(UART1, UART_ENABLE_FLAGS(UART_PERIPHERAL|UART_RX|UART_TX));

// prekinitve za Rx in Tx

INTEnable(INT_U1RX, INT_ENABLED);

INTEnable(INT_U1TX, INT_DISABLED);

// nastavitev UART ISR prioritete

SetPriorityIntU1(UART_INT_PR2);

SetSubPriorityIntU1(UART_INT_SUB_PR0);

// nastavitev sistema na mulit-vektorski nacin

INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);

// omogoci prekinitve

INTEnableInterrupts();

GOL_MSG msg; // GOL message structure to interact with GOL

InitializeBoard();

GDDDemoCreateFirstScreen();

while(1)

//razcleni_nmea (rx_buffer);

//izpis_podatkov();

if(GOLDraw()) // Draw GOL object

TouchGetMsg(&msg); // Get message from touch screen

if (RSFlag == 1)

razcleni_nmea (gps_buffer);

razcleni_nmea2 (rx_buffer2);

//PrekopirajBuffer (gps_buffer, rmc_buffer);

RSFlag=0;

//razcleni_nmea (rmc_buffer);

PrimerjajUra (UraBuffer, ura_buffer);

PrimerjajUra1 (UraBuffer, ura1_buffer);

PrimerjajUra2 (UraBuffer, ura2_buffer);

PrimerjajUra3 (UraBuffer, ura3_buffer);

PrimerjajUra4 (UraBuffer, ura4_buffer);

//PrimerjajDatum (datum1_buffer, datum_buffer);

//PrekopirajBuffer (ura1_buffer, ura_buffer);

//PrekopirajBuffer (datum1_buffer, datum_buffer);

#if (NUM_GDD_SCREENS > 1)

// GDD Readme:

// The following line of code allows a GDD user to touch the touchscreen

// to cycle through different static screens for viewing. This is useful as a

// quick way to view how each screen looks on the physical target hardware.

// This line of code should eventually be commented out for actual development.

// Also note that widget/object names can be found in GDD_Screens.h

//if(msg.uiEvent == EVENT_RELEASE) GDDDemoNextScreen();

#endif

GOLMsg(&msg); // Process message

//end while

/////////////////////////////////////////////////////////////////////////////

// Function: WORD GOLMsgCallback(WORD objMsg, OBJ_HEADER* pObj, GOL_MSG* pMsg)

// Input: objMsg - translated message for the object,

// pObj - pointer to the object,

// pMsg - pointer to the non-translated, raw GOL message

// Output: if the function returns non-zero the message will be processed by default

// Overview: it's a user defined function. GOLMsg() function calls it each

// time the valid message for the object received

Page 80: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 65

/////////////////////////////////////////////////////////////////////////////

WORD GOLMsgCallback(WORD objMsg, OBJ_HEADER *pObj, GOL_MSG *pMsg)

WORD objectID;

objectID = GetObjID(pObj);

GDDDemoGOLMsgCallback(objMsg, pObj, pMsg);

// Add additional code here...

if (objectID == BTN_1) // tipka OK

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

tipkaOK = 1;

objectID = xmenuex;

if (objectID == BTN_3) // tipka Poraba

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

tipkaPoraba = 1;

objectID = xporabax;

if (objectID == BTN_11) // tipka Nazaj

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

tipkaNazaj1 = 1;

objectID = xmenuex;

if (objectID == EDB_66) // editbox za vnos

if(objMsg == EB_MSG_TOUCHSCREEN) // ali je bila pritisnjena

vnos = 1;

stevec++;

if (objectID == EDB_56) // editbox za vnos

if(objMsg == EB_MSG_TOUCHSCREEN) // ali je bila pritisnjena

vnos1 = 1;

objectID = xvpis2x;

if (objectID == EDB_98) // editbox za vnos

if(objMsg == EB_MSG_TOUCHSCREEN) // ali je bila pritisnjena

vnos2 = 1;

objectID = xvpis3x;

if (objectID == EDB_218) // editbox za vnos

if(objMsg == EB_MSG_TOUCHSCREEN) // ali je bila pritisnjena

vnos4 = 1;

objectID = xvpis5x;

if (objectID == BTN_108) // tipka za vrnitev na screen3

Page 81: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 66

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

vnesi = 1;

objectID = xporabax;

if (objectID == BTN_126) // tipka za vnos stevilke 1 v screen9

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s9tipka1 = 1;

//objectID = xvpis2x;

if (objectID == BTN_127) // tipka za vnos stevilke 2 v screen9

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s9tipka2 = 1;

//objectID = xvpis2x;

if (objectID == BTN_128) // tipka za vnos stevilke 3 v screen9

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s9tipka3 = 1;

//objectID = xvpis2x;

if (objectID == BTN_129) // tipka za vnos stevilke 4 v screen9

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s9tipka4 = 1;

//objectID = xvpis2x;

if (objectID == BTN_130) // tipka za vnos stevilke 5 v screen9

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s9tipka5 = 1;

//objectID = xvpis2x;

if (objectID == BTN_131) // tipka za vnos stevilke 6 v screen9

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s9tipka6 = 1;

//objectID = xvpis2x;

if (objectID == BTN_132) // tipka za vnos stevilke 7 v screen9

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s9tipka7 = 1;

//objectID = xvpis2x;

if (objectID == BTN_133) // tipka za vnos stevilke 8 v screen9

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

Page 82: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 67

s9tipka8 = 1;

//objectID = xvpis2x;

if (objectID == BTN_134) // tipka za vnos stevilke 9 v screen9

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s9tipka9 = 1;

//objectID = xvpis2x;

if (objectID == BTN_135) // tipka za vnos stevilke 0 v screen9

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s9tipka0 = 1;

//objectID = xvpis2x;

if (objectID == BTN_136) // tipka za vnos vejice v screen9

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s9tipkavejica = 1;

//objectID = xvpis2x;

if (objectID == BTN_137) // tipka za brisanje v screen9

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s9tipkaDEL = 1;

//objectID = xvpis2x;

if (objectID == BTN_138) // tipka za vnos podatkov v screen9 in skoci

na screen8

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s9tipkaVnesi = 1;

objectID = xvpis1x;

//objectID = xvpis2x;

if (objectID == BTN_153) // tipka za vnos stevilke 1 v screen10

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s10tipka1 = 1;

//objectID = xvpis2x;

if (objectID == BTN_154) // tipka za vnos stevilke 2 v screen10

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s10tipka2 = 1;

//objectID = xvpis2x;

if (objectID == BTN_155) // tipka za vnos stevilke 3 v screen10

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

Page 83: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 68

s10tipka3 = 1;

//objectID = xvpis2x;

if (objectID == BTN_156) // tipka za vnos stevilke 4 v screen10

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s10tipka4 = 1;

//objectID = xvpis2x;

if (objectID == BTN_157) // tipka za vnos stevilke 5 v screen10

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s10tipka5 = 1;

//objectID = xvpis2x;

if (objectID == BTN_158) // tipka za vnos stevilke 6 v screen10

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s10tipka6 = 1;

//objectID = xvpis2x;

if (objectID == BTN_159) // tipka za vnos stevilke 7 v screen10

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s10tipka7 = 1;

//objectID = xvpis2x;

if (objectID == BTN_160) // tipka za vnos stevilke 8 v screen10

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s10tipka8 = 1;

//objectID = xvpis2x;

if (objectID == BTN_161) // tipka za vnos stevilke 9 v screen10

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s10tipka9 = 1;

//objectID = xvpis2x;

if (objectID == BTN_162) // tipka za vnos stevilke 0 v screen10

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s10tipka0 = 1;

//objectID = xvpis2x;

if (objectID == BTN_163) // tipka za vnos vejice v screen10

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s10tipkavejica = 1;

Page 84: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 69

//objectID = xvpis2x;

if (objectID == BTN_164) // tipka za brisanje v screen10

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s10tipkaDEL = 1;

//objectID = xvpis2x;

if (objectID == BTN_165) // tipka za vnos podatkov v screen10 in

skoci na screen8

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s10tipkaVnesi = 1;

objectID = xvpis1x;

//objectID = xvpis2x;

if (objectID == BTN_206) // tipka za vnos stevilke 1 v screen12

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s12tipka1 = 1;

//objectID = xvpis2x;

if (objectID == BTN_207) // tipka za vnos stevilke 2 v screen12

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s12tipka2 = 1;

//objectID = xvpis2x;

if (objectID == BTN_208) // tipka za vnos stevilke 3 v screen12

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s12tipka3 = 1;

//objectID = xvpis2x;

if (objectID == BTN_209) // tipka za vnos stevilke 4 v screen12

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s12tipka4 = 1;

//objectID = xvpis2x;

if (objectID == BTN_210) // tipka za vnos stevilke 5 v screen12

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s12tipka5 = 1;

//objectID = xvpis2x;

if (objectID == BTN_211) // tipka za vnos stevilke 6 v screen12

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

Page 85: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 70

s12tipka6 = 1;

//objectID = xvpis2x;

if (objectID == BTN_212) // tipka za vnos stevilke 7 v screen12

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s12tipka7 = 1;

//objectID = xvpis2x;

if (objectID == BTN_213) // tipka za vnos stevilke 8 v screen12

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s12tipka8 = 1;

//objectID = xvpis2x;

if (objectID == BTN_214) // tipka za vnos stevilke 9 v screen12

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s12tipka9 = 1;

//objectID = xvpis2x;

if (objectID == BTN_215) // tipka za vnos stevilke 0 v screen12

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s12tipka0 = 1;

//objectID = xvpis2x;

if (objectID == BTN_217) // tipka za brisanje v screen12

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s12tipkaDEL = 1;

//objectID = xvpis2x;

if (objectID == BTN_232) // tipka za vnos podatkov v screen12 in

skoci na screen8

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

s12tipkaVnesi = 1;

objectID = xstevecx;

//objectID = xvpis2x;

if (objectID == BTN_4) // tipka Hitrost

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

tipkaHitrost = 1;

objectID = xhitrostx;

if (objectID == BTN_12) // tipka Nazaj

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

Page 86: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 71

tipkaNazaj2 = 1;

objectID = xmenuex;

if (objectID == BTN_5) // tipka Ura

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

tipkaUra = 1;

objectID = xurax;

if (objectID == BTN_34) // tipka Nazaj

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

tipkaNazaj3 = 1;

objectID = xmenuex;

if (objectID == BTN_6) // tipka Koordinate

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

tipkaKoordinate = 1;

objectID = xkoordinatex;

if (objectID == BTN_36) // tipka Nazaj

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

tipkaNazaj4 = 1;

objectID = xmenuex;

if (objectID == BTN_7) // tipka Stroski

if(objMsg == BTN_MSG_RELEASED) // ali je bila pritisnjena

tipkaStroski = 1;

objectID = xstevecx;

if (objectID == xmenuex)

screen2 = 1;

if (objectID == xporabax)

screen3 = 1;

if (objectID == xhitrostx)

screen4 = 1;

if (objectID == xurax)

screen5 = 1;

if (objectID == xkoordinatex)

screen6 = 1;

Page 87: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 72

if (objectID == xvpis1x)

screen8 = 1;

if (objectID == xvpis2x)

screen9 = 1;

if (objectID == xvpis3x)

screen10 = 1;

if (objectID == xvpis5x)

screen12 = 1;

if (objectID == xstevecx)

screen1 = 1;

return (1);

/////////////////////////////////////////////////////////////////////////////

// Function: WORD GOLDrawCallback()

// Output: if the function returns non-zero the draw control will be passed to GOL

// Overview: it's a user defined function. GOLDraw() function calls it each

// time when GOL objects drawing is completed. User drawing should be done here.

// GOL will not change color, line type and clipping region settings while

// this function returns zero.

/////////////////////////////////////////////////////////////////////////////

WORD GOLDrawCallback(void)

GDDDemoGOLDrawCallback();

// Add additional code here...

if (tipkaOK == 1)

Createscreen2();

tipkaOK = 0;

screen1 = 0;

if (tipkaPoraba == 1)

Createscreen3();

CreatePrimitivesForscreen3();

pogoj1=1;

tipkaPoraba = 0;

screen2 = 0;

if (tipkaNazaj1 == 1)

Createscreen2();

tipkaNazaj1 = 0;

screen3 = 0;

if (vnos == 1)

Createscreen8();

Page 88: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 73

CreatePrimitivesForscreen8();

vnos = 0;

screen3 = 0;

switch (stevec)

case 1:

break;

case 2:

memcpy (izpis_datum2,izpis_datum1,30);

memcpy (izpis_kilometri2,stevec_km,30);

memcpy (izpis_litri2,EditBox1,30);

memcpy (izpis_poraba2,izpis_poraba,30);

break;

case 3:

memcpy (izpis_datum3,izpis_datum2,30);

memcpy (izpis_kilometri3,izpis_kilometri2,30);

memcpy (izpis_litri3,izpis_litri2,30);

memcpy (izpis_poraba3,izpis_poraba2,30);

memcpy (izpis_datum2,izpis_datum1,30);

memcpy (izpis_kilometri2,stevec_km,30);

memcpy (izpis_litri2,EditBox1,30);

memcpy (izpis_poraba2,izpis_poraba,30);

break;

case 4:

memcpy (izpis_datum4,izpis_datum3,30);

memcpy (izpis_kilometri4,izpis_kilometri3,30);

memcpy (izpis_litri4,izpis_litri3,30);

memcpy (izpis_poraba4,izpis_poraba3,30);

memcpy (izpis_datum3,izpis_datum2,30);

memcpy (izpis_kilometri3,izpis_kilometri2,30);

memcpy (izpis_litri3,izpis_litri2,30);

memcpy (izpis_poraba3,izpis_poraba2,30);

memcpy (izpis_datum2,izpis_datum1,30);

memcpy (izpis_kilometri2,stevec_km,30);

memcpy (izpis_litri2,EditBox1,30);

memcpy (izpis_poraba2,izpis_poraba,30);

break;

case 5:

memcpy (izpis_datum5,izpis_datum4,30);

memcpy (izpis_kilometri5,izpis_kilometri4,30);

memcpy (izpis_litri5,izpis_litri4,30);

memcpy (izpis_poraba5,izpis_poraba4,30);

memcpy (izpis_datum4,izpis_datum3,30);

memcpy (izpis_kilometri4,izpis_kilometri3,30);

memcpy (izpis_litri4,izpis_litri3,30);

memcpy (izpis_poraba4,izpis_poraba3,30);

memcpy (izpis_datum3,izpis_datum2,30);

memcpy (izpis_kilometri3,izpis_kilometri2,30);

memcpy (izpis_litri3,izpis_litri2,30);

memcpy (izpis_poraba3,izpis_poraba2,30);

memcpy (izpis_datum2,izpis_datum1,30);

memcpy (izpis_kilometri2,stevec_km,30);

memcpy (izpis_litri2,EditBox1,30);

memcpy (izpis_poraba2,izpis_poraba,30);

break;

if (vnos1 == 1)

Createscreen9();

CreatePrimitivesForscreen9();

vnos1 = 0;

screen8 = 0;

a = 1;

if (vnos2 == 1)

Page 89: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 74

Createscreen10();

CreatePrimitivesForscreen10();

vnos2 = 0;

screen8 = 0;

b = 1;

if (vnos4 == 1)

Createscreen12();

vnos4 = 0;

screen1 = 0;

d = 1;

if (vnesi == 1)

pogoj1=1;

sprintf (EditBox1,"%s L",EditBox1);

stanje1 = atoi(EditBox10);

stanje2 = atoi(EditBox4);

if (stanje1 == stanje2)

sprintf (stevec_km,"%d km",stanje2);

if (stanje1 > stanje2)

sprintf (stevec_km,"NAPAKA");

if (stanje1 < stanje2)

stanje_skupno = stanje2-stanje1;

sprintf (stevec_km,"%d km",stanje_skupno);

if (stanje1 == 0)

sprintf (stevec_km,"%d km",stanje2);

memcpy (EditBox10,EditBox4,30);

IzracunPoraba();

poraba_izracun = Izracun;

vnesi = 0;

s9=0;

s10=0;

s11=0;

s12=0;

screen8 = 0;

if (stevec == 5)

stevec = 4;

Createscreen3();

CreatePrimitivesForscreen3();

if (s9tipka1 == 1)

pEb1 = (EDITBOX*)GOLFindObject(EDB_109);

EbAddChar(pEb1,'1');

SetState(pEb1, EB_DRAW);

s9tipka1 = 0;

//screen8 = 0;

if (s9tipka2 == 1)

pEb1 = (EDITBOX*)GOLFindObject(EDB_109);

EbAddChar(pEb1,'2');

SetState(pEb1, EB_DRAW);

s9tipka2 = 0;

//screen8 = 0;

if (s9tipka3 == 1)

pEb1 = (EDITBOX*)GOLFindObject(EDB_109);

EbAddChar(pEb1,'3');

SetState(pEb1, EB_DRAW);

s9tipka3 = 0;

//screen8 = 0;

Page 90: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 75

if (s9tipka4 == 1)

pEb1 = (EDITBOX*)GOLFindObject(EDB_109);

EbAddChar(pEb1,'4');

SetState(pEb1, EB_DRAW);

s9tipka4 = 0;

//screen8 = 0;

if (s9tipka5 == 1)

pEb1 = (EDITBOX*)GOLFindObject(EDB_109);

EbAddChar(pEb1,'5');

SetState(pEb1, EB_DRAW);

s9tipka5 = 0;

//screen8 = 0;

if (s9tipka6 == 1)

pEb1 = (EDITBOX*)GOLFindObject(EDB_109);

EbAddChar(pEb1,'6');

SetState(pEb1, EB_DRAW);

s9tipka6 = 0;

//screen8 = 0;

if (s9tipka7 == 1)

pEb1 = (EDITBOX*)GOLFindObject(EDB_109);

EbAddChar(pEb1,'7');

SetState(pEb1, EB_DRAW);

s9tipka7 = 0;

//screen8 = 0;

if (s9tipka8 == 1)

pEb1 = (EDITBOX*)GOLFindObject(EDB_109);

EbAddChar(pEb1,'8');

SetState(pEb1, EB_DRAW);

s9tipka8 = 0;

//screen8 = 0;

if (s9tipka9 == 1)

pEb1 = (EDITBOX*)GOLFindObject(EDB_109);

EbAddChar(pEb1,'9');

SetState(pEb1, EB_DRAW);

s9tipka9 = 0;

//screen8 = 0;

if (s9tipka0 == 1)

pEb1 = (EDITBOX*)GOLFindObject(EDB_109);

EbAddChar(pEb1,'0');

SetState(pEb1, EB_DRAW);

s9tipka0 = 0;

//screen8 = 0;

if (s9tipkavejica == 1)

pEb1 = (EDITBOX*)GOLFindObject(EDB_109);

EbAddChar(pEb1,',');

SetState(pEb1, EB_DRAW);

s9tipkavejica = 0;

//screen8 = 0;

if (s9tipkaDEL == 1)

Page 91: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 76

pEb1 = (EDITBOX*)GOLFindObject(EDB_109);

EbDeleteChar(pEb1);

SetState(pEb1, EB_DRAW);

s9tipkaDEL = 0;

if (s9tipkaVnesi == 1)

EbGetText (pEb1);

s9podatek = pEb1->pBuffer;

sprintf (EditBox1,"%s",s9podatek);

s9 = 1;

Createscreen8();

CreatePrimitivesForscreen8();

screen9 = 0;

s9tipkaVnesi = 0;

e = 1;

if (s10tipka1 == 1)

pEb2 = (EDITBOX*)GOLFindObject(EDB_148);

EbAddChar(pEb2,'1');

SetState(pEb2, EB_DRAW);

s10tipka1 = 0;

//screen8 = 0;

if (s10tipka2 == 1)

pEb2 = (EDITBOX*)GOLFindObject(EDB_148);

EbAddChar(pEb2,'2');

SetState(pEb2, EB_DRAW);

s10tipka2 = 0;

//screen8 = 0;

if (s10tipka3 == 1)

pEb2 = (EDITBOX*)GOLFindObject(EDB_148);

EbAddChar(pEb2,'3');

SetState(pEb2, EB_DRAW);

s10tipka3 = 0;

//screen8 = 0;

if (s10tipka4 == 1)

pEb2 = (EDITBOX*)GOLFindObject(EDB_148);

EbAddChar(pEb2,'4');

SetState(pEb2, EB_DRAW);

s10tipka4 = 0;

//screen8 = 0;

if (s10tipka5 == 1)

pEb2 = (EDITBOX*)GOLFindObject(EDB_148);

EbAddChar(pEb2,'5');

SetState(pEb2, EB_DRAW);

s10tipka5 = 0;

//screen8 = 0;

if (s10tipka6 == 1)

pEb2 = (EDITBOX*)GOLFindObject(EDB_148);

EbAddChar(pEb2,'6');

SetState(pEb2, EB_DRAW);

s10tipka6 = 0;

//screen8 = 0;

if (s10tipka7 == 1)

Page 92: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 77

pEb2 = (EDITBOX*)GOLFindObject(EDB_148);

EbAddChar(pEb2,'7');

SetState(pEb2, EB_DRAW);

s10tipka7 = 0;

//screen8 = 0;

if (s10tipka8 == 1)

pEb2 = (EDITBOX*)GOLFindObject(EDB_148);

EbAddChar(pEb2,'8');

SetState(pEb2, EB_DRAW);

s10tipka8 = 0;

//screen8 = 0;

if (s10tipka9 == 1)

pEb2 = (EDITBOX*)GOLFindObject(EDB_148);

EbAddChar(pEb2,'9');

SetState(pEb2, EB_DRAW);

s10tipka9 = 0;

//screen8 = 0;

if (s10tipka0 == 1)

pEb2 = (EDITBOX*)GOLFindObject(EDB_148);

EbAddChar(pEb2,'0');

SetState(pEb2, EB_DRAW);

s10tipka0 = 0;

//screen8 = 0;

if (s10tipkavejica == 1)

pEb2 = (EDITBOX*)GOLFindObject(EDB_148);

EbAddChar(pEb2,',');

SetState(pEb2, EB_DRAW);

s10tipkavejica = 0;

//screen8 = 0;

if (s10tipkaDEL == 1)

pEb2 = (EDITBOX*)GOLFindObject(EDB_148);

EbDeleteChar(pEb2);

SetState(pEb2, EB_DRAW);

s10tipkaDEL = 0;

if (s10tipkaVnesi == 1)

EbGetText (pEb2);

s10podatek = pEb2->pBuffer;

sprintf (EditBox2,"%s",s10podatek);

s10 = 1;

Createscreen8();

CreatePrimitivesForscreen8();

screen10 = 0;

s10tipkaVnesi = 0;

e = 1;

if (s12tipka1 == 1)

pEb4 = (EDITBOX*)GOLFindObject(EDB_204);

EbAddChar(pEb4,'1');

SetState(pEb4, EB_DRAW);

s12tipka1 = 0;

//screen8 = 0;

if (s12tipka2 == 1)

Page 93: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 78

pEb4 = (EDITBOX*)GOLFindObject(EDB_204);

EbAddChar(pEb4,'2');

SetState(pEb4, EB_DRAW);

s12tipka2 = 0;

//screen8 = 0;

if (s12tipka3 == 1)

pEb4 = (EDITBOX*)GOLFindObject(EDB_204);

EbAddChar(pEb4,'3');

SetState(pEb4, EB_DRAW);

s12tipka3 = 0;

//screen8 = 0;

if (s12tipka4 == 1)

pEb4 = (EDITBOX*)GOLFindObject(EDB_204);

EbAddChar(pEb4,'4');

SetState(pEb4, EB_DRAW);

s12tipka4 = 0;

//screen8 = 0;

if (s12tipka5 == 1)

pEb4 = (EDITBOX*)GOLFindObject(EDB_204);

EbAddChar(pEb4,'5');

SetState(pEb4, EB_DRAW);

s12tipka5 = 0;

//screen8 = 0;

if (s12tipka6 == 1)

pEb4 = (EDITBOX*)GOLFindObject(EDB_204);

EbAddChar(pEb4,'6');

SetState(pEb4, EB_DRAW);

s12tipka6 = 0;

//screen8 = 0;

if (s12tipka7 == 1)

pEb4 = (EDITBOX*)GOLFindObject(EDB_204);

EbAddChar(pEb4,'7');

SetState(pEb4, EB_DRAW);

s12tipka7 = 0;

//screen8 = 0;

if (s12tipka8 == 1)

pEb4 = (EDITBOX*)GOLFindObject(EDB_204);

EbAddChar(pEb4,'8');

SetState(pEb4, EB_DRAW);

s12tipka8 = 0;

//screen8 = 0;

if (s12tipka9 == 1)

pEb4 = (EDITBOX*)GOLFindObject(EDB_204);

EbAddChar(pEb4,'9');

SetState(pEb4, EB_DRAW);

s12tipka9 = 0;

//screen8 = 0;

if (s12tipka0 == 1)

pEb2 = (EDITBOX*)GOLFindObject(EDB_204);

EbAddChar(pEb4,'0');

SetState(pEb4, EB_DRAW);

s12tipka0 = 0;

Page 94: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 79

//screen8 = 0;

if (s12tipkaDEL == 1)

pEb4 = (EDITBOX*)GOLFindObject(EDB_204);

EbDeleteChar(pEb4);

SetState(pEb4, EB_DRAW);

s12tipkaDEL = 0;

if (s12tipkaVnesi == 1)

EbGetText (pEb4);

s12podatek = pEb4->pBuffer;

sprintf (EditBox4,"%s",s12podatek);

s12 = 1;

Createscreen1();

screen12 = 0;

s12tipkaVnesi = 0;

f = 1;

if (tipkaStroski == 1)

Createscreen1();

tipkaStroski = 0;

f=1;

s12=1;

screen2 = 0;

if (tipkaHitrost == 1)

Createscreen4();

CreatePrimitivesForscreen4();

tipkaHitrost = 0;

pogoj = 1;

screen2 = 0;

if (tipkaNazaj2 == 1)

Createscreen2();

tipkaNazaj2 = 0;

screen4 = 0;

if (tipkaUra == 1)

Createscreen5();

CreatePrimitivesForscreen5();

tipkaUra = 0;

screen2 = 0;

if (tipkaNazaj3 == 1)

Createscreen2();

tipkaNazaj3 = 0;

screen5 = 0;

if (tipkaKoordinate == 1)

Createscreen6();

CreatePrimitivesForscreen6();

tipkaKoordinate = 0;

screen2 = 0;

if (tipkaNazaj4 == 1)

Createscreen2();

Page 95: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 80

tipkaNazaj4 = 0;

screen6 = 0;

if (screen1 == 1)

if (f == 1)

if (s12 == 1)

editbox4 = EditBox4;

pEb12 = (EDITBOX*)GOLFindObject(EDB_218);

EbSetText (pEb12,editbox4);

SetState(pEb12, EB_DRAW);

//s10 = 0;

f = 0;

if (screen8 == 1)

if (e == 1)

if (s9 == 1)

editbox1 = EditBox1;

pEb5 = (EDITBOX*)GOLFindObject(EDB_56);

EbSetText (pEb5,editbox1);

SetState(pEb5, EB_DRAW);

//s9 = 0;

if (s10 == 1)

editbox2 = EditBox2;

pEb6 = (EDITBOX*)GOLFindObject(EDB_98);

EbSetText (pEb6,editbox2);

SetState(pEb6, EB_DRAW);

//s10 = 0;

eur = atof (EditBox2);

litri = atof (EditBox1);

izracun = eur/litri;

sprintf (cena_izracun,"%4.2f",izracun);

cena = cena_izracun;

StSetText(((STATICTEXT*)(GOLFindObject(STE_233))), cena);

SetState(((STATICTEXT*)(GOLFindObject(STE_233))), ST_DRAW);

e = 0;

if (screen9 == 1)

if (a == 1)

if (s10 == 1)

editbox2 = EditBox2;

pEb9 = (EDITBOX*)GOLFindObject(EDB_115);

EbSetText (pEb9,editbox2);

SetState(pEb9, EB_DRAW);

//s10 = 0;

a = 0;

if (screen10 == 1)

if (b == 1)

Page 96: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 81

if (s9 == 1)

editbox1 = EditBox1;

pEb11 = (EDITBOX*)GOLFindObject(EDB_143);

EbSetText (pEb11,editbox1);

SetState(pEb11, EB_DRAW);

//s9 = 0;

b = 0;

if (screen12 == 1)

if (d == 1)

editbox4 = EditBox4;

pEb15 = (EDITBOX*)GOLFindObject(EDB_204);

EbSetText (pEb15,editbox4);

SetState(pEb15, EB_DRAW);

//s11 = 0;

d = 0;

if (screen2 == 1)

if (Flag == 1)

IzpisUraDatum(ura_buffer, datum_buffer);

ura = izpis_ura;

datum = izpis_datum;

signal = ni_signala;

if (stevec2 !=0)

StSetText(((STATICTEXT*)(GOLFindObject(STE_200))), signal);

SetState(((STATICTEXT*)(GOLFindObject(STE_200))), ST_DRAW);

if (stevec2 == 0)

StSetText(((STATICTEXT*)(GOLFindObject(STE_200))), signal);

SetState(((STATICTEXT*)(GOLFindObject(STE_200))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_8))), ura);

SetState(((STATICTEXT*)(GOLFindObject(STE_8))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_9))), datum);

SetState(((STATICTEXT*)(GOLFindObject(STE_9))), ST_DRAW);

Flag = 0;

if (screen3 == 1)

if (pogoj1 == 1)

switch (stevec)

case 0:

break;

case 1:

IzpisDatum(datum_buffer);

IzpisPoraba();

poraba1 = izpis_poraba;

datum1 = izpis_datum1;

kilometri1 = stevec_km;

litri1 = EditBox1;

StSetText(((STATICTEXT*)(GOLFindObject(STE_77))), poraba_izracun);

SetState(((STATICTEXT*)(GOLFindObject(STE_77))), ST_DRAW);

Page 97: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 82

StSetText(((STATICTEXT*)(GOLFindObject(STE_55))), datum1);

SetState(((STATICTEXT*)(GOLFindObject(STE_55))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_78))), kilometri1);

SetState(((STATICTEXT*)(GOLFindObject(STE_78))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_79))), litri1);

SetState(((STATICTEXT*)(GOLFindObject(STE_79))), ST_DRAW);

pEb14 = (EDITBOX*)GOLFindObject(EDB_66);

EbSetText (pEb14,poraba1);

SetState(pEb14, EB_DRAW);

datum2 = izpis_datum2;

kilometri2 = izpis_kilometri2;

litri2 = izpis_litri2;

poraba2 = izpis_poraba2;

StSetText(((STATICTEXT*)(GOLFindObject(STE_70))), datum2);

SetState(((STATICTEXT*)(GOLFindObject(STE_70))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_80))), kilometri2);

SetState(((STATICTEXT*)(GOLFindObject(STE_80))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_84))), litri2);

SetState(((STATICTEXT*)(GOLFindObject(STE_84))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_196))), poraba2);

SetState(((STATICTEXT*)(GOLFindObject(STE_196))), ST_DRAW);

datum3 = izpis_datum3;

kilometri3 = izpis_kilometri3;

litri3 = izpis_litri3;

poraba3 = izpis_poraba3;

StSetText(((STATICTEXT*)(GOLFindObject(STE_71))), datum3);

SetState(((STATICTEXT*)(GOLFindObject(STE_71))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_81))), kilometri3);

SetState(((STATICTEXT*)(GOLFindObject(STE_81))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_85))), litri3);

SetState(((STATICTEXT*)(GOLFindObject(STE_85))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_197))), poraba3);

SetState(((STATICTEXT*)(GOLFindObject(STE_197))), ST_DRAW);

datum4 = izpis_datum4;

kilometri4 = izpis_kilometri4;

litri4 = izpis_litri4;

poraba4 = izpis_poraba4;

StSetText(((STATICTEXT*)(GOLFindObject(STE_72))), datum4);

SetState(((STATICTEXT*)(GOLFindObject(STE_72))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_82))), kilometri4);

SetState(((STATICTEXT*)(GOLFindObject(STE_82))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_86))), litri4);

SetState(((STATICTEXT*)(GOLFindObject(STE_86))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_198))), poraba4);

SetState(((STATICTEXT*)(GOLFindObject(STE_198))), ST_DRAW);

datum5 = izpis_datum5;

kilometri5 = izpis_kilometri5;

litri5 = izpis_litri5;

poraba5 = izpis_poraba5;

StSetText(((STATICTEXT*)(GOLFindObject(STE_73))), datum5);

SetState(((STATICTEXT*)(GOLFindObject(STE_73))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_83))), kilometri5);

SetState(((STATICTEXT*)(GOLFindObject(STE_83))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_87))), litri5);

SetState(((STATICTEXT*)(GOLFindObject(STE_87))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_199))), poraba5);

SetState(((STATICTEXT*)(GOLFindObject(STE_199))), ST_DRAW);

break;

case 2:

IzpisDatum(datum_buffer);

IzpisPoraba();

poraba1 = izpis_poraba;

datum1 = izpis_datum1;

kilometri1 = stevec_km;

litri1 = EditBox1;

StSetText(((STATICTEXT*)(GOLFindObject(STE_77))), poraba_izracun);

SetState(((STATICTEXT*)(GOLFindObject(STE_77))), ST_DRAW);

Page 98: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 83

StSetText(((STATICTEXT*)(GOLFindObject(STE_55))), datum1);

SetState(((STATICTEXT*)(GOLFindObject(STE_55))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_78))), kilometri1);

SetState(((STATICTEXT*)(GOLFindObject(STE_78))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_79))), litri1);

SetState(((STATICTEXT*)(GOLFindObject(STE_79))), ST_DRAW);

pEb14 = (EDITBOX*)GOLFindObject(EDB_66);

EbSetText (pEb14,poraba1);

SetState(pEb14, EB_DRAW);

datum2 = izpis_datum2;

kilometri2 = izpis_kilometri2;

litri2 = izpis_litri2;

poraba2 = izpis_poraba2;

StSetText(((STATICTEXT*)(GOLFindObject(STE_70))), datum2);

SetState(((STATICTEXT*)(GOLFindObject(STE_70))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_80))), kilometri2);

SetState(((STATICTEXT*)(GOLFindObject(STE_80))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_84))), litri2);

SetState(((STATICTEXT*)(GOLFindObject(STE_84))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_196))), poraba2);

SetState(((STATICTEXT*)(GOLFindObject(STE_196))), ST_DRAW);

datum3 = izpis_datum3;

kilometri3 = izpis_kilometri3;

litri3 = izpis_litri3;

poraba3 = izpis_poraba3;

StSetText(((STATICTEXT*)(GOLFindObject(STE_71))), datum3);

SetState(((STATICTEXT*)(GOLFindObject(STE_71))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_81))), kilometri3);

SetState(((STATICTEXT*)(GOLFindObject(STE_81))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_85))), litri3);

SetState(((STATICTEXT*)(GOLFindObject(STE_85))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_197))), poraba3);

SetState(((STATICTEXT*)(GOLFindObject(STE_197))), ST_DRAW);

datum4 = izpis_datum4;

kilometri4 = izpis_kilometri4;

litri4 = izpis_litri4;

poraba4 = izpis_poraba4;

StSetText(((STATICTEXT*)(GOLFindObject(STE_72))), datum4);

SetState(((STATICTEXT*)(GOLFindObject(STE_72))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_82))), kilometri4);

SetState(((STATICTEXT*)(GOLFindObject(STE_82))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_86))), litri4);

SetState(((STATICTEXT*)(GOLFindObject(STE_86))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_198))), poraba4);

SetState(((STATICTEXT*)(GOLFindObject(STE_198))), ST_DRAW);

datum5 = izpis_datum5;

kilometri5 = izpis_kilometri5;

litri5 = izpis_litri5;

poraba5 = izpis_poraba5;

StSetText(((STATICTEXT*)(GOLFindObject(STE_73))), datum5);

SetState(((STATICTEXT*)(GOLFindObject(STE_73))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_83))), kilometri5);

SetState(((STATICTEXT*)(GOLFindObject(STE_83))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_87))), litri5);

SetState(((STATICTEXT*)(GOLFindObject(STE_87))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_199))), poraba5);

SetState(((STATICTEXT*)(GOLFindObject(STE_199))), ST_DRAW);

break;

case 3:

IzpisDatum(datum_buffer);

IzpisPoraba();

poraba1 = izpis_poraba;

datum1 = izpis_datum1;

kilometri1 = stevec_km;

litri1 = EditBox1;

StSetText(((STATICTEXT*)(GOLFindObject(STE_77))), poraba_izracun);

SetState(((STATICTEXT*)(GOLFindObject(STE_77))), ST_DRAW);

Page 99: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 84

StSetText(((STATICTEXT*)(GOLFindObject(STE_55))), datum1);

SetState(((STATICTEXT*)(GOLFindObject(STE_55))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_78))), kilometri1);

SetState(((STATICTEXT*)(GOLFindObject(STE_78))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_79))), litri1);

SetState(((STATICTEXT*)(GOLFindObject(STE_79))), ST_DRAW);

pEb14 = (EDITBOX*)GOLFindObject(EDB_66);

EbSetText (pEb14,poraba1);

SetState(pEb14, EB_DRAW);

datum2 = izpis_datum2;

kilometri2 = izpis_kilometri2;

litri2 = izpis_litri2;

poraba2 = izpis_poraba2;

StSetText(((STATICTEXT*)(GOLFindObject(STE_70))), datum2);

SetState(((STATICTEXT*)(GOLFindObject(STE_70))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_80))), kilometri2);

SetState(((STATICTEXT*)(GOLFindObject(STE_80))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_84))), litri2);

SetState(((STATICTEXT*)(GOLFindObject(STE_84))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_196))), poraba2);

SetState(((STATICTEXT*)(GOLFindObject(STE_196))), ST_DRAW);

datum3 = izpis_datum3;

kilometri3 = izpis_kilometri3;

litri3 = izpis_litri3;

poraba3 = izpis_poraba3;

StSetText(((STATICTEXT*)(GOLFindObject(STE_71))), datum3);

SetState(((STATICTEXT*)(GOLFindObject(STE_71))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_81))), kilometri3);

SetState(((STATICTEXT*)(GOLFindObject(STE_81))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_85))), litri3);

SetState(((STATICTEXT*)(GOLFindObject(STE_85))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_197))), poraba3);

SetState(((STATICTEXT*)(GOLFindObject(STE_197))), ST_DRAW);

datum4 = izpis_datum4;

kilometri4 = izpis_kilometri4;

litri4 = izpis_litri4;

poraba4 = izpis_poraba4;

StSetText(((STATICTEXT*)(GOLFindObject(STE_72))), datum4);

SetState(((STATICTEXT*)(GOLFindObject(STE_72))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_82))), kilometri4);

SetState(((STATICTEXT*)(GOLFindObject(STE_82))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_86))), litri4);

SetState(((STATICTEXT*)(GOLFindObject(STE_86))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_198))), poraba4);

SetState(((STATICTEXT*)(GOLFindObject(STE_198))), ST_DRAW);

datum5 = izpis_datum5;

kilometri5 = izpis_kilometri5;

litri5 = izpis_litri5;

poraba5 = izpis_poraba5;

StSetText(((STATICTEXT*)(GOLFindObject(STE_73))), datum5);

SetState(((STATICTEXT*)(GOLFindObject(STE_73))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_83))), kilometri5);

SetState(((STATICTEXT*)(GOLFindObject(STE_83))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_87))), litri5);

SetState(((STATICTEXT*)(GOLFindObject(STE_87))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_199))), poraba5);

SetState(((STATICTEXT*)(GOLFindObject(STE_199))), ST_DRAW);

break;

case 4:

IzpisDatum(datum_buffer);

IzpisPoraba();

poraba1 = izpis_poraba;

datum1 = izpis_datum1;

kilometri1 = stevec_km;

litri1 = EditBox1;

StSetText(((STATICTEXT*)(GOLFindObject(STE_77))), poraba_izracun);

SetState(((STATICTEXT*)(GOLFindObject(STE_77))), ST_DRAW);

Page 100: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 85

StSetText(((STATICTEXT*)(GOLFindObject(STE_55))), datum1);

SetState(((STATICTEXT*)(GOLFindObject(STE_55))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_78))), kilometri1);

SetState(((STATICTEXT*)(GOLFindObject(STE_78))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_79))), litri1);

SetState(((STATICTEXT*)(GOLFindObject(STE_79))), ST_DRAW);

pEb14 = (EDITBOX*)GOLFindObject(EDB_66);

EbSetText (pEb14,poraba1);

SetState(pEb14, EB_DRAW);

datum2 = izpis_datum2;

kilometri2 = izpis_kilometri2;

litri2 = izpis_litri2;

poraba2 = izpis_poraba2;

StSetText(((STATICTEXT*)(GOLFindObject(STE_70))), datum2);

SetState(((STATICTEXT*)(GOLFindObject(STE_70))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_80))), kilometri2);

SetState(((STATICTEXT*)(GOLFindObject(STE_80))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_84))), litri2);

SetState(((STATICTEXT*)(GOLFindObject(STE_84))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_196))), poraba2);

SetState(((STATICTEXT*)(GOLFindObject(STE_196))), ST_DRAW);

datum3 = izpis_datum3;

kilometri3 = izpis_kilometri3;

litri3 = izpis_litri3;

poraba3 = izpis_poraba3;

StSetText(((STATICTEXT*)(GOLFindObject(STE_71))), datum3);

SetState(((STATICTEXT*)(GOLFindObject(STE_71))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_81))), kilometri3);

SetState(((STATICTEXT*)(GOLFindObject(STE_81))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_85))), litri3);

SetState(((STATICTEXT*)(GOLFindObject(STE_85))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_197))), poraba3);

SetState(((STATICTEXT*)(GOLFindObject(STE_197))), ST_DRAW);

datum4 = izpis_datum4;

kilometri4 = izpis_kilometri4;

litri4 = izpis_litri4;

poraba4 = izpis_poraba4;

StSetText(((STATICTEXT*)(GOLFindObject(STE_72))), datum4);

SetState(((STATICTEXT*)(GOLFindObject(STE_72))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_82))), kilometri4);

SetState(((STATICTEXT*)(GOLFindObject(STE_82))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_86))), litri4);

SetState(((STATICTEXT*)(GOLFindObject(STE_86))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_198))), poraba4);

SetState(((STATICTEXT*)(GOLFindObject(STE_198))), ST_DRAW);

datum5 = izpis_datum5;

kilometri5 = izpis_kilometri5;

litri5 = izpis_litri5;

poraba5 = izpis_poraba5;

StSetText(((STATICTEXT*)(GOLFindObject(STE_73))), datum5);

SetState(((STATICTEXT*)(GOLFindObject(STE_73))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_83))), kilometri5);

SetState(((STATICTEXT*)(GOLFindObject(STE_83))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_87))), litri5);

SetState(((STATICTEXT*)(GOLFindObject(STE_87))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_199))), poraba5);

SetState(((STATICTEXT*)(GOLFindObject(STE_199))), ST_DRAW);

break;

case 5:

IzpisDatum(datum_buffer);

IzpisPoraba();

poraba1 = izpis_poraba;

datum1 = izpis_datum1;

kilometri1 = stevec_km;

litri1 = EditBox1;

StSetText(((STATICTEXT*)(GOLFindObject(STE_77))), poraba_izracun);

SetState(((STATICTEXT*)(GOLFindObject(STE_77))), ST_DRAW);

Page 101: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 86

StSetText(((STATICTEXT*)(GOLFindObject(STE_55))), datum1);

SetState(((STATICTEXT*)(GOLFindObject(STE_55))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_78))), kilometri1);

SetState(((STATICTEXT*)(GOLFindObject(STE_78))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_79))), litri1);

SetState(((STATICTEXT*)(GOLFindObject(STE_79))), ST_DRAW);

pEb14 = (EDITBOX*)GOLFindObject(EDB_66);

EbSetText (pEb14,poraba1);

SetState(pEb14, EB_DRAW);

datum2 = izpis_datum2;

kilometri2 = izpis_kilometri2;

litri2 = izpis_litri2;

poraba2 = izpis_poraba2;

StSetText(((STATICTEXT*)(GOLFindObject(STE_70))), datum2);

SetState(((STATICTEXT*)(GOLFindObject(STE_70))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_80))), kilometri2);

SetState(((STATICTEXT*)(GOLFindObject(STE_80))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_84))), litri2);

SetState(((STATICTEXT*)(GOLFindObject(STE_84))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_196))), poraba2);

SetState(((STATICTEXT*)(GOLFindObject(STE_196))), ST_DRAW);

datum3 = izpis_datum3;

kilometri3 = izpis_kilometri3;

litri3 = izpis_litri3;

poraba3 = izpis_poraba3;

StSetText(((STATICTEXT*)(GOLFindObject(STE_71))), datum3);

SetState(((STATICTEXT*)(GOLFindObject(STE_71))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_81))), kilometri3);

SetState(((STATICTEXT*)(GOLFindObject(STE_81))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_85))), litri3);

SetState(((STATICTEXT*)(GOLFindObject(STE_85))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_197))), poraba3);

SetState(((STATICTEXT*)(GOLFindObject(STE_197))), ST_DRAW);

datum4 = izpis_datum4;

kilometri4 = izpis_kilometri4;

litri4 = izpis_litri4;

poraba4 = izpis_poraba4;

StSetText(((STATICTEXT*)(GOLFindObject(STE_72))), datum4);

SetState(((STATICTEXT*)(GOLFindObject(STE_72))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_82))), kilometri4);

SetState(((STATICTEXT*)(GOLFindObject(STE_82))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_86))), litri4);

SetState(((STATICTEXT*)(GOLFindObject(STE_86))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_198))), poraba4);

SetState(((STATICTEXT*)(GOLFindObject(STE_198))), ST_DRAW);

datum5 = izpis_datum5;

kilometri5 = izpis_kilometri5;

litri5 = izpis_litri5;

poraba5 = izpis_poraba5;

StSetText(((STATICTEXT*)(GOLFindObject(STE_73))), datum5);

SetState(((STATICTEXT*)(GOLFindObject(STE_73))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_83))), kilometri5);

SetState(((STATICTEXT*)(GOLFindObject(STE_83))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_87))), litri5);

SetState(((STATICTEXT*)(GOLFindObject(STE_87))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_199))), poraba5);

SetState(((STATICTEXT*)(GOLFindObject(STE_199))), ST_DRAW);

break;

pogoj1 = 0;

if (Flag3 == 1)

IzpisUraDatum(ura3_buffer, datum_buffer);

ura = izpis_ura;

datum = izpis_datum;

Page 102: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 87

StSetText(((STATICTEXT*)(GOLFindObject(STE_52))), ura);

SetState(((STATICTEXT*)(GOLFindObject(STE_52))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_54))), datum);

SetState(((STATICTEXT*)(GOLFindObject(STE_54))), ST_DRAW);

Flag3 = 0;

if (screen4 == 1)

if (pogoj == 1)

editbox3 = EditBox4;

StSetText(((STATICTEXT*)(GOLFindObject(STE_194))), editbox3);

SetState(((STATICTEXT*)(GOLFindObject(STE_194))), ST_DRAW);

pogoj = 0;

if (Flag2 == 1)

//IzpisUraDatum(ura_buffer, datum_buffer);

IzpisHitrostUraDatum(hitrost_buffer, ura2_buffer, datum_buffer);

//IzpisHitrost(hitrost_buffer);

ura = izpis_ura;

datum = izpis_datum;

hitrost_kmh = izpis_hitrost_kmh;

ms = atof (izpis_hitrost_ms);

pot_izracunana = pot_izracunana + ms;

pot_izpisana = pot_izracunana/1000;

sprintf(izpis_pot,"%4.2 km",pot_izpisana);

pot = izpis_pot;

StSetText(((STATICTEXT*)(GOLFindObject(STE_46))), ura);

SetState(((STATICTEXT*)(GOLFindObject(STE_46))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_53))), datum);

SetState(((STATICTEXT*)(GOLFindObject(STE_53))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_47))), hitrost_kmh);

SetState(((STATICTEXT*)(GOLFindObject(STE_47))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_195))), pot);

SetState(((STATICTEXT*)(GOLFindObject(STE_195))), ST_DRAW);

Flag2 = 0;

if (screen5 == 1)

if (Flag1 == 1)

IzpisUra(UraBuffer);

IzpisUraDatum(ura1_buffer, datum_buffer);

ura = izpis_ura;

datum = izpis_datum;

//ura = izpis_ura1;

ura_sydney = izpis_sydney;

ura_shanghai = izpis_shanghai;

ura_london = izpis_london;

ura_moskva = izpis_moskva;

ura_tokyo = izpis_tokyo;

ura_kairo = izpis_kairo;

StSetText(((STATICTEXT*)(GOLFindObject(STE_15))), ura);

SetState(((STATICTEXT*)(GOLFindObject(STE_15))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_58))), datum);

SetState(((STATICTEXT*)(GOLFindObject(STE_58))), ST_DRAW);

//StSetText(((STATICTEXT*)(GOLFindObject(STE_40))), ura_newyork);

//SetState(((STATICTEXT*)(GOLFindObject(STE_40))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_20))), ura_sydney);

SetState(((STATICTEXT*)(GOLFindObject(STE_20))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_21))), ura_shanghai);

Page 103: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 88

SetState(((STATICTEXT*)(GOLFindObject(STE_21))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_22))), ura_london);

SetState(((STATICTEXT*)(GOLFindObject(STE_22))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_23))), ura_moskva);

SetState(((STATICTEXT*)(GOLFindObject(STE_23))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_24))), ura_tokyo);

SetState(((STATICTEXT*)(GOLFindObject(STE_24))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_25))), ura_kairo);

SetState(((STATICTEXT*)(GOLFindObject(STE_25))), ST_DRAW);

Flag1 = 0;

if (screen6 == 1)

if (Flag4 == 1)

IzpisUraDatum(ura4_buffer, datum_buffer);

ura = izpis_ura;

datum = izpis_datum;

sirina = ZemljepisnaSirina;

dolzina = ZemljepisnaDolzina;

nadmorska = NadmorskaVisina;

StSetText(((STATICTEXT*)(GOLFindObject(STE_185))), ura);

SetState(((STATICTEXT*)(GOLFindObject(STE_185))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_186))), datum);

SetState(((STATICTEXT*)(GOLFindObject(STE_186))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_192))), sirina);

SetState(((STATICTEXT*)(GOLFindObject(STE_192))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_193))), dolzina);

SetState(((STATICTEXT*)(GOLFindObject(STE_193))), ST_DRAW);

StSetText(((STATICTEXT*)(GOLFindObject(STE_204))), nadmorska);

SetState(((STATICTEXT*)(GOLFindObject(STE_204))), ST_DRAW);

Flag4 = 0;

return (1);

/*void PrekopirajBuffer (char *niz1, char *niz2)

int a;

a = memcmp (niz1, niz2, (unsigned)strlen(niz1));

if (a !=0)

zastavica = 1;

memcpy (niz2, niz1, (unsigned)strlen(niz1));

*/

void PrimerjajUra (char *niz1, char *niz2)

int a;

a = memcmp (niz1, niz2, (unsigned)strlen(niz1));

if (a !=0)

Flag = 1;

memcpy (niz2, niz1, (unsigned)strlen(niz1));

void PrimerjajUra1 (char *niz1, char *niz2)

int a;

a = memcmp (niz1, niz2, (unsigned)strlen(niz1));

Page 104: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 89

if (a !=0)

Flag1 = 1;

memcpy (niz2, niz1, (unsigned)strlen(niz1));

void PrimerjajUra2 (char *niz1, char *niz2)

int a;

a = memcmp (niz1, niz2, (unsigned)strlen(niz1));

if (a !=0)

Flag2 = 1;

memcpy (niz2, niz1, (unsigned)strlen(niz1));

void PrimerjajUra3 (char *niz1, char *niz2)

int a;

a = memcmp (niz1, niz2, (unsigned)strlen(niz1));

if (a !=0)

Flag3 = 1;

memcpy (niz2, niz1, (unsigned)strlen(niz1));

void PrimerjajUra4 (char *niz1, char *niz2)

int a;

a = memcmp (niz1, niz2, (unsigned)strlen(niz1));

if (a !=0)

Flag4 = 1;

memcpy (niz2, niz1, (unsigned)strlen(niz1));

void IzpisPoraba ()

float a,b,c;

b = atof (EditBox1);

c = atof (stevec_km);

a = (b/c)*100;

if ((a < 4) || (a > 10))

sprintf (izpis_poraba,".... L/100km");

else

sprintf (izpis_poraba,"%4.2f L/100km",a);

void IzracunPoraba ()

float a,b,c,d;

//poraba = atof (Izracun);

b = atof (EditBox1);

c = atof (stevec_km);

a = (b/c)*100;

if ( (a < 4) || (a > 10))

if (poraba < 4)

sprintf (Izracun,"....");

else

sprintf (Izracun,"%4.1f",poraba);

else

stevec3++;

Page 105: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 90

poraba = poraba + a;

d = poraba/stevec3;

sprintf (Izracun,"%4.1f",d);

void IzpisDatum (char *niz)

int zacasni;

int dan1,dan2,mesec,leto;

if (niz)

zacasni = atoi (niz);

dan1 = zacasni/100000;

zacasni = zacasni-(dan1*100000);

dan2 = zacasni/10000;

zacasni = zacasni-(dan2*10000);

mesec = zacasni/100;

zacasni = zacasni-(mesec*100);

leto = 2000+zacasni;

switch (mesec)

case 1:

sprintf (izpis_datum1,"%d%d.01.%d",dan1,dan2,leto);

break;

case 2:

sprintf (izpis_datum1,"%d%d.02.%d",dan1,dan2,leto);

break;

case 3:

sprintf (izpis_datum1,"%d%d.03.%d",dan1,dan2,leto);

break;

case 4:

sprintf (izpis_datum1,"%d%d.04.%d",dan1,dan2,leto);

break;

case 5:

sprintf (izpis_datum1,"%d%d.05.%d",dan1,dan2,leto);

break;

case 6:

sprintf (izpis_datum1,"%d%d.06.%d",dan1,dan2,leto);

break;

case 7:

sprintf (izpis_datum1,"%d%d.07.%d",dan1,dan2,leto);

break;

case 8:

sprintf (izpis_datum1,"%d%d.08.%d",dan1,dan2,leto);

break;

case 9:

sprintf (izpis_datum1,"%d%d.09.%d",dan1,dan2,leto);

break;

case 10:

sprintf (izpis_datum1,"%d%d.10.%d",dan1,dan2,leto);

break;

case 11:

sprintf (izpis_datum1,"%d%d.11.%d",dan1,dan2,leto);

break;

case 12:

sprintf (izpis_datum1,"%d%d.12.%d",dan1,dan2,leto);

break;

niz=0x00;

void IzpisUraDatum(char *niz1, char *niz2)

int u1,u2,m1,m2,s1,s2;

int zacasni;

int dan1,dan2,mesec,leto;

int zacasni1;

Page 106: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 91

// priprava za izpis UTC ure

if (stevec2 != 0)

//stevec2++;

sprintf (izpis_ura," ");

sprintf (izpis_datum," ");

if (stevec2 == 15)

stevec2 = 7;

switch (stevec2)

case 3:

sprintf (ni_signala," NI SIGNALA ");

break;

case 4:

sprintf (ni_signala,". NI SIGNALA ");

break;

case 5:

sprintf (ni_signala,".. NI SIGNALA ");

break;

case 6:

sprintf (ni_signala,"... NI SIGNALA ");

break;

case 7:

sprintf (ni_signala,"....NI SIGNALA ");

break;

case 8:

sprintf (ni_signala," ...NI SIGNALA. ");

break;

case 9:

sprintf (ni_signala," ..NI SIGNALA.. ");

break;

case 10:

sprintf (ni_signala," .NI SIGNALA... ");

break;

case 11:

sprintf (ni_signala," NI SIGNALA....");

break;

case 12:

sprintf (ni_signala," .NI SIGNALA... ");

break;

case 13:

sprintf (ni_signala," ..NI SIGNALA.. ");

break;

case 14:

sprintf (ni_signala," ...NI SIGNALA. ");

break;

if (niz1)

zacasni = atoi (niz1);

zacasni = zacasni + 10000;

u1 = zacasni/100000;

zacasni = zacasni-(u1*100000);

u2 = zacasni/10000;

zacasni = zacasni-(u2*10000);

m1 = zacasni/1000;

zacasni = zacasni-(m1*1000);

m2 = zacasni/100;

zacasni = zacasni-(m2*100);

s1 = zacasni/10;

s2 = zacasni-(s1*10);

niz1=0x00;

sprintf (izpis_ura,"%d%d:%d%d:%d%d",u1,u2,m1,m2,s1,s2);

if (niz2)

zacasni1 = atoi (niz2);

dan1 = zacasni1/100000;

zacasni1 = zacasni1-(dan1*100000);

dan2 = zacasni1/10000;

Page 107: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 92

zacasni1 = zacasni1-(dan2*10000);

mesec = zacasni1/100;

zacasni1 = zacasni1-(mesec*100);

if (zacasni1 != 97)

stevec2 = 0;

sprintf (ni_signala," ");

else

stevec2++;

leto = 2000+zacasni1;

switch (mesec)

case 1:

sprintf (izpis_datum,"%d%d. januar %d",dan1,dan2,leto);

break;

case 2:

sprintf (izpis_datum,"%d%d. februar %d",dan1,dan2,leto);

break;

case 3:

sprintf (izpis_datum,"%d%d. marec %d",dan1,dan2,leto);

break;

case 4:

sprintf (izpis_datum,"%d%d. april %d",dan1,dan2,leto);

break;

case 5:

sprintf (izpis_datum,"%d%d. maj %d",dan1,dan2,leto);

break;

case 6:

sprintf (izpis_datum,"%d%d. junij %d",dan1,dan2,leto);

break;

case 7:

sprintf (izpis_datum,"%d%d. julij %d",dan1,dan2,leto);

break;

case 8:

sprintf (izpis_datum,"%d%d. avgust %d",dan1,dan2,leto);

break;

case 9:

sprintf (izpis_datum,"%d%d. september %d",dan1,dan2,leto);

break;

case 10:

sprintf (izpis_datum,"%d%d. oktober %d",dan1,dan2,leto);

break;

case 11:

sprintf (izpis_datum,"%d%d. november %d",dan1,dan2,leto);

break;

case 12:

sprintf (izpis_datum,"%d%d. december %d",dan1,dan2,leto);

break;

niz2=0x00;

void IzpisUra(char *niz1)

//int slo,u_slo,m1_slo,m2_slo,s1_slo,s2_slo,a = 0;

int u_zda,m1_zda,m2_zda,s1_zda,s2_zda,b = 0;

int aus,u_aus,m1_aus,m2_aus,s1_aus,s2_aus,c = 0;

int chn,u_chn,m1_chn,m2_chn,s1_chn,s2_chn,d = 0;

int gbr,u_gbr,m1_gbr,m2_gbr,s1_gbr,s2_gbr,e = 0;

int rus,u_rus,m1_rus,m2_rus,s1_rus,s2_rus,f = 0;

int jpn,u_jpn,m1_jpn,m2_jpn,s1_jpn,s2_jpn,g = 0;

int egy,u_egy,m1_egy,m2_egy,s1_egy,s2_egy,h = 0;

int zacasni;

long int zda;

// priprava za izpis UTC ure

if (niz1)

zacasni = atoi (niz1);

Page 108: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 93

zda = zacasni;

aus = zacasni;

chn = zacasni;

gbr = zacasni;

rus = zacasni;

jpn = zacasni;

egy = zacasni;

// izracun za izpis ure v New Yorku

zda = zda + 190000;

u_zda = zda/10000;

zda = zda-(u_zda*10000);

m1_zda = zda/1000;

zda = zda-(m1_zda*1000);

m2_zda = zda/100;

zda = zda-(m2_zda*100);

s1_zda = zda/10;

s2_zda = zda-(s1_zda*10);

niz1=0x00;

// izpis ure za Avstralijo

aus = aus + 110000;

u_aus = aus/10000;

aus = aus-(u_aus*10000);

m1_aus = aus/1000;

aus = aus-(m1_aus*1000);

m2_aus = aus/100;

aus = aus-(m2_aus*100);

s1_aus = aus/10;

s2_aus = aus-(s1_aus*10);

niz1=0x00;

if (u_aus == 24)

c = 1;

sprintf (izpis_sydney,"00:%d%d:%d%d",m1_aus,m2_aus,s1_aus,s2_aus);

if (u_aus > 24)

c = 1;

if (u_aus == 34)

sprintf (izpis_sydney,"10:%d%d:%d%d",m1_aus,m2_aus,s1_aus,s2_aus);

else

u_aus -=24;

sprintf (izpis_sydney,"0%d:%d%d:%d%d",u_aus,m1_aus,m2_aus,s1_aus,s2_aus);

if (c == 0)

sprintf (izpis_sydney,"%d:%d%d:%d%d",u_aus,m1_aus,m2_aus,s1_aus,s2_aus);

// izpis ure za Kitajsko

chn = chn + 80000;

u_chn = chn/10000;

chn = chn-(u_chn*10000);

m1_chn = chn/1000;

chn = chn-(m1_chn*1000);

m2_chn = chn/100;

chn = chn-(m2_chn*100);

s1_chn = chn/10;

s2_chn = chn-(s1_chn*10);

niz1=0x00;

if (u_chn == 24)

d = 1;

sprintf (izpis_shanghai,"00:%d%d:%d%d",m1_chn,m2_chn,s1_chn,s2_chn);

if (u_chn > 24)

d = 1;

u_chn -=24;

sprintf (izpis_shanghai,"0%d:%d%d:%d%d",u_chn,m1_chn,m2_chn,s1_chn,s2_chn);

Page 109: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 94

if (u_chn < 10)

d = 1;

sprintf (izpis_shanghai,"0%d:%d%d:%d%d",u_chn,m1_chn,m2_chn,s1_chn,s2_chn);

if (d == 0)

sprintf (izpis_shanghai,"%d:%d%d:%d%d",u_chn,m1_chn,m2_chn,s1_chn,s2_chn);

// izpis ure za Britanijo

u_gbr = gbr/10000;

gbr = gbr-(u_gbr*10000);

m1_gbr = gbr/1000;

gbr = gbr-(m1_gbr*1000);

m2_gbr = gbr/100;

gbr = gbr-(m2_gbr*100);

s1_gbr = gbr/10;

s2_gbr = gbr-(s1_chn*10);

niz1=0x00;

if (u_gbr < 10)

e = 1;

sprintf (izpis_london,"0%d:%d%d:%d%d",u_gbr,m1_gbr,m2_gbr,s1_gbr,s2_gbr);

if (u_gbr == 0)

e = 1;

sprintf (izpis_london,"00:%d%d:%d%d",m1_gbr,m2_gbr,s1_gbr,s2_gbr);

if (e == 0)

sprintf (izpis_london,"%d:%d%d:%d%d",u_gbr,m1_gbr,m2_gbr,s1_gbr,s2_gbr);

// izpis ure za Rusijo

rus = rus + 40000;

u_rus = rus/10000;

rus = rus-(u_rus*10000);

m1_rus = rus/1000;

rus = rus-(m1_rus*1000);

m2_rus = rus/100;

rus = rus-(m2_rus*100);

s1_rus = rus/10;

s2_rus = rus-(s1_rus*10);

niz1=0x00;

if (u_rus < 10)

f = 1;

sprintf (izpis_moskva,"0%d:%d%d:%d%d",u_rus,m1_rus,m2_rus,s1_rus,s2_rus);

if (u_gbr == 24)

f = 1;

sprintf (izpis_moskva,"00:%d%d:%d%d",m1_gbr,m2_gbr,s1_gbr,s2_gbr);

if (u_rus > 24)

f = 1;

u_rus -=24;

sprintf (izpis_moskva,"0%d:%d%d:%d%d",u_rus,m1_rus,m2_rus,s1_rus,s2_rus);

if (f == 0)

sprintf (izpis_moskva,"%d:%d%d:%d%d",u_rus,m1_rus,m2_rus,s1_rus,s2_rus);

// izpis ure za Japonsko

jpn = jpn + 90000;

u_jpn = jpn/10000;

jpn = jpn-(u_jpn*10000);

m1_jpn = jpn/1000;

jpn = jpn-(m1_jpn*1000);

m2_jpn = jpn/100;

jpn = jpn-(m2_jpn*100);

s1_jpn = jpn/10;

s2_jpn = jpn-(s1_jpn*10);

niz1=0x00;

Page 110: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 95

if (u_jpn == 24)

g = 1;

sprintf (izpis_tokyo,"00:%d%d:%d%d",m1_jpn,m2_jpn,s1_jpn,s2_jpn);

if (u_jpn > 24)

g = 1;

u_jpn -=24;

sprintf (izpis_tokyo,"0%d:%d%d:%d%d",u_jpn,m1_jpn,m2_jpn,s1_jpn,s2_jpn);

if (u_jpn < 10)

g = 1;

sprintf (izpis_tokyo,"0%d:%d%d:%d%d",u_jpn,m1_jpn,m2_jpn,s1_jpn,s2_jpn);

if (g == 0)

sprintf (izpis_tokyo,"%d:%d%d:%d%d",u_jpn,m1_jpn,m2_jpn,s1_jpn,s2_jpn);

// izpis ure za Egipt

egy = egy + 20000;

u_egy = egy/10000;

egy = egy-(u_egy*10000);

m1_egy = egy/1000;

egy = egy-(m1_egy*1000);

m2_egy = egy/100;

egy = egy-(m2_egy*100);

s1_egy = egy/10;

s2_egy = egy-(s1_egy*10);

niz1=0x00;

if (u_egy == 24)

h = 1;

sprintf (izpis_kairo,"00:%d%d:%d%d",m1_egy,m2_egy,s1_egy,s2_egy);

if (u_egy > 24)

h = 1;

u_egy -=24;

sprintf (izpis_kairo,"0%d:%d%d:%d%d",u_egy,m1_egy,m2_egy,s1_egy,s2_egy);

if (u_egy < 10)

h = 1;

sprintf (izpis_kairo,"0%d:%d%d:%d%d",u_egy,m1_egy,m2_egy,s1_egy,s2_egy);

if (h == 0)

sprintf (izpis_kairo,"%d:%d%d:%d%d",u_egy,m1_egy,m2_egy,s1_egy,s2_egy);

void IzpisHitrostUraDatum(char *niz1, char *niz2, char *niz3)

float hitrostkmh, hitrostms;

float zacasni;

float x = 0.539956803;

float y = 1.9438449;

int u1,u2,m1,m2,s1,s2;

int zacasni2;

int dan1,dan2,mesec,leto;

int zacasni3;

// priprava za izpis UTC ure

if (niz1)

zacasni = atof (niz1);

hitrostkmh = zacasni/x;

sprintf (izpis_hitrost_kmh,"%4.2f",hitrostkmh);

hitrostms = zacasni/y;

sprintf (izpis_hitrost_ms,"%4.2f",hitrostms);

Page 111: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 96

niz1=0x00;

// priprava za izpis UTC ure

if (niz2)

zacasni2 = atoi (niz2);

zacasni2 = zacasni2 + 10000;

u1 = zacasni2/100000;

zacasni2 = zacasni2-(u1*100000);

u2 = zacasni2/10000;

zacasni2 = zacasni2-(u2*10000);

m1 = zacasni2/1000;

zacasni2 = zacasni2-(m1*1000);

m2 = zacasni2/100;

zacasni2 = zacasni2-(m2*100);

s1 = zacasni2/10;

s2 = zacasni2-(s1*10);

niz2=0x00;

sprintf (izpis_ura,"%d%d:%d%d:%d%d",u1,u2,m1,m2,s1,s2);

if (niz3)

zacasni3 = atoi (niz3);

dan1 = zacasni3/100000;

zacasni3 = zacasni3-(dan1*100000);

dan2 = zacasni3/10000;

zacasni3 = zacasni3-(dan2*10000);

mesec = zacasni3/100;

zacasni3 = zacasni3-(mesec*100);

leto = 2000+zacasni3;

switch (mesec)

case 1:

sprintf (izpis_datum,"%d%d. januar %d",dan1,dan2,leto);

break;

case 2:

sprintf (izpis_datum,"%d%d. februar %d",dan1,dan2,leto);

break;

case 3:

sprintf (izpis_datum,"%d%d. marec %d",dan1,dan2,leto);

break;

case 4:

sprintf (izpis_datum,"%d%d. april %d",dan1,dan2,leto);

break;

case 5:

sprintf (izpis_datum,"%d%d. maj %d",dan1,dan2,leto);

break;

case 6:

sprintf (izpis_datum,"%d%d. junij %d",dan1,dan2,leto);

break;

case 7:

sprintf (izpis_datum,"%d%d. julij %d",dan1,dan2,leto);

break;

case 8:

sprintf (izpis_datum,"%d%d. avgust %d",dan1,dan2,leto);

break;

case 9:

sprintf (izpis_datum,"%d%d. september %d",dan1,dan2,leto);

break;

case 10:

sprintf (izpis_datum,"%d%d. oktober %d",dan1,dan2,leto);

break;

case 11:

sprintf (izpis_datum,"%d%d. november %d",dan1,dan2,leto);

break;

case 12:

sprintf (izpis_datum,"%d%d. december %d",dan1,dan2,leto);

break;

niz3=0x00;

Page 112: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 97

//typedef enum START_WAIT, RECEIVING, MSG_RECEIVED stanje = START_WAIT;

void __ISR(_UART1_VECTOR, ipl2)IntUart1Handler(void)

unsigned int SerRx;

//MSG_RECEIVED = 1;

RSFlag=0;

if (mU1RXGetIntFlag())

IFS0bits.U1RXIF = 0;

SerRx = ReadUART1();

RxCtr++;

RxCtr2++;

switch (RxCtr)

case 0:

if (SerRx=='$')

rx_buffer[RxCtr]=SerRx;

else

RxCtr=0;

break;

case 1:

if (SerRx=='G')

rx_buffer[RxCtr]=SerRx;

else

RxCtr=0;

break;

case 2:

if (SerRx=='P')

rx_buffer[RxCtr]=SerRx;

else

RxCtr=0;

break;

case 3:

if (SerRx=='R')

rx_buffer[RxCtr]=SerRx;

else

RxCtr=0;

break;

case 4:

if (SerRx=='M')

rx_buffer[RxCtr]=SerRx;

else

RxCtr=0;

break;

case 5:

if (SerRx=='C')

rx_buffer[RxCtr]=SerRx;

else

RxCtr=0;

break;

switch (RxCtr2)

case 0:

if (SerRx=='$')

rx_buffer2[RxCtr2]=SerRx;

else

RxCtr2=0;

break;

case 1:

if (SerRx=='G')

rx_buffer2[RxCtr2]=SerRx;

else

RxCtr2=0;

break;

case 2:

if (SerRx=='P')

rx_buffer2[RxCtr2]=SerRx;

else

Page 113: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 98

RxCtr2=0;

break;

case 3:

if (SerRx=='G')

rx_buffer2[RxCtr2]=SerRx;

else

RxCtr2=0;

break;

case 4:

if (SerRx=='G')

rx_buffer2[RxCtr2]=SerRx;

else

RxCtr2=0;

break;

case 5:

if (SerRx=='A')

rx_buffer2[RxCtr2]=SerRx;

else

RxCtr2=0;

break;

rx_buffer[RxCtr]=SerRx;

rx_buffer2[RxCtr2]=SerRx;

if (RxCtr == (RX_BUFFER_SIZE-1))

RxCtr = 0;

if (RxCtr2 == (RX_BUFFER_SIZE-1))

RxCtr2 = 0;

if ((SerRx == 0x0d)&&(RxCtr != 0))

memmove (gps_buffer,rx_buffer,RxCtr);

RSFlag = 1;

mU1RXClearIntFlag();

int razcleni_nmea (char *niz)

int ura, datum, hitrost,status;

float sirina,dolzina;

char *tok = strtok(niz,","); //gprmc

// ime = tok;

tok = strtok(0,","); //utc ura

ura = atoi (tok);

sprintf (UraBuffer,"%d",ura);

tok = strtok(0,","); //status

status = atoi (tok);

sprintf (StatusBuffer,"%d",status);

tok = strtok(0,","); //zemljepisna sirina

sirina = atof (tok);

sprintf (ZemljepisnaSirina,"%4.4f",sirina);

tok = strtok(0,","); //orientacija1

tok = strtok(0,","); //zemljepisna dolzina

dolzina = atof (tok);

sprintf (ZemljepisnaDolzina,"%4.4f",dolzina);

tok = strtok(0,","); //orientacija2

tok = strtok(0,","); //hitrost

hitrost = atof (tok);

sprintf (hitrost_buffer,"%4.7f",hitrost);

tok = strtok(0,","); //track

tok = strtok(0,","); //datum

datum = atoi (tok);

sprintf (datum_buffer,"%d",datum);

tok = strtok(0,","); //magnetic

tok = strtok(0,","); //orientacija3

tok = strtok(0,","); //mode indicator

tok = strtok(0,","); //checksum

int razcleni_nmea2 (char *niz)

Page 114: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 99

float nadmorska;

char *tok = strtok(niz,","); //gpgga

tok = strtok(0,","); //utc ura

tok = strtok(0,","); //zemljepisna sirina

tok = strtok(0,","); //orientacija1

tok = strtok(0,","); //zemljepisna dolzina

tok = strtok(0,","); //orientacija2

tok = strtok(0,","); //kvaliteta

tok = strtok(0,","); //stevilo satelitov

tok = strtok(0,","); //HDOP

tok = strtok(0,","); //antena

tok = strtok(0,","); //metri

tok = strtok(0,","); //nadmorska

nadmorska = atof (tok);

sprintf (NadmorskaVisina,"%4.2f m",nadmorska);

tok = strtok(0,","); //metri

tok = strtok(0,","); //obdobje

tok = strtok(0,","); //ID

tok = strtok(0,","); //checksum

/////////////////////////////////////////////////////////////////////////////

// Function: Timer3 ISR

// Input: none

// Output: none

// Overview: increments tick counter. Tick is approx. 1 ms.

/////////////////////////////////////////////////////////////////////////////

#ifdef __PIC32MX__

#define __T3_ISR __ISR(_TIMER_3_VECTOR, ipl4)

#else

#define __T3_ISR __attribute__((interrupt, shadow, auto_psv))

#endif

/* */

void __T3_ISR _T3Interrupt(void)

TMR3 = 0;

// Clear flag

#ifdef __PIC32MX__

mT3ClearIntFlag();

#else

IFS0bits.T3IF = 0;

#endif

TouchDetectPosition();

/////////////////////////////////////////////////////////////////////////////

// Function: void TickInit(void)

// Input: none

// Output: none

// Overview: Initilizes the tick timer.

/////////////////////////////////////////////////////////////////////////////

/*********************************************************************

* Section: Tick Delay

*********************************************************************/

#define SAMPLE_PERIOD 500 // us

#define TICK_PERIOD (GetPeripheralClock() * SAMPLE_PERIOD) / 4000000

/* */

void TickInit(void)

// Initialize Timer4

#ifdef __PIC32MX__

OpenTimer3(T3_ON | T3_PS_1_8, TICK_PERIOD);

ConfigIntTimer3(T3_INT_ON | T3_INT_PRIOR_4);

#else

TMR3 = 0;

Page 115: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 100

PR3 = TICK_PERIOD;

IFS0bits.T3IF = 0; //Clear flag

IEC0bits.T3IE = 1; //Enable interrupt

T3CONbits.TON = 1; //Run timer

#endif

/////////////////////////////////////////////////////////////////////////////

// Function: InitializeBoard()

// Input: none

// Output: none

// Overview: Initializes the hardware components including the PIC device

// used.

/////////////////////////////////////////////////////////////////////////////

void InitializeBoard(void)

#if defined (PIC24FJ256DA210_DEV_BOARD) && defined(USE_KEYBOARD)

ANSA = 0x0000;

ANSB = 0x0020; // RB5 as potentiometer input

ANSC = 0x0010; // RC4 as touch screen X+, RC14 as external source of secondary

oscillator

ANSD = 0x0000;

ANSE = 0x0000; // RE9 used as S2

ANSF = 0x0000;

ANSG = 0x0080; // RG8 used as S1, RG7 as touch screen Y+

#else

/////////////////////////////////////////////////////////////////////////////

// ADC Explorer 16 Development Board Errata (work around 2)

// RB15 should be output

/////////////////////////////////////////////////////////////////////////////

#ifndef MEB_BOARD

LATBbits.LATB15 = 0;

TRISBbits.TRISB15 = 0;

#endif

#endif

#ifdef MEB_BOARD

CPLDInitialize();

CPLDSetGraphicsConfiguration(GRAPHICS_HW_CONFIG);

CPLDSetSPIFlashConfiguration(SPI_FLASH_CHANNEL);

#endif // #ifdef MEB_BOARD

#if defined(__dsPIC33F__) || defined(__PIC24H__) || defined(__dsPIC33E__) ||

defined(__PIC24E__)

// Configure Oscillator to operate the device at 40Mhz

// Fosc= Fin*M/(N1*N2), Fcy=Fosc/2

#if defined(__dsPIC33E__) || defined(__PIC24E__)

//Fosc = 8M * 60/(2*2) = 120MHz for 8M input clock

PLLFBD = 58; // M=60

#else

// Fosc= 8M*40(2*2)=80Mhz for 8M input clock

PLLFBD = 38; // M=40

#endif

CLKDIVbits.PLLPOST = 0; // N1=2

CLKDIVbits.PLLPRE = 0; // N2=2

OSCTUN = 0; // Tune FRC oscillator, if FRC is used

// Disable Watch Dog Timer

RCONbits.SWDTEN = 0;

// Clock switching to incorporate PLL

__builtin_write_OSCCONH(0x03); // Initiate Clock Switch to Primary

// Oscillator with PLL (NOSC=0b011)

__builtin_write_OSCCONL(0x01); // Start clock switching

while(OSCCONbits.COSC != 0b011);

Page 116: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 101

// Wait for Clock switch to occur

// Wait for PLL to lock

while(OSCCONbits.LOCK != 1)

;

#if defined(__dsPIC33F__) || defined(__PIC24H__)

// Set PMD0 pin functionality to digital

AD1PCFGL = AD1PCFGL | 0x1000;

#if defined(__dsPIC33FJ128GP804__) || defined(__PIC24HJ128GP504__)

AD1PCFGLbits.PCFG6 = 1;

AD1PCFGLbits.PCFG7 = 1;

AD1PCFGLbits.PCFG8 = 1;

#endif

#elif defined(__dsPIC33E__) || defined(__PIC24E__)

ANSELE = 0x00;

ANSELDbits.ANSD6 = 0;

// Set all touch screen related pins to Analog mode.

ANSELBbits.ANSB11 = 1;

#endif

#elif defined(__PIC32MX__)

INTEnableSystemMultiVectoredInt();

SYSTEMConfigPerformance(GetSystemClock());

#endif // #if defined(__dsPIC33F__) || defined(__PIC24H__)

#if defined (EXPLORER_16)

/************************************************************************

* For Explorer 16 RD12 is connected to EEPROM chip select.

* To prevent a conflict between this EEPROM and SST25 flash

* the chip select of the EEPROM SPI should be pulled up.

************************************************************************/

// Set IOs directions for EEPROM SPI

MCHP25LC256_CS_LAT = 1; // set initial CS value to 1 (not asserted)

MCHP25LC256_CS_TRIS = 0; // set CS pin to output

#endif // #if defined (EXPLORER_16)

// Initialize graphics library and create default style scheme for GOL

GOLInit();

// Set the other chip selects to a known state

#ifdef MIKRO_BOARD

// SD Card chip select

LATGbits.LATG9 = 1;

TRISGbits.TRISG9 = 0;

// MP3 Codac

// reset

LATAbits.LATA5 = 0;

TRISAbits.TRISA5 = 0;

// chip select

LATAbits.LATA2 = 1;

TRISAbits.TRISA2 = 0;

// chip select

LATAbits.LATA3 = 1;

TRISAbits.TRISA3 = 0;

AD1PCFGbits.PCFG11 = 1;

AD1PCFGbits.PCFG10 = 1;

#endif

//The following are PIC device specific settings for the SPI channel

//used.

//Set IOs directions for SST25 SPI

#if defined (GFX_PICTAIL_V3) || defined (MEB_BOARD) || defined(GFX_PICTAIL_LCC) ||

defined(MIKRO_BOARD) || defined(GFX_PICTAIL_V3E)

SST25_CS_LAT = 1;

SST25_CS_TRIS = 0;

Page 117: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 102

#ifndef __PIC32MX__

SST25_SCK_TRIS = 0;

SST25_SDO_TRIS = 0;

SST25_SDI_TRIS = 1;

#if defined(__PIC24FJ256GB210__) || defined(__dsPIC33E__) ||

defined(__PIC24E__)

SST25_SDI_ANS = 0;

#endif

#endif

#elif defined (PIC24FJ256DA210_DEV_BOARD)

SST25_CS_LAT = 1;

SST25_CS_TRIS = 0;

// Set the pins to be digital

SST25_SDI_ANS = 0;

SST25_SDO_ANS = 0;

SST25_SCK_TRIS = 0;

SST25_SDO_TRIS = 0;

SST25_SDI_TRIS = 1;

#endif

// set the peripheral pin select for the PSI channel used

#if defined(__dsPIC33FJ128GP804__) || defined(__PIC24HJ128GP504__)

AD1PCFGL = 0xFFFF;

RPOR9bits.RP18R = 11; // assign RP18 for SCK2

RPOR8bits.RP16R = 10; // assign RP16 for SDO2

RPINR22bits.SDI2R = 17; // assign RP17 for SDI2

#elif defined(__PIC24FJ256GB110__) || defined(__PIC24FJ256GA110__) || defined

(__PIC24FJ256GB210__)

__builtin_write_OSCCONL(OSCCON & 0xbf); // unlock PPS

RPOR10bits.RP21R = 11; // assign RP21 for SCK2

RPOR9bits.RP19R = 10; // assign RP19 for SDO2

RPINR22bits.SDI2R = 26; // assign RP26 for SDI2

__builtin_write_OSCCONL(OSCCON | 0x40); // lock PPS

#elif defined(__PIC24FJ256DA210__)

__builtin_write_OSCCONL(OSCCON & 0xbf); // unlock PPS

#if (SST25_SPI_CHANNEL == 1)

RPOR1bits.RP2R = 8; // assign RP2 for SCK1

RPOR0bits.RP1R = 7; // assign RP1 for SDO1

RPINR20bits.SDI1R = 0; // assign RP0 for SDI1

#elif (SST25_SPI_CHANNEL == 2)

RPOR1bits.RP2R = 11; // assign RP2 for SCK2

RPOR0bits.RP1R = 10; // assign RP1 for SDO2

RPINR22bits.SDI2R = 0; // assign RP0 for SDI2

#endif

__builtin_write_OSCCONL(OSCCON | 0x40); // lock PPS

#endif

// initialize the Flash Memory driver

FlashInit(&SPI_Init_Data);

// initialize the timer that manages the tick counter

TickInit();

// initialize the components for Resistive Touch Screen

TouchInit(NVMWrite, NVMRead, NVMSectorErase, TOUCH_INIT_VALUES);

HardwareButtonInit(); // Initialize the hardware buttons

Page 118: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 103

7.2 Naslov študenta

Ime in priimek: Domen Murn

Naslov: Planinska cesta 19a

Pošta: 8290 Sevnica

Tel.študenta: 040-514-980

e-mail študenta: [email protected]

7.3 Kratek ţivljenjepis

Rojen: 21.7.1980

Šolanje: OŠ Jurija Dalmatina Krško;

Štiriletni program tehniškega izobraţevanja – elektrotehnik (Srednja šola Krško);

FERI MB, Elektrotehnika – Elektronika

Page 119: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 104

Page 120: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 105

Page 121: POTOVALNI RAČUNALNIK Z GPS - core.ac.uk · iDCT – inverzna diskretna kosinusna transformacija (Inverse Discrete Cosine Transformation) XIII

Potovalni računalnik z GPS Stran 106