SlideShare a Scribd company logo
1 of 39
Download to read offline
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
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
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.
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
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
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 -
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.
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 -
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.
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 -
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.
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.
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.
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.
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.
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.
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.
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
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.
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 -
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 */
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 -
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 -
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
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 */ 
}
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
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.
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 -
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.
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
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 "+")
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°.
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 -
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
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 ...]
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.
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.
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.
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

More Related Content

Similar to GPS Area Alarm Ilic Dejan 2008

Sistemi con telecamera per macchine mobili
Sistemi con telecamera per macchine mobiliSistemi con telecamera per macchine mobili
Sistemi con telecamera per macchine mobiliifm electronic gmbh
 
Sogei Premio PA Sostenibile 2018
Sogei Premio PA Sostenibile 2018Sogei Premio PA Sostenibile 2018
Sogei Premio PA Sostenibile 2018leorob
 
Power Engineering SmartPLC
Power Engineering SmartPLC Power Engineering SmartPLC
Power Engineering SmartPLC Luciano Minerva
 
Smart Technology 3 novembre
Smart Technology 3 novembreSmart Technology 3 novembre
Smart Technology 3 novembrecanaleenergia
 
Smart Technology 3 novembre
Smart Technology 3 novembreSmart Technology 3 novembre
Smart Technology 3 novembrecanaleenergia
 
Realizzazione di un controllore basato su piattaforma robotica Thymio 2.
Realizzazione di un controllore basato su piattaforma robotica Thymio 2.Realizzazione di un controllore basato su piattaforma robotica Thymio 2.
Realizzazione di un controllore basato su piattaforma robotica Thymio 2.anwarNazik
 
Opportunità e potenzialità di una Chain 2 negli smart meters di acqua e gas. ...
Opportunità e potenzialità di una Chain 2 negli smart meters di acqua e gas. ...Opportunità e potenzialità di una Chain 2 negli smart meters di acqua e gas. ...
Opportunità e potenzialità di una Chain 2 negli smart meters di acqua e gas. ...Servizi a rete
 
Realizzazione di una base di dati per la memorizzazione di dati provenienti d...
Realizzazione di una base di dati per la memorizzazione di dati provenienti d...Realizzazione di una base di dati per la memorizzazione di dati provenienti d...
Realizzazione di una base di dati per la memorizzazione di dati provenienti d...mfurlanetto
 
Mantova d@to sicuro forumpa2017
Mantova d@to sicuro forumpa2017Mantova d@to sicuro forumpa2017
Mantova d@to sicuro forumpa2017Andrea Piscopo
 
MOBILE MONITORING - monitoraggio e valutazione delle infrastrutture di rete m...
MOBILE MONITORING - monitoraggio e valutazione delle infrastrutture di rete m...MOBILE MONITORING - monitoraggio e valutazione delle infrastrutture di rete m...
MOBILE MONITORING - monitoraggio e valutazione delle infrastrutture di rete m...Ro Technology
 
Mosaic screening solution-18_06_2020
Mosaic screening solution-18_06_2020Mosaic screening solution-18_06_2020
Mosaic screening solution-18_06_2020Lorenzo Tornatore
 
Smart Platform: monitoraggio e audit energetico
Smart Platform: monitoraggio e audit energeticoSmart Platform: monitoraggio e audit energetico
Smart Platform: monitoraggio e audit energeticoMariacarla Millone
 
Tecniche di localizzazione
Tecniche di localizzazioneTecniche di localizzazione
Tecniche di localizzazioneFulvietta Favore
 
Realizzazione di un controllore basato su piattaforma robotica Thymio 2.
Realizzazione di un controllore basato su piattaforma robotica Thymio 2.Realizzazione di un controllore basato su piattaforma robotica Thymio 2.
Realizzazione di un controllore basato su piattaforma robotica Thymio 2.anwarNazik
 
Data logger SOFREL LT/LT-US: Soluzioni per reti di acque reflue
Data logger SOFREL LT/LT-US: Soluzioni per reti di acque reflue  Data logger SOFREL LT/LT-US: Soluzioni per reti di acque reflue
Data logger SOFREL LT/LT-US: Soluzioni per reti di acque reflue LACROIX Sofrel Srl
 
Smart grid 4 novembre
Smart grid 4 novembreSmart grid 4 novembre
Smart grid 4 novembrecanaleenergia
 
