GPS Area Alarm Ilic Dejan 2008

39
UNIVERSITA’ DEGLI STUDI DI TRIESTE _______________________________________________________________________________________________________________ FACOLTA’ DI INGEGNERIA C.D.L.S. in Ingegneria Informatica Tesina per l’esame: Elettronica III – DSP e Microcontrollori GPS Area Alarm Professore: Studente: CARRATO Sergio ILIĆ Dejan _______________________________________________________________________________________________________________ Anno Accademico 2008 / 2009

Transcript of GPS Area Alarm Ilic Dejan 2008

Page 1: GPS Area Alarm Ilic Dejan 2008

UNIVERSITA’ DEGLI STUDI DI TRIESTE _______________________________________________________________________________________________________________

FACOLTA’ DI INGEGNERIA

C.D.L.S. in Ingegneria Informatica

Tesina per l’esame: Elettronica III – DSP e Microcontrollori

GPS Area Alarm

Professore: Studente: CARRATO Sergio ILIĆ Dejan

_______________________________________________________________________________________________________________

Anno Accademico 2008 / 2009

Page 2: GPS Area Alarm Ilic Dejan 2008

INDICE

1. INTRODUZIONE ................................................................................... 1 2. STRUMENTI UTILIZZATI .................................................................. 2

2.1. Hardware............................................................................................ 2 2.2. Software ............................................................................................. 2

3. HARDWARE ........................................................................................... 3

3.1. Microcontrollore PIC 18F452............................................................ 4 3.1.1. Interruzioni ............................................................................... 5 3.1.2. Timer 2........................................................................................ 7 3.1.3. USART ...................................................................................... 8

3.2. GSM modulo GE863–GPS ............................................................. 11 3.2.1. Global Positioning System ...................................................... 12 3.2.2. GSM e GPS Antenna ............................................................... 12 3.2.3. Comandi AT ........................................................................... 13

3.3. Telit EVK 2...................................................................................... 14 3.3.1. Configurazione ....................................................................... 14

4. SOFTWARE .......................................................................................... 16

4.1. Interruzioni ..................................................................................... 19 4.1.1. USART Handling .................................................................... 19 4.1.2. Timer 2 Handling .................................................................... 23 4.1.3. ISR Sovrapposizione .............................................................. 25

4.2. Modulo GE863-GPS........................................................................ 27 4.2.1. Funzione di attesa ................................................................... 28 4.2.2. Comandi AT per l’applicazione ............................................. 29

4.3. Sistema di coordinate geografiche .................................................. 30 4.3.1. Latitude e Longitude ............................................................... 30 4.3.2. Proiezione Universal Transverse Mercator ............................ 31 4.3.3. GPS Datum .............................................................................. 32 4.3.4. Conversione da LL a UTM ..................................................... 33

4.4. Estensione delle librerie .................................................................. 35

5. CONCLUSIONE ................................................................................... 36 6. BIBLIOGRAFIA ................................................................................... 37

Page 3: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 1 -

1. INTRODUZIONE Per capire il titolo della tesina dobbiamo spiegare parola per parola. Nella tesina è stato

creato un dispositivo che controlla la sua Global Positioning System (GPS) che principalmente serve ad rivevare spostamento di oggetto in area richiesta (Area), e se l’oggetto foglie dall’area richiesta l’utenete recieve un Short Message Service (SMS) che informa l’utente (Alarm) all’attuale situazione, da dove nasce il nome GPS Area Alarm.

Utilizzazione del sistema è estremamente semplice. Il sistema può essere attivato da

qualunque dispositivo che ha la possibilita di mandare e ricevere i messaggi SMS. I dispositivi consigliati sono sicuramente i queli che l’utenete porta, quasi sempre, con se. Quindi, un dispositivo sicuramente consigliato è il cellulare personale che usa Global System per comunicazioni Mobile (GSM) come la rete di communicazione. L’attivazione si effetua via SMS, di sintassi predefinita, che contiene i dati di nuovo stato di allarme e anche la distanza massima (in metri) di spostamento posizionale dell’oggetto dal punto aquisto in attivazione del dispositivo. Dopo di attivazione del dispositivo abbiamo un sistema praticamente in stato ‘stand by’ perche l’utente viene informato solo se l’oggetto viene spostato fuori dell’area richiesta o può altrimenti fare altri operazioni che sono: disativare il dispositivo o attivarlo di nuovo.

Per la realizzazione effettiva di dispositivo si ricorre ad un microcontrollore (in questo

caso, PIC 18F452 montato sulla scheda PICDEM2 Plus), che si occupa della funzione di controllo del posizione GPS e di gestione dei messaggi ricevuti, un modulo GSM e una antenna GSM (in questo caso, modulo GE863-GPS della Telit montato sulla scheda Evaluation Kit 2 (EVK2)), con quale usando una Subscriber Identity Module (SIM) Card, può agganciarsi alla rete GSM e avviare e ricevere i messaggi SMS che si usano per controllo di dispositivo, e ad un modulo GPS e antenna GPS per acquisire i dati di posizionamento (nel nostro caso GPS è integrato in modulo GE863-GPS).

Poiché il PIC 18F452 mediante l’ausilio della periferica Universal Synchronous

Asynchronous Receiver Transmitter (USART) di cui è fornito, può comunicare direttamente col modulo GE863-GPS mediante l’ausilio della periferica Universal Asynchronous Receiver Transmitter (UART), tramite i comandi AT. In realtà la comunicazione tra microcontrollore e modulo GSM non avviene in modo diretto, ma sono interfaccati tramite porte seriali cui sono fornite entrambe sulle schede di supporto, cioè la PICDEM2 e la EVK2, quindi si usa interfacca RS-232 , quale è semplice, universale e che coincide con lo standard delle porte seriali dei Personal Computers (PC). Sfruttando quest’ultima notizia abbiamo la possibilita di collegare la porta seriale della PICDEM2 alla porta seriale del EVK2, e scoltare le risposte dai tutti due dispositivi usando porta seriale del PC e usando il software HyperTerminal.

Page 4: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 2 -

2. STRUMENTI UTILIZZATI Per la realizzazione di progetto verra usato i seguenti struementi:

2.1. Hardware • Microcontrollore “Microchip” PIC 18F452 • PICDEM 2 Plus, che include:

o Porta seriale con interfaccia RS-232 o Alimentazione stabilizzata +5V o Oscillatore da 4 MHz

• MPLAB ICD 2 (In-Circuit Debugger) • Modulo GSM GE863-GPS • Telit EVK2, che include:

o Interfaccia per la famiglia GE863 o GSM antenna o GPS antenna

• PC con interface RS-232 e USB • Due alimentatori stabilizzati a +9V (per la PICDEM2 e per la EVK2) • Telefonino cellulare (rete GSM) • Due SIM Card pre l’indirizzo del utente e l’indirizzo del SIM Card dispositivo 2.2. Software • MPLAB IDE v7.51

o MPLAB C18 C Compiler v3.10

• MPLAB ICD 2 USB driver • Microsoft HyperTerminal

Page 5: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 3 -

3. HARDWARE Nella realizzazione del sistema complessivo vengono usati i piccoli sistemi dai tanti

diversi settori tecnologici, che sfrutano le tecnologie molto importante al giorno d’oggi. Per esempio modulo GE863-GPS sfruta la rete GSM e la tecnologia GPS, ecc. Tutto il sistema sta per essere controllato da un microcontrollore ad alte prestazioni, una maggiore microcircuiti FLASH con 10-Bit A / D strega è l'identificazione del dispositivo PIC 18F452. Questi due dispositivi sono in corso di comunicare tramitte Universal Asynchronous Receiver trasmettitore che potrebbe essere ideale per questo tipo di applicazione. Per capire quali sono esatamente i componenti del sistema complessivo possiamo guardare la Figura 1.

Figura 1. Representazione del sistema semplificato di GPS Area Alarm, dove si puo capire

che sistema sfruta la rete GSM e la tecnologia GPS per funzionamento dinamico dell’applicazione

Page 6: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 4 -

3.1. Microcontrollore PIC 18F452

Per far muovere tutto sistema viene usato un Programmable Interrupt Controller (PIC) di MicroChip con indicazioni PIC 18F452 dimostrato nella Figura 2. La serie PIC18 è un 8 bit RISC processore, e ci danno piu nella prestazione che può andare fino a 40 MHz. L’architettura è optimizata per C compilatore e hanno Linear Addressing Space fino a 2 MB per la programma. Indicatione F sta per FLASH, 4 sta per 40/44 pin, 5 sta per quantità di memoria FLASH dentro il microcontrollore (25 KB) che viene usata per On-Chip memoria di programma, dove possiamo memorizzare 16384 Single Word istruzioni e abbiamo la memoria dati di 1536 bytes. Al fine, 2 sta per indicazione della famiglia di questo PIC.

Per la semplicita di applicazione verra usata priorita di interruzione. Sul

microcontrollore ci sono due livelli di priorita di interruzione, bassa e alta, dove ogni interruzione di livello alto override livello basso . Ogni livello di interruzione ha suo vetore di interruzione in memoria di programma dove vengono mesi i istruzioni che portano la programma al funzione di Interrupt Service Routine.

Dopo di che viene anche usato un Timer per necesita di applicazione. Questo

microcontrollore ha 4 moduli timer interno, pero l’applicazione avveva necesita solo per un timer. Quindi il timer modulo implementato è 8 bit timer 2 con prescaler e postscaler programmabili tramitte software. I dettagli del TMR2 vengono spiegati dopo.

Ci sono due I/O moduli seriali tra qui verra sfrutato Universal Synchronous

Asynchronous Receiver Transmitter (USART) quale può essere configurato come full duplex asynchronous sistema che dovrebbe comunicare con i componenti periferici, come per esempio PC. I dettagli vengono spiegati dopo.

Figura 2. Dimostrazione dei pin del MicroChipàs PIC 18F452

Page 7: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 5 -

