2011_P1

Table of contents

1. Results [edit]

2. Download [edit]

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