Ldb 25 strumenti gis e webgis_2014-05-29 spannicciati - 3 acquisizione dati (...
Ldb 25 strumenti gis e webgis_2014-05-29 spannicciati - 3 acquisizione dati (...Ldb 25 strumenti gis e webgis_2014-05-29 spannicciati - 3 acquisizione dati (...
Ldb 25 strumenti gis e webgis_2014-05-29 spannicciati - 3 acquisizione dati (...laboratoridalbasso
 

Similar to GPS Area Alarm Ilic Dejan 2008 (20)

Sistemi con telecamera per macchine mobili
Sistemi con telecamera per macchine mobiliSistemi con telecamera per macchine mobili
Sistemi con telecamera per macchine mobili
 
Sogei Premio PA Sostenibile 2018
Sogei Premio PA Sostenibile 2018Sogei Premio PA Sostenibile 2018
Sogei Premio PA Sostenibile 2018
 
SmartSUN
SmartSUNSmartSUN
SmartSUN
 
Power Engineering SmartPLC
Power Engineering SmartPLC Power Engineering SmartPLC
Power Engineering SmartPLC
 
Smart Technology 3 novembre
Smart Technology 3 novembreSmart Technology 3 novembre
Smart Technology 3 novembre
 
Smart Technology 3 novembre
Smart Technology 3 novembreSmart Technology 3 novembre
Smart Technology 3 novembre
 
Realizzazione di un controllore basato su piattaforma robotica Thymio 2.
Realizzazione di un controllore basato su piattaforma robotica Thymio 2.Realizzazione di un controllore basato su piattaforma robotica Thymio 2.
Realizzazione di un controllore basato su piattaforma robotica Thymio 2.
 
Smart Sun
Smart SunSmart Sun
Smart Sun
 
Opportunità e potenzialità di una Chain 2 negli smart meters di acqua e gas. ...
Opportunità e potenzialità di una Chain 2 negli smart meters di acqua e gas. ...Opportunità e potenzialità di una Chain 2 negli smart meters di acqua e gas. ...
Opportunità e potenzialità di una Chain 2 negli smart meters di acqua e gas. ...
 
Manuale Smsshow C112 A4
Manuale Smsshow C112 A4Manuale Smsshow C112 A4
Manuale Smsshow C112 A4
 
Realizzazione di una base di dati per la memorizzazione di dati provenienti d...
Realizzazione di una base di dati per la memorizzazione di dati provenienti d...Realizzazione di una base di dati per la memorizzazione di dati provenienti d...
Realizzazione di una base di dati per la memorizzazione di dati provenienti d...
 
Mantova d@to sicuro forumpa2017
Mantova d@to sicuro forumpa2017Mantova d@to sicuro forumpa2017
Mantova d@to sicuro forumpa2017
 
MOBILE MONITORING - monitoraggio e valutazione delle infrastrutture di rete m...
MOBILE MONITORING - monitoraggio e valutazione delle infrastrutture di rete m...MOBILE MONITORING - monitoraggio e valutazione delle infrastrutture di rete m...
MOBILE MONITORING - monitoraggio e valutazione delle infrastrutture di rete m...
 
Mosaic screening solution-18_06_2020
Mosaic screening solution-18_06_2020Mosaic screening solution-18_06_2020
Mosaic screening solution-18_06_2020
 
Smart Platform: monitoraggio e audit energetico
Smart Platform: monitoraggio e audit energeticoSmart Platform: monitoraggio e audit energetico
Smart Platform: monitoraggio e audit energetico
 
Tecniche di localizzazione
Tecniche di localizzazioneTecniche di localizzazione
Tecniche di localizzazione
 
Realizzazione di un controllore basato su piattaforma robotica Thymio 2.
Realizzazione di un controllore basato su piattaforma robotica Thymio 2.Realizzazione di un controllore basato su piattaforma robotica Thymio 2.
Realizzazione di un controllore basato su piattaforma robotica Thymio 2.
 
Data logger SOFREL LT/LT-US: Soluzioni per reti di acque reflue
Data logger SOFREL LT/LT-US: Soluzioni per reti di acque reflue  Data logger SOFREL LT/LT-US: Soluzioni per reti di acque reflue
Data logger SOFREL LT/LT-US: Soluzioni per reti di acque reflue
 
Smart grid 4 novembre
Smart grid 4 novembreSmart grid 4 novembre
Smart grid 4 novembre
 
Ldb 25 strumenti gis e webgis_2014-05-29 spannicciati - 3 acquisizione dati (...
Ldb 25 strumenti gis e webgis_2014-05-29 spannicciati - 3 acquisizione dati (...Ldb 25 strumenti gis e webgis_2014-05-29 spannicciati - 3 acquisizione dati (...
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