Autorul poate fi contactat la adresa: Login pentru adresa
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.
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.
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 |
Am desfasurat procesul de implementare pe Linux Mint 18 64-bit utilizand Sublime Text si bootloader-ul de pe Wiki PM.
Pentru usurarea procesului de implementare am folosit biblioteca pentru LCD text 2*16 din laborator.
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.
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.
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 -.
Aceasta este arhiva care contine surse, makefile, readme si scriptul pentru compilarea si incarcarea programului pe ATmega324:
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.
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 |