3.1.1. Interruzioni Gli interruzioni sono sostanzialmente le richieste che le periferiche del PIC rivolgono ad

esso per chiedergli di sospendere momentaneamente (se è possibile) l’esecuzione delle sue operazioni ed eseguire del codice che permetta alle periferiche stesse di veder soddisfatte le loro richieste: tale codice prende il nome di Interrupt Service Routine (ISR). Il microcontrollore PIC18F452 prevede una duplice tecnica di gestione delle richieste d’interruzione: il meccanismo di priorità, ed il meccanismo “tradizionale”. Qui per il corretto funzionamento del applicazione vengono usati I due livelli di priorità degli interrupt che il PIC 18F452 mette a disposizione:

• a bassa priorità • ad alta priorità

Altre interruzioni tipiche sono quelle che vengono a generarsi dalle periferiche interne,

come per esempio il convertitore analogico digitale, l'USART, i timer, le linee sulla PORTB e altro ancora. Questi tipi d'interruzione, a differenza dell'interruzione generata dal Reset non fanno iniziare il programma da capo ma lo fanno continuare a partire da un punto specifico del programma stesso, e questo punto si chiama vettore d'interruzione. Se avviene un'interruzione da parte delle periferiche, prima di saltare al vettore d'interruzione il microcontrollore si preoccupa di salvare tutte le informazioni necessarie per poter riprendere dal punto in cui il programma è stato interrotto.

Come detto, il PIC18F452 come molti altri possiede due livelli d'interruzione, ovvero

due vettori di interruzione. Il vettore d'interruzione ad alta priorità è posizionato all'indirizzo di memoria del programma 000008h ed il vettore d'interruzione a bassa priorità è posizionato all'indirizzo di memoria del programma 000018h. L’abilitazione della gestione della priorità degli interrupt avviene ponendo ad uno il seguente bit RCONbits.IPEN, che sta per ‘Interrupt Priority Enable’.

Quando si verifica un'interruzione ad alta priorità il programma viene interrotto anche se

era in un'interruzione a bassa priorità. Se il programma si dovesse invece trovare a gestire un'interruzione ad alta priorità il verificarsi di una interruzione a bassa priorità non influenzerebbe l'esecuzione del programma fino al termine della gestione dell'interruzione ad alta priorità. In questo modo, ci si assicura che ISRs con maggior priorità (high-priority ISRs) abbiano la facoltà di interrompere le ISRs a minor priorità (low-priority ISRs).

Ogni tipo d'interruzione che può essere generata da una periferica, possiede tre bit di

controllo posizionati in punti diversi nei registri utilizzati dal microcontrollore per la gestione delle interruzioni stesse. In particolare si ha un bit che funziona da flag per l'interruzione, ovvero quando lo bit è setato segnala che si è verificata l'interruzione da parte della periferica rappresentata dal bit stesso. Un secondo bit è dedicato all'Enable dell'interruzione da parte della periferica rappresentata dal bit, mentre il terzo bit serve per decidere se l'interruzione da parte della periferica deve essere considerata ad alta priorità o a bassa priorità. La Figura 3. rappresenta la struttura logica degli interrupt.

Page 8: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 6 -

Figura 3. La logica dei interrupt

Prima di riprendere l'esecuzione del normale programma, ovvero prima di uscire dalla funzione ISR che gestisce l'interruzione, è necessario riporre a 0 il bit di Interrupt Flag della periferica che ha causato l'interruzione: in questo modo si evitano interruzioni ricorsive dovuto a questo bit.

Page 9: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 7 -

3.1.2. Timer 2

Abbiamo deto prima che il microcontrollore PIC 18F452 ha 4 moduli timer interno, pero l’applicazione richiede solo un timer per gestire tutti i elaborazioni necessari per avere un applicazione stabile. In questo caso verra scelto un timer di 8 bit, con i registri scrivibili e leggibili con i quali possiamo modificare il valore di timer. Questo modulo timer è denominato come Timer 2, e il modulo si serve principalmente di due registri TMR2 e PR2 registri che sono registro di valore di timer e l’altro e registro di periodo (compreso tra 0 e 255) che si possono sfrutare per migliore controllo di software. Il timer 2 ha due scalagi programmabili che sono prescalagio (1:1, 1:4, 1:16) e postscalagio (1:1, 1:16) con quali si può prolungare la durarta di periodo dell’interruzione. Una volta avviato il timer, il registro TMR2 si incrementa a partire da 0 ad ogni colpo di clock, la cui frequenza può essere regolata con un prescaler e/o un postscaler. Quando il contenuto del registro TMR2 raggiunge il valore memorizzato in PR2 (inizialmente pari a 255), viene generato un interrupt e riazzerato il registro TMR2.

Visto che timer 2 ha possibilita di interrompere programma principale, se è configurato,

allora essistono i registri per accendere o spegnere il timer o per impostare valore di bit di inerruzione e la priorita. Quindi in questo caso il timer sara utilizzato come una specia di flow control, per programma principale, ed ISR è fatta molto semplice che verra spiegatto in parte di software.

In questo progetto il timer 2 ha livello di priorità bassa, e gli impstazioni di prescaler e

postscaler sono configurati ad 1:16, perche cosi la durata di timer viene prolungata. Altra notazione importante è quela di scrittura al registro TMR2 dove il contatore di prescaler e postscaler si azzerano, dopo di che partono di nuovo. La scrittura al registro TMR2 viene comunque usata, e si ciariche perche nel parte di software. Il pezzo di codice usato per aprire timer 2 con tutti impostazioni deti prima è seguente:

#define TIMER2_CONFIG TIMER_INT_ON & \ // Enable interrupt T2_PS_1_16 & \ // Prescaler 1:16 T2_POST_1_16 // Postscaler 1:16 Come era detto nel parte di Interruzioni, prima di riprendere l'esecuzione del normale

programma, ovvero prima di uscire dalla funzione ISR che gestisce l'interruzione, è necessario riporre a 0 il bit di Interrupt Flag della periferica che ha causato l'interruzione in questo caso il registro si chiama TMR2IF.

Page 10: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 8 -

3.1.3. USART Per fare comunicare il PIC 18F452 con modulo GE863-GPS viene sfrutato Universal

Synchronous Asynchronous Transmitter Receive che può interrompere la programma principale con un interrupt di basso e alto livello, e la comunicazione può avvenire in modalità sincrona o asincrona. E’ stata scelta la modalità asincrona (full-duplex) per svariati motivi, fra i quali l’assenza di clock, la possibilità di trasmissione e ricezione contemporanee (full-duplex, sebbene non richiesta nel nostro programma), ma soprattutto la possibilità di ricevere dati senza richiederne la trasmissione.

Usando le due schede di supporto dei due componenti che sono già dotate di connettori

femmina DB9, che ha 9 pin, e quindi microcontrollore e modulo GSM possono comunicare attraverso un cavo seriale maschio-maschio incrociato, in cui cioè le linee TX e RX sono invertite ad un estremo.Per rispettare lo standard RS-232 utilizzato sono sufficienti solo tre linee, cioè TX (trasmissione), RX (ricezione) e GND (massa). E sulla PICDEM2 a disposizione sono stati già opportunamente collegati ad un connettore DB9 i piedini preposti alla USART, cioè RC6/TX/CK ed RC7/RX/DT. I connettori sono rapresentati nel Figura 4.

Figura 4. Nel figura di sinistra e representato un maschio Data Terminal Equipment (DTE), che viene usato sul cavo di comunicazione ad due estremi, e sono port come queliche abbiamo nel PC. E al destra si può vedere una cortisima spiegazione dei segnali che si trovano sui pin numerati del conetore.

I registri che servono per la configurazione della USART sono Transmit Status And

Control Register (TXSTA), Receive Status And Control Register (RCSTA), Baud Rate Generator (SPBRG) che sono registro di trasmissione, ricecione e registro di valore di baud rate respetivamenrte. Prima di aprire una connesione USART devrebbe essere impostato valore di SPBRG registro per impostare la baud rate, cioè la velocità di trasmissione dei bits

Page 11: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 9 -

del canale. La formula per calcolare il valore di registro SPBRG in modo asincrono e baud rate al velocita alta:

Baud Rate = Fosc / (16*(X + 1)),

dove X sta per valore di SPBRG.

Ci sono svariate formule che legano la baud rate alla frequenza di oscillazione ed al

valore di registro SPBRG, ma la scelta va fatta in funzione della modalità di utilizzo della porta (sincrona o asincrona), e, nel caso di porta asincrona, del valore assunto dal bit High Baud Rate (BRGH). Il bit BRGH risiede nel registro TXSTA, assieme al bit SYNC che permette la scelta della modalità di porta. Noi abbiamo usato per modalita SYNC = 0, e BRGH = 1. Potrebbe essere vantagioso usare la velocita alta di baud rate (BRGH = 1) anche per i baud clock più bassi, e questo è perche cosi equazione appena vista po ridure i eventuali errori di baud rate. Viene usata la formula, in modo tale da far calcolare automaticamente il valore da introdurre in SPBRG in funzione della FOSC. In tal modo, cambi della frequenza di oscillazione non influiscono sulla baud rate.

Per il calcolo è necessario conoscere la frequenza del quarzo utilizzato, che nel nostro

caso è di 4,43MHz, viene impostato una rate pari a 9600 bps e con la formula soprastante fornisce il valore 25 da assegnare a SPBRG per ottenere una simile frequenza. Nella Figura 5. viene rapresentata la tabella con i valori SPBRG per velocita di trasmission diverse, pero sempre con frequenza di oscillatore a 4 MHz. Per quanto riguarda il interruzione, la USART dispone di due tipi di richieste di interruzione: l’interrupt di trasmissione (abilitabile settando il bit TXIE in PIE1), generato all’inizio di una trasmissione seriale, e l’interrupt di ricezione (abilitabile settando il bit RCIE in PIE1), generato al termine di una ricezione seriale. Per la modalità asincrona, il formato utilizzato è l’NRZ (Non-Return-To-Zero), caratterizzato da 1 bit di inizio, gli 8 bits di dati ed 1 bit di stop, il primo bit ad essere trasmesso/ricevuto è il meno significativo ed inoltre non è supportato il controllo di parità a livello hardware. L’utilizzo del 9-esimo bit richiede la sua abilitazione dei bits TX9 in TXSTA ed RX9 in RCSTA e la sua lettura/scrittura richiede i bits TX9D ed RX9D negli stessi registri. Dopo aver fatto la configurazione si può abilitare la USART, e questo si ottiene settando il bit nei registri SPEN in RCSTA.

