Sistem de Timp Real Bazat pe Tehnologii Gsm

Sistem de timp real bazat pe tehnologii GSM

Cuprins

Introducere

CAPITOLUL 1

Componente sistem

1.1 Schema electrică a aplicației

1.1.1Subsistem atentionare Sonora

1.1.2 Butoanele de comanda

1.1.3 LCD

1.1.4 Tastatura

1.1.5 Interfața serială

1.1.6 Microcontrolerul PIC16f877A

1.2 Descrierea aplicației

CAPITOLUL 2

Arhitectura software a sistemului

2.1 Software Proteus ISIS[7]

2.1.1 Flexibilitate

2.1.2Productivitate

2.1.3Cost

2.1.4 Concepte VSM Proteus

2.1.5 ISIS și rețele

2.1.6 Descriere generală a softului Proteus ISIS

2.2 Mediul de programare MicroC[6]

2.3 Alte soft-uri folosite

CAPITOLUL 3

CONCLUZII

BIBLIOGRAFIE

Introducere

Lucarea de față propune un sistem de timp real bazat pe tehnologii GSM. Partea electronică a aplicație este simulată cu ajutorul softului Proteus ISIS iar microcontroler-ul PIC este programat cu ajutorul softului MikroC.

Conceptul care stă la baza tehnologiei GSM, ca și în cazul altor rețele celulare, este de a suprapune o rețea peste infrastructura de linii de comunicație ale rețelelor telefonice terestre. Rețeaua telefonică d terestră asigură, pe lângă conexiunea între abonații din rețeaua de telefonie fixă și cei din rețeaua mobilă, conectivitatea între abonații din rețeaua mobilă, aflați în celule situate la mare distanță, sau în rețelemai mici dezvoltate de operatori diferiți.

Tehnologia GSM reprezintă un prim pas către rețelele inteligente datorită faptului că orice modul GSM include un system de semnalizare.

Fig1 Funcțiile terminalului de semnalizare (SP)

Dialogul între comutator se realizează prin terminalele semafor care actioneza ca surse și destinatari de mesaje sau pachete de date.

Sistemul propus în aceasta lucrare are schema bloc prezentată în figura 2.

Fig 2 Schema bloc sistem

Caracteristicile acestuia sunt:

LCD pentru afișarea mesajelor

Tastatură pentru introducearea numărului de telefon pe care vrem să-l apelăm

Transmiterea prin tehnologia GSM a comenzilor de tip AT

Primul capitol prezintă componentele sistemului. Se oferă și se explică schema electronică implementată și simulată în ISIS Professional 7.1 și o a doua schemă ce implică schimbul de mesaje de tip AT în sistem. Tot aici se oferă informații despre microcontroler, LCD, tastatură, interfață serială, ceas de timp real. În fiecare caz s-au făcut referiri la conexiunile electronice și la rutinele de cod, acolo unde a fost cazul.

Al doilea capitol prezintă arhitectura software a sistemului cu referire la aplicația din microcontroler.

CAPITOLUL 1

Componente sistem

1.1 Schema electrică a aplicației

Așa cum se poate observa și în figură 1.1, sistemul propus cuprinde următoarele module:

tastatură 3X4 necesară pentru introducerea numărului de telefon apelat

2 teminale virtuale pentru a putea simula comunicația între cele două terminale fizice GSM

LCD pentru afișarea comenzilor

modul RS232

avertizor sonor care se activează la apăsarea fiecărei taste

5 butoane.

În paragrafele următoare vor fi prezentate fiecare din aceste componente.

Fig 1.1 Schema electrică a procesului

1.1.1Subsistem atentionare Sonora

La apasarea fiecarei taste sistemul va produce un sunet. Acest subsistem este conectat la portul C al microcontroller-ului PIC.

Fig 1.2 Avertizor sonor

Pentru ca avertizorul sonor sa genereze sunet am realizat urmatoarea secventa de cod C:

void generate_tone(long frequency, long duration)

{

int32 total_delay_time; // in microseconds

long total_ms_delay_time, total_us_delay_time;

int num_us_delays, num_ms_delays, ms_delay_time, us_delay_time;

long num_periods;

total_delay_time = (1000000/frequency)/2-10; // calculate total delay time (10 for error)

total_ms_delay_time = total_delay_time/1000; // total delay time of ms

num_ms_delays = total_ms_delay_time/250; // number of 250ms delays needed

ms_delay_time = total_ms_delay_time%250; // left over ms delay time needed

total_us_delay_time = total_delay_time%1000; // total delay time of us (ms already acounted for)

num_us_delays = total_us_delay_time/250; // number of 250us delays needed

us_delay_time = total_us_delay_time%250; // left over us delay time needed

num_periods = ((int32)duration*1000)/(1000000/frequency);

while((num_periods–) != 0)

{

do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);

output_high(TONE_PIN);

do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);

output_low(TONE_PIN);

}

return;

}

1.1.2 Butoanele de comanda

Cel mai simplu mod de interacțiune al unui utilizator cu un microcontroler îl constituie folosirea butoanelor.

Pentru a putea transmite comenzi microcontrolerului am ales butoane de tip push-button.

Fig 1.3 Butoanele sistemului

Prin apastrea fiecărei buton se trasmite o anumită comandă :

butonul CLEAR ALL șterge LCD-ul și reia transmisia datelor de la început

butonul AT trimite comanda cu același nume la microcontroller și pregătește aplicația pentru transmiterea de date între modulele GSM

butonul CALL activează funcția de apel a terminalului GSM 2 prin terminalul GSM 1

butonul SEND SMS face posibilă transmiterea unui sms de la terminalul GSM 1 la terminalul GSM 2

prin butonul IMEI putem afla numărul IMEI al terminalului GSM 1

Butonul Send SMS

Rețelele de telefonie mobile au evoluat de la transmiterea vocală la o varietate de servicii cum ar fi mesageria și navigarea. Dacă la început comunicarea vocală era însoțită doar de servicii de date cu circuite commutate, acum există diferite mijloace de comunicare cu pachete commutate.

Folosirea tehnologiei de transmisie a SMS-urilor este un successin taoata lumea. Acest serviciu este principal sursă de venit a opecatorilor GSM.

Avantajele folosirii SMS-ului sunt:

pot fi expediate chiar dacă destinatarul nu este conectat la rețeaua GSM;

pot fi citite oricând.

Serviciul de mesagerie text este unul dintre cele mai folosite servicii având peste 2,4 miliarde de utilizatori active, 74 % fiind abonați la telefonie mobile.

Ideea transmiterii SMS așa cum este folosit în zilelel noastre provine din radio-telegrafie, iar în anul 1985 a fost definite ca parte a sistemului global de comunicații GSM.

Conceptul de mesaje text nu a fost utilizat la începutul anilor ‟80 de către toate companiile de sisteme de comunicații, acesta a fost dezvoltat în compania franco-germana GSM în 1984 de Friedhelm Hillebrand și Bernard Ghillebaert. GSM-ul a fost optimizat pentru telefonie, din moment ce aceasta a fost declarată principala aplicație.

În 1985, la Oslo, s-a discutat pentru prima dată propunere în ceea ce privește dezvoltarea conceptului. Propunerea a fost în continuare elaborată de France Telecom, în colaborare cu o companie din Germania, Deutsche Telekom.

O descriere a serviciului inițial de sms este dată de:

SMS-MT (Short message Mobile Terminated): este capacitatea unei rețele de a transmite un mesaj text scurt cu un telefon mobil. Mesajul este trimis printr-un telefon sau de către o aplicație software.

SMS-MO (Short message Mobile Originated): capacitatea unei rețele de a transmite un mesaj text la un alt telefon mobil sau la o aplicație software.

Short message Cell Broadcast

Serviciul SMS a fost inițial conceput ca fiind parte a GSM-ului, dar este acum disponibil pe o gamă mult largă de rețele, inclusiv rețele 3G sau chiar 4G. Totuși, nu toate sistemele de mesagerie text utilizează SMS-ul, de exemplu o alternativă a conceptului poate fi aplicația SkyMail-ul de la J-Phone, din Japonia. Mesajele de tip e-mail de la telefoane, cum ar fi NTT DoCoMo i-mode și RIM BlackBerry, folosesc protocoale standard de e-mail, cum sunt SMTP peste TCP/IP.

Pentru a putea transmite un SMS s-au folosit următoarele comenzi AT prin intermediul unor constante sau variabile C:

void sendsms(){

printf("AT+CMGF=1\r");

delay_ms(1000);

printf("AT+CMGS=\"");

printf(num);

printf("\"\r");

delay_ms(1000);

printf(mes);

printf(&cz);

lcd_putc("\f");

}

Butonul IMEI

Numărul IMEI este un acronim pentru – Internațional Mobile Equipment Identity, deci acesta este codul unic de identificare al ori tcarui telefon mobil de tip GSM, WCDMA si iDEN. Așa cum fiecare peroana are un cod numaric personal, tot așa fiecare telefon are un IMEI.

Ca să se poată afla ce cod IMEI are un telefonul mobil, trebuie să tastați *#06#. Pe unele telefoane mobile ar putea să apară direct, iar pe altele trebuie mai trebuie apăsat OK sau Call.

Fig 1.4 Codul de apel pentru aflarea numarului IMEI al unui telefon

De obicei, codul IMEI sepoate găsi imprimat pe etichetă din spatele telefonului, sub baterie, dar și pe cutia telefonului mobil (sticker).

