2012_331AC_P6

Wiki error: Section name cannot be repeated ' '

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.