Figura 5. Nella tabella sono representati tutti

i Baud Rate e valore di errore accetabili con i diversi valori di SPBRG con la frequenza di oscillatore a 4 MHz.

Page 12: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 10 -

La configurazione della USART è stata eseguita attraverso funzione di compilatore C18 e vengono inviati seguenti parametri:

#define USART_CONFIG USART_TX_INT_OFF & \ // Disable TX interrupt USART_RX_INT_ON & \ // Enable RX interrupt USART_ASYNCH_MODE & \ // Async mode USART_EIGHT_BIT & \ // 8-bit transmit/receive USART_CONT_RX & \ // Continuous reception USART_BRGH_HIGH // High baud rate

dove anche viene usata la formula prima espressa per calcolare il Baud Rate Generator che ha valore 25.

Per la semplicità di sviluppo di software era sfrutata la possibilità di collegare

direttamente una delle due schede di supporto al PC tramite cavo seriale maschio-femmina, il che, mediante l’ausilio del software HyperTerminal, permette di testare il funzionamento della USART del PIC e di verificare le risposte del modulo GSM. Questo tipo di cavo è rapresentato nella Figura 6.

GND

RX

TX1

9

GND

RX

TX

19

19

PIC DEMO BOARD TELIT EVK2

PC

GND

RXTX

Figura 6. Per facilità di sviluppo del software viene fato collegamento tra pin della transmissione da un estremo con pin di ricezione di PC. Cosi era fatto il controllo del parte software di microcontrollore o controllo di risposte del modulo GSM.

Page 13: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 11 -

3.2. GSM Modulo GE863–GPS Il colegamento con la rete GSM era fatto tramitte il modulo Telit GE863-GPS della

famiglia GE863 è l'evoluzione del TRIZIUM famiglia, che combina l'accesso ai servizi di comunicazione digitale in reti GSM 850, 900, DCS 1800, PCS1900 MHz reti con opzioni aggiuntive come un ricevitore GPS integrato. I dimensioni del modulo sono impresionanti visto che tutto questo viene integrato in modulo (la lungezza è 41,4 mm, ampiezza 31,4 mm e spessore 3,6 mm) con un peso di 9 gr, che viene rapresentato nella Figura 7.

Figura 7. Modulo GSM di indicazioni GE863-GPS della famiglia GE863 da Telit. Dal punto di vista l'interfacciale, il GE863 fornisce le seguenti componeti che ci

interesano:

• Pieno RS232 UART, CMOS livello (ASC0) interfaccia per i comandi AT: o Auto-bauding da 2,4 fino a 57,6 Kbps o Baud rate fisse fino a 115,2 Kbps

• Due fili RS232 • Carta SIM interfaccia, 3 volt e 1,8 volt • 18 x porte GPIO (max) • 1 x LED di stato uscita indicatore

La circuiteria di alimentazione e il layout bordo sono una parte molto importante nella

progettazione di un prodotto completo e essi fortemente riflettere sulle prestazioni del prodotto globale, e quindi leggere attentamente i requisiti e le gli orientamenti che intende seguire per una corretta progettazione.

• Tensione di alimentazione nominale di 3,8 V • Max tensione di alimentazione 4,2 V • Gamma di tensione di alimentazione 3,4 V - 4,2 V

L'antenna di connessione e di progettazione del layout bordo sono la parte più

importante nella progettazione di un prodotto completo e fortemente riflettere sulle prestazioni del prodotto globale, e quindi leggere attentamente e seguire le i requisiti e le linee guida per una corretta progettazione.

Page 14: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 12 -

3.2.1. Global Positioning System Il GE863-GPS SiRFstarIII comprende un unico chip ™ ricevitore GPS, che supporta in

tempo reale posizione in area urbana e ovunque un elevato sensibilità acquisizione è necessaria. Per quello che ci interessa dalle caratteristiche principali di tale ricevitore GPS, possiamo citare:

• Alta sensibilità per la ricezione indoor (con antenna) • Caldo inizia < 3 secondi • Supporta 20 canali GPS L1 1575.42 MHz • Precisione < 2,5 m • Data WGS-84 • Dedicato GPS comandi AT • Bassa potenza di consumo

E più le charatteristiche di sensibilità del modulo GPS:

• Tempo di primo fix o Hot Start autonoma < 3s o Caldo autonoma < 35s o Autonoma di avviamento a freddo < 35s

• Sensitività o Monitoraggio fino a -159 dBm

3.2.2. GSM e GPS Antenna

Come suggerito sul Descrizione del prodotto l'antenna e antenna sulla linea di PCB per un Telit GE863 dispositivo devono soddisfare gamma di frequenza da parte seconda banda di frequenza (s) forniti dal'operatore della rete, il cliente deve utilizzare il più adatto per tale antenna / i banda. La larghezza di banda 70 MHz in GSM850, 80 MHz in GSM900, 170 MHz Dcs & 140 MHz banda PCS con guadagno meno di 3dBi e impedenza a 50 Ohm.

Quando si utilizza il Telit GE863, poichè non c'è nessun connettore d'antenna sul

modulo, l'antenna deve essere collegato al GE863 attraverso il PCB con l'antenna tappetino.Nel caso che l'antenna non è direttamente sviluppati sullo stesso PCB, quindi, direttamente collegato all'antenna tappetino del GE863, poi una linea di PCB è necessaria al fine di collegare con esso o con il suo connettore.

Per quanto riguarda l’antenna GPS abbiamo il modulo GE863-GPS per quale non è

dotato di un amplificatore interno LNA. L'uso di un antenna attiva è importante per ottenere una buona performance .Il principio attivo antenna GPS deve soddisfare gamma di frequenza GPS L1 (1575.42 MHz) e larghezza di banda + -1.023 MHz.

Page 15: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 13 -

La tensione di alimentazione al principio attivo antenna GPS è fornito dal GE863-GPS.

3.2.3. Comandi AT Il Telit GE863 moduli possono essere guidati attraverso l'interfaccia seriale utilizzando i

AT comandi standard. Il Telit GE863 moduli sono compatibili con Hayes standard set di comandi AT, al fine di mantenere la compatibilità con gli attuali programmi di SW, ETSI GSM 07.07 specifico comando AT e GPRS comandi specifici, ETSI GSM 07.05 specifici comandi AT per gli SMS (Short Message Service) e CBS (Cell Broadcast Service).

Inoltre, la Telit GE863 moduli Telit sostegno anche proprietarie comandi AT per scopi

speciali. Una da tante altre comodità sfrutati e sicuramente quela di rilevazione autonomamente

della velocita del trasmissione seriale (Baud Rate) con quale parla strumento dall’altra parte. Quindi la comodità viene attivata con un AT comando +IPR, quale tra l’altro serve per impostare la velocità fissa di trasmissione. Con aiuto di questo opzione possiamo anche lavorare con modulo usando le velocità diverse (cambiamenti temporanei) di trasmissione. Per impostare questa modalita basta usare valore 0 al esecuzione del comando AT.

La risposta deve essere rispettata e un nuovo comando non deve essere rilasciato prima

che il modulo ha chiuso tutte le invio della sua risposta codice del risultato (qualunque essa sia). Ciò vale in particolare per applicazioni che "senso" OK il testo e quindi può inviare il prossimo comando prima di completare il codice <CR> <LF> OK <CR> <LF> è inviato dal modulo.

Per tempi di emissione dei comandi si consiglia comunque di attendere almeno 20 ms

tra la fine del ricevimento della risposta eil rilascio del prossimo comando AT. Se la risposta codici sono disabili e quindi il modulo non riporta alcuna risposta alla comando, quindi almeno la pausa di 20 ms di tempo devono essere rispettati.

Page 16: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 14 -

3.3. Telit EVK 2

La scheda Evaluation Kit 2 (che si può vedere nella Figura 8.) è fatta proprio per semplificare sviluppo dei progetti con i moduli GSM Telit. E cosi abbiamo una soluzione già preparata per i applicazioni di tipo date e telefono. Su questa scheda dobbiamo comunque aggiungere una interfacia, sempre Telit, che ha i conettori per le RF antenne, che in questo caso sono antenna GSM e GPS. Viene con la possibilità di tre tipi di alimentazione, un slot per la SIM card, RS 232 translatore di livello del porta seriale, ecc. Pero queste appena dete sono sicuramente implementate in questo sistema. Dopo di che noi dobbiamo fornire alcuni oggetti, come microcontrollore, SIM Card, alimentazione e conosenza di programmazione con i commandi AT.

Figura 8. Nella foto abbiamo la scheda Evaluation Kit 2 (che si trova sotto) con due conettori DB9 femminili. Uno si può usare per i commandi AT, e l’altro (quello sotto) si usa solo in caso di cicezione dei messaggi GPS (se è attivato) in formato NMEA. Sopra si po vedere una scheda interfacciale per i moduli Telit che si cambiano rispeto alla famiglia del modulo.

3.3.1. Configurazione Sulla scheda di supporto EVK 2 era necessario configurare alcuni jumpers per richieste

di progetto. Questi cambiamenti sono fatti principalmente per modo di comunicazione con mondo esterno, per tipo della alimentazione, ecc.

