Sunteți pe pagina 1din 31

UNIVERSITATEA POLITEHNICA DIN TIMIOARA FACULTATEA DE ELECTRONIC I TELECOMUNICAII DEPARTAMENTUL DE COMUNICAII

PROIECT DE DIPLOM DEZVOLTAREA SECTIUNII DE PRACTICA A SAITULUI FACULTATII ETC

Conductor tiinific: As. Dr. Ing. Gal Janos

Absolvent: Cezar Lalescu

TIMIOARA 2011

Cezar Lalescu

ANEXA 1

TEM PENTRU PROIECT DE DIPLOM/LUCRARE DE DIZERTAIE

Numele i prenumele studentului Titlul temei _____

________________________________________________

_____________________________________________________________________

Gradul de dificultate: Conductor tiinific

ridicat

mediu

redus

______________________________________________________________

Locul de desfurare a activitii _______________________________________________________ Proiectul/lucrarea trebuie finalizat() ca Proiectul/lucrarea trebuie s conin _____ _____ _____ _____ _________________________________________

Cerine suplimentare _________________________________________________________________ _____ _____

Data propunerii temei Data aprobrii temei Data primirii temei _____

____

Cond. tiinific Dir. de departament Candidat

_____ _____

Practica saitului facultatii ETC

Cezar Lalescu

Subsemnatul Cezar LALESCU declar pe proprie rspundere c lucrarea de fa este rezultatul muncii mele, pe baza cercetrilor mele i pe baza informaiilor obinute din surse care au fost citate i indicate, conform normelor etice, n note i n bibliografie. Declar c lucrarea nu a mai fost prezentat sub aceast form la nici o instituie de nvmnt superior n vederea obinerii unui grad sau titlu tiinific ori didactic.

Semntura autorului

Practica saitului facultatii ETC

Cezar Lalescu

Cuprins:
1. Introducere 1.1 Cerinele proiectului 2. Programele utilizate n cadrul proiectului 2.1 MySQL, 2.2 PHP si CSS, 2.3 Adobe Photoshop, 2.4 Java 2.5 2.5.1 Avantajele utilizarii Flash, 2.5.2 Dezavantajele utilizarii Flash, 2.5.3 Realizarea animatie meniului. 2.5.3.1 Relatia Flash AJAX 2.5.3.2 Structura fisierului Flash 2.6 AJAX. 3. Dezvoltarea saitului 3.1 Structura general 3.2 Descrierea funciilor 3.3 Schema logic 3.4 Concluzii i caracteristici 4. Design axat pe utilitate 5. Concluzii 6. Bibliografie 8. Anexe 8.1Anexa 4 8.2 Anexa 5 8.3 Anexa 6 9
9

11 11 13

Practica saitului facultatii ETC

Cezar Lalescu

CAPITOLUL 1

INTRODUCERE

1.1 Cerintele Proiectului Ideea principala a acestui proiect este transformarea sectiunii de practica a saitului Facultatii de Electronica si Telecomunicatii intr-un set de aplicatii ce au menirea de a oferi studentilor toate informatiile necesare realizarii practicii pe timp de vara.

Fig. 1.1 Saitul actual al ETC Acest lucru a fost realizat prin imbinarea unor module realizate in urmatoarele programe: Baza de date MySQL, necesara menajarii utilizatorilor PHP, pentru adugarea caracaterului dinamic al paginii web Adobe Photoshop, folosit la crearea designului paginii web Adobe Flash, folosit la dezoltarea modulelor interactive ale paginii web AJAX, confera fiabilitate interactivitatii aduse de Adobe Flash

Practica saitului facultatii ETC

CAPITOLUL 2

10

Cezar Lalescu

PROGRAMELE UTILIZATE IN CADRUL PROIECTULUI


Tehnologiile web fiind intr-o modificare constanta, in realizarea aplicatiilor web actuale sunt folosite o multitudine de programe pentru a oferi fiecarui utilizator informatii relevante prin intermediul unor interfete din ce in ce mai complexe. Astfel saiturile web actuale nu mai pot fi realizate strict folosind Hypertext Markup Language (HTML) si limbaje de programare pe parte de server cum ar fi Hypertext Preprocessor (PHP) sau Pearl. Este nevoie de dezvoltare aditionala in JavaScript, Flash si diverse programe de design grafic. Drept urmare, in realizarea acestui proiect, s-a avut in vedere utilizarea urmatoarelor programe:

1.1 MySQL MySQL este un sistem de gestiune a bazelor de date relaional, produs de compania suedeza MySQL AB i distribuit sub Licena Public General GNU. Este cel mai popular SGBD open-source la ora actual, fiind o component cheie a stivei LAMP (Linux, Apache, MySQL, PHP)si ai urmasilor acesteia WAMP si XAMP. Dei este folosit foarte des mpreun cu limbajul de programare PHP, cu MySQL se pot construi aplicaii n orice limbaj major. Exist multe scheme API disponibile pentru MySQL ce permit scrierea aplicaiilor n numeroase limbaje de programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea folosind un tip spefic API. O interfa de tip ODBC denumit MyODBC permite altor limbaje de programare ce folosesc aceast interfa, s interacioneze cu bazele de date MySQL cum ar fi ASP sau Visual Basic. n sprijinul acestor limbaje de programare, unele companii produc componente de tip COM/COM+ sau .NET (pentru Windows) prin intermediul crora respetivele limbaje s poat folosi acest SGBD mult mai uor dect prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de exemplu MyVBQL) sau comerciale. MySQL este component integrat a platformelor LAMP , WAMP si XAMP platform utilizata si in realizarea proiectului in cauza (Linux/Windows-Apache-MySQLPHP/Perl/Python). Popularitatea sa ca aplicaie web este strns legat de cea a PHPului care este adesea combinat cu MySQL i denumit Duo-ul Dinamic. n multe cri de specialitate este precizat faptul ca MySQL este mult mai uor de invat i folosit dect multe din aplicaiile de gestiune a bazelor de date, ca exemplu comanda de ieire fiind una simpl i evident: exit sau quit. Pentru a administra bazele de date MySQL se poate folosi modul linie de comand sau, prin descrcare de pe internet, o interfa grafic: MySQL Administrator i MySQL

Practica saitului facultatii ETC

11

Query Browser. Probabil cel mai util instrument de management al acestor baze de date este aplicaia gratuit, scris n PHP, phpMyAdmin.

1.2 Php si CSS PHP este un limbaj de programare. Numele PHP provine din limba englez i este un acronim recursiv : Php: Hypertext Preprocessor. Folosit iniial pentru a produce pagini web dinamice, este folosit pe scar larg n dezvoltarea paginilor i aplicaiilor web. Se folosete n principal nglobat n codul HTML, dar ncepnd de la versiunea 4.3.0 se poate folosi i n mod linie de comand (CLI), permind crearea de aplicaii independente. Este unul din cele mai importante limbaje de programare web open-source i server-side, existnd versiuni disponibile pentru majoritatea web serverelor i pentru toate sistemele de operare. Conform statisticilor este instalat pe 20 de milioane de situri web i pe 1 milion de servere web. Este disponibil sub Licena PHP i Free Software Foundation l consider a fi un software liber. PHP nsemna iniial Personal Home Page. PHP a fost nceput n 1994 ca o extensie a limbajului server-side Perl, i apoi ca o serie de CGI-uri compilate de ctre Rasmus Lerdorf, pentru a genera un curriculum vitae i pentru a urmri numrul de vizitatori ai unui site. Apoi a evoluat n PHP/FI 2.0, dar proiectul open-source a nceput s ia amploare dup ce Zeev Suraski i Andi Gutmans, de la Technion au lansat o nou versiune a interpretorului PHP n vara anului 1998, aceast versiune primind numele de PHP 3.0. Tot ei au schimbat i numele n acronimul recursiv de acum, pn atunci PHP fiind cunoscut ca Personal Home Page Tools. Apoi Suraski i Gutmans au rescris baza limbajului, producnd astfel i Zend Engine n 1999. n mai 2000 a fost lansat PHP 4.0, avnd la baz Zend Engine 1.0.

CSS (Cascading Style Sheets) este un limbaj pentru stiluri folosit pentru a descrie prezentarea (aspectul si formatarea) unui document scris ntr-un limbaj de marcare. Aplicatia sa cea mai cunoscuta este realizarea stilului paginilor web scrise n HTML si XHTML, dar limbajul poate fi aplicat oricarui tip de document XML, inclusiv SVG si XUL. CSS este destinat n primul rnd sa permita separarea continutului documentului (scris n HTML sau un limbaj de marcare similar) de prezentarea documentului, inclusiv elemente precum culori, fonturi, si npaginare. Aceasta separare poate mbunatati accesibilitatea continutului, poate oferi mai multa flexibilitate si control n specificarea caracteristicilor de prezentare, permite partajarea formatarii pentru multiple pagini, si reduce complexitatea si repetitia n continutul structural (precum posibilitatea designului web fara tabele). CSS poate de asemenea sa permita unei aceleiasi pagini

12

Cezar Lalescu

de marcare sa fie prezentata n diferite stiluri pentru diferite metode de transmitere, precum pe ecran, imprimare, voce (cnd se citeste cu ajutorul unui browser pe baza de voce sau cu cititor de ecran) si Braille, dispozitive tactile. n timp ce autorul unui document leaga de obicei acel document de un sablon de stil CSS, cititorii pot folosi un sablon de stil diferit, posibil chiar pe propriul calculator, pentru a suprascrie pe cel specificat de autor. CSS specifica o schema prioritara pentru a determina care reguli de stil se aplica daca doua sai mai multe reguli se suprapun pentru un element particular. n acest asa-numit cascade, prioritatile sau greutatea sunt determinate si atribuite regulilor, astfel nct rezultatele sunt predictibile.

