naslovna_hardverska_realizacija_govornog_casovnika_projekti_elektronika_automatika.rs.jpg
naslovna_hardverska_realizacija_govornog_casovnika_projekti_elektronika_automatika.rs.jpgU ovom radu je prikazana softverska realizacija govornog časovnika koji zvučnim prezentovanjem informacija može da pomogne osobama sa hendikepom. Uređaj omogućava snimanje reči neophodnih za reprodukciju zvukova o datumu i vremenu. Uz to moguće je snimiti jednu poruku u trajanju od 100 sekundi i postoji alarm sa zvučnom signalizacijom po izboru korisnika. U ranije objavljenom projektu "Hardverska realizacija govornog časovnika" prikazali smo kompletan hardver, što možete pogledati na ovom linku.

 
Struktura softvera
 
  Softver govornog časovnika projektovan je u tri nivoa (Sl. 1). Na prvom, najnižem, nivou nalaze se softverski drajveri. Za svaki hardverski modul napisan je poseban drajver kojiomogućava kontrolu i upravljanje datom hardverskom celinom.
 
  Drajveri nude set funkcija koje omogućavaju višim nivoima softvera komunikaciju sa željenim modulom. Odnosno, nude mogućnost njihovom korisniku da u dozvoljenim granicama i po određenim pravilima menja stanje i rad hardvera. Na drugom, srednjem, nivou nalazi se poseban softverski modul koji objedinjuje sve drajverske funkcije u okviru jedne celine. Njegova uloga je da inicijalizuje rad svih hardverskih modula pozivajući odgorvarajuće rutine za iniciajalizaciju koje nude drajveri svakog hardverskog modula, a zatim i da generiše prekid u okviru kojeg se pozivaju odgovarajuće prekidne rutine.
 
  Sva komunikacija između glavnog, korisničkog programa i drajverskog nivoa odvija se preko ove celine, tako da se može reći da on predstavlja neku vrstu „dispečera“. Na najvišem nivou, trećem, nalazi se korisnički program koji komunikacijom sa hardverom vrši implementaciju govornog časovnika.