Per comunicazone con mondo esterno abbiamo usato conettore DB9 femminile che viene integrato nella scheda, pero avevamo anche la possibilita di comunicazione con modulo anche tramitte porta USB. Dal momento che HyperTerminal lavora con porta seriale, abbiamo scelto di utilizzare lo specifico conettore DB9 del modulo per la trasmissione dei comandi AT. Quindi per la semplicita di progetto i jumpers nella scheda erano impostati per modo di lavoro tramitte RS 232 che viene dimostrato nalla Figura 9.

Page 17: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 15 -

Figura 9. Dimostrazione dell’imposto dei

jumper per colegamento dei PL 301, 302 e 303, dove la conessione tra PL 302 e 303, con 10 jumper di 2 contatti, imposta la scheda di inerfaccia in modo seriale RS232 e spegne il modo USB.

Per quanto riguarda l’alimentazione, il modulo GE863-GPS dev’essere alimentato dalla

classica tensione 3.8V. Le modalità con cui è possibile fornire una simile alimentazione al modulo spaziano dall’usare una classica batteria a ioni litio (con possibilità eventualmente di collegare un caricabatterie), all’usare un’alimentazione fino a 40V. Chiaramente la EVK2, che riceve l’alimentazione, si fa carico di stabilizzare la tensione e di ottenere in uscita i 3.8V necessari al modulo per funzionare. Per nostra comodità, tramite jumpers abbiamo impostato come la sorgente di alimentazione un generatore di tensione variabile dai 5 ai 40V. Collegando all’apposito connettore sulla EVK2 un classico alimentatore con tensione fissata a 9V, che è stessa quela tensione richiesta dalla PICDEM2 Plus.

Page 18: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 16 -

4. SOFTWARE

Parte software del applicazione che viene caricato sul microncontrollore è progettato per realizzare un dispositivo in grado di ricevere un messaggio SMS, prendere coordinate GPS iniziali del dispositivo ed rispeto a questa posizione, e i dati contenuti del messaggio ricevuto inviare un messaggio SMS di allarme a mezzo rete cellulare se le ultime coordinate GPS superano la distanza massima (in metri) di spostamento idicato nel messaggio. Per migliori spiegazioni si presentano le Figura 10. , 11. e 12. con applicazione graficamente rapresentata.

Il dispositivo GPSAA deve essere attivata prima di fare ogni tipo interazione. Dopo il

attivazione di dispositivo, software sarà in corso per inizializzare sequenza di avvio in cui il modulo GSM sta per essere inizializzata prima di entrare in stand by o l’impostazione dello status di allarme al valore "Disabled".

Figura 10. Nella figura viene representato primo passagio per attivare dispositivo GPS Area Alarm (GPSAA), dove si ovviamente usa la rete GSM per mandare un SMS da telefonino al dispositivo. Si può anche vedere che il dispositivo sta sempre con l’oggetto sotto la supervisione.

Per avviare oggetto del controllo è necessario attivare il dispositivo GPS Area Alarm

inviando un SMS al GPSAA dispositivo, la seguente sintassi:

GPSAA=1,15 dove 1 sta per "Enabled" valore (0 Disabled) e 15 è il valore massimo di destinazione (in metri) prima di permesso per attivazione del allarme. Il software all'interno microcontrollore non reagire a caratteri minuscoli in un SMS stringa e che è il motivo per cui è anche possibile inviare un SMS con caratteri minuscoli o se si desidera che possano essere combinati.

Una volta GPSAA dispositivo di allarme è stato "Enabled", il microcontrollore è in

corso di chiedere prima posizione GPS attuale informazioni con l'invio di un comando AT al GE863-modulo. Il modulo GPS sta per rispondere con la stringa che contiene tutti i dati

Page 19: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 17 -

necessari per l'applicazione delle esigenze. Questo è vero solo nel caso in cui se del GPS fix non è un fix invalido. Ci sono solo tre valori disponibili di GPS fix con ogniuno valore di numero dei satelliti:

• 0 - Fix Non valido (≤ 3) • 2 - Fix 2D (= 3) • 3 - Fix 3D (> 3)

e per questo motivo è stato scelto di accettare solo i Fix che sono quindi maggiori di 2D Fix, ovvio per incrementare la precisione del modulo GPS. Dopo che GPS Fix e maggiore di 2D il software del microcontrollore è in corso a memorizzare questo valore nella memoria per i dati per motivi di confronto con i ulteriori posizione GPS. Il string ricevuto da modulo GE863-GPS ha questa forma (anche X sono i numeri, ma essi vengono sovrascritti per motivi di privacy):

$GPSACP: 121024.999,45X9.5455N,013X7.7167E,1.4,110.2,3,22.44,1.33,0.71,271008,07

dove il 60% di tali valori sono inutili e microcontrollore ha necessità di elaborare questa risposta del modulo. L'applicazione ha bisogno di valori di latitudine e longitudine (dopo il primo e il secondo char ',') e GPS Fix valore (dopo il quinto char ',') per tutti i calcoli necessari. In Figura 11. può essere considerata una dimostrazione di prima acquisito la posizione GPS che GPSAA utilizzare come la sua posizione GPS principale, e il cerchio verde, dove il centro del cerchio si trova in posizione GPS principale, che sta per 15 metri definiti dai dati presi dalla SMS di utente.

Figura 11. Qui può essere visto chiaramente che GPSAA dispositivo e telefono cellulare non

comunicano, e da lì abbiamo stand by applicazione che è totalmente embedded. In questa foto si presume che l’oggetto sotto supervisione ha GPSAA dispositivo a bordo e che l'utente ha già chiesto lo status di allarme "Enabled". Si presume anche che applicazione GPSAA ha già richiesto prima posizione GPS, in modo che cerchio verde è la zona consentita per dispositivo di circolazione.

Page 20: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 18 -

Una volta che GPSAA dispositivo ha acquisito la sua posizione GPS e una volta ammessi zona è stata definita, il dispositivo sta ad ascoltare per tutti i messaggi che arrivano dalla rete GSM e se vi è almeno SMS strega sintassi è valida, allora dispositivo sta per elaborare nuove richieste del utente. In caso contrario, GPSAA dispositivo ripete ha inviare i comandi AT ha modulo GE863- GPS e elaborare tutte le risposte con le nuove coordinate di posizione GPS. Il microcontrollore ad ogni ciclo di programma effettuerà un confronto tra la posizione GPS principale e una nuova posizione GPS, e valuterà se attivare o disattivare l’allarma. Mentre l’oggetto sotto la supervisione si trova in area consentita, l'utente non sta per essere informato su stato del dispositivo, ma Figura 12. dimostra cosa succede se dispositivo lascia area consentito.

Figura 12. Questa figura dimostra che cosa succede quando l’oggetto sotto la supervisione lascia spazio consentito. Dopo la fuga dell’oggetto, il dispositivo GPSAA segnala utente inviando un SMS al numero di rete che ha richiesto lo status “Enabled” del dispositivo GPSAA.

Così quando l'oggetto foglie della zona permessa, lo stato di allarme prende il valore

"Activate" e quindi l'applicazione sta per interrogare ricevuto SMS per prendere l'indirizzo originario (numero di telefono), dopo la risoluzione del numero di telefono dell’utente, l'applicazione dovrà inviare un SMS per informare l'utente che l’oggetto ha abbandonato la zona permessa.

Page 21: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 19 -

4.1. Interruzioni

Per capire come si muove l’applicazione, è opportuno spiegare concettualmente quella che è l’idea alla base della gestione e dell’integrazione con il resto del programma delle Interrupt Service Routine (ISR). Le ISRs infatti sono procedure diverse dalle altre, dal momento che le loro chiamate, e di solito sono di natura asincrona che vuole dire che il programma principale non conosce l’istante in cui saranno evocate.

Nel nostro progetto abbiamo utilizzato due prorità di interrupt. La USART ha la proirità

alta di interruzione, e quindi viene impostato che può interrompere la programma principale o ISR di priorità bassa, solo se ha ricevuto qualcosa nel buffer ed l’iterruzione del modulo Timer2 ha la priorità bassa, e quindi può interrompe la programma principale, pero anche ISR di Timer2 può essere interroto da parte dai interruzioni di alta priorità. Quindi una volta settato, la periferica genererà degli interrupts secondo le modalità specifiche della periferica stessa. Il microcontrollore riceve l’interrupt, ma non sarà in grado di fare nulla a meno di non istruirlo in proposito. Per l’impostazione delle tutte le queste priorità, abbiamo nel programma principale un pezzo di codice sorgente di questo genere:

void main(void) {

... RCONbits.IPEN = 1; /* Enable interrupt priority */ PIR1 = 0; /* Clear the peripheral interrupt flags */ PIE1bits.TMR2IE = 1; /* Enable timer interrupt */ IPR1bits.TMR2IP = 0; /* Set as low priority */ IPR1bits.RCIP = 1; /* USART receive interrupt high priority */ INTCONbits.GIEH = 1; /* Enable all high priority interrupts */ INTCONbits.GIEL = 1; /* Enable all low priority interrupts */ ...

}

La prima istruzione attiva il bit Interrupt Priority Enable (IPEN) presente nel registro RCON, vale a dire che si attiva la gestione delle priorità degli interruzioni. Alla fine, la problema è stato risolto più efficiente utilizzando le priorità di interruzione. Quindi USART può ricevere sempre e la ISR del Timer 2 può fare elaborazione dei dati quando ce il tempo di trattamento inefficace su microcontrollore.

4.1.1. USART Handling

Il codice sorgente del file di definizione è "usart_h.h", e questo dovrebbe essere la parte più importante del codice sorgente, quindi piu importante tra qualsiasi altra parte del codice! E quando dico importante, volevo dire, senza eccezioni. Ecco perché il codice della USART della funzione ISR è veramente breve, semplice e ad alta priorità. Prima che viene rappresentata la funzione ISR dobbiamo definire alcuni altri valori, ad esempio il baud rate:

#define BAUD_RATE 9600 /* USART baud rate, 110..115200bps */

Page 22: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 20 -