1.3 Adobe Photoshop Adobe Photoshop este un software folosit pentru editarea imaginilor digitale pe calculator, program produs i distribuit de compania american Adobe Systems i care se adreseaz n special profesionitilor domeniului. Photoshop este unealta indispensabila atunci cand vine vorba design grafic. In acest proiect a fost utilizata in realizarea meniului principal. Pentru inceput meniul a trebuit sa rezume in cele 6 taburi ale sale intreaga functionalitate a saitului. Adobe Photoshop este probabil cea mai puternica unealta pentru realizarea si modificarea continutului de natura grafica. Dezvoltarea

Fig. 2.3.1 Primul tab al meniului

Fig. 2.3.2 Al doilea tab al meniului

Urmand ca mecanica si functionalitatea acestora sa fie conceputa si realizata in Flash. Fig. 2.3.3 Varianta intermediara in realizarea meniului

Practica saitului facultatii ETC

13

2.4 Adobe Flash Adobe Flash sau mai pe scurt Flash este o aplicaie utilizat pentru dezvoltarea obiectelor-applet de tip Flash disponibile n cadrul unor pagini WEB. Prin intermediul obiectelor flash, vei putea crete dinamismul unei pagini precum i facilita interaciunea cu utilizatorul. Iniial dezvoltat de Macromedia, aplicaia Flash a fost preluat de ctre Adobe odat cu achiziionarea companiei sus amintite. 2.4.1. Avantajele folosirii Flash-ului pe web: Elemente grafice vectoriale: dimensiuni mici i scalabil: Pentru a memora imaginile un calculator poate recurge la dou metode: prima este reinerea pixel cu pixel a imaginii, cea de-a doua este memorarea unor puncte critice cu ajutorul crora imaginea poate fi refcut. In cadrul formatelor vectoriale (SVG - Scalable Vector Graphics, SWF - ShockWave Flash) sunt reinute doar centrul i raza cercului, calculatorul gsind imediat metoda de afiare a tuturor punctelor ce vor alctui cercul. Este evident faptul c dimensiunea unui fiier n format rasterizat (jpg, bmp, gif) este mai mare dect cea a unui fiier n format vectorial (din cauza numrului de informaii ce vor fi reinute). Independena de platform (browser/sistem de operare): Imaginile vectoriale, dei mai utile, necesit o aplicaie care s genereze imaginea (pentru formatul SVG de exemplu exist Adobe SVG Player iar pentru SWF avem Playerul de Flash). Independena de platform apare din cauz c acest program ce tie s afieze imaginile a fost construit pentru o gam larg de hardware i sisteme de operare: Astfel dac vom vizualiza obiectul Flash n Windows se va folosi automat Playerul de Flash versiunea Windows, dac utilizm un telefon mobil (SmartPhone), se va folosi playerul disponibil pentru telefoane (Flash Player Lite 1.0), sau dac vom folosi MacOS exist un player separat (evident toate playerele vor afia aceeai imagine final). Animaii de lung durat uor de realizat: animaiile sunt punctul forte al Flash-ului, interfaa aplicaiei d posibilitatea de a sincroniza (n funcie de timp) diversele obiecte, poziii sau forme ale acestora. Flash-ul nu numai c realizeaz aceast sincronizare, dar poate i interpola poziia (sau forma) unui obiect pentru a uura munca utilizatorului. Se pot aduga interfeei elemente multimedia: n interiorul obiectelor Flash putei importa i manipula (nainte, inapoi, salt la un anumit moment) MP3-uri sau AVI-uri. Nu necesit cunotine de HTML, XHTML: n cazul n care v hotri s realizai un ntreg site n Flash, aplicaia v poate furniza odat cu obiectul flash i codul HTML necesar n acest fel tot ce mai trebuie fcut este doar publicarea sitului pe un server WEB.

14

Cezar Lalescu

Uurina

mbinrii

elementelor

grafice

cu

scriptul:

ataarea

codurilor

ActionScript obiectelor din flash se realizeaz prin selectarea obiectului i introducerea codului asociat obiectului ntr-o fereastr special. 2.4.2 Dezavantaje ale utilizrii Flash-ului: Depinde de player: dei acesta vine instalat pe o suit de browsere (i n cazul n care nu este preinstalat instalarea este destul de rapid dimensiunea Playerului Flash este destul de mic i descrcarea acestuia n contextul reelelor actuale este rapid), totui exist cazuri n care obiectele Flash ajung pe maini ce nu au instalat aplicaia necesar interpretrii obiectelor Flash, ajungndu-se n imposibilitatea folosirii fiierelor (Pentru a rula aplicaiile Flash pe aceste calculatoare trebuie exportat obiectul Flash ca un executabil). Mare amator de resurse: deoarece trebuie s reconstruiasc de fiecare dat elementele grafice, Playerul Flash (precum i aplicaia de dezvoltare) este mare consumator de memorie i procesor (n cazul graficii raster este clar unde trebuiau afiai pixelii ce formeaz cercul n cadrul graficii vectoriale trebuie ca poziiile pixelilor s fie recalculate). Probabil cel mai pregnant dezavantaj al utilizarii Flash este faptul ca motoarele de cutare nu pot indexa textul: Flashul lucreaz cu mai multe tipuri de texte, majoritatea dintre acestea (textul static) nu poate fi indexate de motoarele de cutare deoarece obiectul Flash este tratat ca element grafic/obiect i roboii de cutare nu au cunotinele necesare disecrii obiectelor Flash i extragerii textului intern.