Fig 1.5 Numarul IMEI

Codul IMEI este alcătuit din 15 cifre, acestea fiind uneori printate sub forma unor grupuri de cifre separate cu puncte, spații sau slashuri.

IMEI-ul este un grup întreg de 15 cifre, fără a lua în considerare spațiile dintre cifre.

Seria IMEI se află și în memoria telefonului iar aceasta nu poate fi ștearsă decât dacă se schimbă procesorul, telefonul respectiv obținând în acest fel o altă serie IMEI. De obicei, nu se practică acest lucru întrucât implică, unele costuri destul de mari.

În comparație cu IMSI-ul (codul unic de identificare al unui SIM card), IMI-ul reprezintă cheia de autenticficare și conectare a unui telefon mobil, la o rețea GSM, la diverses servere, operațiuni bancare efectuate pe mobil sau alte aplicații software.

Din punc de vedere al securității naționale și al operatorulGSM, acest număr de identificare este folosit pentru filtrarea utilizatorilor rețelei după anumite creiterii și chiar este posibilă identificarea unui anumit utilizator, pentru monitorizarea acestuia.

Fig 1.6 Soft folosit de oranele de securitate pentru interceptarea unui telefon cu ajutorul IMEI

Totodată folosind IMEI și IMSI de la cartelă SIM este posibilă și localizarea unui telefon cu ajutorul operatorului GSM și cu echipamantele speciale de interceptare/localizare.

Interceptarea și localizarea unui telefon se poate realiza numai cu echipamente speciale astfel:

-se trmit către telefon sms-uri speciale care nu sunt vizibile pe telefonul destinatar

-telefonul destinatar confirmă primirea sms-urilor (denumite ping) și se întorc la expeditor cu detalii despre localizarea GSM a mobilului.

IMI-ul se poate obține la distanata (off airr) doar prin intermediul unei aparaturi speciale de interceptare și localizare (IMSI cacher), foarte scumpă și inaccesibilă persoanelor neautorizate.

Presupunând că cineva a obținut un anumit IMEI prin accesul fizic la telefon, nu exixta nici o aplicație, nici un web-site care să poată intercepta telefonul doar prin introducerea IMEI-ului.

IMI-ul nu are un caracter secret.

Pentru aflarea numarului IMEI s-a folosit urmatoarea secventa de cod C:

void readimei(){

printf("AT+GSN\r");

lcd_putc("\fIMEI:\n");

}

Butonul AT

Secvența de program pentru butonul AT este:

void at(){

printf("AT\r");

lcd_putc("\f");

}

Butonul Call

Secvența de program pentru butonul AT este:

void call(){

printf("ATDT ");

printf(num);

printf(";\r");

lcd_putc("\fcalling:\n");

}

1.1.3 LCD

Se utilizează un LCD de tip 20×4 caractere. MikroC oferă o librărie cu funcții pentru accesul pe LCD, acesta fiind cuplat în schema din Proteus la portul B al microcontrollerului.

Fig 1.7 LCD

Cu ajutorul rezistentei RV1 se poate controla contrastul LCD-ului.

LCD-ul are 3 conexiuni la sursa de alimentare: VDD (+ 5VDC); VSS (Ground); și VO, unghi de vizualizare numit uneori contrast. Diagramele de mai jos arată conexiunile tipice. Contrastul poate fi, de asemenea, controlat digital, cu un potentiometru digital sau DAC.

+5VDC Input LCD Module +/-5VDC Input LCD D de tip 20×4 caractere. MikroC oferă o librărie cu funcții pentru accesul pe LCD, acesta fiind cuplat în schema din Proteus la portul B al microcontrollerului.

Fig 1.7 LCD

Cu ajutorul rezistentei RV1 se poate controla contrastul LCD-ului.

LCD-ul are 3 conexiuni la sursa de alimentare: VDD (+ 5VDC); VSS (Ground); și VO, unghi de vizualizare numit uneori contrast. Diagramele de mai jos arată conexiunile tipice. Contrastul poate fi, de asemenea, controlat digital, cu un potentiometru digital sau DAC.

+5VDC Input LCD Module +/-5VDC Input LCD

Fig 1.8 Alimentarea pentru modulul de LCD

Fig 1.9 Dimensiuni LCD

Tabel 2 Configurarea pinilor

1.1.4 Tastatura

Tastatura se cupleaza in system pe portul D, in sistemul simulate. De la tastatura se cutesc codurile sub forma de caractere, care sunt interpretate de functia de biblioteca kbd()

Fig 1.10 Tastatura alfa numerica 4X3

Urmatoarea secventa de cod C se generaza atnci cand este apasata o tasta.

s=kbd_getc();

if(s!=0){

generate_tone(d_note[3],100);

num[n]=s;

lcd_putc("\fNUM:\n");

for( z=0;z<=n;z++)

lcd_putc(num[z]);

n++;

s=0;}

goto strt;

}

1.1.5 Interfața serială

În aplicația prezentată se folosește o interfață seriala conectată la microcontroler pe portul C.

Fig 1.11 Interfața RS232 cu 9 pini

Interfața serială permite conectarea dintre telefonul mobil și microcontroller. O alternativă la aceasta conectarea ar fi folosirea conexiunii bluetooth.

Fig 1.12 Comunicatia seriala

Comenzile AT sunt inșiruiri de date care încep cu prefixul “AT” și pot fi trimise unui modul de comunicații pentru a-l putea programa. Aceste comenzi sunt legate de interfața serială asincronă și se pot transmite cu un program special cum ar fi de exemplu Hyper-Terminal din Windows, dacă modulul este conectat la un PC prin interfața RS232 sau direct la microcontroller. Comenzile de tip AT au fost introduse în anul 1977 de firma Hayes Communications pentru modemurile de tip dialup. Comunicațiile GSM/3G au preluat principiul de lucru cu comenzile AT care au fost standardizate în standardul ETSI GSM 07.07 (AT Command set, 2007).[1]

Comenzile de tip AT se pot împărți în cinci categorii: fax, data, V.42/MNP, voice și voiceview. Toate comenzile care se trimit către modem trebuie să fie precedate de șirul “AT” (înseamnand attention, atenție), și sfârșite cu carriage-ul return. O linie de comandă poate să conține mai multe comenzi AT,acestea nefiind neaparat separate prin spațiu. Comenzile AT se pot scrie cu majuscule sau minuscule, dar cu condiția ca într-o comandă să se folosească numai un anumit tip de caractere. Modemul poate sa fie configurat să trimită înapoi toate caracterele către echipamentul care le-a trimis. Ultima comandă trimisa se poate repeta prin folosirea comenzii “A/” fără a mai utiliza caracterul . Fiecare linie de comandă poate să conțină 80 de caractere. În starea online DCE (Data Communications Equipment), comunică cu modemul de la terminal. Orice data care a fost trimisa de la DTE (Data Terminal Equipment) la DCE este transmisă si modemului de la distanță. În mod similar orice dată recepționată de DCE este transmisă si echipamentului DTE. Modemul recunoaște comenzile AT transmise la orice viteză validă de la 300 pana la 115200 bps. Fiecare comandă poate avea unul sau chiar mai mulți parametrii asociați. Dacă un parametru numeric nu este trimis, atunci se consideră ca fiind egal cu 0.

La inițierea unei conexiuni manuale un modem trebuie să fie inițiatorul (transmite date) iar celălalt ascultătorul (receptioneaza date). Conexiunea se realizează prin trimiterea comenzii ATD la modemul inițiator precum si trimiterea comenzii ATA la modemul receptor. Într-o conexiune care se face automat inițiatorul transmite comanda ATD+numărul de telefon. Răspunsul automat se realizează prin setarea unei valori diferite de zero a registrului S0. Registrul S1 numără câte semnale de apel s-au realizat. Dacă registrul S0 este egal cu registrul S1, modemul va încearca să se conecteze. După ce a fost efectuata conexiunea cu un modem de la distanță, DTE poate trimite comenzi de întrerupere a legăturii (numite secvența escape). O conexiune cu un modem se termină când modemul se deconectează sau când purtătorul de transmisie a modemului de la distanță este inactiv o perioadă de timp mai mare decât cea specificată în registru.[13]

Comunicația între cele două terminale virtuale se face prin comenzi AT standard.

Lista principalelor comenzi AT Comenzile AT sunt grupate în 4 categori:

• Comenzile de bază formate dintr-o literă mare și o cifră;

• Comenzile extinse precedate de caracterul “&” urmat de o literă mare și o cifră;

• Comenzile speciale folosite de fiecăre producător, precedate de “\” sau de “%” care sunt disponibile în manualul de instructiuni al fiecarui modem.

• Comenzi de încărcare a registrelor, Sn=v, unde n este numărul registrului si v valoarea cu care se încarcă.

Caracterele speciale care apar într-o linie de comandă sunt:

• AT-caractere de început al liniei de comandă;

• Z-resetare a modemului;

• “,” indică modemului să facă o pauză de o secundă. Mai multe virgule înseamnă pauză de atâtea secunde cate virgule sunt (durata pauzei poate fi modificată în registrul S8).

• “^M” trimite un ENTER (caracter de terminare a liniei de comandă) (CR) către modem.

Câteva din comenzile de bază uzuale sunt:

ATD 0-9,” *”,” # “cifre și semne speciale cu care se pot forma numere;

L are efectul reluarii formării ultimului număr;

