Introducere

Proiectul consta in realizarea unui calculator pentru functii matematice elementare precum:

  • adunare
  • scadere
  • inmultire
  • impartire

Ideea unui astfel de proiect mi-a venit in cadrul primului laborator cand trebuia sa afisam pe ecran numarul de apasari ale unui buton. Extinzand aceasta la mai multe butoane si o prelucrare mai complexa in spate rezulta calculatorul mentionat mai sus.

Consider ca neavand experienta in acest domeniu (curs de EAP de exemplu sau concursuri) cel mai bun inceput poate consta intr-un calculator simplu pentru functii matematice de baza. Utilitatea consta in acumularea de experienta.

Descriere generală

Schema cuprinde 3 module:

  • tastatura - modulul de input
  • placa de baza cu microcontrolerul ATMEGA16
  • LCD-ul - modulul de output

Prin intermediul tastaturii utilizatorul introduce datele, adica apasarea butonelor determina prelucrarea datelor si modificarea afisajului in conformitate cu acestea. In functie de comenzi microcontrolerul comanda ceea ce se va afisa pe ecran.

Hardware Design

Placutei din prima etapa a trebuit sa-i adaug

  • un LCD 16×2 DEM 16216
  • o tastatura 4×4
    1. 10 taste pentru cifre
    2. 4 taste pentru cele 4 operatii +,-,*,:
    3. o tasta = (egal)
    4. o tasta C (clear screen)

Pentru a determina ce tasta a fost apasata am folosit pinii portului D:

  • PD0 legat de butoanele liniei A
  • PD1 B
  • PD2 C
  • PD3 D
  • PD4 legat de butonele coloanei 1
  • PD5 2
  • PD6 3
  • PD7 4

Determinam ce linie si ce coloana au fost activate, si, in functie de aceste 2 informatii determinam ce buton a fost apasat.Afisam cifra/operandul/rezultatul/stergem ecranul dupa caz.

Software Design

  • Pentru partea software am scris cod C compilat cu WinAvr.
  • Librarii incluse
    1. <avr\io.h>
    2. <avr\interrupt.h>
  • Cod pre-existent ⇒functiile folosite la primul laborator
void LCD_init();                                        // Initializare modul LCD.Trebuie apelata inainte de a se face orice operatie cu LCD-ul
void LCD_writeInstruction(unsigned char _instruction);	// Trimite o instructiune catre lcd (vezi datasheet)
void LCD_writeData(unsigned char _data);		// Trimite date catre LCD pentru afisare
void LCD_write(unsigned char _byte);			// trimite un bute catre LCD la modul general (nu conteaza daca e instructiune sau date)
void LCD_waitNotBusy();					// Asteptam pana cand lcd-ul devine disponibil pt o noua comanda
void LCD_waitInstructions(unsigned char _instructions);	// Asteapta un numar de cicli de ceas.
void LCD_print(char* _msg);				// Afiseaza imformatia pe LCD (doar 1 linie, primele 16 caractere)
void LCD_print2(char* _msg1, char* _msg2);		// Afisare pe 2 lini pe LCD
void LCD_printDecimal2u(unsigned int _n);		// Afisare numar in baza 10 pe LCD
void LCD_printHexa(unsigned int _n);			// Afisare numar in baza 16 pe LCD

Rezultate Obţinute

Proiectul e nefinalizat, insa detin o intelegere mai buna a problematicii.

Concluzii

Proiectul poate fi extins. Pot fi adaugate butoane si functionalitati noi(functii matematice mai complexe).

Bibliografie/Resurse

Resurse Software
avr-programming.php
lab1

Resurse Hardware
44780.shtml
datasheet_iul.pdf

pm/prj2010/mcarjaliu/calculator.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0