govorni_casovnik_softver_projekti_elektronika-automatika.rs.jpg
Slika 1. Struktura softvera
 
 
Prvi nivo softvera
 
   Za potrebe projekta napisano je pet softverskih drajvera, u okviru kojih su definisane funkcije za rad sa hardverom uređaja. Za displej i tastaturu napisan je poseban drajver. Displej se sastoji iz šest sedmosegmentnih LED cifara, dok se tastatura sastoji od ukupno devet tastera. Tri tastera se koriste za kontrolu rada časovnika, dok se preostalih šest koristi za programiranje njegovog rada. Navedeni drajver nudi sledeće funkcije:
  1. Funkcija bit kbHit(void). Ova funkcija proverava da li se stanje tastature promenilo, odnosno da li je neki od tastera pritisnut ili otpušten. Ukoliko je došlo do promene vrednost koju funkcija vraća je 1, u suprotnom je 0. Povratna vrednost funkcije je u formatu bit promenljive.
  2. Funkcija byte getch(void). Funkcija vraća kod pritisnutog, odnosno otpuštenog tastera. Ukoliko nijedan taster nije bio pritisnut ili otpušten pre poziva funkcije, povratna vrednost, koja je u formatu jednog bajta, je 0.
  3. Funkcija void clrscr(void). Pozivanjem ove funkcije briše se sadržaj displeja, odnosno gase se sve cifre.
  4. Funkcija void gotoxy(byte). Funkcija postavlja kursor na poziciju koja se u obliku jednobajtne vrednosti prosleđuje funkciji. Prosleđena vrednost mora imati validnu vrednost, tj. mora biti u granicama od 0 do 5.
  5. Funkcija void putch(byte). Funkcija postavlja karakter na displej na poziciji kursora. ASCII kôd karaktera se prosleđuje preko jednobajtne vrednosti.
  6. Funkcija bit checkPM(void). Funkcija proverava da li je na uređaj priključen modul za programiranje. Ukoliko jeste vrednost koju funkcija vraća, u obliku bit promenljive, je 1, u suprotnom vraća 0.
  7. Funkcija void enableCursor(void). Pozivom funkcije omogućava se prikaz kursora na displeju.
  8. Funkcija void disableCursor(void). Ovom funkcijom onemogućava se prikaz kursora na displeju.
  9. Funkcija void enableAutoRepeat(void). Pozivanjem ove funkcije uključuje se rad tastera u auto repeat modu, gde taster nije potrebno pritiskati više puta da bi se obavila odgovarajuća operacija, već ga je dovoljno držati pritisnutim.
  10. Funkcja void disableAutoRepeat(void). Tasterima se onemogućava rad u auto repeat modu.
 
  Sledećim drajverom definiše se komunikacija sa časovnikom realnog vremena (eng. real time clock). Za potrebe upravljanja ovim hardverskim modulom koristi se osam funkcija:
  1. Funkcija byte getSec(void). Funkcija u formatu jednobajtnog podatka vraća sekunde tačnog vremena.
  2. Funkcija byte getMin(void). Funkcija u formatu jednobajtnog podatka vraća minut tačnog vremena.
  3. Funkcija byte getHr(void). Funkcija u formatu jednobajtnog podatka vraća sat tačnog vremena.
  4. Funkcija byte getDay(void). Funkcija u formatu jednobajtnog podatka vraća dan tačnog datuma.
  5. Funkcija byte getMon(void). Funkcija u formatu jednobajtnog podatka vraća mesec tačnog datuma.
  6. Funkcija byte getYr(void). Funkcija u formatu jednobajtnog podatka vraća godinu tačnog datuma.
  7. Funkcija void setTime(byte, byte, byte). Funkcija postavlja tačno vreme. Tačno vreme se funkciji dostavlja u obliku tri jednobajtne promenljive koje, respektivno, predstavljaju sat, minut i sekunde.
  8. Funkcija void setDate(byte, byte, byte). Funkcija postavlja tačan datum. Tačan datum se funkciji dostavlja u obliku tri jednobajtne promenljive koje, respektivno, predstavljaju godinu, mesec i dan.

   Naredni drajver se koristi za rad sa memorijom tipa EEPROM, u koju se smeštaju parametri rada samog govornog časovnika kao što su vremenski interval trajanja prikaza vremena i datuma, vreme glasovnog oglašavanja vremena i datuma, i druga podešavanja. Veličina memorije koja se koristi ograničena je na deset bajteva. U okviru ovog bloka definisane su dve funkcije:
  1. Funkcija byte loadData(byte). Funkcija isčitava jednobajtni podatak iz memorije sa pozicije koja se prosleđuje funkciji preko jednobajtnog podatka. Prosleđena pozicija mora imati validnu vrednost, odnosno mora se nalaziti u granicama između 0 i 10.
  2. Funkcija void saveData(byte, byte). Funkcija smešta u memoriju jednobajtni podatak na zadatu poziciju. Oba parametra se funkciji prosleđuju preko jednobajtnih podataka.

  Rad sa virtuelnim tajmerima takođe se odvija preko funkcija definisanih u posebnom drajveru:
  1. Funkcija void startWaiting(byte, byte). Funkcija inicijalizuje rad jednog od tri dostupna tajmera, definisanog preko prvog jednobajtnog podatka, vremenom koje je definisano preko drugog jednobajtnog podatka.
  2. Funkcija byte checkOverflow(byte). Funkcija proverava da li je tajmer, zadan preko jednobajtnog podatka, završio sa brojanjem. Ukoliko jeste funkcija vraća vrednost 1, u suprotnom vraća 0.
 
   Komunikacija sa zvučnom memorijom odvija se preko devet funkcija definisanih u zasebnom drajveru:
  1. Funkcija void isdStop(void). Funkcija obustavlja svaku aktivnost memorije.
  2. Funkcija void isdRecord(word). Funkcija započinje snimanje zvučne informacije. Adresa na koju se snima prosleđuje se funkciji preko dvobajtne promenljive.
  3. Funkcija void isdPlay(word). Funkcija započinje reprodukciju neke zvučne informacije. Adresa sa koje se zvuk reprodukuje prosleđuje se funkciji preko dvobajtne promenljive.
  4. Funkcija bit isdGetPlaying(void). Funkcija vraća 1 ukoliko je u toku reprodukcija nekog zvuka, dok u suprotnom vraća 0.
  5. Funkcija void sayTime(byte, byte, byte). Funkcija započinje reprodukciju zvučne informacije o tačnom vremenu. Parametri se prosleđuju preko tri jednobajtne promenljive koje reprezentuju sat, minut i sekunde, respektivno.
  6. Funkcija void sayDate(byte, byte, byte). Funkcija započinje reprodukciju zvučne informacije o tačnom datumu. Parametri se prosleđuju preko tri jednobajtne promenljive koje reprezentuju godinu, mesec i dan, respektivno. Godina se računa kao dve hiljade plus prosleđeni podatak.
  7. Funkcija word getAddress(word). Funkcija vraća adresu u memoriji određene reči. Reč čija adresa se traži prosleđuje se preko dvobajtne promenljive.
  8. Funkcija void playWord(word). Funkcija započinje zvučnu reprodukciju jedne od sto četiri reči. Reč koja se reprodukuje se prosleđuje funkciji preko dvobajtne promenljive.
  9. Funkcija void recordWord(word). Funkcija započinje snimanje jedne od sto četiri reči. Reč koja se snima se prosleđuje preko dvobajtne promenljive.