2.4.3. Realizarea animatiei meniului Flash a fost utilizat pentru realizarea functionalitatii meniului, printre altele. Designul realizat in Photoshop a fost 2.4.3.1 Relatia Flash - AJAX Meniul a fost conceput ca in momentul deplasarii mouseului deasupra unui tab diferit de cel curent, sa se navigheze catre acel tab, deci , implicit, catre o alta pagina cu continut. Acest lucru ar face ca navigatia, din perspectiva utilizatorului, sa fie destul de greoaie deoarece in eventualitate comutarii rapide intre doua taburi adiacente browserul ar trebui sa reincarce paginile la fiecare navigare. Acest inconvenient a fost solutionat prin utilizarea capabilitatilor limbajului de programare AJAX de a schimba n fundal cantiti mici de date cu serverul, astfel nct s nu fie nevoie ca pagina s fie rencrcat la fiecare aciune a utilizatorului. asamblat cu ajutorul Flashului.

2.4.3.2 Structura fisierului Flash

Practica saitului facultatii ETC

15

Fig. 2.4.1 structura fisierului Flash

Fiind un program de animatie, Flash lucreaza cu frameuri (frames) si straturi (layers). Pentru ca obfuscarea codului si realizarii, in general, a aplicatiilor in Flash este inconvenientul cel mai dezagreabil in lucrul cu Flash s-a avut grija ca in realizarea animatiei elementele sa fie bine structurate, pentru a simplifica eventuale modificari ce ar putea aparea pe viitor. Fiecarei zone de interes a meniului i s-a atribuit o zona activa pentru realiza functionalitatea meniului.

Fig. 2.4.2 zona activa

16

Cezar Lalescu

Concretizarea

zonei active este realizarea

unui obiect movie

clip,

element

obligatoriu al Flash atunci cand dorim sa atasam functionalitate cu ajutorul Action Scriptului 3 (AS3), identificandu-se in fig 2.4.2. prin acel dreptunghi de culoare albastra. Din cauza lucrului pe straturi al programului Flash si deci a inevitabilitatii suprapunerii obiectelor, este necesar ca obiectele cu care trebuie sa interactioneze utilizatorul sa fie puse pe primul strat. Mentionez ca primele doua straturi sunt rezervate pentru actiuni (atasarea codului in AS3), si steaguri (flags) si au rol strict de organizare a proiectului si deci nu contin obiecte.

Fig. 2.4.3 zona activa transparenta

Pentru a nu strica aspectul designului, acestui obiect i s-a modificat proprietatea Alpha = 0, facandu-l transparent. Fiecarei zone active i sa atasat un nume de instanta, acestea fiind folosite in codul AS3 ca referinte catre aceste obiecte. AS3 este un limbaj de programare in principiu bazat pe evenimente ,event based, adica functionarea graviteaza in jurul evenimentelor. Astfel pentru realizarea functionalitatii unei actiuni simple cum ar fi un click al utilizatorului asupra unui obiect anume, in Flash trebuie ascultata aceasta actiune. In alte cuvinete, Flash trebuie sa astepte relizarea unui eveniment specific, in cazul nostru un click, pentru a realiza o actiune specifica, navigarea spre o alta pagina spre exemplu. Acest lucru se realizeaza in Flash cu ajutorul event listenerului , care este in esenta o clasa a limbajului de programare AS3 conceputa pentru tratarea evenimentelor.

Practica saitului facultatii ETC

17

R,

Anunturi_flRegulament.addEventListener(MouseEvent.MOUSE_OVE overAnunturi2); function { gotoAndPlay('anunturi'); }


Fig. 2.4.4 Event listener si functia de tratare a evenimentului atasata

overAnunturi2(event:MouseEvent):void

18

Cezar Lalescu

CAPITOLUL 3

DEZVOLTAREA SOFTWARE-ULUI

3.1 Structura general Dup cum am precizat, cea mai mare poriune din software am scris-o pe placa de dezvoltare de la ATMega8, iar apoi am adaptat-o cu minim de efort pentru ATMega8515, funcionalitii. Pentru editarea de cod am utilizat Programmer's Notepad, pentru compilare WinAVR iar pentru programarea serial a microcontrolerului, PonyProg2000. Am folosit ca limbajul de programare "C". Am ales aceste programe la recomandarea colegilor cu mai mult experien din companie. Din punct de vedere structural, software-ul este organizat n 4 module logice (fig. 3.1) ce comunic ntre ele n sensul artat de sgei. pe acesta din urm scriind software cu intenia de rafinare a