P formare în puls;

T formare în ton;

W așteptare ton 1-255 s (implicit 50s, valoare stocată în S7);

“,” pauză si întoarcerea în starea de comandă;

S=n se formează numere memorate cu AT&Z, n=0,1,2,3,4

1.1.6 Microcontrolerul PIC16f877A

Domeniul microcontrolerelor și-a avut începuturile în dezvoltarea tehnologiei circuitelor integrate. Această dezvoltare a făcut posibilă înmagazinarea a sute de mii de tranzistoare într-un singur cip de dimensiuni din ce în ce mai mici. Această încapsulare a fost o premieră pentru producția de microprocesoare, și primele calculatoare au fost făcute prin adăugarea perifericelor ca memorie, linii intrare – ieșire, timer-i și altele. Următoarea creștere a volumului capsulei a dus la crearea circuitelor integrate. Aceste circuite conțin atât perifericele cât și procesorul. Astfel primul cip din acesta generație conținea un microcalculator, sau ce va deveni cunoscut mai târziu ca microcontroler.[5]

Fig 1.13 Structura logica si fizica a microcontrolarului PIC16f877A

Abilitatea de a comunica este de mare importanță în orice domeniu de activitate. Aceasta, este posibilă numai dacă ambii partenerii de comunicare cunosc același tip de limbaj, sau urmăresc același set de reguli în timpul comunicării. Folosind acest principiu ca un punct de plecare, putem astfel defini comunicarea ce are loc între microcontrolere și un om. Limbajul pe care microcontrolerul și omul îl folosesc pentru a putea comunica este numit "limbaj de asamblare". Acesta denumire nu are un înțeles deosebit, și este analog numelor altor tipuri de limbaje, de ex. engleza și franceză. Mai precis,denumirea "limbaj de asamblare" este doar o soluție trecătoare. Programele scrise în limbajul de asamblare trebuiesc traduse într-un "limbaj de zero-uri și unu-uri" pentru ca un microcontroler să-l poată înteleage. "Limbajul de asamblare" și "assembler-ul" sau asamblorul sunt două tipuri de noțiuni diferite. Primul reprezintă un set de reguli sau instrucțiuni folosite pentru scrierea unui program pentru un microcontroler, iar celălalt este un program în computerul personal care poate traduce limbajul de asamblare într-un șir de cifre binare. Un program ce este tradus în secvențe de cifre binare este numit "limbaj cod mașină".[8]

Fig 1.14 Procesul comunicării dintre om și microcontroler

Fizic, un "Program" reprezintă un fișier pe discul computerului în care este instalat softul prin carea se face legătura cu microcontrolerul (sau în memorie dacă este citit dintr-un microcontroler), și este scris cu regulile de asamblare, sau ale altuitip de limbaj pentru programarea microcontrolerului. Omul poate să întelega "alfabetul"de comunicare dintre el și mașină. Când se scrie un program, trebuie urmărite anumite reguli pentru a se obține un efectul dorit. Un Translator interpretează fiecare tip de instrucțiune scrisă în limbajul de asamblare, ca o secvență de cifre binare ce au o semnificație pentru logică internă a microcontrolerului.[4]

Ca de exemplu instrucțiunea "RETURN" pe care microcontrolerul o înțelege ca o instrucțiune care îl pune să se întoarcă dintr-un sub-program. Când asamblorul îl traduce, obținem o secvența binară pe care microcontroleul știe cum să o interpreteze. Exemplu: RETURN 00 0000 0000 1000 asemenea propoziției de mai sus, fiecare instrucțiune de asamblare poate fi interpretată ca fiind echivalentă cu o secvența binară. Locul unde această traducere a limbajului de asamblare se găsește, se numește un "fișier de execuție". Vom întâlni adesea fișiere cu extensia ". HEX". Acesta vine de la o reprezentare hexazecimala a acelui tip de fișier, ca și de la apendicele "hex" din titlu, de ex. "run through. Hex". Din moment ce este generat, fișierul de execuție este citit în microcontroler printr-un programator. Un program în Limbaj de Asamblare este scris într-un program pentru procesarea textului (editorul) și este capabil de a produce un fișier de tip ASCII pe discul computerului său în limbaje specifice ca MikroC.

Porturile

Noțiunea de port se referă la un grup de pini ai unui microcontroler ce pot fi accesați în același timp, sau la care putem să setăm o combinație pe care o dorim, asta însemnând o succesiune de zero și unu, sau de la care putem citi o stare existentă. Fizic, portul este un registru în interiorul unui microcontroler ce este conectat cu fire la pinii microcontrolerului. Porturile reprezintă conexiunile fizice ale Unității de Procesare Centrală cu un calculator sau un alt device prin care acesta poate fi programat. Microcontrolerul folosește aceste porturi pentru a monitoriza sau controla alte componente sau aparate. Datorită modului de funcționare, unii pini au rol dublu ca RA4/TOCKI de exemplu, care este simultan al patrulea bit la portul A și o intrare externă pentru contorul liber (free-run). Dacă s-a făcut selecția uneia din aceste două funcții ale pinului, atunci se modifică și regiștrii configuraționali. O imagine a acesteia este al cincilea bit T0CS în registrul OPTION. Selectând una din funcții cealaltă este automat dezactivată.[3]

Fig 1.15 Relația dintre TRISA și PORTA

Toți pinii unui port pot fi definiți ca intrări sau ieșiri, conform cu nevoile unui montaj ce este în dezvoltare. Pentru a defini un pin ca pin de intrare sau ca pin de ieșire, trebuie scrisă o combinație corectă de zero și unu în registrul TRIS. Dacă în locul potrivit este scris "1" logic în registrul TRIS, pinul respectiv este pin de intrare, iar dacă este setat pe valoarea 0 este valabil contrariul adică este un pin de ieșire. Fiecare port are registrul lui TRIS. Astfel, portul A are TRISA la adresa 85h, portul B are TRISB la adresa 86h și așa mai departe în funcție de tipul microcontrolerului.[8]

Organizarea memoriei

PIC16F877A are două blocuri separate de memorie, unul pentru partea date și celălalt pentru programe. Memoria EEPROM și regiștrii GPR din memoria RAM constituie un bloc, iar memoria FLASH constituie un bloc de programe. [9]

Memoria program

Memoria program a fost realizată prin tehnologia de tip FLASH ceea ce face posibil programarea unui microcontroler de mai multe ori înainte de a fi instalat într-un montaj electric, și chiar după instalarea sa în proiect, dacă se dorește unele schimbări în program sau modificarea unor parametrii de proces. Mărimea memoriei de program este de 1024 locații cu lungimea de 14 biți unde locațiile zero și patru sunt rezervate pentru reset și pentru vectorul întrerupere. [1]

Memoria de date

Memoria de date este alcătuită din memoriile EEPROM și memoria RAM. Memoria EEPROM are 64 de locații de opt biți a căror conținut nu este pierdut în timpul opririi sursei de alimentare. EEPROM-ul nu se poate accesa direct, dar este accesat indirect prin regiștrii EEADR și EEDATA. Datorită faptului că memoria EEPROM este folosită foarte des la memorarea unor parametri importanți (de exemplu, o temperatură care este dată în regulatoarele de temperatură), există o procedură foarte strictă de scriere în EEPROM ce trebuie urmată pentru a preveni o scriere accidentală. Memoria RAM pentru date ocupă spațiu într-o hartă a memoriei de la locația 0x0C până la 0x4F ceea ce înseamnă 68 de locații de memorie. Locațiile memoriei RAM sunt denumite regiștri GPR care este o abreviere General Purpose Registers – Regiștri cu Scop General. Regiștrii GPR pot fi accesați indiferent de intructiunile date și de biții selectați la un moment.[11]

Întreruperile

Procesul de întrerupere este un mecanism al unui microcontroler ce îi permite să răspundă la unele evenimente la momentul când se întâmpla, indiferent de ce instrucțiune execută în acel mom microcontrolerul. Aceasta este o parte foarte importantă, pentru că permite o conexiune a microcontrolerului cu programatorul sau cu celelalte componente ale proiectului. În general, fiecare întrerupere schimbă execuția programului, îl întrerupe și după ce execută un subprogram (rutine de întrerupere), continuă din același punct.[10]

Registrul de control al unei întreruperi se numește INTCON și se găsește la adresa 0Bh. Rolul lui este de a permite sau interzice cererile de întreruperi, și în cazul în care nu sunt permise, înregistrează cererile de întrerupere singulare prin biții lui.

Fig 1.16 Organizarea bitilor

Registru INTCON

Bitul 0 RBIF (RB Port Change Interrupt Flag bit – bitul Steguleț de Întrerupere a Schimbării Portului RB) acest bit informează despre schimbările de la pinii 4, 5, 6 si 7 ai portului B.Dacă acesta este 1 înseamnă că cel puțin un pin și-a modificat starea dacă este 0 înseamnă că nu s-a întâmplat nici o schimbare la vre-un pin.[2]

Bitul 1 INTF (INT External Interrupt Flag bit – bit Steguleț de Întrerupere Externa INT).Anunță dacă a avut loc o întrerupere externă. Bitul setat pe 1 înseamnă că a avut loc o întrerupere setat pe 0 anunță că nu a avut loc o întreruperea.

Dacă s-a detectat un front crescător sau descrescător la pinul RB0/INT (ce este definit cu bitul INTEDG în registrul OPTION) atunci bitul INTF este setat. Bitul trebuie să fie șters în subprogramul de întrerupere pentru a putea detecta următoarea întrerupere.

