PROIECTE 2011
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.
2011_P15
CEAS DIGITAL
Project Description
Proiectul presupune implementarea unui ceas digital pe placa EV/Z3. Proiectul este software, display-ul si interfata cu utilizatorul fiind cele de pe placa EV/Z3, si are urmatoarele functionalitati:
- afisare ora si data in formatul mm:hh:ss dd/mm/yyyy
- setare ora si data
- setare timezone
- cronometru
- alarma
Project Requirements
Data(yyyy:mm:dd) + Timezone + Ora (hh:mm:ss) + Cronometru(rezolutie milisecunde)
Trebuie sa aveti posibilitatea sa setati Data + Ora curenta si timezone-ul curent. Ma intereseaza cum generati milisecundele.
Pentru timezone trebuie sa aveti in vedere cum se schimba data + ora odata setat (cel putin 5 timezone-uri)
User Flow
Initial ceasul este oprit si trebuie apasata tasta “0” pentru pornite.
Utilizatorul are posibilitatea de a seta timezone-ul prin tastele "1"-"5" si stearea orei si datei folosind tastele “3” si “7” pentru incrementarea respectiv decrementarea unitatilor selectate cu tastele:
“C” –tasta pentru setare ora
“D” –tasta pentru setare minute
“E” –tasta pentru setare secunde
“A” –tasta pentru setare zi
“B” –tasta pentru setare luna
“F” –tasta pentru setare an
Required components
Fiind un proiect software, nu am folosit alte componente hardware inafara de piesele care sunt in incluse in placa EV/Z3.
In codul OpenWatcom am folosit urmatoarele functii din interfata “platform_io.h” :
ReadKey –pentru citirea tastei apasate, folosit la pornirea ceasului si setarea orei/datei
DisplayString –pentru afisarea formatului de data si ora pe display sub forma de string
Software Design
Codul a fost compilat cu OpenWatcom si este format din urmatoarele functii si algoritmi:
//functie pentru preluarea codului tastei apasate
char convertkey(int key){static char cod[19]={'0','2','4','6','8','A','C','E','c','l','1','3','5','7','9','B','D','F','r'};
return cod[key];
}
//functie pentru convertire din int in char pentru afisare pe display-ul placii
char *convert (char *c, int n){c[0]=n/10+'0';
c[1]=n%10+'0';
return c;
}
//Algoritm pentru ceas si data
while(b=1){
kIo.Wait(1000);
sec=sec+1;
if(sec == 60)
{
sec = 0;
min=min+1;
if(min == 60)
{
min = 0;
hour=hour+1;
if(hour == 24)
{
hour = 0;
d=d+1;
if((d > 31)&&(m==1))
{d=1;
m=2;}
if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
bisect=1 else bisect=0;
if ((bisect==1)&&(d>29)&&(m==2))
{d=1;
m=3;}
if ((bisect==0)&&(d>28)&&(m==2))
{d=1;
m=3;}
if((d > 31)&&(m==3))
{d=1;
m=4;}
if((d > 30)&&(m==4))
{d=1;
m=5;}
if((d > 31)&&(m==5))
{d=1;
m=6;}
if((d > 30)&&(m==6))
{d=1;
m=7;}
if((d > 31)&&(m==7))
{d=1;
m=8;}
if((d > 31)&&(m==8))
{d=1;
m=9;}
if((d > 30)&&(m==9))
{d=1;
m=10;}
if((d > 31)&&(m==10))
{d=1;
m=11;}
if((d > 30)&&(m==11))
{d=1;
m=12;}
if((d > 31)&&(m==12))
{d=1;
m=1;
y=y+1;}
}
}
}
//algoritm pentru setarea ceasului si a datei
while(1)
{
key=kIo.ReadKey();
c=convertkey(key);
if(c=='1') b=1; //pornire ceas
if(c=='0') b=0; //oprire ceas
if(c=='C') set=1; //tasta pentru setare ora
if(c=='D') set=2; //tasta pentru setare minute
if(c=='E') set=3; //tasta pentru setare secunde
if(c=='A') set=4; //tasta pentru setare zi
if(c=='B') set=5; //tasta pentru setare luna
if(c=='F') set=6; //tasta pentru setare an
if(set==1)
{if(c=='7') h=h-1; //tasta "7" ("DEC(-)") decrementeaza unitatea selectata de "set"
else
if(c=='3') h=h+1;} //tasta "3" ("INC(+)") incrementeaza unitatea selectata de "set"
if(set==2)
{if(c=='7') m=m-1;
else
if(c=='3') m=m+1;}
if(set==3)
{if(c=='7') s=s-1;
else
if(c=='3') s=s+1;}
if(set==4)
{if(c=='7') d=d-1;
else
if(c=='3') d=d+1;}
if(set==5)
{if(c=='7') m=m-1;
else
if(c=='3') m=m+1;}
if(set==6)
{if(c=='7') y=y-1;
else
if(c=='3') y=y+1;}
}
//Algoritm pentru setare timezone
if(c=='1')
{hour=hour+10;
sir1[9]='T'; sir1[10]='Z'; sir1[11]='1';
if(hour>24) {hour=hour-24;}
if(hour<0) {hour=hour*(-1);}
}
//Algoritm pentru afisarea orei si datei in formatul “hh:mm:ss dd/mm “
char *sir="hh:mm:ss dd/mm ";
convert(&sir[3],min);
convert(&sir[6],sec);
convert(&sir[9],d);
convert(&sir[12],m);
kIo.DisplayString(sir);
Download [edit]
Arhiva cu schema hardware + cod microcontroller + tot proiectul OpenWatcom.
Status
Saptamana 7 28martie-1aprilie: Intocmirea codului pentru ceas.
Saptamana 8 4-8aprilie: In cadrul laboratorului nu am reusit sa afisam ceasul pe display-ul placii.
Saptamana 9 11-15aprilie: Intocmirea codului pentru metoda de afisare pe display .
Saptamana 10 18-22aprilie: Testarea cu succes in cadrul laboratorului a metodei de afisare.
Saptamana 11 25-29aprilie: Intocmirea codului pentru pentru data si tentative de implementare a functionalitatii butoanelor.
Saptamana 13 9-13mai: Testarea cu succes a codului pentru data si buton de pornire ceas.
Intocmirea codului pentru setare data si ora .
Saptamana14 16-20mai: Prezentarea finala a proiectului.