n acest capitol nu va fi prezentat codul pe larg, acesta avnd, comentat i aerisit, aproximativ 1800 de linii. Voi arta, n schimb funcionarea tipic i particularitile ce ajut operatorul n exploatarea modulului. n figura 3.2 am prezentat schema de funcionare a programului pe module i funcii, realizat n Mind Manager. Numerele de pe sgei arat ordinea n care sunt apelate funciile. De asemenea trebuie s precizez faptul c majoritatea constantelor ce afecteaz funcionarea microcontrolerului i a modulului n general le-am definit n fiierele header ".h" astfel nct aceti parametri s poat fi modificai si de o persoan care nu cunoate funcionarea software-ului n detaliu. 3.2 Descrierea funciilor nainte de a ncepe detalierea funciilor, trebuie s menionez principiul pe care se bazeaz programul.

Practica saitului facultatii ETC

19

Avnd n vedere felul n care s-a dorit realizarea manipulrii de ctre operator a rezistenei (cu butoane direcionale i de setare), am considerat c cel mai bine ar fi s folosesc un vector de ntregi cu 11 celule, fiecare din aceast celul gzduind o cifr din numrul ce reprezint valoarea rezistenei. Utiliznd si o variabil cursor care ne spune deasupra crei celule suntem poziionai la un moment dat, putem realiza rapid o coresponden ntre ce se afl n program i ce avem afiat pe displayul LCD (mai multe detalii se vor vedea la descrierea driverului pentru LCD). I. Modulul logic main.c a. void main( void ) Funcia main() reprezint punctul de intrare n program. Aici sunt apelate funciile de iniializare a perifericelor microcontrolerului, displayului, este afiat valoarea iniial a vectorului rezisten si un mesaj de nceput. n bucla infinit sunt activate global ntreruperile iar microcontrolerul este trecut n starea de consum minim de putere Power Down. Mai departe, execuia programului este lsat n seama handler-ului de ntrerupere generat de Timer/Counter-ul 0 . b. void PeriphInit( void ); Aceasta este funcia de iniializare a perifericelor microcontrolerului. De la Portul A folosim PA1 ca ieire pentru a menine n conducie tranzistorul PNP din schema de alimentare, n cazul n care suntem pe baterie (mai multe detalii n seciunea hardware). PA0 detecteaz prezena tensiunii de alimentare extern, fiind configurat ca intrare. n acest fel putem aplica un plan de economisire a energiei electrice n caz c folosim bateria. Portul B [3..0] este setat ca ieire. Acesta reprezint semnalele Register Selection, Read/Write i Enable Signal prin care se comand displayul LCD (vezi hardware). PB6 este o ieire la care e legat un led de stare. PB6 mai are i funcia MISO pentru programarea serial [3]. Portul C [5..0] este configurat ca intrare cu pullup, la acesta fiind conectate cele 6 butoane.

Portul D [6..4] este setat ca ieire, acestea fiind cele 4 linii de date care comand LCD-ul. PD2 are funcia alternativ de ntrerupere extern si este configurat ca intrare (pentru a scoate modulul din starea de Sleep). Tot n aceast seciune sunt setate modul Power Down pentru Sleep i perioada de 35 ms pentru Timer/Counter-ul 0.

20

Cezar Lalescu

c. void RightButtonPress( void ); d. void LeftButtonPress( void ); Aceste dou funcii sunt similare ca structur i reprezint aciunile ce trebuiesc luate n cazul apsrii butonului corespunztor ( sau ). Se verific mai nti daca suntem n submeniul de selectare Card ID (vezi cap. 1 seciunea 1.2 a) ) sau n funcionare normal. n ambele cazuri este incrementat/decrementat (deplasat spre stnga sau dreapta) cursorul corespunztor. n cazul n care avem cursorul la una dintre extreme i vrem s il deplasm n aceeai direcie, acesta este trimis la captul opus.

Orice modificare a cursorului software este urmat de aceeai modificare pe LCD. e. void UpButtonPress( void ); f. void DownButtonPress( void );

Aceste funcii sunt de asemenea similare i realizeaz funcionalitatea dorit pentru butoanele sau . Ca i n cazul funciilor anterioare, verificm prima data dac suntem n submeniul Card ID. n caz afirmativ, incrementm/decrementm cifra pe care e cursorul, avnd o limitare din software care ne las s selectm doar combinaiile de cifre ce dau numere cuprinse n intervalul [00 , 63]. Dac nu suntem n submeniul Card ID, se verific modul de funcionare activ n acel moment: Auto sau Manual. n modul Manual este apelat funcia de incrementare/decrementare cu deplasare i limitare Increment()/Decrement(). Modul Automat face acelai lucru i n plus apeleaz funcia de setare a rezistenei RDECSetResistance(). Orice modificare a matricei de cifre a rezistenei este afiat pe LCD n momentul modificrii. g. void SetButtonPress( int ); Ca i la funciile anterioare, verificm, mai nti, dac suntem n submeniul Card ID. Dac da, aciunea corespunztoare apsrii butonului n aceast situaie este de a seta valoarea reglat cu butoanele , dup care ne ntoarcem la meniul de funcionare normal.