Bitul 2 T0IF (TMR0 Overflow Interrupt Flag bit-bit Steguleț Depășire Întrerupere TMRO) arată depășirea contorului TMRO. Dacă valoarea acestuia este 1 rezultă schimbarea stării contorului de la FFh la 00h. Dacă eate 0 înseamnă că depășirea nu a avut loc. Bitul trebuie să fie șters în program pentru ca o întrerupere să poată fi detectată.

Bitul 3 RBIE (RB port change Interrupt Enable bit – bit Permite Întreruperea schimbării portului RB) Acesta permite să aibă loc unele întreruperi la schimbarea stării pinilor 4, 5, 6, și 7 ai portului B. Dacă are valoarea 1, permite întreruperi la schimbarea altfel întreruperile sunt interzise la schimbarea stării.Dacă biții RBIE și RBIF au fost simultan setați, va avea loc o întrerupere.

Bitul 4 INTE (INT External Interrupt Enable bit – bit ce Permite Întreruperi externe INT). Bitul ce permite întreruperea externă de la pinul RB0/INT dacă are valoarea 1 întrerupere externă este permisă iar dacă are valoarea 0 atunci întrerupere externă este interzisă. Dacă au fost setate INTE și INTF în același timp atunci va avea loc o întrerupere.

Bitul 5 T0IE (TMR0 Overflow Interrupt Enable bit – bit Permite Depășire Întrerupere TMRO). După cum îi spune și numele bitului, permite întreruperile în timpul depășirii contorului TMRO. Dacă valoarea lui este 1 întrerupere este permisă altfel este interzisă. Dacă T0IE și T0IF au fost simultan setate, va avea loc întreruperea.

Bitul 6 EEIE (EEPROM Write Complete Interrupt Enable bit – Permite Întrerupere Completă a Scrierii EEPROM) Bitul care permite o întrerupere la sfârșitul unei rutine de scriere în EEPROM are valoarea 1 dacă întreruperea este permisă și 0 dacă întrerupere este interzisă.. Dacă EEIE și EEIF (ce este în registrul EECON1) au fost simultan setate, va avea loc o întrerupere.

Bitul 7 se prescurtează GIE (Global Interrupt Enable bit – bit Permite Întrerupere Globală). Acesta permite sau oprește toate întreruperile. Dacă e setat pe 1, toate întreruperile sunt permise altfel toate întreruperile sunt interzise. PIC16F877a are patru surse de întrerupere:

1. Terminarea scrierii datelor în EEPROM;

2. Întrerupere TMR0 cauzată de depășirea timer-ului;

3. Întrerupere în timpul schimbării valorii pinilor RB4, RB5, RB6 și RB7 ai portului B;

4. Întrerupere Externa de la pinul RB0/INT al microcontrolerului.

Fig 1.17 Schema simplificata a procesului de intrerupere

Memoria de date EEPROM [12]

PIC16F8477A are 64 de bytes de locații de memorie EEPROM la adresele de la 00h la 63h unde se poate scrie sau de unde se poate citi. Cea mai importantă caracteristică a acestei memorii este că nu pierde conținutul în timpul închideri sursei de alimentare. Aceasta înseamnă practic că ceea ce a fost scris în ea va rămâne chiar și când microcontrolerul este închis. Datele pot fi reținute în EEPROM fără sursă de alimentare până la 40 de ani (după cum declară producătorul lui PICD16F877a), și se pot executa 10000 de cicluri de scriere. În practică, memoria EEPROM este folosită pentru stocarea unor date importante sau a unor parametri de proces. Un asemenea parametru este o temperatură data, asignata când se setează un regulator de temperatură la un proces. Dacă nu s-a reținut, va fi nevoie să se ajusteze temperatură dată după fiecare întrerupere a alimentării. Pentru că aceasta este foarte nepractic (chiar periculos), producătorii de microntrolere au început să instaleze un tip mai mic de memorie EEPROM. Memoria EEPROM este plasată într-un loc special al memoriei și poate fi accesată prin regiștrii speciali.

Acești regiștri sunt:

• EEDATA la adresa 08h, care retine datele de citit sau cele de scris.

• EEADR la adresa 09h, ce conține o adresă a locației EEPROM ce este accesată.

• EECON1 la adresa 88h, ce conține biți de control.

• EECON2 la adresa 89h. Acest registru nu există fizic și servește la protejarea EEPROM-ului de scrieri accidentale.

Registrul EECON1 la adresa 88h este un registru de control cu 5 biți implementați. Biții 5, 6 și 7 nu sunt folosiți, și prin citire sunt totdeauna zero.

1.2 Descrierea aplicației

Fig 1.18 Conectarea modem Nokia

Modul de functionare al unui modem[11]

Pentru a comunica între doua calculatoare sau alte device-uri situate la distanță, printr-o linie telefonică ce suportă semnale analogice este nevoie de un dispozitiv numit modem. Acesta acceptă date seriale digitale de intrare și le MODulează (în amplitudine, frecvență etc.) pentru a le putea transmite in mediul analogic și totodata asigură si procesul invers de DEModulare a semnalului analogic pentru a putea fi transformat din nou în semnal digital serial. Modemurile au fost concepute inițial pentru a putea lega stații de un calculator principal, dar ulterior modemurile leagă sisteme de calcul și transferă informații de diferite tipuri: voce, imagini, faxuri, date. Viteza de procesare a modemurilor a crescut foarte mult, astfel s-a ajuns la 56Kbps pe linia telefonică comutată și se pot obține canale de transfer de date cu capacitatea de 128Kbps pe linia ISDN, dar și viteze mult mai mari pe linii închiriate (2Mbps) sau prin fibră optică.

Fig 1.19 Schema bloc a unui modem bazată pe funcțiile modemului

Fig 1.20 Setare port de comunicatie intre telefon si aplicatia din Proteus ISIS

Fig 1.21 Setare port de comunicație pentru aplicația din Proteus

Fig 1.22 Efectuarea unui apel

CAPITOLUL 2

Arhitectura software a sistemului

2.1 Software Proteus ISIS[7]

Labcenter Electronics Ltd. a fost fondată în 1988 de către președintele și șeful arhitect de software John Jameson. Lansarea inițială a suitei de design Proteus a urmat la scurt timp după și de atunci a beneficiat de aproape 25 de ani de dezvoltare continuă, si astfel evoluează într-una dintre cele mai rentabile, pachetele EDA sunt o prezenta eficienta pe piata de specialitate. Cu vanzari actuale în peste 50 de țări Labcenter se extinde continuu atat portofoliul de produse cat și baza de clienți. Scopul companiei este de a furniza clientului, cel mai bun pachet la cel mai bun pret. Pentru a realiza acest lucru, compania se concentreaza pe dezvoltarea continua a softului cu ajutorul unei echipe de specialisti de elita si a feedback-ul venit de la client.

Iata o lista cu cele mai important clienti ai Labcenter Electronics.

ST Microelectronics

Volvo

Ferrari

The Audio Partnership plc

Zetex plc

Microchip Technologies

Linear Technologies

Gyrus Medical

BBC

Xerox

Sony

Qinetiq

Rutherford Appleton Labs

Proteus VSM a fost primul produs care a redus decalajul dintre schema de proiectare și PCB, oferind simulare la nivel de sistem de modele bazate pe microcontrolere în interiorul pachetului schematic.

De peste 10 ani, Proteus VSM este lider domeniul cu mai multe variante de microcontrolere și periferice decât orice produs concurent de pe piata de specialitate, instrumente de depanare mai bune și alte instrumente innovative pe care nu le gasim la alte soft-uri.

Iata câteva dintre beneficiile utilizarii Proteus VSM ca un instrument de prototipuri încorporat în fluxul de lucru.

2.1.1 Flexibilitate

Proteus VSM oferă o platformă de dezvoltare unică pentru inginerul de sistem. Acesta va permite să se încorporeze un program (fișier HEX, COF fișier, ELF / DWARF2 File, UBROF Fișier etc.) ca o proprietate a părții microcontrolarului din schemă și în timpul simulării se va arăta efectele programului circuitului creat .

Se poate schimba "hardware" prin reconectar schemă, schimbarea valorile componentelor pentru rezistențe, condensatori etc. și ștergerea sau adăugarea de noi componente la proiectarea. Se pot schimba firmware și, odată compilat, se testează noul cod de pe noul sistem, la apăsarea unui buton.

Acest lucru oferă libertate totală de a experimenta diferite idei și permite a găsirea unei soluții optime de proiectare pentru proiectul în lucru. Schema este folosită ca un prototip virtual pentru firmware și estede asemenea rapid și ușor de configurat.

2.1.2Productivitate

În general, inginerii petrec destul de mult timp pentru găsirea, remedierea problemelor și testarea proiectelor ca și în crearea lor, în primul rând. Acesta este o zonă în care Proteus VSM excelează.

Când se setează un punct de întrerupere în cod, întregul sistem se oprește și când se ajunge la cea linie de cod. Dacă se setează sistemul să avanseze pas cu pas , se vor vedea efectele executării fiecărei linii de cod în schematică (prototip virtual). Acest lucru face mai ușor detectarea unei anumite anumite probleme și se va putea observa mai ușor dacă este de natură software sau hardware.