dove la velocità di trasmissione 9600 bps è abbastanza veloce per questo tipo di applicazione, anche se potremmo andare molto più veloce. Per informazioni dettagliate sulla velocità di trasmissione, si dovrebbe leggere la datasheet per lo microcontrollore.

Dopo la definizione della velocità di trasmissione abbiamo bisogno a calcolare il valore

del Baud Rate Generatore (SPBRG), che è necessario per far funzionare la USART. Pertanto è stata predefinita funzione che calcola valore del registro SPBRG per desiderata baudrate del USART con la fissa frequenza del oscillatore, in modo asincrono ad alta velocità che guardare sompething come questo:

getAsHsSpbrg(FOSC, BAUD_RATE);

E 'importante notare che questa funzione è utilizzabile solo in modalità asincrona e ad alta velocità!

Dopo di di abilitazione dei interruzioni della perifericha interessata, prescelta

configurazione e calcolazione del valore di registro SPBRG, essa viene attivata direttamente all’accensione della perifericha stessa, ricorrendo alle funzioni di apertura fornite dal compilatore C18:

OpenUSART(USART_CONFIG, getAsHsSpbrg(FOSC, BAUD_RATE));

e a quel punto la USART comincia a scoltare nella porta di ricezione quale può cambiare il valore in registro IPR1 che sta Interrupt Priority Request, e quindi la programma principale entra nella ISR predefinita.

Al fine di disporre un sistema stabile ho creato un RX buffer abbastanza grande per ricevere tutti i dati che arrivano alla USART! Ed è molto importante notare che non abbiamo integrato il controllo di overflow del buffer, per cui si assume che buffer è abbastanza grande per ricevere tutti i dati in arrivo. La dimensione del buffer è stato definito come

#define BUFFER_RX_SIZE 256

dove 256 è la massima dimensione del segmento dati. Per la creazione di buffer di ricezione è stata utilizzata #pragma udata direttiva che definisce la sezione (segmento) è una porzione di uno specifico indirizzo di memoria dati, e udata significa che i dati conuti sono staticamente assegnati non inizializzato variabili del utente.

Ci è stato creato alcune funzioni e due variabili puntatore ad operare con i buffer di dati

sensibili. Queste due variabili puntatore sul buffer di ricezione sono l'indirizzo per il prossimo carattere ricevuto in buffer e l'altra è l'indirizzo per il prossimo carattere in buffer per essere lette da domanda. I funzioni che operano con i dati sensibili sono:

U_BUFFER *getRxBuf(void); /* Get RX buffer address */ U_BUFFER getRxNext(void); /* Array index of last added char */ void setRxUser(U_BUFFER user); /* Set index of last readed value */ U_BUFFER getRxUser(void); /* Get index of last readed value */

Page 23: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 21 -

Tutti i questi funzioni saranno utilizzati come l’aiuto per leggere i dati del buffer che devono essere elaborati. Ma questi sono davvero semplici funzioni che restituiscono i valori utili del buffer usati per la elaborazione, e non vi è solo una funzione che permette all'utente di modificare i dati sensibili del buffer (i dati utili del buffer sono estremamente riservati per la funzione ISR della USART) ed è setRxUser(user). Questa funzione è particolare, perché lavora con i puntatori del buffer, ed è in corso di impostare nuovo valore del puntatore sui dati elaborati dal applicazione, ma anche provare a reimpostare i puntatori se l'utente ha letto tutti i dati ricevuti. Reimpostando il valori del puntatori, dobbiamo chiaramente inserire i dati sensibili, perché USART può richiedere interruzione in qualsiasi momento, che ovviamente ci interrompe la ISR della TIMER, quindi questo ci può portare a scrivere valori errati. La problema viene superata con questo codice:

... INTCONbits.GIEH = 0; /* Disable all high priority interrupts */ /* If user have read all buffer data */ if (bufRxNext == bufRxUser)

bufRxNext = bufRxUser = 0; /* Reset buffer pointers */ INTCONbits.GIEH = 1; /* Enable all high priority interrupts */ ...

La funzione ISR si essegue quando la perifericha genera una richiesta di interruzione, il

microcontrollore disabilita temporaneamente il bit GIE (per inibire eventuali altre richieste durante l’esecuzione della ISR), quindi si porta all’indirizzo di memoria 000008h, dove si aspetta di trovare del codice che gli permetta di eseguire la richiesta di interruzione. E’ necessario dunque implementare nel progetto tale blocco di codice, ed è necessario anche memorizzarlo a partire dall’indirizzo di memoria 000008h. Il blocco ha una forma di genere:

#pragma code rx_interrupt = 0x08 void rx_int (void) {

_asm goto rx_handler _endasm }

La direttiva #pragma code fa sì che il codice successivo ad essa venga allocato nella

sezione specificata dalla direttiva, in questo caso la sezione rx_interrupt. Della sezione in questione non è importante il nome, quanto l’indirizzo assoluto di allocazione, ovvero l’indirizzo a partire dal quale la sezione viene scritta, in questo caso appunto l’indirizzo 000008h. All’interno della sezione rx_interrupt è stata inserita solo la routine rx_handler, dal momento che la direttiva #pragma code successiva ripristina come sezione di codice quella di default. La routine rx_handler sarà dunque chiamata ad ogni ricezione di richiesta di interruzione. Viene eseguita un’istruzione di salto incondizionato (tramite l’istruzione assembly GOTO) all’indirizzo della ISR fornita come parametro. Non è possibile chiamare la ISR mediante una classica chiamata C, né tanto meno utilizzando un’istruzione assembly CALL, dal momento che così facendo si costringerebbe il programma a tornare sulla rx_handler al termine della ISR chiamata.

Page 24: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 22 -

Dal momento che la perifericha ha richiesto un interruzione, vi sara una ISR per la ricezione di caratteri dalla USART. La funzione ISR in forma logica si può vedere nella Figura 13. e il codice sorgente ha la forma seguente:

#pragma interrupt rx_handler void rx_handler (void) {

... PIR1bits.RCIF = 0; /* Clear the interrupt flag */

}

l’ultima istruzione di una ISR consiste nel resettare il flag di interruzione corrispondente, affinché non si verifichi un procedimento ricorsivo (al termine della ISR, se l’interrupt flag fosse ancora alto il PIC interpreterebbe ciò come una nuova richiesta d’interruzione, e rieseguirebbe nuovamente la ISR). La direttiva #pragma interrupt fa della funzione specificata una ISR, ovvero sostituisce sostanzialmente all’istruzione classica di ritorno (RETURN) al termine della funzione l’istruzione “Return from Interrupt” (RETFIE). Il microcontrollore, al raggiungimento di una simile istruzione, riabilita il flag GIE (per rendersi nuovamente disponibile asoddisfare altre richieste), quindi si porta sull’istruzione che avrebbe dovuto essere eseguita se non si fosse verificata alcuna richiesta d’interruzione, da cui riprende la normale esecuzione del programma.

Figura 13. La funzione ISR di USART parte

con reset del timer 2 (anche resertta il perscaler e il postscaler), dopo di che prende il carattere dalla periferica e lo mette nel buffer di ricezione predefinito. Si può vedere che carattere ‘+’ si cambia al carattere ‘$’ perche faccilità di ricerca dei messagi in buffer. L’ultima istruzione consiste nel resettare il flag di interruzione corrispondente e in questo modo si evitano interruzioni ricorsive dovuto a questo bit di richiesta di interruzione.

I compiti principali di questa funzione sono a leggere caratteri da ricevere buffer del

hardware, e mettere il valore al software del buffer predefinito, di incrementare il puntatore

Page 25: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 23 -

per il prossimo carattere ricevuto e al fine settare il flag di interruzione al zero, dopo l’ esecuzione di funzione. Il carattere '+' sta per essere sovrascritto con il carattere '$' e quindi la ricerca del simbolo iniziale del comando AT in buffer sarà molto più facile. Il motivo per cui la funzione ISR del USART esegue reset del timer 2 verrà spiegato più avanti nella sezione ISR sovrapposizione.

4.1.2. Timer 2 Handling

Il file del codice sorgente è "timer_h.h" e questa ISR dovrebbe essere una semplice e veloce, per quanto possibile, funzione di elaborazione dati. Ma anche se il timer funzione ISR è veramente breve, semplice e bassa priorità, a volte può essere molto lunga. Questo cambiamento di tempo di esecuzione viene effettuata se vi sono eventuali nuovi dati nel buffer di ricezione del USART o più precisamente i valori del puntatori al buffer per la ricezione e utente non sono uguali (bufRxUser < bufRxNext).

Come nel caso di USART, dopo di di abilitazione dei interruzioni della perifericha

interessata, prescelta configurazione del timer, essa viene attivata direttamente all’accensione della perifericha stessa, ricorrendo alle funzioni di apertura fornite dal compilatore C18:

OpenTimer2(TIMER2_CONFIG);

e a quel punto la Timer 2 comincia a contare usando suo registro TMR2 di 8 bit e prescaler 1:16 e postscaler 1:16, fino ad cambiamento del valore in registro IPR1 che sta Interrupt Priority Request, e quindi la programma principale entra nella ISR predefinita.

Simile come nel caso del USART ISR, la funzione Timer2 ISR si essegue quando la

perifericha genera una richiesta di interruzione, quindi si porta all’indirizzo di memoria 000018h, dove si trova il codice da eseguire per la richiesta di interruzione. E’ necessario dunque implementare nel progetto tale blocco di codice, ed è necessario anche memorizzarlo a partire dall’indirizzo di memoria 000018h (vettore di interruzione di priorità bassa). Il blocco ha una forma di genere:

#pragma code timer2_lowinterrupt = 0x018 void timer2_lowint (void) { _asm goto timer2_handler _endasm }

Dal momento che la perifericha ha richiesto un interruzione, vi sara una ISR per la

