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_P1
PROJECT NAME
Project Description
Proiectul nostru presupune implementarea unui ceas digital pe placa EV/Z3.
Acest ceas digital va avea urmatoarele functionalitati:
- afisare ora
- afisare data
- setare ora
- setare data
- cronometru ce va putea fi pornit si resetat
- alarma
Ceasul va afisa implicit ora exacta (adica ora, minut si secunde), iar pentru a potrivi ora se va apasa tasta "C" a placutei. La prima apasare a tastei "C" va fi posibila modificarea orei, folosind cele doua sagetele (<- si ->).Pentru a seta minutele se va mai apasa o data tasta "C" si, de asemenea se folosesc cele doua sagetele.Pentru a salva se va folosi tasta "B".
Pentru a putea vizualiza data se va apasa tasta "D", iar pentru a o modifica tasta "E". Similar functiei de potrivire a orei, se va apasa tasta "E" inca o data pentru fiecare camp modificat si se vor folosi celor doua sagetele. Astfel se seteaza anul calendaristic, luna si ziua.Pentru a salva data selectata se va folosi tasta "B".
Pentru a intra in functia de cronometru se va folosi tasta "F". La prima apasare a tastei, se va afisa "00:00:00"(min-sec-msec). Pentru a porni cronometrul se mai apasa o data tasta "F"; pentru a-l opri se apasa tasta '1'. Pentru a reseta cronometrul se va folosi tasta "0".
Pentru a intra in functia de alarma, se foloseste tasta "A". Pentru a potrivi ora se va apasa in mod repetat tasta "C" pentru ora,minut si secunde. Salvarea se va face prin inca o apasare a tastei "A".
Project Requirements
Data(yyyy:mm:dd) + Ora (hh:mm:ss) + Cronometru(rezolutie milisecunde) + Alarma
Trebuie sa aveti posibilitatea sa setati Data + Ora curenta. Ma intereseaza cum generati milisecundele la cronometru.
Setare Alarma la o anumita data + ora. Veti folosi buzzerul (10s de beepuri)
User Flow
Proiectul functioneaza implicit pe functia de afisare a ceasului. Pentru a potrivi ceasul, se apasa tasta "C"(in mod repetat pentru a modifica fiecare camp). Pentru a modifica cele trei campuri ale ceasului se folosesc cele doua sagetele(->,<-). Pentru a salva si a putea vizualiza ora se apasa tasta "B".
Pentru a putea vizualiza data se va apasa tasta "D", iar pentru a o modifica tasta "E". Similar functiei de potrivire a orei, se va apasa tasta "E" in mod repetat pentru fiecare camp modificat si se vor folosi celor doua sagetele. Astfel se seteaza anul calendaristic, luna si ziua.Pentru a salva data selectata se va folosi tasta "B".
Pentru a intra in functia de cronometru se va folosi tasta "F". Cronometrarea va incepe la p noua apasare a tastei "F" si ve va opri la apasarea tastei "1". Pentru a reseta cronometrul se va folosi tasta "0".
Pentru a intra in functia de alarma, se foloseste tasta "A". Pentru a potrivi ora se va apasa in mod repetat tasta "C" pentru ora,minut si secunde. Salvarea se va face prin inca o apasare a tastei "A".
Required components
Din platform_io.h am folosit urmatoarele functii:
- DisplayString(const char *) - pentru afisarea sirurilor de caractere pe LCD;
- ReadKey() - pentru a identifica tasta care a fost apasata de catre utilizator;
- StartBuzzer() -functie implementata de studenti pentru pornirea buzzerului placutei, folosind intreruperea 10H;
- Wait(const unsigned int) -pentru a specifica timpul de asteptare inainte de incrementarea milisecundelor, secundelor ,minutelor, etc. De asemenea am folosit functia Wait() si la inceputul main-ului pentru a da timp utilizatorului sa apese tasta caracteristica pentru o anumita functie dorita.
Software Design
Pentru compilarea codului am folosit IDE-ul OpenWatcom. Pentru fiecare functionalitate a ceasului, am implementat o functie separata ce se apeleaza in main, la apasarea unei taste. Implicit, se apeleaza functia de afisare a ceasului.
De asemenea, pentru a putea afisa ora si data a fost necesara conversia campurilor din intreg in sir de caractere, motiv pentru care am implementat si o functie de conversie numita itoa.
Codul este scris in limbajul C si foloseste atat functii din platfom_io.h cat si functii implementate de studenti.
Results [edit]
Cronometrul are campurile afisate pe cate doua caractere. De aceea, campul de milisecunde se incrementeaza o data la 100 milisecunde si acestea 100 apar pe LCD ca fiind 10. Restul campurilor se incrementeaza normal (la o secunda ; la un minut).
Setarea datei presupune incrementarea zilei, a lunii si a anului. Atunci cand ziua ajunge la 28 sau 29 sau 30 sau 31 (in functie de luna curenta si de an bisect sau nu) se reseteaza ziua (devine 1). Cand se ajunge la 12 luni, se reseteaza luna (devine 1). In cazul in care utilizatorul incearca sa scada anul sub 0, se va afisa un mesaj de eroare.
Pentru setarea orei am implementat o functie asemanatoare; la 60 de secunde, secunda devine 0 si se incrementeaza minutul; la 60 de minute, minutul devine 0 si se incrementeaza ora. Cand ora ajunge la 24 se reseteaza si ea si devine 0.
Download [edit]
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
3 mai- implementare functionalitate de afisare ceas si data.
6 mai- implementare functionalitate de potrivire ceas si data.
10 mai- implementare functionalitate cronometru
18 mai- implementare alarma