Deoarece schema deservește ca hardware, este perfect posibil să se poată împărți sarcinile, astfel o persoană să dezvolte aspectul PCB în timp ce o alta folosește schemă ca bază pentru scris, testare și depanare firmware. Acesta înseamnă că, la sosirea prototipului final de la fabricant fireware-ul a fost realizat și testat.

Deoarece sistemul a fost depanat și testate în software-ul va fi nevoie de mai puține iterații de proiectare fizică și, prin urmare, produsul va fi gata mai devreme pe piață.

2.1.3Cost

Proteus VSM va economisi timp și efort în timpul fazei de proiectare și în faza de testare / depănare. Econimia de timp și de efort vor duce implicit la economii de costuri pentru un proiect și aceste economii se vor multiplica cu fiecare proiect suplimentar întreprins.

Capacitatea de a utiliza schema în Proteus ca un prototip virtual pentru proiectarea firmware și depanare, îmbunătățește calitatea prototipului fizic. Iterațiile de proiectare înseamnă mai puține întârzieri la producție și implicit costuri de producție mai mici.

Proteus vine echipat cu o suită bogată de instrumentație și analiză de instrumente, de la DSO la Logic Analyser la I2C și SPI Protocol Analizoare. Cu ajutorul acestor instrumente se reduce nevoia de techipamente fizice costisitoare.

2.1.4 Concepte VSM Proteus

Proteus Sistemul Virtual de Modelare (VSM) combină simularea de circuit modul SPICE, prin componente animate și modele de microprocesoare pentru a facilita co-simulare de modele complexe bazate pe microcontroler. Pentru prima dată, este posibil să se dezvolte și să se testeze aceste modele înainte ca un prototip fizic să se construiască.

Cum este acest soft util, educațional?
În plus față de proiectarea asistată de calculator tradiționala Schematic Capture este de înaltă calitate și PCB Layout Proteus VSM este cel mai potrivit pentru elevii și studenții care se pregătesc în domeniul ingineriei cu privire la proiectarea și funcționarea de soluții de sisteme integrate. Pentru prima dată, laboratoarele școlilor pot dispune de o interfață complete virtuală de depănare, eliminând necesitatea de a avea o aplicație fizică costisitoare și care dea elevilor libertatea de a proiecta și dezvolta soluții cu microcontrolere fără a fi nevoie de un prototip fizic.

Următorul table ne arată o comparație între Proteus VSM și plăcile hardware de dezvoltare, echipate cu microprocesoare, care se foloseau în laboratoare le școlilor înainte să apară software precum Proteus:

Tabel 2.1 Avantajele utilizare Proteus ISIS în educație

2.1.5 ISIS și rețele

ISIS este pe deplin compatibil cu rețelele, și oferă următoarele caracteristici pentru a ajuta managerii de rețea:

· Fișierele Bibliotecă pot fi setate ca fiind Read Only. Acest face ca administratorii să fie anunțat cu mesaje atunci când cineva incaerca să acceseze informați.

·Se poate personalize limitele de acces pentru fiecare utilizator ISIS în parte în Windows Registry. Deoarece registrul determină locația de biblioteci, rezultă că utilizatorii pot avea fișiere individuale USERDVC.LIB din directoarele personale sau de grup.

2.1.6 Descriere generală a softului Proteus ISIS

Bara de meniuri este poziționată în partea de sus a ecranului și scopul său principal (selectarea comenzilor din meniuri) este la fel ca în orice altă aplicație Windows. În plus, zona de bara de titlu este utilizat pentru a afișa anumite mesaje prompte care indică atunci când programul a intrat într-un anumit modul de editare sau procesare.

Fig2.1.1 Meniu Proteus ISIS

Ca și în alte aplicații moderne de Windows, ISIS oferă acces la o serie de comenzi prin utilizarea de bare de instrumente. Barele de instrumente pot fi trase la oricare dintre cele patru margini ale ferestrei aplicației ISIS.

Bare de instrumente de comandă

Comenzi File/Print

Comenzi Dysplay

Comenzi de editare

Design Tools

Mod Selector Toolbar

Bara de instrumente situata pe marginea stângă a ecranului selecteaza modul editor, adică ceea ce se întâmplă atunci când faceți clic pe mouse-ul pe fereastra de editare.

Main Modes

Gadgets

2DGraphics

Bara de instrumente nu poate fi ascunsă, ca funcțiile sale nu sunt duplicate pe meniurile.

Orientation Toolbar

Instrumentele de pe aceasta bară controlează rotația și reflecție pentru obiectele amplasate in zona de lucru.

Orientare

Reflexie

Caseta de editare permite tastarea uni unghi de rotație în mod direct dar în ISIS, pot fi introduse numai unghiuri ortogonale.

Când un obiect existent este etichetat, de rotație și reflecții icoanele evidenția în roșu pentru a arăta că vor modifica orientarea unui obiect pe aspectul. În cazul în care icoanele nu sunt evidențiate, ele servesc la stabilirea orientarea de noi obiecte.

Fereastra de editare

Fereastra de editare afișează o parte din schema pe care care în lucru. Conținutul ferestrei de editare poate fi redesenat folosind comanda Redraw din meniul View. Se poate utiliza această funcție după orice altă comandă.

Panning

Se poate repoziționa fereastra de editare peste diferite părți ale desenului sau modelului în mai multe moduri:

· Făcând clic pe stânga de la un punct de pe ansamblu ferestrei – astfel se poate pozitiona fereastra de editare în jurul punctului marcat.

· Prin mutarea mouse-ul peste fereastra de editare, ținând apăsată tasta SHIFT, și “se trage” de una din marginile sale. Ne referim la această facilitate ca Shift-Pan.

· Prin pozitionarea în fereastra de editare și apăsarea tastei Zoom.

· Prin utilizarea pictogramei Pan din bara de instrumente.

Zoom In / Zoom Out

Se poate mări sau reduce expunerea folosind Zoom In și Zoom Out comenzi care sunt, de asemenea, invocate de tastele de comenzi rapide F6 și F7. Apăsând F8 se va afișa o imagine a întregului proiect. Se poate utiliza, de asemenea, pictogramele corespunzătoare de pe bară de instrumente.

Dacă tastatura este utilizată pentru a invoca comanda, fereastra de editare va fi afișată centrat în punctual in care cursorul mouse-ului a fost îndreptat înainte pentru a afișa o regiune.

Variabilă Zoom

Un grad arbitrar de mărire poate fi realizată utilizând caracteristica Shift-Zoom. O anumită zonă din fereastra de lucru poate fi selectata pentru a umple fereastra de editare ținând apăsată tasta SHIFT, apăsând butonul stâng al mouse-ului și selectand zona dorita

Se poate mări de asemenea o zonă făcând clic pe pictograma Zoom de pe bara de instrumente.

Fereastra de obiecte

Fereastra cu obiecte este folosiat pentru a alege componente, terminale, generatoare, tipuri de grafice și așa mai departe din cele care sunt disponibile. Ea poartă întotdeauna etichetetele componentelor folosite la realizarea proiectului.

Lățimea și poziția ferestrei Selector Object poate fi ajustată în funcție de lățimea și înălțimea generală a ferestrei.

Butoanele din partea de sus stânga a ferestrei Selector Objects activează diferite funcții, cum ar fi navigarea în bibliotecă și de gestionare a bibliotecii. Funcțiile disponibile depind de modul de editor curent.

Fig 2.1.2 Funcțiile disponibile pentru proiectul curent

Coordonatele de afișare

Coordonatele cursorul sunt afișate pe partea din dreapta jos a ecranului.Originea reperului poate fi stabilita de utilizator.

Comanda X-Cursor va afișa o cruce mică sau mare si va permite selectarea unei zone sau a unor obiecte aflate in fereastra de lucru. Acest lucru este deosebit de util atunci când este utilizat în combinație cu funcția Real Time Snap.

CO-ORDINATE SYSTEM

Toate coordonatele din ISIS sunt unități de 10 nM, doar pentru a fi în concordanță cu ARES.

Cu toate acestea, coordonata de citire este limitată la o mie de unități. Originea este considerată ca fiind în centrul zonei de lucru și sunt folosite atât valori pozitive cât și negative. Coordonatele la care se află cursorul sunt afișate în partea din dreapta jos a ecranului.

Originea coordonatelor in foaia de lucru

Comanda, care duce cursorul în origine apare în meniul View, dar se poate folosită tastă "O". Funcția sa este de a duce cursorul de la poziția curentă în coordonata zero.Când se stabilește o altă origine decât cea standard, afișajul de coordonate schimbă culoarea de la negru la magenta.

Anularea origini false se face apăsând tastă “O” a doua oară.

Dot Grid

O rețea de puncte este afișat în fereastra de editare – acest lucru poate fi inversate și în afara ferestrei folosind comanda Grid din meniul View. Distanța dintre punct poate fi stabilită de utilisator.

Gradul de completare snap pot fi selectate cu ajutorul comenzii Snap din meniul View, sau direct cu tastele F4, F3, F2 și CTRL + F1. Pentru a afla exact poziția cursorului se poate utiliza comanda-X sau comanda Cursor din meniul View, care va afișa fie o cruce mică sau mare în această locație.

Real Time Snap

Atunci când indicatorul este poziționat aproape de capetele pinilor sau a firelor, locatia cursorului va fi fixata pe aceste obiecte.Apelarea aceastei funcții se face folosind comandaReal Time Snap din meniul Tools, sau prin tastarea CTRL + "S".

