Ldb 25 strumenti gis e webgis_2014-05-29 spannicciati - 3 acquisizione dati (...
GPS Area Alarm Ilic Dejan 2008
1. 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
2. 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
3. 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.
4. 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
5. 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
6. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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
- 4 -
7. 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.
8. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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.
- 6 -
9. 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.
10. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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
- 8 -
11. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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)),
- 9 -
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.
12. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
La configurazione della USART è stata eseguita attraverso funzione di compilatore C18
PIC DEMO
BOARD TELIT EVK2
- 10 -
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
TX
RX
1
9
GND
TX
RX
1
9
1
9
PC
GND
TX
RX
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.
13. 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.
14. 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.
15. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
La tensione di alimentazione al principio attivo antenna GPS è fornito dal GE863-GPS.
- 13 -
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.
16. 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.
17. 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.
18. 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
19. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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:
- 17 -
• 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.
20. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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.
- 18 -
21. 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 */
22. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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 */
- 20 -
23. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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.
- 21 -
24. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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:
- 22 -
#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
25. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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.
- 23 -
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 */
}
26. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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
- 24 -
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
27. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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".
- 25 -
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.
28. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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.
- 26 -
29. 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=0r");
delay20ms(); putrsUSART((const far rom char *)"AT#SMSMODE=0r");
delay20ms(); putrsUSART((const far rom char *)"AT+CPMS=SM,SM,SMr");
delay20ms(); putrsUSART((const far rom char *)"AT+CMGF=1r");
delay20ms(); putrsUSART((const far rom char *)"AT+CSDH=0r");
delay20ms(); putrsUSART((const far rom char *)"AT+CNMI=3,2,2,1,0r");
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.
30. 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
31. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
Impostare il comando seleziona il formato dei messaggi utilizzati con inviare, elenco,
leggere e scrivere comandi.
Parametro:
- 29 -
<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 "+")
32. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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.
- 30 -
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°.
33. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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.
- 31 -
34. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
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.
- 32 -
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
35. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
• 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.
- 33 -
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 ...]
36. GPS Area Alarm
______________________________________________________________________________________________________________________________________________________________________________________________________________________________
Conversione (Tutti gli angoli sono in radianti):
Y = northing = K1 + K2p2 + K3p4,
- 34 -
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.
37. 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.
38. 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.
39. 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