Practica saitului facultatii ETC

21

Butonul Set are dubl funcionalitate i anume de a seta rezistena dac e apsat scurt (mai puin de ~2 sec) sau de a modifica modul de funcionare din Manual n Automat i invers. Decizia asupra duratei de apsare este luat n modulul Buttons.c i e transmis acestei funcii printr-un parametru care e verificat n caz c nu suntem n submeniul Card ID. Funcia de setare a rezistenei este inhibat pe acest buton n cazul n care lucrm n mod Auto (din motive obiective setarea rezistenei se realizeaz automat la apsarea butonului sau ). Inhibarea e suspendat pentru o singur apsare dup ce a fost apsat butonul High Impedance (pentru o deplasare rapid ntre cele dou stri). Dup realizarea acestor aciuni corespunztoare butonului Set, pe LCD se va reveni la afiarea normal, dac am fost n meniul Card ID, se va modifica o liter n colul dreapta sus ("M" sau "A") sau se va afia rspunsul de la R-Dec pe a doua linie. h. void HighZButtonPress( int ); Funcia aceasta implementeaz funcionalitatea butonului High Impedance i anume de accesare a submeniului Card ID dac a fost apsat mai mult de ~2 sec (decizie luat n modulul Buttons.c). Pentru o apsare scurt este resetat valoarea Card ID la "00" dac suntem n submeniu, n caz contrar este trimis comanda de setare a strii de nalt impedan la R-Dec (prin apelul funciei RDECSetResistance() cu parametrul de exponent 0xFF vezi cap. 1 seciunea 1.2 e) ). i. void DisplayResArray( void );

Apelul acestei funcii realizeaz afiarea vectorului de cifre a rezistenei pe prima linie a displayului LCD. Afiarea pe LCD se poate face preciznd adresa DDRAM a displayului.

Adresele de afiare n formatul precizat la cerine (cap. 1 seciunea 1.1) sunt memorate ntr-un vector constant cu celulele dispuse astfel nct variabila cursor s fac legtura ntre cifra curent i poziia la care trebuie afiat aceasta. j. void Increment( int );

k. void Decrement( int ); Funciile Increment / Decrement realizeaz, dup cum le zice i numele, 19 999

incrementarea respectiv decrementarea cifrei curente. Aceasta se realizeaz recursiv i cu transport. Tot aceste funcii realizeaz limitarea software la valoarea 999.999 [].

22

Cezar Lalescu

l.

long int Pow10x( int );

Returneaz valoarea operaiei 10X. Folosim aceast funcie pentru conversia matricei de rezistene n numr ntreg. m. void ReturnCursor( void ); Trimite cursorul de pe LCD in poziia n care se afl cursorul software. Acest lucru este necesar deoarece controlerul LCD-ului deplaseaz automat cursorul spre dreapta dup fiecare afiare a unui caracter. n. unsigned long int Conversion( void ); Pentru a putea forma telegrama de setare a rezistenei pe care s o trimitem la R-Dec, avem nevoie de valoarea ei in format ntreg. Acest lucru se face n funcia Conversion(). Folosim de asemenea o variabil exponent, care este iniial 0, fiind 1 doar dac valoarea convertit depete limitarea de 32 de bii, 4 294 967 295 [m]. o. void LEDBlink( int ); Realizeaz plpirea ledului legat la PB6 de un numr de ori precizat ca parametru, cu o perioad definit ca BLINK_PERIOD (250 ms iniial). p. void LEDBlinkFast( int ); Realizeaz plpirea "mai rapid" a ledului legat la PB6 de un numr de ori precizat ca parametru, cu o perioad definit ca BLINK_FAST_PERIOD (100 ms iniial). q. ISR( INT0_vect ); Acesta este handler-ul pentru ntreruperea extern 0 (INT0). Aceast ntrerupere este activat in momentul n care modulul este alimentat de la baterie i au trecut un numr de secunde ce corespund constantei definite SLEEP_LIMIT. n cazul n care se apas butonul ce corespunde ntreruperii n cazul menionat (i doar acesta), modulul este "trezit". Timer/Counter-ul 1, ce numra o dat la 2 secunde ct mai are pn comand oprirea este suspendat, este pornit Timer/Counter-ul 0 care verific butoanele o dat la 35 ms i este pornit de asemenea displayul. r. Acesta ISR( TIMER1_OVF_vect ); este hadler-ul pentru ntreruperea generat prin "revrsarea"