Fisiere ISIS Proteus

ISIS face uz de următoarele tipuri de fișiere:

Design Files (.DSN) – Fișierele Design

Backup Files (.DBK) – Fișierele Backup

Section Files (.SEC) – Fișierele Sectiune

Module Files (.MOD) – Fișierele de Module

Library Files (.LIB) – Fișierele Biblioteca

Netlist Files (.SDF) – Fișierele Netlist

Fișierele de design conține toate informațiile cu privire la un circuit, și au extensia "DSN".

Versiunile anterioare ale ISIS au folosit "ISS", "IDS" și "IWS"; acestea pot fi convertite în mod automa prin IDSCVT40.DLL și / sau IWSCVT40.DLL, acestea fiind convertoare de fișiere. Când utilizatorul modifică ceva în proiect soft-ul crează automat copii de rezervă ale fișierelor de proiectare, acestea având extensia "DBK".

O secțiune a unui desen pote fi exportată într-un fișier secțiune și citită ulterior într-un alt proiect. Fișierele de secțiuni au extensia "SEC". și sunt citite și scrise de Import și Export comenzi din meniul File.

Fișierele de module au extensia "MOD" și sunt utilizate în combinație cu alte caracteristici de proiectare ierarhic.

Fișierele Bibliotecă au extensia "LIB.

Fișiere Netlist se crează atunci când softul face legătura cu ProSPICE și ARES, acestea au extensia "SDF".

2.2 Mediul de programare MicroC[6]

Fig 2.2.1 mikroC PRO for PIC IDE

PIC și C se potrivesc bine împreună: PIC este cel mai popular cip pe 8-bit din lume, utilizat într-o gamă largă de aplicații,iar limbajul C este foarte apreciat pentru eficiența lui. Aceasta combinatie este alegerea naturala pentru dezvoltarea sistemelor integrate. mikroC PRO pentru PIC este un mediu de programare de succes oferind IDE extrem de avansat, un compilator ANSI compatibil, set larg de biblioteci de hardware, documentație cuprinzătoare, și o mulțime de exemple gata pentru a fi rulate.

Caracteristici

MikroC PRO pentru PIC permite să se dezvolte rapid și să se implementeze aplicatii complexe:

– Scrierea codului sursă C se face folosind built-in editor de cod (cod și parametrii asistenți, evidențierea sintaxei, Auto Correct, Șabloane de cod, și alte instrumente care faciliteaza mult munca utilizatorului)

– In mikroC PRO pentru PIC exista biblioteci pentru a accelera foarte mult parametrii precum date de achizitie, memorie, display-uri, conversii, comunicare etc.

– Monitorizarea structurii de program, variabile, și funcțiile în Codul Explorer.

– Generarea comentatariilor, a fisierelor HEX standard, compatibile cu toate mediile de programare.

– mikroICD integrat (In-Circuit Debugger) instrument de depanare în timp real pentru a monitoriza executarea programului la nivel hardware.

Meniurile principale sunt:

Meniul File

Meniul File este punctul de initiere pentru lucrul cu fișierele sursă.

Fig 2.2.2 Meniul File

Tabel 2.2.1 Explicare comenzi din meniul File

Meniul EDIT

Fig 2.2.3 Meniul Edit

Tabel 2.2.2 explicare comenzi meniul Edit

Meniul VIEW

Fig 2.2.4 Meniul View

Tabel2.2.3 Explicare comenzi meniul View

Meniul Project

Fig 2.2.5 Meniul Project

Tabel2.2.4 Explicare comenzi meniulProject

Meniul RUN

Fig 2.2.6 Meniul Run

Tabel 2.2.5 Explicare comenzi meniul Run

Meniul Tools Option

Fig 2.2.7 Meniul Tools Option

Tabel 2.2.6 Descriere comenzi Meniul Tools Option

Bare de instrumente

File Toolbar

Edit Toolbar

Advanced Edit Toolbar

Find/Replace Toolbar

Project Toolbar

Build Toolbar

Debugger

Styles Toolbar

Această bară de instrumente permite personalizarea cu ușurință a spațiului de lucru.

Tools Toolbar

PRO mikroC pentru PIC organizează aplicațiile în proiecte, constând dintr-un singur fișier de proiect (cu extensia. Mcppi) și unul sau mai multe fișiere sursă. MikroC PRO pentru PIC IDE permite gestionarea mai multor proiecte (prin Project Manager).

Fișierele sursă pot fi compilate numai dacă sunt parte a unui proiect.

Fișierul proiectului conține următoarele informații:

– Numele proiectului și descrierea opțională

– Dispozitivul țintă;

– Flag-urile dispozitivului tinta;

– Ceasul dispozitivului;

– Lista de fișierele sursă de proiect;

– Fișiere antet (* .h),

– Fișiere binare (* .mcl),

– Fișiere imagine,

– Alte fișiere.

Fișierele sursă care conțin codul C trebuie să aibă extensie. Lista fișierelor relevante pentru aplicarea proiectului este stocat în fișierul de proiect cu extensia .mcppi, împreună cu alte informații despre proiect. Se pot compila fișierele sursă doar dacă sunt parte a proiectului.

2.3 Alte soft-uri folosite

Pentru a realiza legatura, prin cablu, dintre telefon si calculator, am folosit softul oferit de Nokia.

Fig 2.2.8 Soft pentru conectarea fizica a telefonului la calculator

CAPITOLUL 3

CONCLUZII

Lucrarea de față a avut ca temă, crearea unui sistem de timp real bazat pe tehnologii GSM.

Dacă nu ar fi existat rețelele GSM, telefoanele mobile ar fi fost inutile. Ceea ce astăzi folosim atât de des este de fapt o tehnologie complexă care s-a dezvoltat foarte mult în ultimele două decade. Se estimează că peste trei miliarde de oameni folosesc rețelele de telefonie mobilă de tip GSM în peste 212 țări. Datorită acestei largi răspândiri, utilizatorii de pretutindeni pot folosi o cartelă în afara unei ariii geografice de acoperire a rețelei care a emis-o, această facilitate este cunoscută sub numele de roaming.

Aplicația ralizată este un foarte bun exemplu pentru laborator. Cu ajutorul softului de simulare ProteusISIS studenții pot înțelege modul de funcționare al unui sistem bazat pe tehnologii GSM. Printr-o parcurgere cursivă, ordonată, a unor mici aplicații punctuale în mediul virtual ISIS se va putea ulterior implementa codul într-o arhitectură reală creată conform proiectării.

Rezultatele au fost următoarele:

a fost testat cu succes un sistem de timp real bazat pe tehnologii GSM utilizând componente virtuale în mediul de simulare ISIS;

Contribuțiile autorului sunt:

realizarea unui sistem virtual de timp real bazat pe tehnologii GSM;

realizarea unei aplicații fezabile de laborator (ex. Aplicații distribuite);

realizarea unei apicatii în MikroC pentru microcontroler;

BIBLIOGRAFIE

Axelson J.,Serial port complete – Programing and Circuits for RS-232 and RS-485 links and networks,Lakeview Research,2000 ;

  Bălan Radu, Microcontrolere – Structura și aplicații, Ed. Todesco, Cluj-Napoca, 2002;

  Bălan Radu, Microcontrolere – îndrumător de laborator, Ed. Todesco, Cluj-Napoca, 2002;

Dorin Petreu,  Sisteme cu microcontrolere –Notițe curs;

Iovine, PIC microcontroller project Book, Ed. Mc Graw-Hill, New York, 2001;

Manual MikroC

Manual Proteus ISIS

MicroChip, PIC18F877A Datasheet, 2004

  Mucichescu C. Microprocesoare si microcontrolere. Curs în format electronic, 2006,

Mucichescu,C. Microprocesoare. Indrumar de laborator. UPB, 1999;

P. Ogruțan, C. Gerigan, N. Banciu Memorii, interfețe și periferice. Interfețe specializate, Ed. Transilvania Brașov, 2003, 190 pagini

R.Balan , Microcontrolere, Structura și Aplicații, Ed. Todesco, Cluj-Napoca, 2002;

Sorina Zahan “Telefonia digitala in retele de telecomunicatii”, Editura:Albastra

Anexa 1-keypad.c

#byte kbd = 8 // on to port B (at address 6)

#define set_tris_kbd(x) set_tris_d(x)

//Keypad connection: (for example column 0 is B2)

#ifdef blue_keypad

#define COL0 (1 << 0)

#define COL1 (1 << 1)

#define COL2 (1 << 2)

#define ROW0 (1 << 3)

#define ROW1 (1 << 4)

#define ROW2 (1 << 5)

#define ROW3 (1 << 6)

#endif

#define ALL_ROWS (ROW0|ROW1|ROW2|ROW3)

#define ALL_PINS (ALL_ROWS|COL0|COL1|COL2)

// Keypad layout:

char const KEYS[4][3] = {{'1','2','3'},

{'4','5','6'},

{'7','8','9'},

{'*','0','#'}};

#define KBD_DEBOUNCE_FACTOR 33

void kbd_init() {

}