elaborazione dei dati in buffer (se ci sono) e esegue le richieste da parte applicativo, quindi se GPSAA a status “Enabled”, allora il microncontrollore manda i comandi AT al modulo GE863-GPS per ricevere i dati per la posizione attuale GPS. La funzione ISR in forma logica si può vedere nella Figura 14. e il codice sorgente ha la forma seguente:

#pragma interruptlow timer2_handler void timer2_handler (void) {

... PIR1bits. TMR2IF = 0; /* Clear the interrupt flag */

}

Page 26: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 24 -

l’ultima istruzione di una ISR consiste nel resettare il flag di interruzione corrispondente, affinché non si verifichi un procedimento ricorsivo. La direttiva #pragma interruptlow fa della funzione specificata una ISR, ovvero sostituisce sostanzialmente all’istruzione classica di ritorno dal funzione (RETURN) al termine della funzione l’istruzione “Return from Interrupt” (RETFIE).

Figura 14. La funzione dell’interruzione parte

con la chiamata del funzione per elaborazione dei dati nel software buffer di ricezione della USART (se la applicazoine non ha elaborato tutti i dati ricevuti, se bufRxUser != bufRxNext), dopo di che controlla se ci sono le richieste di esecuzione da parte applicativo, quale sono ad esempio la richiesta del posizionamento attuale GPS o la richiesta per invio del nuovo SMS, ecc. Possiamo notare che l’elaborazione dei dati nello buffer si esegue per ogni interruzion, e l’esecuzione delle richieste si eseguono dopo ogni 256 (8 bit) chiamate del interruzione. L’ultima istruzione consiste nel resettare il flag di interruzione corrispondente e in questo modo si evitano interruzioni ricorsive dovuto a questo bit di richiesta di interruzione.

Questa funzione è nucleo del l'applicazione in cui i dati ricevuti dal modulo GE863-GPS

vengono elaborati e le domande dell'applicazione sono poste al modulo GSM. Prima di tutto questa funzione è in corso di eseguire l'elaborazione dei dati in software buffer del ricezione della USART e dopo di che eseguirà nuove richieste per l’applicazione. E 'importante notare che l'elaborazione di dati sta per essere eseguita su ogni richiesta di interruzione e le richieste dell'applicazione verrà eseguito su ogni 256. richiesta di interruzione. Questo approccio è stato scelto per evitare il buffer overflow e funziona molto bene.

Ci sono molti tipi di dati nel buffer, ma siamo interessati solo in due tipi, e sono quelle

messaggio utente (+CMT) e la posizione GPS acquisiti ($GPSACP). Effettuando una ricerca per '$' carattere in buffer di ricezione, si può trovare puntatore di partenza per ogni comando AT in buffer e quindi il puntatore alla memoria di contenuto possono essere confrontati con le stringhe predefinite utilizzato per risolvere i comandi AT in buffer. Il riconoscimento di dati sta per essere trattati con funzioni GE863-GPS manipolazione di file (in seguito spiegato). Se la funzione è sconosciuta, quindi applicazione non reagire a tali dati. Una volta elaborati i dati, possiamo andare a mandare le richieste indirizzate al GE863-GPS. Queste richieste

Page 27: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 25 -

dipendono dai dati elaborati nel buffer di ricezione, queste richieste possono essere: ottenere la posizione GPS attuale o inviare un SMS per informare l'utente. Alla fine sarà chiaro a pulire il flag di interruzione dopo l'esecuzione. La dichiarazione della funzione di elaborazione dei dati può essere trovata nel file "gps_aa.h".

4.1.3. ISR Sovrapposizione

Ci sono due possibili interruzioni che funziono in parallelo, con diverse priorità di interruzione. L'istruzione GOTO USART ISR è situato alla memoria di programma con l'indirizzo 000008h con l’alta priorità dell’interruizone; l'altra istruzione GOTO TIMER ISR è situato alla memoria di programma con l'indirizzo 000018h o interruzione a bassa priorità. Mentre la funzione ISR della USART e totalmente di natura asincrona e con la lunghezza fissa, la funzione ISR dello TIMER è breve e periodico per sua natura, ma la sua richiesta dei cicli di clock per l'esecuzione può essere davvero molto (un sacco dei cicli di clock), quando si esegue la conversione di latitudine e longitudine alle coordinate UTM (X , Y). I cicli di clock richiesto dal ISR funzioni sono rappresentati nella Figura 15. Ma, come abbiamo detto prima, c'è un piccolo problema tra queste due funzioni ISR quando lavorano in parallelo.

Figura 15. Il processo periodico T1 è la

funzione TIMER ISR quando non ci sono dati nel buffer di elaborare e nessun comando AT da richiedere. Il processo T2 richiede molto più tempo rispeto a T1 e ha la natura asincrona, perché USART può sempre ricevere i dati, e alcuni dei dati sono richiesti. La funzione USART ISR è aperiodica con di lunghezza fissa. E 'importante notare che questo è solo un esempio, non un vero e proprio processo di rappresentanza.

Il problema è nato quando la funzione ISR del TIMER in qualche modo trova i liberi cicli di clock per eseguire le sue istruzioni e questo può sucedere perché abbiamo la USART che opera in modo asincrono, e quindi può ricevere i dati in qualsiasi punto del tempo. Ciò significa che ogni carattere ricevuto sulla USART sarà richiesta dell’interruzione, poi elaborati e conservati al software buffer, ma è più veloce microcontrollore rispeto alla velocità di trasmissione della USART, dove si possono trovare alcuni cicli di clock inefficienti che possono essere usati. Il problema comincia quando la funzione IST del TIMER inizia ad elaborare i dati dal software buffer di ricezione della USART, quando la ricezione dei dati non è stata finita. Quindi, se la funzione ISR TIMER inizia con l'elaborazione dei dati prima che si finische la ricezione dei dati, e quindi possiamo aspettarci che la funzione elaborara i dati errati, e questo è rappresentato nella Figura 16.

Page 28: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 26 -

Figura 16. Due funzioni ISR si sovrappongono quando il processo periodico T1 viene interrotto da processo U con la priorità di interruzione più elevata, in cui i dati vengono mesi nel buffer è il puntatore di scrittura salta alla prossima posizione in buffer comincia ad incrementare. A questo punto, interruzione del TIMER avrà al inizio ad elaborare i dati, perché bufRxUser e bufRxNext hanno valori diversi. E 'evidente che i dati elaborati non sono validi.

Per evitare di elaborazione dei dati errati, la funzione ISR della USART all'inizio sarà

resetare il valore del registro TMR2 che acquistare un altro 16 * 256 * 16 (prescaler * timer a 8 bit * postscaler) cicli di clock. Questi 65536 cicli di clock tra ogni interruzione della USART sarà più sufficiente per ricevere e immagazzinare tutti i dati senza esecuzione della funzione TIMER ISR. Poi tutti i dati elaborati saranno regolari e questa è rappresentato nella Figura 17.

Figura 17. Questa figura rappresenta dimonstazione del interruzione con la priorità e con

l'aggiunto reimpostare del registro TMR2 su ogni interruzione di ricezione della USART. Con l'aggiunta di codice che cancella TMR2 registro possiamo notare che il processo di T2 (elaborazione) sta per essere eseguito quando la ricezione dei dati è finita.

Page 29: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 27 -

4.2. Modulo GE863-GPS

La parte del software si può dividere in tre parti. La prima parte consiste la inizializzazione del modulo che facciamo prima di inviare i messaggi che ci servono per l’applicazione. La seconda parte serve per elaborazione dei dati nel buffer di ricezione che servono per attivare (o disattivare) lo dispositivo GPS Area Alarm e per elaborare i dati ricevuti come la risposta al comando AT che contiene la informazione del posizione corrente. La terza e la parte delle richieste fatte tramite i comandi AT per richiedere i dati GPS e per mandare il messaggio SMS al utente.

Importante è ripettere che per tempi di emissione dei comandi si consiglia comunque di

attendere almeno 20 ms tra la fine del ricevimento della risposta e il rilascio del prossimo comando AT.

Il modulo prima di eseguire le richeste dovrebbe essere impostato, quindi nel file

“ge863_h.h” e statto creato il prototipo del funzione initGe863() usato per motivo di inizializzazione e viene eseguito seguente codice: void initGe863() { /* Wait for 20ms before each AT command */

delay20ms(); putrsUSART((const far rom char *)"AT+IPR=0\r"); delay20ms(); putrsUSART((const far rom char *)"AT#SMSMODE=0\r"); delay20ms(); putrsUSART((const far rom char *)"AT+CPMS=SM,SM,SM\r"); delay20ms(); putrsUSART((const far rom char *)"AT+CMGF=1\r"); delay20ms(); putrsUSART((const far rom char *)"AT+CSDH=0\r"); delay20ms(); putrsUSART((const far rom char *)"AT+CNMI=3,2,2,1,0\r"); delay20ms(); return; }

dove per prima abbiamo impostato riconosimento automatico della baud rate del DTE , qualle è in questo caso il microcontrollore. Dopo di che viene impostato il modo di commandi SMS non avanzati, e la memoria preferita per immagazzinaggio dei SMS e commando AT+CMGF si usa per impostare i messaggi SMS in modo testuale (esiste anche PDU). Pen l’ultimo richiede di non mostrrei i valori dei parametri nei codici risultanti, e l’ultima imposta che qualunque nuovo messaggio ricevuto da indicazioni alle apparecchiature terminali, con tutti impostazioni che sono spiegati nei prossimi capitoli.

Dopo di che abbiamo inpostato il dispositivo, per attivazione del dispositivo il DTE

deve ricevere la risposta in formato AT che contiene tutti i informazioni necessari al applicazione del SMS ricevuto. Questo vale perchè il modulo viene impostato di mandare comandi AT al DTE per ogni messaggio ricevuto. Comando AT è “+CMT” che contiene indirizzo originaio (numero di telefono) e dati contenuti nel messaggio (testo ricevuto).

Al fine abbiamo anche la richiesta per posizionamento GPS quale si può richiedere