Drugi nivo softverra
 
  Na drugom nivou nalazi se softverski modul koji povezuje sve funkcije hardverskog interfejsa u jednu celinu. Dodatno, ovaj modul definiše dve funkcije:
  1. Funkcija void hardwareInit(void). U okviru ove funkcije pozivaju se funkcije koje inicijalizuju svehardverske module, a koje su definisane u odgovarajućim drajverima.
  2. Funkcija void interruptHandler(void). Rad softvera zasnovan je na prekidu. Prekidi se dešavaju svake milisekunde pri čemu se poziva ova funkcija. Njen zadatak je da potom poziva prekidne rutine u okviru svakog softverskog drajvera potrebne za ispravan rad uređaja.

  Korisnički program svim navedenim funkcijama, osim interruptHandler funkciji, može da pristupa isključivo preko drugog nivoa, a ne direktnim obraćanjem drajverima. Ukoliko ipak pokuša da se funkcijama direktno obraća može doći do grešaka u radu.

 
Treći nivo sofrvera
 
  Treći nivo softvera čini sam korisnički program. Uključivanjem datoteke zaglavlja u kojoj su deklarisane predstavljene funkcije, glavnom programu je omogućena komunikacija sa hardverom.
 
 
Kratak opis rada glavnog programa

 

  Glavni program se može podeliti u dve celine, odnosno na dva režima rada, na rad u normalnom režimu i rad pri priključenom modulu za programiranje. U normalnom režimu rada koriste se tri tastera koja se nalaze sa gornje strane uređaja. Prvi taster se koristi za ulazak u režim nameštanja vremena i datuma. Drugim tasterom se forsira izmena prikaza vremena i datuma. Tasterom tri se aktivira govor vremena ili datuma u zavisnosti od toga šta je trenutno prikazano na displeju. Svaki od tastera ima i dodatne mogućnosti koje se mogu naći u detaljnom uputstvu za upotrebu koji ide sa časovnikom. Snimanje poruke započinje se pritiskom na taster jedan i odmah potom na taster dva. Poruka se govori i snimanje traje dok se ne pritisne ili otpusti neki od tastera ili dok ne prođu dva minuta. Reprodukcija poruke aktivira se pritiskom na taster jedan pa zatim na taster tri. Reprodukcija traje dok se ne pritisne ili otpusti neki taster ili do završetka poruke.
 
  Ulazak u drugi režim rada, odnosno programiranje uređaja aktivira se priključivanjem modula za programiranje. Ovaj mod omogućava sledeće:
  1. Podešavanje trajanja prikaza vremena na displeju.
  2. Podešavanje vremena prikaza datuma na displeju.
  3. Snimanje i reprodukciju glasova neophodnih za govor datuma i vremena.
  4. Podešavanje intervala automatskog aktiviranja datuma i vremena.
  5. Podešavanje dnevnog perioda u kome će se automatski izgovarati datum i vreme.
  6. Podešavanje parametara vezanih za alarm.

   Da bi uređaj pravilno radio neophodno je snimiti sto četiri reči na srpskom jeziku. Primeri reči su jedan, prve, januar… Reči moraju biti snimljene tačno određenim redosledom datim u uputstvu. Uređaj koristi veoma mali broj tastera da bi olakšao rad korisnicima sa oslabljenim vidom. To je razlog za korišćenje raznih kombinacija tastera i dodatnog modula umesto dodavanja novih. Bitno je da pri uobičajenom radu broj tastera bude što manji. Tasteri na kutiji su razmešteni tako da ih desnoruke osobe intuitivno nalaze.

 
Zaključak
 
 Govorni časovnik daje informacije o vremenu i datumu audio-vizuelnim putem. Moguće je snimanje govora i podešavanje alarma. Uređaj je jednostavan za rukovanje, a njegova relativno jednostavna struktura i fleksibilnost čine ga pogodnim za dalji razvoj.
 
 
Autori:
  Dimitrije Crnokrak, Marko Olujić, Vladimir Rajs, Vuk Vranjković, Milan Nikolić, Miloš Slankamenac, Miloš Živanov – Fakultet Tehničkih Nauka Novi Sad, Katedra za elektroniku

 

POSTAVI ODGOVOR

Please enter your comment!
Please enter your name here

This site uses Akismet to reduce spam. Learn how your comment data is processed.