Maxim DOMENTII - Calculator pentru sisteme de ecuatii liniare

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Calculatorul pentru sisteme de ecuatii liniare rezolva sisteme de n ecuatii liniare cu n necunoscute de forma:

a11*x1 + a12*x2 + … + a1n*xn = b1

a21*x1 + a22*x2 + … + a2n*xn = b2

an1*x1 + an2*x2 + … + ann*xn = bn

Scopul acestui proiect este de a ma familiariza cu proiectarea si realizarea unui microcontroller cu functionalitati minimale.

Ideea de la care am pornit a fost un calculator aritmetic care efectueaza operatii simple si am dorit sa fac partea de software mai complexa si astfel am hotarat sa implementez un calculator pentru sisteme de ecuatii liniare.

Utiliatea acestui proiect consta in acumularea de experienta in domeniul de proiectare si realizare de microcontrollere.

Descriere generală

Proiectul cuprinde urmatoarele module:

  • placa de baza cu microcontrolerul ATMEGA324
  • o tastatura matriciala de 4×4 reprezentand modulul de input conectata la portul D
  • un display LCD cu 2 linii si 16 coloane reprezentand modulul de output conectat la portul C

Utilizatorul introduce datele de la tastatura, modulul de input determinand prelucrarea datelor si modificarea afisajului in conformitate cu acestea. In functie de input, microcontrolerul comanda ceea ce se va afisa pe modul de output, adica pe LCD.

Hardware Design

La placuta de baza am adaugat urmatoarele piese:

  • LCD 16×2 tip 1602A
  • tastatura matriciala 4×4

Pentru a determina ce buton a fost apasat se utilizeaza portul D astfel:

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

Schema electrica:

Software Design

Mediu de dezvoltare: avr-gcc

Biblioteci si surse 3rd-party:

  • biblioteca lcd.h si sursa lcd.c din laboratorul pentru interfatarea LCD-ului 16×2
  • o biblioteca keypad.h care implementeaza citirea unei taste de pe o tastatura matriciala 4×4

Programul ce urmeaza a fi implementat va functiona in felul umator:

  • Citeste de la tastatura elementele matricii A
  • Citeste de la tastatura elementele vectorului b
  • Rezolva sistemul in felul urmator:
    1. Calculeaza determinatul matricii A
    2. Calculeaza adjuncta matricii A
    3. Transpune matricea adjuncta calculata
    4. Imparte transpusa matricei adjuncte la determinatul matricii initiale A ⇒ inversa matricii A
    5. Solutia sestemului A * x = B este data de relatia: x = A^-1 * b
    6. Inmulteste inversa matricii A cu vectorul b = > x - solutia sistemului
  • Afiseaza rezultatul pe LCD

Functiile implementate:

  • LCD_clear() - Sterge LCD-ul
  • button_init() - Initializeaza butoanele de pe tastatura
  • getChar() - Transforma rezultatul intors de functia read_keypad() din biblioteca keypad.h intr-un char
  • readNumber() - Citeste un input de la tastatura
  • fltoa() - Transforma un double in char[]
  • readA() - Citeste matricea A
  • readb() - Citeste vectorul b
  • writeResult() - Afiseaza rezultatele pe LCD
  • powd() - Ridicarea la putere a unui double
  • determinant() - Calculeaza determinatul unei matrici
  • co_factor() - Calculeaza matricea adjuncta
  • transpose() - Calculeaza transpusa unei matrici
  • inv() - Calculeaza inversa unei matrici
  • vectors_dot_prod() - Inmulteste doi vectori
  • matrix_vector_mult() - Inmulteste o matrice cu un vector
  • main() - Implementeaza algoritmul descris mai sus intr-un loop. Cand se termna algoritmul sau apare o erroare reia loop-ul

Surse: les_dom.zip

Rezultate Obţinute

Placa de baza + 2 rezistente (R4, R7) pentru contrastul display-ului

Placa de baza + display & LCD

Proiectul final afisand rezultatele unui test

Placa verso

Concluzii

Proiectul este functional. Poate fi extins din punct de vedere hardware pentru a functiona cu alimentarea pe baza de baterie sau din punct de vedere software pentru a avea mai multe functionalitati cum ar fi efectuarea de operatii aritmetice simple, functii matematice sau rezolvarea unor sisteme de ecuatii mai complexe.

Am avut probleme cu afisarea pe display a numerelor cu zecimale insa am rezolvat aceasta problema adaugand o biblioteca la etapa de link-editare din procesul de compilare a programului software.

A fost un proiect interesant atat din punct de vedere software cat si hardware care si-a atins scopul si anume acela de a ma familiariza cu dezvoltarea unor astfel de proiecte.

Download

Bibliografie/Resurse

pm/prj2015/voltean/29.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