char kbd_getc( ) {

static byte kbd_call_count;

static short int kbd_down;

static char last_key;

static byte col;

byte kchar;

byte row;

kchar='\0';

if(++kbd_call_count>KBD_DEBOUNCE_FACTOR) {

switch (col) {

case 0 : set_tris_kbd(ALL_PINS&~COL0);

kbd=~COL0&ALL_PINS;

break;

case 1 : set_tris_kbd(ALL_PINS&~COL1);

kbd=~COL1&ALL_PINS;

break;

case 2 : set_tris_kbd(ALL_PINS&~COL2);

kbd=~COL2&ALL_PINS;

break;

}

if(kbd_down) {

if((kbd & (ALL_ROWS))==(ALL_ROWS)) {

kbd_down=false;

kchar=last_key;

last_key='\0';

}

} else {

if((kbd & (ALL_ROWS))!=(ALL_ROWS)) {

if((kbd & ROW0)==0)

row=0;

else if((kbd & ROW1)==0)

row=1;

else if((kbd & ROW2)==0)

row=2;

else if((kbd & ROW3)==0)

row=3;

last_key =KEYS[row][col];

kbd_down = true;

} else {

++col;

if(col==3)

col=0;

}

}

kbd_call_count=0;

}

set_tris_kbd(ALL_PINS);

return(kchar);

}

Anexa 2-SMSPIC.c

#include <16F877a.h>

#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay(clock=20000000)

#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7)

#include <lcd420.c>

#include <keypad.c>

#include <tone.c>

#define use_portb_lcd TRUE

char text[50]="",s,num[20]="",mes[]="your message";

int rx=0,z=0,n=0;

char cz=26;//^z

//–––––––––––––––––

void readimei(){

printf("AT+GSN\r");

lcd_putc("\fIMEI:\n");

}

void at(){

printf("AT\r");

lcd_putc("\f");

}

void call(){

printf("ATDT ");

printf(num);

printf(";\r");

lcd_putc("\fcalling:\n");

}

void sendsms(){

printf("AT+CMGF=1\r");

delay_ms(1000);

printf("AT+CMGS=\"");

printf(num);

printf("\"\r");

delay_ms(1000);

printf(mes);

printf(&cz);

lcd_putc("\f");

}

//––––––––––––––––––––-

#int_rda

void serial_isr() {

text[rx]=getc();

rx++;

}

//–––––––––––––––––

void main() {

setup_adc(ADC_OFF);

lcd_putc("\f");

enable_interrupts(int_rda);

enable_interrupts(global);

lcd_init();

kbd_init();

lcd_putc("\fReady…\n");

//––-read buttons––––––––

strt: if(!INPUT(pin_A0)){

k1: if( INPUT(pin_A0)){

readimei();goto st2;}

goto k1;}

st2: if(!INPUT(pin_A3)){

k2: if( INPUT(pin_A3)){

at();goto st3;}

goto k2;}

st3: if(!INPUT(pin_A4)){

k3: if( INPUT(pin_A4)){

call();goto st4;}

goto k3;}

st4: if(!INPUT(pin_A5)){

k4: if( INPUT(pin_A5)){

sendsms();goto st5;}

goto k4;}

st5: if(!INPUT(pin_E0)){

k5: if( INPUT(pin_E0)){

lcd_putc("\fReady…\n");rx=0;n=0;z=0;

for( z=0;z<=20;z++)

num[z]='\0';

goto st6;}

goto k5;}

ST6:

//–––recived serial data–––––

if(rx>1){

//lcd_putc("\f");

delay_ms(1000);

//if(rx>26)rx=26;

for( z=0;z<rx;z++)

lcd_putc(text[z]);

rx=0;

}

//–––read keyboard––––-

s=kbd_getc();

if(s!=0){

generate_tone(d_note[3],100);

num[n]=s;

lcd_putc("\fNUM:\n");

for( z=0;z<=n;z++)

lcd_putc(num[z]);

n++;

s=0;}

goto strt;

}

Anexa 3-tone.c

#ifndef MUSIC_NOTES

#define MUSIC_NOTES

// NOTE FREQUENCY

// Octave0 Octave1 Octave2 Octave3

const long C_NOTE[4] ={ 262, 523, 1047, 2093};

const long Db_NOTE[4] ={ 277, 554, 1109, 2217};

const long D_NOTE[4] ={ 294, 587, 1175, 2349};`

const long Eb_NOTE[4] ={ 311, 622, 1245, 2489};

const long E_NOTE[4] ={ 330, 659, 1329, 2637};

const long F_NOTE[4] ={ 349, 698, 1397, 2794};

const long Gb_NOTE[4] ={ 370, 740, 1480, 2960};

const long G_NOTE[4] ={ 392, 784, 1568, 3136};

const long Ab_NOTE[4] ={ 415, 831, 1661, 3322};

const long A_NOTE[4] ={ 440, 880, 1760, 3520};

const long Bb_NOTE[4] ={ 466, 923, 1865, 3729};

const long B_NOTE[4] ={ 494, 988, 1976, 3951};

#endif

#define TONE_PIN PIN_c0

void do_delay(int ms_delay, int num_ms, int us_delay, int num_us) {

int i;

for(i=0;i<num_ms;i++)

delay_ms(250);

delay_ms(ms_delay);

for(i=0;i<num_us;i++)

delay_us(250);

delay_us(us_delay);

}

void generate_tone(long frequency, long duration)

{

int32 total_delay_time; // in microseconds

long total_ms_delay_time, total_us_delay_time;

int num_us_delays, num_ms_delays, ms_delay_time, us_delay_time;

long num_periods;

total_delay_time = (1000000/frequency)/2-10; // calculate total delay time (10 for error)

total_ms_delay_time = total_delay_time/1000; // total delay time of ms

num_ms_delays = total_ms_delay_time/250; // number of 250ms delays needed

ms_delay_time = total_ms_delay_time%250; // left over ms delay time needed

total_us_delay_time = total_delay_time%1000; // total delay time of us (ms already acounted for)

num_us_delays = total_us_delay_time/250; // number of 250us delays needed

us_delay_time = total_us_delay_time%250; // left over us delay time needed

num_periods = ((int32)duration*1000)/(1000000/frequency);

while((num_periods–) != 0)

{

do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);

output_high(TONE_PIN);

do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);

output_low(TONE_PIN);

}

return;

}

BIBLIOGRAFIE

Axelson J.,Serial port complete – Programing and Circuits for RS-232 and RS-485 links and networks,Lakeview Research,2000 ;

  Bălan Radu, Microcontrolere – Structura și aplicații, Ed. Todesco, Cluj-Napoca, 2002;

  Bălan Radu, Microcontrolere – îndrumător de laborator, Ed. Todesco, Cluj-Napoca, 2002;

Dorin Petreu,  Sisteme cu microcontrolere –Notițe curs;

Iovine, PIC microcontroller project Book, Ed. Mc Graw-Hill, New York, 2001;

Manual MikroC

Manual Proteus ISIS

MicroChip, PIC18F877A Datasheet, 2004

  Mucichescu C. Microprocesoare si microcontrolere. Curs în format electronic, 2006,

Mucichescu,C. Microprocesoare. Indrumar de laborator. UPB, 1999;

P. Ogruțan, C. Gerigan, N. Banciu Memorii, interfețe și periferice. Interfețe specializate, Ed. Transilvania Brașov, 2003, 190 pagini

R.Balan , Microcontrolere, Structura și Aplicații, Ed. Todesco, Cluj-Napoca, 2002;

Sorina Zahan “Telefonia digitala in retele de telecomunicatii”, Editura:Albastra

Anexa 1-keypad.c

#byte kbd = 8 // on to port B (at address 6)

#define set_tris_kbd(x) set_tris_d(x)

//Keypad connection: (for example column 0 is B2)

#ifdef blue_keypad

#define COL0 (1 << 0)

#define COL1 (1 << 1)

#define COL2 (1 << 2)

#define ROW0 (1 << 3)

#define ROW1 (1 << 4)

#define ROW2 (1 << 5)

#define ROW3 (1 << 6)

#endif

#define ALL_ROWS (ROW0|ROW1|ROW2|ROW3)

#define ALL_PINS (ALL_ROWS|COL0|COL1|COL2)

// Keypad layout:

char const KEYS[4][3] = {{'1','2','3'},

{'4','5','6'},

{'7','8','9'},

{'*','0','#'}};

#define KBD_DEBOUNCE_FACTOR 33

void kbd_init() {

}

char kbd_getc( ) {

static byte kbd_call_count;

static short int kbd_down;

static char last_key;

static byte col;

byte kchar;

byte row;

kchar='\0';

if(++kbd_call_count>KBD_DEBOUNCE_FACTOR) {

switch (col) {

case 0 : set_tris_kbd(ALL_PINS&~COL0);

kbd=~COL0&ALL_PINS;

break;

case 1 : set_tris_kbd(ALL_PINS&~COL1);

kbd=~COL1&ALL_PINS;

break;

case 2 : set_tris_kbd(ALL_PINS&~COL2);

kbd=~COL2&ALL_PINS;

break;

}

if(kbd_down) {

if((kbd & (ALL_ROWS))==(ALL_ROWS)) {

kbd_down=false;

kchar=last_key;

last_key='\0';

}

} else {

if((kbd & (ALL_ROWS))!=(ALL_ROWS)) {

if((kbd & ROW0)==0)

row=0;

else if((kbd & ROW1)==0)

row=1;

else if((kbd & ROW2)==0)

row=2;

else if((kbd & ROW3)==0)

row=3;

last_key =KEYS[row][col];

kbd_down = true;

} else {

++col;

if(col==3)

col=0;

}

}

kbd_call_count=0;

}

set_tris_kbd(ALL_PINS);

return(kchar);

}

Anexa 2-SMSPIC.c

#include <16F877a.h>

#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay(clock=20000000)

#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7)

#include <lcd420.c>

#include <keypad.c>

#include <tone.c>

#define use_portb_lcd TRUE

char text[50]="",s,num[20]="",mes[]="your message";

int rx=0,z=0,n=0;

char cz=26;//^z

//–––––––––––––––––

void readimei(){

printf("AT+GSN\r");

lcd_putc("\fIMEI:\n");

}

void at(){

printf("AT\r");

lcd_putc("\f");

}

void call(){

printf("ATDT ");

printf(num);

printf(";\r");

lcd_putc("\fcalling:\n");

}

void sendsms(){

printf("AT+CMGF=1\r");

delay_ms(1000);

printf("AT+CMGS=\"");

printf(num);

printf("\"\r");

delay_ms(1000);

printf(mes);

printf(&cz);

lcd_putc("\f");

}

//––––––––––––––––––––-

#int_rda

void serial_isr() {

text[rx]=getc();

rx++;

}

//–––––––––––––––––

void main() {

setup_adc(ADC_OFF);

lcd_putc("\f");

enable_interrupts(int_rda);

enable_interrupts(global);

lcd_init();

kbd_init();

lcd_putc("\fReady…\n");

//––-read buttons––––––––

strt: if(!INPUT(pin_A0)){

k1: if( INPUT(pin_A0)){

readimei();goto st2;}

goto k1;}

st2: if(!INPUT(pin_A3)){

k2: if( INPUT(pin_A3)){

at();goto st3;}

goto k2;}

st3: if(!INPUT(pin_A4)){

k3: if( INPUT(pin_A4)){

call();goto st4;}

goto k3;}

st4: if(!INPUT(pin_A5)){

k4: if( INPUT(pin_A5)){

sendsms();goto st5;}

goto k4;}

st5: if(!INPUT(pin_E0)){

k5: if( INPUT(pin_E0)){

lcd_putc("\fReady…\n");rx=0;n=0;z=0;

for( z=0;z<=20;z++)

num[z]='\0';

goto st6;}

goto k5;}

ST6:

//–––recived serial data–––––

if(rx>1){

//lcd_putc("\f");

delay_ms(1000);

//if(rx>26)rx=26;

for( z=0;z<rx;z++)

lcd_putc(text[z]);

rx=0;

}

//–––read keyboard––––-

s=kbd_getc();

if(s!=0){

generate_tone(d_note[3],100);

num[n]=s;

lcd_putc("\fNUM:\n");

for( z=0;z<=n;z++)

lcd_putc(num[z]);

n++;

s=0;}

goto strt;

}

Anexa 3-tone.c

#ifndef MUSIC_NOTES

#define MUSIC_NOTES

// NOTE FREQUENCY

// Octave0 Octave1 Octave2 Octave3

const long C_NOTE[4] ={ 262, 523, 1047, 2093};

const long Db_NOTE[4] ={ 277, 554, 1109, 2217};

const long D_NOTE[4] ={ 294, 587, 1175, 2349};`