tramite comando "AT$GPSACP" dove modulo GE863-GPS rispone con l’ultima posizione GPS, che si usa per la elaborazione più avanti. L’altra richiesta è per mandamento del messaggio del alarme e il comando è "AT+CMGS=XXXXXXXXXX,129", dove 129 sta per indirizzo originaio nazionale.

Page 30: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 28 -

4.2.1. Funzione di attesa

La delay20ms(void) è una funzione vera e propria, che sostanzialmente chama la funzione Delay1KTCYx da effettuare per raggiungere l’attesa specificata, quindi esegue un ciclo di chiamate alla funzione fornendole come parametro “0”. Ciascuna Delay1KTCYx(0) corrisponde ad un’attesa pari a 256 * 1000 cicli istruzione, che si traduce in un certo tempo fornita che sia la frequenza di oscillazione che pilota il PIC. Nel caso risultasse necessaria un’attesa di 20 millisecondi, è possibile ricorrere alla funzione delay20ms(void). In realtà questa funzione non è stata mai realizzata, dal momento che avevamo a disposizione un oscillatore da 4MHz, si sarebbe tradotto in un’imprecisione rilevante sul tempo di attesa, dunque si è preferito ricorrere a chiamate esplicite alle funzioni delay. Poiché però ciò avrebbe comportato problemi nel caso di cambio futuro della frequenza di oscillazione (poichè le delay attendono in realtà cicli istruzione, che si traducono in tempi solo una volta fissata la frequenza di oscillazione), è stato scelto di definire la delay20ms(void) come una chiamata ad una certa funzione delay, da eventualmente modificare al cambio di oscillatore (piuttosto che ricambiare tutte le delay all’interno del programma):

#define AT_CMD_DELAY_K 20 /* 20ms delay for FOSC 4MHz */ #define delay20ms(void) Delay1KTCYx(AT_CMD_DELAY_K) Se la frequenza di oscillazione è di 4MHz, il microcontrollore lavora a 1MHz, vale a

dire che ciascuna istruzione dura 1µsec; quindi la Delay1KTCYx(n) attenderà 1000 * n * 1µsec = n * 1000µsec = n * msec.

Da notare infine che le delay richiedono come parametro un numero compreso tra 1 e

255 (e 0 sta per 256), quindi anche la Pause_ms non può attendere più di 256msec.

4.2.2. Comandi AT per l’applicazione

I comandi più importanti usati per l’applicaizone sono:

• AT + IPR = <rate> - DTE Rate Interface fisso Impostare comando specifica il DTE velocità con cui il dispositivo accetta i comandi del modo di comando durante le operazioni, ma può essere utilizzato per fissare il DTE-DCE interfaccia velocità. Se <rate> è impostato a 0, quindi la velocità di rilevamento automatico è abilitato. Se <rate> è specificato e non 0, DTE-DCE velocità è fissata ,e di conseguenza, la velocità di auto-rilevamento (Autobauding) non è abilitata.

• AT + CMGF = [<mode>] - Formato messaggio

Page 31: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 29 -

Impostare il comando seleziona il formato dei messaggi utilizzati con inviare, elenco, leggere e scrivere comandi. Parametro:

<mode> 0 - modalità PDU, come definito in 3,40 GSM e GSM 3.41 (default) 1 - modalità testo

• AT + CNMI [ = [<mode> [,<mt> [,<bm> [,<ds> [,<bfr>]]]]]] - Nuovo messaggio di

indicazioni per le apparecchiature terminali

Impostare il comando seleziona il comportamento del dispositivo sul modo in cui il ricevente della nuovi messaggi dalla rete è indicato per il DTE. Per informazioni dettagliate di questo comando AT, si dovrebbe leggere la AT Command Reference Guide del modulo Telit.

• AT $ GPSACP - Prendi posizione acquisitata Esecuzione comando restituisce le informazioni del l'ultima posizione GPS in formato: $GPSACP: <UTC>, <latitude>, <longitude>, <hdop>, <altitude>, <fix>, <cog>, <spkm>, <spkn>, <date>, <nsat> dove queli parametri per cui siamo interessati sono:

<latitude> - il formato è ddmm.mmmm N/S dove: dd – degrees (00..90), mm.mmmm – minutes (00.0000..59.9999) N/S: North / South

<longitude> - il formato è dddmm.mmmm E/W dove: ddd – degrees (000..180), mm.mmmm – minutes (00.0000..59.9999) E/W: East / West

<fix> - 0 - Invalid Fix, 2 - 2D fix, 3 - 3D fix <nsat> - nn - numero totale di satelliti in uso (00 .. 12)

• AT + CMGS = <da> [,<toda>] – Manda un messaggio

Execution command sends to the network a message. Parameteri:

<da> - indirizzo destinatario, tipo string. <toda> - tipo di indirizzo destinatario

129 – numero in formato nazionale 145 - numero in formato internazionale (contiene il "+")

Page 32: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 30 -

4.3. Sistema di coordinate geografiche

Un sistema di coordinate geografiche consente ogni posizione sulla Terra per essere specificata in tre coordinate, utilizzando principalmente un sistema di coordinate sferico. La Terra non è una sfera, ma una forma irregolare ravvicinamento uno ellissoide, la sfida è quella di definire un sistema di coordinate in grado di precisione topografica ogni funzione come una chiara serie di numeri.

4.3.1. Latitude e Longitude Latitudine (abbreviazione: Lat. o (φ) pronunciata phi) è l'angolo da un punto sulla

superficie terrestre e il piano equatoriale, misurata dal centro della sfera. Linee di giunzione punti della stessa latitudine sono chiamati paralleli, che traccia cerchi concentrici sulla superficie della Terra, parallelamente alla equatore. Il polo nord è di 90 ° di latitudine nord, il polo sud è di 90 ° S. La 0 ° parallelo di latitudine è designato l'equatore. L'equatore è il piano fondamentale di tutti i sistemi di coordinate geografiche. L'equatore divide il mondo in Nord e Sud del mondo.

Longitudine (abbreviazione: Long. o (λ) pronunciata lambda) è l'angolo est o ovest del meridiano di riferimento tra i due poli geografici di un altro meridiano che passa attraverso un punto arbitrario. Tutti i meridiani sono metà di grande cerchio, e non sono parallele. Essi convergono al poli nord e sud.

Una linea che passa vicino al Royal Observatory di Greenwich (vicino a Londra nel

Regno Unito) è stato scelto come internazionale zero longitudine linea di riferenza, il Primo Meridiano. Luoghi da est sono in emisfero orientale, e luoghi da ovest sono in emisfero occidentale. Il antipodi del meridiano di Greenwich è al tempo stesso di 180 ° W e 180 ° E.

Mediante la combinazione di questi due punti di vista, la posizione orizzontale di

qualsiasi posizione sulla Terra può essere specificato.

Figura 18. Representazione della terra usando

latitudine e longitudine. Dove si puo vedere che latitude puo avere i valori da -180° a 180°, e longitude da -90° a 90°.

Page 33: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 31 -

Per qesto motivo viene creata la libreria “ll.h” che definisce i valori minimi e massimi per latitude e longitude, e la structura che contiene tutti due valori.

4.3.2. Proiezione Universal Transverse Mercator

La Universal Transverse Mercator (UTM) sistema di coordinate è una griglia basata su

metodo di specificare le località sulla superficie della Terra. Esso viene utilizzato per identificare luoghi sulla terra, ma differisce dal metodo tradizionale di latitudine e longitudine in diversi aspetti.

Il sistema UTM divide la superficie della Terra tra 80° S di latitudine e 84° N di

latitudine in 60 zone, ogni 6° di longitudine in larghezza e centrata su un meridiano di longitudine. Zone sono numerate da 1 a 60. Ciascuna delle 60 zone di longitudine nel sistema UTM si basa su una proiezione di Mercatore trasversale, che è in grado di mappare una grande regione del nord-sud misura con una bassa quantità di distorsione.

Una posizione sulla Terra è di riferimento nel sistema UTM da UTM zona, e la copia di coordinate easting e northing. Il easting è la distanza di proiezione la posizione del meridiano centrale, mentre il northing è la proiezione a distanza del punto da l'equatore. Il punto di origine di ogni zona UTM è l'intersezione delle equatore e la zona centrale del meridiano. Al fine di evitare di trattare con numeri negativi, il meridiano centrale di ogni zona è assegnato un "falso easting" valore di 500.000 metri. Pertanto, nulla ovest del meridiano centrale avrà un easting meno di 500.000 metri. Ad esempio, UTM eastings vanno da 167.000 a 833.000 metri metri l'equatore (questi intervalli stretta verso i poli).

Ogni zona è segmentato in 20 bande di latitudine. Ogni latitudine banda è di 8° elevati,

ed è a partire da letterati "C" a 80° S, aumentando il alfabeto inglese fino a "X", omettendo le lettere "I" e "O" (a causa della loro somiglianza con i numeri uno e zero). L'ultima fascia di latitudine, "X", è esteso un ulteriore 4°, in modo che termina al 84 ° di latitudine N, coprendo in tal modo la più settentrionale del territorio sulla Terra.

Per questo motivo viene creata la libreria “utm.h” che contient tutti i definizioni di cui

abbiamo parlato prima (numero delle zone, largezza della zona, …). Tra l’altro ce una strutura che si usa per posizionamento UTM che contiene i dati della posizione.

Poi vengono create anche le funzioi tramite cui si può calcolare la posizione UTM

usando i valori di latitude e longitude e datum di conversione a piacere, e la funzione che calcola la distanza tra i due posizioni UTM usando la teorema di Pitagora. Queste due funzioni vanno spiegate dopi in testo.

Page 34: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 32 -

Figura 19. La representazione del mondo usando la proiezione Universal Transverse Mercator. Ci sono 60 zone per longitudine dove ogni zona vale per 6° (360° / 60), e ci sono altre 20 zone per latitudine.

4.3.3. GPS Datum

