Table of Contents

Alexandru-Ionuț MUSTAȚĂ (66968) - Calculator Stiintific

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul consta in implementarea unui calculator stiintific cu diferite functii matematice. Acesta va putea executa calcule ce contin ridicari la putere, functii trigonometrice, logaritmari si expresii ce contin paranteze.

In functie de timpul pe care il voi avea la dispozitie pentru implementare, as dori sa introduc si un mod de editare al expresiilor si o tasta de SHIFT pentru a facilita existenta cat mai multor functii matematice.

Utilitatea unui calculator de acest tip am descoperit-o in cadrul laboratoarelor de fizica din liceu si facultate unde era necesar sa se calculeze expresii care pe un calculator simplu s-ar fi calculat mai greu (trebuiau notate rezultatele intermediare). Consider ca un asemenea calculator este util oricarui inginer.

Descriere generală

Utilizatorul va introduce folosind cele 32 de taste expresia ce se doreste calculata. Semnalele trimise de catre cele doua tastaturi vor fi interpretate de catre ATmega 324 si acesta va memora sirul care reprezinta expresia, iar la comanda de afisare a rezultatului ( = ) se va parsa expresia si aceasta va fi calculata.

Expresia va fi afisata pe prima linie a LCD-ului si rezultatul pe a doua.

In imaginea de mai jos este prezentata tastatura si impartirea acesteia pe cele doua module de taste 4*4. In functie de timpului disponibil pentru implementare este posibil sa inlocuiesc tasta √ cu o tasta SHIFT pentru a extinde capacitatea calculatorului cu mai multe functii incarcand cate doua pe fiecare buton.

Tasta C are rolul de a reseta starea calculatorului prin stergerea ecranului si asteptare introducerii unei noi expresii.

Tasta DEL are rolul de a sterge caracterul sau functia care se afla inainte de cursor.

Tastele ← si → au rolul de a pozitiona cursorul pentru a facilita inserarea sau stergerea de caractere sau functii.

Hardware Design

Lista de piese este evidentiata in urmatorul tabel.

Componenta Cantitate Distribuitor
Placa Proiect PM 2017 + ATmega324 1 Echipa PM
LCD text cu 2 linii si 16 caractere 1 OptimusDigital
Tastatura 4*4 2 OptimusDigital
Set 10 fire mama-mama 2 Optimus Digital
Set 10 fire mama-tata 2 Optimus Digital
Header de pini mama 1 Optimus Digital

Schema electrica

Software Design

Mediu de dezvoltare

Am desfasurat procesul de implementare pe Linux Mint 18 64-bit utilizand Sublime Text si bootloader-ul de pe Wiki PM.

Librarii si surse 3rd-party

Pentru usurarea procesului de implementare am folosit biblioteca pentru LCD text 2*16 din laborator.

Algoritmi si structuri implementate

Am implementat o lista ce are asociate functii de inserare celula la inceput/sfarsit, stergere celula de la inceput/sfarsit si extragere celula de la inceput/sfarsit, in acest fel lista poate fi folosita ca stiva si coada.

Pentru a calcula expresia matematica a fost nevoie mai intai sa o transform in expresie postfixata utilizand Algoritmul Shunting-Yard al lui Edsger Dijkstra, apoi am efectuat calculul efectiv asupra acesteia utilizand Notatia Poloneza.

La parsarea expresiei se pot detecta erori semantice si sintactice caz in care calculatorul ofera un mesaj pe al doilea rand al LCD-ului. De asemenea, daca un calcul presupune o impartire la zero acest fapt va fi semnalat si calculul va fi suspendat.

Rezultate Obţinute

Am reusit sa implementez calculatorul astfel incat sa furnizeze toate aspectele prezentate la inceputul proiectului atat din vedere matematic cat si din perspectiva modului de editare al expresie.

Concluzii

Am reusit sa implementez ceea ce mi-am propus. Din acest proiect consider ca am invatat sa lucrez foarte bine cu intreruperile si sa citesc datele introduse de la o tastatura matriciala (stabilirea unei diferente de potential intre randuri si coloane si apoi inversarea acesteia, debouncing). Un lucru care nu a fost totusi implementat este suportarea operatorilor unari + si -.

Download

Aceasta este arhiva care contine surse, makefile, readme si scriptul pentru compilarea si incarcarea programului pe ATmega324:

331cb_mustata_alexandru_ionut_proiect_pm.zip

Jurnal

23 Aprilie 2017: Prezentarea structurii initiale a proiectului.

7 Mai 2017: Realizarea schemei electrice si realizarea fotografiilor placutei.

19 Mai 2017: Am completat sectiuniile: Software Design, Rezultate Obtinute si Concluzii.

21 Mai 2017: Am incarcat fotografii cu noul design al proiectului si arhiva cu surse, makefile, readme si script.

Bibliografie/Resurse

Descriere Link
Pagina Wikipedia Calculator Stiintific https://en.wikipedia.org/wiki/Scientific_calculator
Algoritmul Shunting-Yard al lui Edsger Dijkstra https://en.wikipedia.org/wiki/Shunting-yard_algorithm
Notatia Poloneza https://en.wikipedia.org/wiki/Reverse_Polish_notation