Timer/Counter-ului 1 (cnd ajunge cu numratul la 65535 fiind pe 16 bii , se reseteaz la 0 ). ntreruperea se declaneaz o dat la 2 secunde i verific prin compararea unui contor cu o valoare definit PWR_DOWN_LIMIT dac trebuie s ntrerup alimentarea modulului. De asemenea, la fiecare numrare este aprins pentru

Practica saitului facultatii ETC

23

scurt timp LED-ul de stare i n caz c se apropie durata dup care se va opri, viteza de plpire a LED-ului este mrit n dou trepte dup timpi definii. s. ISR( TIMER0_OVF_vect ); Pentru a reduce consumul energetic, am realizat o "discretizare" a funcionrii microcontrolerului. n loc s verificm apsarea butoanelor n bucla infinit for(;;) din funcia main() la fiecare ciclu, am ales s o verificm o dat la 35 ms, n restul timpului microcontrolerul aflndu-se n starea de consum redus Power Down. Funcia aceasta este, de fapt, handler-ul Timer/Counter-ului 0. Acesta este apelat o dat la 35 ms i verific dac exist sau nu tensiune de la sursa extern, afieaz in colul dreapta jos tipul alimentrii, iar dac este de la baterie incrementeaz un contor la fiecare apel. Acest contor este comparat cu un prag, iar dac acesta e depit, este oprit LCD-ul, se activeaz Timer/Counter-ul 1, ntreruperea extern i se dezactiveaz Timer/Counter-ul 0, cel ce declaneaz de fapt handler-ul de fa. De asemenea, se verific starea butoanelor prin apelul funciilor ButtonHold() i ButtonPressed() din modulul corespunztor. II. Modulul logic Buttons.c a. void ButtonHold( void ); Funcia ButtonHold ine aprins ledul de stare ct timp e apsat un buton. b. void ButtonPressed( void ); Aceast funcie ia decizia referitoare la ce buton a fost apsat i ce fel de apsare a fost (scurt / lung). Iniial se verific, pe rnd, fiecare port la care sunt ataate butoanele. Dac este detectat ca fiind apsat unul (portul e legat la mas), este memorat butonul respectiv ntr-o variabil i este asociat funcia de tratare corespunztoare unui pointer. n continuare se ateapt eliberarea butonului respectiv, i doar a acestuia. Ct timp butonul e inut apsat, se declaneaz numrarea unui contor i n cazul n care se depete o anumit limit definit ca LONG_PRESS_LIMIT (aprox. 2 sec), se ia decizia c a fost o apsare lung i se execut aciunea corespunztoare. III. Driverul pentru display LCD.c Modulul LCD.c este de fapt driverul pentru display. Interfaa cu acesta se poate realiza pe 4 sau 8 bii. n proiectul de fa am folosit un bus pe 4 bii. n cadrul operaiilor de scriere / citire (noi folosim doar scriere), utilizm dou registre pe 8 bii: registrul de date (DR) i registrul de instruciuni (IR). Registrul de date e folosit ca o locaie temporar pentru a citi / scrie n DDRAM sau CGRAM

24

Cezar Lalescu

(vezi cap. 2 seciunea 2.3). Registrul de instruciuni e folosit pentru a stoca coduri de instruciuni transferate de la ATMega8515. Registrul i operaia dorit, de scriere sau citire se selecteaz realiznd

combinaia dintre semnalele RS i R/W ca n tabelul 3.1 Citirea / scrierea datelor se face prin activarea semnalului E. a. void LCDSendCommand( uint8_t ); Funcia LCDSendCommand() este funcia de baz a driverului LCD. Aceasta realizeaz trimiterea unei comenzi n doi pai (deoarece comenzile sunt de lungime 8 bii iar noi facem adresarea pe un bus de 4 bii). Ne asigurm prima dat c nu trimitem prea rapid comenzi, punnd o ntrziere de 39 s (acesta fiind timpul de execuie pentru comenzi conform foii de catalog [5] ), dup care deplasm i trimitem primii 4 bii ncepnd cu MSB, apoi ultimii 4. Dup prima i dup cea de-a doua transmisie pulsm semnalul E timp de 1 s, timp suficient pentru controlerul LCD s observe starea liniilor. n tabelul 3.2 se pot observa toate operaiile ce pot fi realizate pe acest LCD. b. void LCDInit( void ); Iniializarea displayului nu se face pur i simplu prin alimentarea acestuia, trebuie urmat un algoritm care se realizeaz folosind ntrzieri i trimind comenzi, dup schema 3.12 c. void LCDClear( void ); Funcie pentru tergerea coninutului de pe display d. void LCDGotoXY( int x, int y ); Funcie pentru deplasarea cursorului de pe LCD la o adres precizat. e. void LCDSendChar( uint8_t ); Funcie prin care se trimite un caracter pentru a fi afiat la adresa curent. Implementarea este activarea liniei RS. f. void LCDSendString( char[] ); similar cu trimiterea unei comenzi, singura diferen fiind