const long Eb_NOTE[4] ={ 311, 622, 1245, 2489};

const long E_NOTE[4] ={ 330, 659, 1329, 2637};

const long F_NOTE[4] ={ 349, 698, 1397, 2794};

const long Gb_NOTE[4] ={ 370, 740, 1480, 2960};

const long G_NOTE[4] ={ 392, 784, 1568, 3136};

const long Ab_NOTE[4] ={ 415, 831, 1661, 3322};

const long A_NOTE[4] ={ 440, 880, 1760, 3520};

const long Bb_NOTE[4] ={ 466, 923, 1865, 3729};

const long B_NOTE[4] ={ 494, 988, 1976, 3951};

#endif

#define TONE_PIN PIN_c0

void do_delay(int ms_delay, int num_ms, int us_delay, int num_us) {

int i;

for(i=0;i<num_ms;i++)

delay_ms(250);

delay_ms(ms_delay);

for(i=0;i<num_us;i++)

delay_us(250);

delay_us(us_delay);

}

void generate_tone(long frequency, long duration)

{

int32 total_delay_time; // in microseconds

long total_ms_delay_time, total_us_delay_time;

int num_us_delays, num_ms_delays, ms_delay_time, us_delay_time;

long num_periods;

total_delay_time = (1000000/frequency)/2-10; // calculate total delay time (10 for error)

total_ms_delay_time = total_delay_time/1000; // total delay time of ms

num_ms_delays = total_ms_delay_time/250; // number of 250ms delays needed

ms_delay_time = total_ms_delay_time%250; // left over ms delay time needed

total_us_delay_time = total_delay_time%1000; // total delay time of us (ms already acounted for)

num_us_delays = total_us_delay_time/250; // number of 250us delays needed

us_delay_time = total_us_delay_time%250; // left over us delay time needed

num_periods = ((int32)duration*1000)/(1000000/frequency);

while((num_periods–) != 0)

{

do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);

output_high(TONE_PIN);

do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);

output_low(TONE_PIN);

}

return;

}

Similar Posts

  • Aplicatie Web Creata In Microsoft Visual Studio 2013

    Cuprins ………………………………………………………………………………………….. 3 Introducere …………………………………………………………………………………….. 4 Integrarea temei într-un context teoretic general …………………………………. 5 Programarea …………………………………………………………………………….. 5 Tehnologii ……………………………………………………………………………………… 6 Microsoft Visual Studio …………………………………………………………….. 6 Limbaje de programare ………………………………………………………………7 Limbajul C# ………………………………………………………………………7 Prezentarea generală a temei………………………………………………………………8 Arhitectura N-Tier………………………………………………………………………8 ASP și ASP.NET………………………………………………………………………12 Structura paginilor ASP.NET……………………………………………..13 Procesarea paginilor ASP.NET……………………………………………15 SEO – Search Engine Optimization……………………………………..17 JavaScript, jQuery…………………………………………………………………….18 HTML5…

  • Numere Naturale

    Numere naturale. Operați cu numere naturale Repere din istoria matematicii Precizăm, încă de la început, că matematica este universală și atotprezentă. Cultura și matematica s-au dezvoltat împreună de-a lungul vremii. Numerele sunt notate prin simboluri, dar culturi diferite ale omenirii au utilizat pentru ele simboluri diferite. Cuvântul calcul provine din cuvântul latin ,, calculus”- pietricică….

  • Baza de Date cu Anunturi Publicitare

    CUPRINS Capitolul I. Introducere Capitolul II. Limbaje utilizat 2.1.Servere si limbaje 2.1.1.Apache 2.1.1.1.Caracteristici 2.1.1.2.Opțiuni de configurare 2.1.1.3.Securitate 2.1.2.MySQL 2.1.2.1.Caracteristici 2.1.2.2. Arhitectura bazelor de date 2.1.3.PHP 2.1.3.1.Caracteristici 2.1.3.2.Editarea programelor PHP 2.1.3.3.Tipuri de date 2.1.3.4.Variabile si constante 2.1.3.6. Puncte forte ale limbajului PHP 2.1.3.7.Operatori 2.1.3.7.1. Operatori aritmetici 2.1.3.7.2. Operatori de atribuire combinați 2.1.3.7.3. Operatori de comparare 2.1.3.7.4….

  • Criptarea Retelelor DE Calculatoare

    Cuprins Capitolul 1- Criptografia ºi securitatea reþelei . Generalitãti . 1.1.1 Identificarea persoanei . Identificarea bazatã pe cunoaºtere . Identificarea prin cheie fizicã . 1.2 Substituþii ºi permutãri în criptografia clasicã . Cifruri transpoziþie . Cifruri substituþie . Substituþii monoalfabetice . 1.2.3 Substituþia polialfabeticã . Metode criptografice simetrice .Cifruri DES ºi standardul DES . Proprietãþi…

  • Analiza Algoritmilor Genetici Si a Posibilitatilor Implementarii Lor In Diferite Domenii

    Introducere 6 I. Analiza algoritmilor genetici 7 1.1. Algoritmi evoluționiști 7 1.2. Evoluția computațională 7 1.3. Principalele paradigme ale evoluției computaționale 10 1.3.1. Strategii evolutive 10 1.3.2. Programarea evoluționistă 10 1.3.3. Programarea genetică 10 1.3.4. Alte tehnici 11 1.4. Algoritmii genetici 12 1.4.1. Originea atgoritmilor genetici 12 1.4.2. Noțiune de algoritm genetic 13 1.4.3. Termeni…

  • Catalog Onloine Promotia

    Ϲɑtɑlοg οnlіne prοmοțіɑ 2011 ϹUPRІΝS 1. ІΝТRΟDUϹERE 1.1. Іmpοrtɑnțɑ șі ɑсtuɑlіtɑteɑ temeі 1.2. Sсοpul șі οbіeсtіvele luсrărіі 1.2.1. Sсοpul prіnсіpɑl ɑl prοіeсtuluі: 1.2.2. Οbіeсtіvul prіnсіpɑl ɑl prοіeсtuluі: 1.2.3. Οbіeсtіvele seсundɑre ɑle prοіeсtuluі: 1.3. Ϲοnțіnutul luсrărіі 2. ТEHΝΟLΟGІІ DE PRΟІEϹТАRE WEВ 2.1. WSDM – Web Sіte Desіgn Methοd ("WіSDοM") 2.2. HDM – Hγperteхt Desіgn Mοdel 2.3….