PROIECTE 2011
Completion requirements
Proiectele realizate in cadrul Laboratorului de SMP, 2011, le gasiti mai jos, Fiecare echipa are de completat in pagina WIKI corespunzatoare proiectului sau capitolele existente.
Punctaj Proiect
-
2p Pagina Wiki in format HTML cu capitolele create - poze(diferite stadii ale proiectului) + schema hardware + listing software (microcontroller + OpenWatcom la Z3)
-
5p Functionalitate proiect - punctaj in functie de cerintele cerute/realizate
-
1p Calitatea proiectului - cat de organizati ati fost in realizarea acestuia, cod format frumos, optimizari etc...
-
2p Nota individuala - participarea voastra in proiect, raspunsul vostru la intrebarile laborantului la presentarea proiectului
Cerinte general valabile:
- Toate proiectele se vor integra software si/sau hardware cu placa EV/Z3. Pentru integrarea hardware se va folosi portul serial al placii EV/Z3
- Logica software de baza se va regasi pe placa EV/Z3 si va fi realizata în C + inline assembly folosind template-ul OpenWatcom de la laborator
- Pagina de wiki trebuie sa contina o descriere a ce a realizat fiecare student in cadrul proiectului
- Daca nu puneti pe site alta schema de proiectare hardware se va folosi cea cu PIC16F628A pusa la dispozitie
- Wiki-ul trebuie updat ca sa vad stadii intermediare ale proiectului
Elemente de electronica
-
Pentru a vedea/comanda un pret estimativ a componentelor va propun www.conexelectronic.ro . Mi-a fost recomandat si mie de ceilalti laboranti.
-
Pentru conectarea la porturile de I/O trebuie sa izolati galvanic folosind optocuploare, ex LTV817 - puteti sa cautati pe site, si rezistente sa limiteze curentul maxim la 5mA U=R*I si trebuie avut in vedere ca rezistentele sa reziste la puterea la care e proiectat circuitul P=U*I...
-
Pentru alte elemente elecronice puteti folosi diode 1N4007, tranzistori BD139/140 de putere mare. Binenteles ca nu sunteti limitati la folosirea acestora, e doar o propunere.
-
Letconul ar trebui sa aiba cam 40W , nu mai mult de 60 oricum , iar fludorul la 1mm-1.5mm. Sa aveti si un voltmetru cu voi.
-
Va recomand inainte sa alegeti proiectul sa cititi cateva elemente de electronica de AICI.
Back
int operand_citit=1; //sa stiu al catelea operand il citesc
char semn; //pastrez semnul operatiei
int a=0,b=0; //initializarea celor 2 numere
int cod_reset_b=0; //variabila pentru resetarea lui b
while(1)
{
tasta=convert(coduri[key]); //pastrez in variabila "tasta" ce tasta a apasat utilizatorul
if (tasta>='0' && tasta<='9') //verific daca citesc o cifra
if (operand_citit == 1)
a=a*10+tasta-'0'; //daca da,atunci imi formez numarul
else
{
if (cod_reset_b == 1) //ma ajuta ca atunci cand vreau sa fac ex 2+3 si dak mai apas inca o data +
//atunci imi va aduna inca o data al doilea operand
{
cod_reset_b=0;
b=0; //aici fac pe b 0
}
b=b*10+tasta-'0';
2011_P2
Viewing page version #14
(Restore this version)
(Restore this version)
Modified: 30 March 2010, 10:01 AM User: cirneanu stefan → cs
Calculator de buzunar
Project Description
Proiectul implica emularea calculatorului din windows cu programul Open Watcom si integrarea cu ajutorul placii EV/Z3.
Project Requirements
Proiectul consta in implementarea calculatorului din windows.Acesta presupune crearea unui program in Open Watcom pentru efectuarea operatiilor:
-
adunare
-
scadere
-
impartire a 2 numere intregi
-
inmultire a 2 numere reale cu 2 zecimale
-
extragerea radacinii patrate dintr-un numar cu precizie de 2 zecimale.
User Flow
Utilizatorul poate folosi proiectul prin intermediul tastaturii placii EV/Z3.Astfel,
Pasii care trebuie urmati de utilizator sunt:
-
Utilizatorul introduce primul numar(format din cifre de la 0 la 9)
-
Utilizatorul alege operatia dorita:
-
Pentru operatia de adunare,se apasa tasta A de pe placuta EV/Z3;
-
Pentru operatia de scadere,se apasa tasta B de pe placuta EV/Z3;
-
Pentru operatia de inmultire,se apasa tasta C de pe placuta EV/Z3;
-
Pentru operatia de impartire,se apasa tasta D de pe placuta EV/Z3;
-
Pentru operatia de radical,se apasa tasta E de pe placuta EV/Z3;
3. Utilizatorul introduce cel de-al doilea numar(format din cifre de la 0 la 9):
Dupa efectuarea pasului 3,utilizatorul are mai multe posibilitati de continuare a calculului:
-
Daca doreste afisarea rezultatului,utilizatorul apasa tasta F de pe placuta EV/Z3;
-
Dar daca utilizatorul,dupa introducerea celor 2 numere si a operatiei dorite,alege sa faca inca o data operatia precedenta,atunci apasa din nou tasta corespunzatoare operatiei si va observa ca rezultatul spre exemplu in cazul adunarii 2+3=5 ,va aduna al doilea operand la rezultat -->8.
Required components
Software Design
In prima etapa a proiectului,am folosit pentru compilarea codului programul Microsoft Visual Studio,iar dupa accea,programul Open Watcom.
Codul programului se bazeaza pe mai multi algoritmi:
- Algoritm pentru apasarea pe placuta EV/Z3 a unor caractere si intoarcere acestor caractere in calculator(a codurilor acestora) pentru efectuarea operatiilor dorite.
Astfel,daca se apasa 2 A 4 si utilizatorul apasa tasta F,atunci calculatorul va stii sa faca 2+4 si va returna spre afisare pe placuta rezultatul 6.
unsigned char getch()
{
//citeste codul de la tastatura
int code;
code=kIo.ReadKey();
//testam ce cod este
switch(code)
{
case 0x00:
return '0';
case 0x0A:
return '1';
case 0x01:
return '2';
case 0x0B:
return '3';
case 0x02:
return '4';
case 0x0C:
return '5';
case 0x03:
return '6';
case 0x0D:
return '7';
case 0x04:
return '8';
case 0x0E:
return '9';
case 0x05:
return 'A';
case 0x0F:
return 'B';
case 0x06:
return 'C';
case 0x10:
return 'D';
case 0x07:
return 'E';
case 0x11:
return 'F';
default:
return '\0';
}
}
{
//citeste codul de la tastatura
int code;
code=kIo.ReadKey();
//testam ce cod este
switch(code)
{
case 0x00:
return '0';
case 0x0A:
return '1';
case 0x01:
return '2';
case 0x0B:
return '3';
case 0x02:
return '4';
case 0x0C:
return '5';
case 0x03:
return '6';
case 0x0D:
return '7';
case 0x04:
return '8';
case 0x0E:
return '9';
case 0x05:
return 'A';
case 0x0F:
return 'B';
case 0x06:
return 'C';
case 0x10:
return 'D';
case 0x07:
return 'E';
case 0x11:
return 'F';
default:
return '\0';
}
}
//Vectorul de caractere in ordinea crescatoare a codurilor fiecarui caracter in parte
char coduri[19]={0,2,4,6,8,'A','C','E','D','F',1,3,5,7,9);
void readkey() //intoarce in monitor codul tastei apasate
{
while (1)
{
int key=kIo=kIo.ReadKey();
kIo.DisplayBuffer(&key,2);
}
}
{
while (1)
{
int key=kIo=kIo.ReadKey();
kIo.DisplayBuffer(&key,2);
}
}
void convert(int key)
{
return coduri[key];
}
{
return coduri[key];
}
2. Algoritm pentru efectuarea radicalului de ordin 2 dintr-un numar
float radical(int x)
{
float r1,r2; // calcul radical din x prin aproximatii
r2=x; // aproximatia initiala
do {
r1=r2; // r1 este aprox. veche
r2=(r1+x/r1)/2; // r2 este aprox. mai noua
} while ( abs(r2-r1)); // pana cand r2==r1
return r2;
}
{
float r1,r2; // calcul radical din x prin aproximatii
r2=x; // aproximatia initiala
do {
r1=r2; // r1 este aprox. veche
r2=(r1+x/r1)/2; // r2 este aprox. mai noua
} while ( abs(r2-r1)); // pana cand r2==r1
return r2;
}
3. Algoritm pentru efectuarea operatiei propriu-zise
int operand_citit=1; //sa stiu al catelea operand il citesc
char semn; //pastrez semnul operatiei
int a=0,b=0; //initializarea celor 2 numere
int cod_reset_b=0; //variabila pentru resetarea lui b
while(1)
{
tasta=convert(coduri[key]); //pastrez in variabila "tasta" ce tasta a apasat utilizatorul
kIo.DisplayString(tasta); //afisez ce tasta am apasat pe ecran
if (tasta>='0' && tasta<='9') //verific daca citesc o cifra
if (operand_citit == 1)
a=a*10+tasta-'0'; //daca da,atunci imi formez numarul
else
{
if (cod_reset_b == 1) //ma ajuta ca atunci cand vreau sa fac ex 2+3 si dak mai apas inca o data +
//atunci imi va aduna inca o data al doilea operand
{
cod_reset_b=0;
b=0; //aici fac pe b 0
}
b=b*10+tasta-'0';
//altfel daca am citit primu numar at inseamna k operand citit =2 si citesc pe al doilea
}
Results
O imagine de ansamblu a cum functioneaza proiectul, screenshoturi, filmulete cu proiectul functionand. Alte detalii care le credeti importante.
Download
Arhiva cu schema hardware + cod microcontroller + tot proiectul OpenWatcom.
Arhiva va contine 2 directoare (1 singur pentru proiecte doar software)
Hardware design - schema uC + codul folosit pentru a genera fisierul .HEX
Software design - template-ul Open Watcom folosit
Status
Saptamana 25 aprilie-1 mai ==== realizarea codului programului in Microsoft Visual Studio
Saptamana 2 mai - 8 mai ====implementarea codului in OpenWatcom