Radu NEAGOE (24965) - Calculator de Buzunar

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul consta in realizarea unui calculator aritmetic.

Scopul proiectului este unul didactic, deoarece intotdeauna mi-am dorit sa stiu cum se construieste un calculator de buzunar.

Consider acest proiect a fi foarte util pentru mine, in mod special, prin acumularea de noi cunostiinte în domeniul embedded.:-D

Descriere generală

Hardware Design

Pe langa componentele de baza, am mai avut nevoie si de:

  • tastatura 4×4 - 10Lei
  • ecran LCD 2×16 Hitachi HD44780 - 20Lei
  • 16 pini mama - 2Lei
  • 56 pini tata - 4Lei
  • 3 rezistente 1K - 0.5Lei
  • 1 rezistenta 10K - 0.5Lei

Schema electrica ce include LCD-ul si tastatura conectate la ATMEGA324:

Software Design

Am lucrat in Ubuntu 15.04 x64. A trebuit sa instalez avr-gcc, iar ca mediu de dezvoltare am folosit editorul de text Atom.

Pentru interfatarea LCD-ului m-am folosit de API-ul pus la dispozitie in laboratorul 1. La pornirea aplicatiei, utilizatorul introduce o expresie matematica pe care aplicatia o interpreteaza si ii afiseaza rezultatul pe LCD.

Pentru a evalua expresia matematica am folosit algoritmul shunting yard putin modificat.

Functia main arata asa:

int main()
{
    IO_init();
    LCD_init();
    sei();
    timer1_init();
    calculator_init();

    LCD_print("Calculator");
    LCD_writeInstr(LCD_INSTR_nextLine);
    LCD_print("Radu Neagoe");
    clear_display = 1;

    while (1) {
        /*
         * Verific daca am deja rezultatul si trebuie sa curat display-ul,
         * sau daca am deja un operator pe LCD si trebuie sa introduc un numar.
         */
        check_blocked();

        /*
         * A fost apasata o tasta de pe keypad.
         */
        int8_t key = get_keypad_index();
        if (key != -1) {
            /*
             * Aprinde led.
             */
            PORTD |= (1 << PD7);

            /*
             * Verific ce tasta a fost apasata.
             *
             * A doua conditie din primul if este pentru cazul in care primul numar vreau sa fie negativ.
             */
            if (isdigit(keypad[key]) || (a_digits == 0 && keypad[key] == '-')) {
                get_digit(keypad[key]);
            } else if (keypad[key] == '/' || keypad[key] == '*' || keypad[key] == '+' || keypad[key] == '-') {
                get_operator(keypad[key]);
                if (oper == 0)
                    continue;
            } else if (keypad[key] == '=') {
                get_result();
            }

            /*
             * Afisez caracterul primit de la keypad pe LCD.
             */
            print_key_to_LCD(keypad[key]);

            /*
             * Delay-ul este necesar pentru a evita debouncing-ul de la taste.
             */
            _delay_ms(100);

            /*
             * Stinge led.
             */
            PORTD &= ~(1 << PD7);
        }
    }

    return 0;
}

Rezultate Obţinute

Calculatorul functioneaza bine, insa, deoarece LCD-ul este de 16 caractere pe linie, lungimea expresiei este limitata.

Concluzii

Am realizat tot ceea ce mi-am propus la inceputul proiectului. A fost un proiect interesant si am avut multe de invatat. Poate pentru viitor ar mai putea fi adaugate butoane pentru expresii matematice complexe si poate chiar si o baterie pentru o alimentare independenta.

Download

Arhiva contine un script pentru incarcarea pe placuta, biblioteca LCD (lcd.c si lcd.h) si fisierele stack.h si pocket_calculator_interpreter.c:

calculator_de_buzunar_radu_neagoe_334ca.zip

Jurnal

  • 27.04.2016 - Finalizare placuta de baza.
  • 29.04.2016 - Adaugare lista piese
  • 06.05.2016 - Lipit rezistente si pinii pentru LCD.
  • 06.05.2016 - Adaugare schema electrica.
  • 16.05.2016 - Testare LCD + keypad.

ASCII

  • 25.05.2016 - Lucru la partea software a proiectului.
  • 26.05.2016 - Lucru la partea software a proiectului.
  • 27.05.2016 - Finalizare wiki si proiect.

Bibliografie/Resurse

pm/prj2016/drugescu/calculator-de-buzunar.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