PROIECT 2012
Proiectele realizate in cadrul Laboratorului de SMP 2012, Fiecare echipa are de completat in pagina WIKI corespunzatoare proiectului in cadrul tabelului de mai jos, in functie de grupa de care apartine La o grupa se poate implementa o singura data un proiect.
Lista cu proiectele disponibile o gasiti AICI.
Punctaj Proiect
-
2p Pagina Wiki in format HTML cu capitolele create - poze(diferite stadii ale proiectului) + schema hardware + listing software (microcontroller + OpenWatcom la Z3)
-
5p Functionalitate proiect - punctaj in functie de cerintele cerute/realizate
-
1p Calitatea proiectului - cat de organizati ati fost in realizarea acestuia, cod format frumos, optimizari etc...
-
2p Nota individuala - participarea voastra in proiect, raspunsul vostru la intrebarile laborantului la presentarea proiectului
Cerinte general valabile:
- Toate proiectele se vor integra software si/sau hardware cu placa EV/Z3. Pentru integrarea hardware se va folosi portul serial al placii EV/Z3
- Logica software de baza se va regasi pe placa EV/Z3 si va fi realizata în C + inline assembly folosind template-ul OpenWatcom de la laborator
- Pagina de wiki trebuie sa contina o descriere a ce a realizat fiecare student in cadrul proiectului
- Daca nu puneti pe site alta schema de proiectare hardware se va folosi cea cu PIC16F628A pusa la dispozitie
- Wiki-ul trebuie updat ca sa vad stadii intermediare ale proiectului
Elemente de electronica
-
Pentru a vedea/comanda un pret estimativ a componentelor va propun www.conexelectronic.ro . Gasiti si alte magazine pe Maica Domnului.
-
Letconul ar trebui sa aiba cam 40W , nu mai mult de 60 oricum , iar fludorul la 1mm-1.5mm. Sa aveti si un voltmetru cu voi.
-
Va recomand inainte sa alegeti proiectul sa cititi cateva elemente de electronica de AICI.
2012_331AC_P6
Wiki error: Section name cannot be repeated ' '
Table of contents
2. [edit]
2.2.1. Theacher Proposal
2.2.2. - trebuie sa implementezi calculatorul din windows
2.3. III. User Flow
2.5. V. Hardware Design
2.6. VI. Software Design
2.7. VII. Results
2.8. VIII. Download
2.9. IX. Status
2.10. X. Personal Contribution
Project Name [edit]
[edit]
I. Project Description
Add your should project description (300 words)
Proiectul presupune implementarea unui calculator de buzunar (asemanator cu cel din Windows, dar mult simplificat) cu ajutorul placii Z3/EV. In acest scop se vor utiliza butoanele de pe placa.
Calculatorul de buzunar are cateva functii de baza: adunare, scadere, inmultire, impartire si extragere de radical si este capabil de asemenea sa memoreze si reutilizeze un rezultat.
Butoanele necesare se vor nota cu cifre de la 0 la 9, cu simbolurile '+', '-', '*', '/', 'sqrt' corespunzatoare operatiilor mai sus mentionate si cu abrevierile 'MC', 'MR', 'MS', 'M+' corespunzatoare operatiilor de memorare si reutilizare a rezultatului. Este nevoie de asemenea si de un buton de clear ce va fi utilizat pentru a semnala inceputul unui nou calcul. Mai multe detalii in ceea ce priveste functionalitatea si modul de utilizare a acestor functii se gasesc in sectiunea "Project Requirements".
Calculatorul de buzunar va lucra numai cu numere intregi, nu poate sa efectueze operatii in virgula mobila. De exemplu, rezultatul operatiei 3/2 este 1. De asemenea, calculatorul de buzunar trebuie sa afiseze un mesaj de eroare (de forma "NaN") atunci cand este solicitat sa efectueze o operatie de tipul impartire la zero.
II. Project Requirements
What does the project require to be implemented (both hardware and software). Expected behavior.
Proiectul consta in implementarea unui calculator de buzunar, folosind tastatura placii Z3/EV.
In cele ce urmeaza vom descrie functionalitatea fiecarui buton ce va trebui programat:
- 0 - cifra zero
- 1 - cifra unu
- 2 - cifra doi
- 3 - cifra trei
- 4 - cifra patru
- 5 - cifra cinci
- 6 - cifra sase
- 7 - cifra sapte
- 8 - cifra opt
- 9 - cifra noua
- + - operatia plus pentru numere intregi
- - - operatia minus pentru numere intregi
- * - operatia de inmultire pentru numere intregi
- / - operatia de impartire pentru numere intregi;aceasta operatia va trebui implementata in ASM, cu inline assembly (celelalte operatii si functionalitati vor fi implementate in C); se genereaza un mesaj de eroare atunci cand se solicita o operatie de impartire la zero
- sqrt - operatia de extragere de radical pentru numere intregi; se genereaza un mesaj de eroare in cazul in care radacina patrata a numarului solicitat nu este un numar intreg
- C - operatia de clear everything; apasand acest buton se specifica faptul ca va incepe un nou calcul
- MC - memory clear - sterge rezultatul care era in memorie (adica pune zero in memorie); in cazul in care nu era nimic in memorie, butonul nu are nici un efect (toti bitii raman zero)
- MR - memory recall - citeste rezultatul din memorie si il pune pe display, acesta putand astfel sa fie utilizat in calculul curent
- MS - memory store - stocheaza in memorie numarul de pe display
- M+ - aduna ce este scris pe display cu numarul retinut in memorie si stocheaza noul rezultat in memorie
Theacher Proposal
- trebuie sa implementezi calculatorul din windows
- functii + - / * MC MR MS M+
- impartirea sa fie implementata in ASM cu inline assembly
- emulezi un agoritm pentru radical in numere intregi
III. User Flow
Describe the functionality from a users point of view. What an user can do with your app.
In acesta sectiune vom descrie ce ar putea sa faca un utilizator cu aceasta aplicatie. In exemplele care urmeaza sunt enumerate la input butoanele pe care apasa utilizatorul (butoane de pe placa Z3/EV), iar la output rezultatul ce va fi afisat pe display. Trebuie mentionat faptul ca rezultatele intermediare sunt de asemenea afisate pe display.
Se observa de asemenea ca, datorita numarului insuficient de butoane disponibile pe placa Z3/EV, nu a fost implementat un buton de "=". In locul acestuia se poate utiliza un buton corespunzator unui alt operator, de exemplu "+" (care in general afiseaza pe ecran rezultatul partial, dar in acest caz va fi si rezultatul final). Pentru a solicita un nou calcul se apasa butonul "C".
Exemplul 1:
input: 3 + 5 =
output: 8
Exemplul 2:
input: 0 - 3 + 5 =
output: 2
Exemplul 3:
input: 5 - 3 =
output: 2
Exemplul 4:
input: 3 - 5 =
output: -2
Exemplul 5:
input: 0 - 3 - 5 =
output: -8
Exemplul 6:
input: 3 * 5 =
output: 15
Exemplul 7:
input: 0 - 3 * 5 =
output: -15
Exemplul 8:
input: 3 / 5 =
output: 0
Exemplul 9:
input: 0 - 3 / 5 =
output: 0
Exemplul 10:
input: 5 / 3 =
output: 1
Exemplul 11:
input: 0 - 5 / 3 =
output: -1
Exemplul 12:
input: 0 / 0 =
output: NaN
Exemplul 13:
input: 0 / 5 =
output: 0
Exemplul 14:
input: 3 / 0 =
output: NaN
Exemplul 15:
input: 0 - 3 / 0 =
output: NaN
Exemplul 16:
input: 9 sqrt
output: 3
Exemplul 17:
input: 10 sqrt
output: NaN
Exemplul 18:
input: 0 - 9 sqrt
output: NaN
Observatie: Calculatorul de buzunar nu tine cont de prioritatea operatiilor.
Exemplul 18:
input: 2 + 2 - 2 =
output: 2
Exemplul 19:
input: 2 C
output: 0
Exemplul 20:
input: 2 MS C MR
output: 2
Exemplul 21:
input: 2 MS MC MR
output: 0
Exemplul 22:
input: 2 MS C 4 M+ MR
output: 6
Exemplul 23:
input: 2 MS C 5 + MR =
output: 7
Exemplul 24:
input: MC 6 / MR =
output: NaN
Exemplul 25:
input: 0 - 9 MS C MR
output: 9
Exemplul 26:
input: 0 - 9 = MS C MR
output: -9
Exemplul 27:
input: 0 - 9 = MS C MR sqrt
output: NaN
IV. Required components
The hardware components used. List them and take a screenshot of them.
Nu am utilizat alte componente harware.
V. Hardware Design
Add pictures and comments about the hardware implementation. Should include any schematic used in simulation (e.g. Proteus).
Nu am utilizat alte componente hardware.
Asezarea butoanelor pe tastatura este cea reprezentata mai jos:
F | Ms/MC | M+/MR | X |
7 | 8 | 9 | / |
4 | 5 | 6 | * |
1 | 2 | 3 | - |
0 | C | sqrt | + |
VI. Software Design
Describe the software functionality of your project, including code used on EV/Z3 board and the uC board. Discuss your algorithms, data flows and so on. Should post code samples of the most interesting bits.
Atunci cand programul este incarcat pe placuta pe display apare scris "Calculator". Pentru a dispune de functionalitatea calculatorului de buzunar trebuie apasata orice tasta. In momentul in care aceasta este apasata, se va afisa zero pe ecran si se vor putea efectua calcule.
Functia main este practic un ciclu infinit care apeleaza o alta functie, numita Compute. Daca aceasta functie returneaza -1 atunci inseamna ca a intervenit o eroare. Este fie cazul impartirii la zero, fie extragerea unui radical dintr-un numar ce nu este patrat perfect, fie pur si simplu s-a apasat un buton nefiresc in ordinea logica a operatiei (de exemplu, s-au tastat doi operatori consecutivi). In acest caz se iese din functia Compute cu -1 si se asteapta 3 secunde, dupa care se reia ciclul (se afiseaza zero pe ecran si calculatorul este pregatit pentru un nou calcul).
while(1)
{
if(ans == 0)
ans = Compute();
if(ans == -1)
{
kIo.Wait(3000);
//se refac conditiile
rez = 0;
lastin = 0;
fct = 0;
memory = 0;
strcpy(op, "\0");
strcpy(out, start);
kIo.DisplayString(" ");
kIo.DisplayString(out);
ans = 0;
}
}
Alt mod de a iesi din functia Compute este apasand tasta C. Acest lucru va sterge ceea ce se afla in memorie si va reinitializa un nou calcul.
Pentru a afisa pe display rezultatul, am folosit un string, out, care retine intotdeauna ceea ce s-a afisat ultima oara. In functie de continutul sirului out si de operatorii tastati, se calculeaza noul rezultat in variabila intreaga rez, iar ulterior, cu ajutorul unor functii de conversie din numere intregi in sir de caractere, acest rezultat este rescris in out si afisat cu ajutorul functiei kIo.DisplayString(). Am utilizat de asemenea o variabila de tip intreg numita memory in care se retin numerele cu ajutorul MS si care este initializata cu zero.
Alt element important, folosit din cauza insuficientei numarului de butoane disponibile pe placa, este un buton F care are rolul de a selecta una din functiile posibile ale unui alt buton. Acest lucru este valabil pentru butoanele aflate pe primul rand al tastaturii. Astfel, apasand tasta F, iar apoi tasta MS/MC, vom selecta de fapt functia MS. Similar, apasand tasta F si apoi butonul M+/MR vom selecta functia M+. In cazul in care se apasa tasta F, iar apoi se apasa un alt buton operator (de exemplu plus) vom primi un mesaj de eroare si se va iesi din functia Compute().
Mai multe detalii despre implementarea fiecarei functii se pot urmari in comentarile din cod.
VII. Results
Data about the final project implementation. Includes screenshots, movies, comments about your project in action.
S-au testat exemplele din sectiunea User Flow si s-au obtinut rezultatele dorite.
VIII. Download
After you have presented your project at the laboratory (week 13-14) you will add all your sources here. Any hardware simulation used, code archive and so on.
IX. Status
You will have to update this every 2 weeks to include details of what you have done on your project. E.g.: aquired componets, made board, written code for EV/Z3
21 martie - 3 aprilie:
- analiza proiectului - completarea sectiunilor Project Description, Project Requirements si User Flow
- analiza exemplelor de la User Flow si stabilirea unor reguli de implementare in ceea ce priveste functionalitatea calculatorului de buzunar (vezi notite Sofware Design)
- documentatie pdf-uri EV/Z3
- scris cod pentru EV/Z3
4 aprilie - 17 aprilie:
- analiza proiectului - schimbari in ceea ce priveste aranjarea si functiile butoanelor
- stabilirea codului fiecarui buton
- scris cod pentru EV/Z3
18 aprilie - 1 mai
- scris cod pentru EV/Z3
- testat cod pentru EV/Z3
- implementat functiile +, -, *, /, sqrt
2 mai - 15 mai
- scris cod pentru EV/Z3
- testat cod pentru EV/Z3
- implementat functiile MS, MR, MC, M+
- completarea sectiunii Software Design
- pregatiri finale pentru predarea proiectului
X. Personal Contribution
In case 2 or more students were involved, this section will contain what each student has done for the project. You will be asked when presenting project and graded individually on this.
Intregul proiect a fost realizat de Dina Irofti.