Naziv projekta: Pricalica Projekt napravio:damir Petrinic Koristeni materijal: Mikrokontroler Atmel AT89C52 ISD4004 Voice memory LCD 2*16 znakova Projekt je moja ideja i moja realizacija i ne dozvoljavam nikakvo kopiranje.ovo je samo podsjetnik kako se sve to moze napraviti i nadam se mali poticaj jos nekima u realizaciji neceg slicnog kako bi olaksali zivot ljudima oko nas koji su hendikepirani od prirode ili nesrecom. Pod hendikepirani ne mislim o nijma nista manje vrijednima od nas koji imamo mogucnost pricati i slusati.nas je problem uvijek bio komunikacija sa osobama ostecenog sluha ili govora.ovaj uredjaj trebao bi posluziti i jednima i drugima kao pomoc prilikom svakodnevnog zivota a u onome sto im najcesce treba KOMUNIKACIJA. Ovaj uredjaj nije do kraja napravljen ali je na najboljem putu. Ovo je jedno mikroracunalo moje kao svoje periferije ima i Display,dakle komunikaciju sa korisnikom,tastaturu,koja omogucava korisniku komunikaciju sa uredjajem, Zvucni izlaz, komunikaciju sa svima ostalima. Centar svega je mikrokontroler koji prima znakove sa tastature,prikazuje ih na displayu te pritiskom na tipku PLAY salje u voice (glasovnu) memoriju odakle se fonemi svakog slova izgovaraju na zvucniku. Na ovaj nacin ono sto je napisano na displayu dobivamo glasom. Pored ovog uredjaj u paralelnoj izradi je i program za PC i HAND PC HP Journada. Za sva pitanja ili eventualnu informaciju ili pomoc obratite se na e-mail damir.petrinic@ri.hinet.hr abacus-ri@email.hinet.hr
Program: 'sva objasnjenja su na kraju programa $large $crystal = 12000000 Config Lcd = 16 * 2 Deflcdchar 0, 10, 4, 14, 17, 16, 17, 14, 32 ' replace ^94 with number (0-7) ' replace ^94 with number (0-7) Deflcdchar 1, 2, 4, 14, 17, 16, 17, 14, 32 ' replace ~126 with number (0-7) Deflcdchar 2, 28, 10, 9, 29, 9, 10, 28, 32 ' replace \92 with number (0-7) Deflcdchar 3, 10, 4, 31, 2, 4, 8, 31, 32 ' replace ]93 with number (0-7) Deflcdchar 4, 10, 4, 31, 16, 31, 1, 31, 32 ' replace [91 with number (0-7) Dim Tipka As Byte, Red As Byte, Col As Byte, Latch As Byte, Pom As Byte Dim Poc As Byte, Debou As Byte, Lcdred As Byte, Lcdcol As Byte, St As Byte Dim Sh As Byte, X As Byte, Ads(64) As Byte, Adresa As Byte, Chrpos As Byte Dim Iz As Byte, A As Byte 'P0 I P3 Su Ulazi Za Tastaturu P0 = 255 P3 = 255 P2 = 127 P2.7 = 1 P2.7 = 0 Sh = 0 Main: Col = 0 Lcdcol = 0 Lcdred = 1 Chrpos = 0 Cls Tastat: Red = 1 Do Gosub Citaj Loop Citaj: If Red = 0 Then If P0.4 = 0 Then Sh = 1 Else Sh = 0 Pom = Red Xor 255 P3 = Pom Gosub Colona Red = Red * 2 If Red < 1 Then Red = 1 Gosub Citaj Colona: X = 25 If P0.0 = 0 Then If P0.0 = 0 Then Col = 1 Gosub Deb Elseif P0.1 = 0 Then If P0.1 = 0 Then Col = 2 Gosub Deb Elseif P0.2 = 0 Then If P0.2 = 0 Then Col = 4 Gosub Deb Elseif P0.3 = 0 Then If P0.3 = 0 Then Col = 8 'prvi red za tastaturu 'citaj tastaturu 'procedura citaj 'pom je inverzni red 'p3=pom 'citaj kolonu 'pauza ce biti 25 milisek za debounce
Gosub Deb 'debounce Deb: 'ako je tipka stisnuta petlja ceka da se otpusti i tek tada nastavlja sa programom 'ovo je zastita da nebi tipka bila citana vise puta If Col = 1 Then Bitwait P0.0, Set Goto Stisnuta Elseif Col = 2 Then Bitwait P0.1, Set Goto Stisnuta Elseif Col = 4 Then Bitwait P0.2, Set Goto Stisnuta Elseif Col = 8 Then Bitwait P0.3, Set Goto Stisnuta Goto Tastat 'neka je tipka stisnuta pa se ide u provjeru koja 'varijabla tipka oznacava ASCII kod tipke koja ce biti prikazana na DISPLAYU 'a adresa je varijabla koja oznacava na kojoj se adresi znak nalazi u audio chipu Stisnuta: If Sh = 0 Then If Col = 1 Then Tipka = 81 'q Tipka = 87 'w Tipka = 69 'e Adresa = 8 Tipka = 82 'r Adresa = 22 Tipka = 84 't Adresa = 25 Tipka = 89 'y Tipka = 85 'u Adresa = 26 Tipka = 73 'i Adresa = 12 Elseif Col = 2 Then Tipka = 65 Adresa = 0 Tipka = 83 Adresa = 23 Tipka = 68 Adresa = 5 Tipka = 70 Adresa = 9 Tipka = 71 Adresa = 10 Tipka = 72 Adresa = 11 Tipka = 74 Adresa = 13 Tipka = 75 Adresa = 14 Elseif Col = 4 Then Tipka = 90 'a 's 'd 'f 'g 'h 'j 'k 'z
Adresa = 28 Tipka = 88 Tipka = 67 Adresa = 2 Tipka = 86 Adresa = 27 Tipka = 66 Adresa = 1 Tipka = 78 Adresa = 18 Tipka = 77 Adresa = 17 Tipka = 32 Adresa = 32 Elseif Col = 8 Then Tipka = 79 Adresa = 20 Tipka = 80 Adresa = 21 Tipka = 2 Adresa = 6 Tipka = 1 Adresa = 4 Tipka = 76 Adresa = 15 Tipka = 4 Adresa = 24 Tipka = 3 Adresa = 29 Tipka = 0 Adresa = 3 'x 'c 'v 'b 'n 'm 'space 'o 'p ' '\, dj '~126meko cj 'l '[,sh ']zh '^ tvrdo cj If Sh = 1 Then If Col = 1 Then Tipka = 48 Tipka = 49 Tipka = 50 Tipka = 51 Tipka = 52 Tipka = 53 Tipka = 54 Tipka = 55 Elseif Col = 2 Then 'ove tipke treba srediti 'brojevi
Elseif Col = 4 Then Gosub Izlaz Cls X = 250 Goto Main Elseif Col = 8 Then Tipka = 56 Tipka = 57 'space je ujedno i enter sa shiftom 'ovo je enter i pocinje pricati 'izbrisi ekran 'vrati se na pocetak 'slovo zh If Then Goto Tastat Goto Ispis
Ispis: Lcdcol = Lcdcol + 1 'ovo je pozicija charaktera na displayu i o tome ovisi koji bajt se koristi ads(chrpos) Chrpos = Chrpos + 1 If Chrpos > 64 Then Gosub Izlaz Goto Main If Lcdcol > 16 Then Lcdred = Lcdred + 1 Lcdcol = 1 If Lcdred > 2 Then Lcdcol = 1 Lcdred = 1 Cls Locate Lcdred, Lcdcol Ads(chrpos) = Adresa 'ovo je samo test 'print adresa Lcd Chr(tipka) 'ispis reda i kolone 'Cls 'Locate 1, 1 'Lcd Red 'Locate 2, 1 'Lcd Col Pause: Waitms X Pause1: Wait X 'pauza za milisekunde 'pauza za sekunde Izlaz: 'izlaz je na p2 i najgornji bit je na 0 jer sluzi za clk za ic1 74573 'koji daje adresu na audio kartici koje ce slovo biti izgovoreno For A = 1 To Chrpos Adresa = Ads(a) 'adresa sa vadi iz memorije za 64 znaka koji su prethodno ispisani X = A + 1 If Adresa <> 255 Then If Adresa = 32 Then 'ako je prazno mjesto tj SPACE X = 1 'napravi pauzu od 1 sekunde 1 'pauza za sekunde Goto Test Elseif Adresa = 5 Then 'ako je D provjeri dali je iza ZH If Ads(x) = 29 Then Adresa = 7 A = A + 1 'preskoci jedno mjesto Elseif Adresa = 15 Then 'ako je L If Ads(x) = 13 Then 'provjeri dali je slijedece J Adresa = 16 'citaj LJ A = A + 1 Elseif Adresa = 18 Then 'ako je N If Ads(x) = 13 Then 'provjeri dali je slijedece J Adresa = 19 'citaj NJ A = A + 1 Iz = 0 Iz = Iz + Adresa P2 = Iz P2.7 = 1 'clk ic1 P2.7 = 0 'clk off X = 100 'pauza 100 msek dok se probudi chip na audio pojacalu P2 = 127 'moram dignitu pinove na audio ploci na +5volti barem 25 msek P2.7 = 1 'clk ic1 P2.7 = 0 'clk off X = 250 'ovo je test pauza jer radim sa jednim chipom 'pauza za cekanje kraja slova Wait 1 'pausa 1 sek Test: 'ovo je napravljeno samo da mogu izaci iz petlje za space i nema veze 'sa ostatkom programa nop
Next A Sh = 0 'shift =0 P0.4 = 1 'ugasi led ' odi na pauzu 'vrati se odakle si pozvan End 'nakon ucitavanja hrvatskih dijekritickih znakova za prikaz na displayu 'postavljaju se pocetne vrijednosti varijabli.chrpos je varijabla koja 'oznacava caracter position na displayu i o njoj ovisi upis u rezerviranom 'dijelu memorije.najvise je moguce spremiti 64 slova u memoriju a zatim 'program automatski salje podatke na audio plocu.portovi p1 i p3 su 'namijenjeni tastaturi koja ima 4*8 matricu i skenira se konstantno.slovo koje 'je stisnuto ima debounce 25 msek + mora biti otpusteno inace program stoji 'nakon odabira slova ide se u tablicu po slovo i i njegovu pripadajuu vrijednost 'u memoriji audio ploce.audio ploca spojena je preko p2 na procesor.po izgovoru 'svih slova koja su bila napisana vracamo se na pocetak sa izbrisanim ekranom 'i skeniranjem tastature. 'Pauza izmedju izgovaranja slova je 1 sekunda za sada.
Izgled cijelog sistema Izgled tastature na proto plocici (smeta kabel ) Voice memory(glasovna memorija) i izlazno pojacalo sa interface-om na mikrokontroler