Funcie pentru trimiterea unui ir de caractere pentru afiare. Apeleaz, de fapt, funcia LCDSendChar() pentru fiecare caracter din string. g. void LCDDisplayOn( void );

Practica saitului facultatii ETC

25

Pornete displayul LCD. h. void LCDDisplayOff( void ) Opete displayul LCD. i. void LCDPulseE( void );

Funcie prin care se pulseaz linia E timp de 1 s (pentru citirea liniilor de date). IV. Modulul logic RDEC.c a. void USARTInit( void ); Realizeaz iniializarea modulului Universal Synchronous and Asynchronous Serial Receiver and Transmitter din microcontroler la parametrii: 38400 baud rate, mod asincron, 8 bii de date, 1 bit de stop, fr paritate, setri necesare pentru comunicarea cu R-Dec. b. void USARTTransmit( unsigned char data ); Funcia de transmisie serial. c. unsigned char USARTReceive( void ); Funcia de recepie serial. Dac dup un anumit timp nu se recepioneaz nimic, modulul va considera c are de-a face cu o eroare de conexiune si va afia un mesaj corespunztor. d. void RDECSetResistance( unsigned long int , int, int ); Funcia de setarea a rezistenei. Aici este compus telegrama specificat n capitolul 1 seciunea 1.2, inclusiv calculul sumei de control. Parametrii pe care i primete sunt valoarea sub form de numr ntreg a rezistenei, exponentul i parametrul Card ID. Tot aici este apelat funcia RDECFeedback(). e. void RDECFeedback( void ); RDECFeedback() e funcia ce recepioneaz i interpreteaz rspunsul de la RDec. n primul rnd se verific dac s-a primit ceva. Dac nu, avem o eroare de conexiune sau de Card ID (deoarece R-Dec ignor mesajele ce nu i sunt adresate, deci cele ce au cmpul CID diferit de al su). Primul octet este ntotdeauna cel de lungime al telegramei. Dac acesta e 0x0D, nseamn c avem de-a face cu un mesaj de stare care este trimis la fiecare pornire al R-Dec. l citim pe tot (240 octei) dar nu facem nimic cu el, l ignorm i mai apelm o dat funcia de feedback pentru a primi rspunsul ce ne intereseaz pe noi

26

Cezar Lalescu

(valoarea rezistenei setate). Dac nu s-ar face aceste operaii, modulul de comand ar genera erori dup fiecare pornire al R-Dec. Dac nu avem de-a face cu mesajul de stare, citim toat telegrama, pe care o punem ntr-un vector i i calculm suma de control. Dac difer de cea recepionat, avem o eroare pe care o semnalizm (afiare i plpire LED). Dac totul a mers bine pn aici, verificm cmpul CFC s vedem ce rspuns am primit. Dac este CFC-ul corespunztor unei telegrame de eroare, afim eroarea (vezi cap. 1 seciunea 1.2 c) ). Dac este CFC-ul telegramei de setare a rezistenei, apelm funcia RDECResistanceMsg(), ce se va ocupa de aceasta. f. void RDECResistanceMsg( void );

Aceasta e funcia ce interpreteaz telegrama rspuns la setarea rezistenei, ce ne comunic, de fapt, ce rezisten a fost capabil R-Dec s seteze. Operaiile ce se execut aici sunt inverse fa de ce se face n funciile de setare/conversie. Cmpul de date din telegram este convertit ntr-o valoare ntreag a rezistenei n m i apoi este depus ntr-un vector cu 11 celule pentru afiare. g. void RDECPrintRes ( void ); Funcia ce afiaz rezistena ce a fost setat de R-Dec (afieaz, de fapt, vectorul cu 11 celule ce a fost format n funcia RDECResistanceMsg() ).

Practica saitului facultatii ETC

27

CAPITOLUL 6

CONCLUZII

Pentru autor, acest proiect de licen a fost att educativ, ct i interesant. De-a lungul su, am aprofundat noiuni de programare i lucru cu uneltele Adobe, noiuni de AJAX, Php, si mult mai important sinergia acestor medii de programare. Acest proiect nu este un studiu teoretic, are realizare practic, e complet funcional la un nivel ce depete cerinele iniiale i poate fi i folosit intern in cadrul saitului facultatii de Electronica si Telecomunicatii.

28

Cezar Lalescu

Practica saitului facultatii ETC

29

CAPITOLUL 7

BIBILIOGRAFIE

[1] [2] [3] [4]

Wikipedia Adobe Photoshop Adobe Flash W3schools

www.wikipedia.org http://help.adobe.com/en_US/Photoshop/11.0/index.html?trackingid =DYNQE http://help.adobe.com/en_US/Flash/10.0_UsingFlash/WS816BB12E70DE-48c7-9C6C-4735B11BC9E9.html http://www.w3schools.com/

30

Cezar Lalescu

Practica saitului facultatii ETC

31