Valori di latitudine e longitudine possono essere basate su diversi sistemi geodetici o proiezioni, il più comune è WGS 84 utilizzati da tutte le apparecchiature GPS. Altre proiezioni sono comunque significativo, perché sono stati scelti da una organizzazione nazionale cartografica come il metodo migliore per rappresentare la loro regione, e queste sono le proiezioni su mappe stampate. Utilizzando la latitudine e la longitudine trovato su una mappa non può dare lo stesso riferimento come a un ricevitore GPS. Coordinate dal sistema di mappatura a volte può essere cambiato in un altro dato utilizzando una semplice traduzione.

Creazione del datum viene fatta tramite la libreria “datum.h”, dove abbiamo la strutura

predefinita che può portare tutti i valori constanti per i datum diversi. In nostro modulo GPS (integrato nella Telit GE863-GPS) calcola la posizione iniziale e

velocità utilizzando un terra-centrata terra-fissa (ECEF) sistema di coordinate. I risultati possono essere convertiti a un modello di terra (geoid) definito dalla dato selezionato. Per GE863-GPS datum di default è WGS 84 (World Geodetic System 1984), che in tutto il mondo fornisce un comune sistema di griglia che può essere tradotto in sistemi di coordinate locali o proiezioni.

I valori constanti usati per i calcoli con Datum WGS 84 sono:

• Raggio equatoriale (a) = 6,378,137 metri • Raggio polare (b) = 6,356,752.3142 metri

Page 35: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 33 -

• Schiacciafilo (a-b)/a = 1/298.257223563 • Utilizzo = Globale

Per tutti i questi valori constanti viene creata la libreria “wgs84.h”che contiene anche i

valori constanti che sono determinati per i calcoli futuri. La libreria contiene anche la predefinizione per creazione dell’oggetto di structura structDatum.

4.3.4. Conversione da LL a UTM

Usando tutti i questi dati appena racontati possiamo calcolare la posizione UTM usando i valori del latitudine e longitudine, dopo di che usando i coordinate X e Y e teorema di Pitagora, possiamo calcolare il valore della distanza in metri fra i due punti sulla terra.

I simboli:

• lat = punto di latitude • long = punto di longitude • long0 = zona di meridiane centrale • k0 = scala lungo long0 = 0.9996 • e = SQRT(1-b2/a2) = .08 circa. Questo è l'eccentricità dei beni della terra ellittica

sezione. • e'2 = (ea/b)2 = e2/(1-e2) = .007 circa. Il quantitativo e 'solo si verifica anche nel caso in

poteri in modo che deve essere calcolato come e'2. • n = (a-b)/(a+b) • nu = a/(1-e2sin2(lat))1/2. Questo è il raggio di curvatura della terra perpendicolare al

piano meridiano. • p = (long-long0) • sin1" = sine di un secondo da arco = pi/(180*60*60) = 4.8481368 x 10-6.

Calcolare il meridionale arco (Tutti gli angoli sono in radianti): S è l'arco meridionale attraverso il punto in questione (la distanza lungo la superficie

della terra da l'equatore).

S = A'lat - B'sin(2lat) + C'sin(4lat) - D'sin(6lat) + E'sin(8lat),

dove tutti i angoli sono in radianti e • A' = a[1 - n + (5/4)(n2 - n3) + (81/64)(n4 - n5) ...] • B' = (3an/2)[1 - n + (7/8)(n2 - n3) + (55/64)(n4 - n5) ...] • C' = (15an2/16)[1 - n + (3/4)(n2 - n3) ...] • D' = (35an3/48)[1 - n + (11/16)(n2 - n3) ...] • E' = (315an4/51)[1 - n ...]

Page 36: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 34 -

Conversione (Tutti gli angoli sono in radianti):

Y = northing = K1 + K2p2 + K3p4,

dove

• K1 = Sk0, • K2 = k0sin21" nu sin(lat)cos(lat)/2 • K3 = [k0sin41" nu sin(lat)cos3(lat)/24][(5 - tan2(lat) + 9e'2cos2(lat) + 4e'4cos4(lat)]

X = easting = K4p + K5p3,

dove

• K4 = k0sin1" nu cos(lat) • K5 = (k0sin31" nu cos3(lat)/6)[1 - tan2(lat) + e'2cos2(lat)] Easting X è relativa al meridiano centrale. Per convenzionale UTM easting aggiungere

500.000 metri a X, ma anche per convenzionale UTM norting dobbiamo aggiungere 10.000.000 metri al Y.

Al fine possiamo calcolare la distanza tra i due posizioni UTM usando la funzione

predefinita nella libreria “utm.h” che calcola la distanza usando la teorema di Pitagora, e con Figura 20. si chiarisce il calcolo della distanza in metri.

Figura 20. Per calcolare la distanza finale

tra i due posizioni UTM, basta sfrutare la teorema di Pitagora con i valori di differenza fra i valori del posizione norting e easting.

Page 37: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 35 -

4.4. Estensione delle librerie

Per motivo di semplificazione del codice, che usi futuri, vengono sviluppate le librerie “stdlib_e.h” e “string_e.h” che sono estensioni delle librerie principali. Dentro le librerie ci sono funzioni che somigliano alle funzioni delle librerie principali, pero hanno qualche vantagio in più.

La libreria “string_e.h” contiene solo la funzione strnchr(str, c, n) è la funzione uguale come strchr(str, c) che principalmente cerca un caratere nella stringa, pero nella estensione dobbiamo inserire anche il numero dei carateri da cercare. Alla fine la fuzione torna il puntatore al n-esimo caratere trovato nella stringa. Se la ricerca del caratere non è finita senza successo la funzione torna il valore NULL o 0x00.

Con questa funzione dobbiamo stare molto attenti quando rispetiamo le regole come per

la funzione strchr(str, c) che si possono trovare nel documento ”MPLab C18 Libraries” . E importante dire che questa funzione non è optimizata, quindi esegue un codice molto semplice scrito in C.

La libreria “stdlib_e.h” contiene due funzioni atonf(s, n) e atoni(s, n) che sono uguali

come le funzioni atof(s) e atoi(s) che principalmente converte una stringa in double o integer, pero nella estensione dobbiamo inserire anche il numero dei carateri da conversione. Alla fine la fuzione torna il valore convertito fino al n-esimo caratere nella stringa.

Con queste funzioni dobbiamo stare molto attenti quando rispetiamo le regole come per

le funzioni atof(s) e atoi(s) che si possono trovare nel documento ”MPLab C18 Libraries” . E importante dire che questa funzione non è optimizata, quindi esegue un codice molto semplice scrito in C.

Page 38: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 36 -

5. CONCLUSIONE

La progettazione del software è stata svolta correttamente e il sistem complessivo (PIC 18 e GE863) funziona correttamente, pero esiste la possibilita di incontrare alcuni problemi perche il software non era fatto per capire i spostamneti fra le zone UTM. Comunque in un applicazione professionale sicuramente verrano implementati anche i pezzi di software che controllano il spostamento fra le zone. Le librerie del progetto sono state sviluppate con la possibilita di integrazioni futuri. Sicuramente alcune librerie possono essere optimizate un po di più, pero in questo tipo di applicazione questo non era neccessario.

I problemi incontrati sono alcuni perzzi di codice scriti con C 18 v3.10 non compilati

bene dal MPLab v7.51, e quindi il microcontrollore si incasinava. Questo problema verra superato separando il codice nei pezzi piu piccoli (stack problem?) che si può vedere nel codice sorgente della libreria “utm.h”. L’altro problema riscontrato in fase di costruzione del progetto, ma non eliminabile è il ritardo dovuto alla ricezione di un messaggio inviato da un telefono. Purtroppo non c’è alcun metodo per eseguire una specie di “refresh” della rete GSM, quindi non resta che attendere il tempo necessario all’operatore telefonico di far giungere i messaggi a destinazione.

Come ogni buon progetto, anche i moduli che compongono il presente lavoro sono stati realizzati nell’ottica di poter avere delle features future sempre maggiori. Come la possibilita di optimizzare il software dell’applicazione per creare un dispositivo che può essere presentato sul mercato.

Aumentando la complessità del progetto si potrebbe creare una vera e propria unità di

GPS Area Alarm con lo scopo di avere tanti oggetti sotto la supervisione (le barce o le macchine, i animali ecc.) tramite sms o GPRS. Il vantaggio di usare una PIC permette inoltre di non produrre una scheda con funzionalità vincolate ad un particolare uso pensato in fase di progetto, bensì si ottiene un sistema aperto anche ad esempio a particolari esigenze future della clientela (customizzazione).

Conclusivamente la costruzione di opportuna circuiteria per collegare assieme PIC e

modulo GSM, senza fare uso delle schede di supporto PICDEM2 ed EVK2. A questa soluzione si aggiunge anche la possibilità di interfacciamento con tastierino e display LCD (o direttamente touch-screen), per permetterne la configurazione senza la rete GSM; questo renderebbe di fatto il nostro GPS Area Alarm un dispositivo stand-alone pronto per poter essere immesso sul mercato.

Page 39: GPS Area Alarm Ilic Dejan 2008

GPS Area Alarm ______________________________________________________________________________________________________________________________________________________________________________________________________________________________

- 37 -

6. BIBLIOGRAFIA Informazioni più importanti per sviluppo del progetto verrano presi dai seguenti

documenti e siti Web:

• http://www.microchip.com o PIC18FXX2 Data Sheet; o PICDEM2 Plus Demonstration Board User’s Guide; o MPLAB IDE User’s Guide; o MPLAB C18 C Compiler Getting Started; o MPLAB C18 C Compiler User’s Guide; o MPLAB C18 C Compiler Libraries.

• http://www.telit.com o Telit EVK2 User’s Guide; o AT Commands Reference Guide; o GE863-GPS Software User’s Guide; o GE863-GPS Hardware User’s Guide.

• http://www.wikipedia.org

o Geographic Coordinate System o Universal Transverse Mercator

• http://www.uwgb.edu o UTMFormulas.htm