Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Matrix tastatura i PIC

[es] :: Elektronika :: Mikrokontroleri :: Matrix tastatura i PIC

[ Pregleda: 2852 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

devil 2000

Član broj: 132722
Poruke: 99
77.46.188.*



+3 Profil

icon Matrix tastatura i PIC19.07.2009. u 00:56 - pre 178 meseci
Pokusavam da prikljucim matrix tastaturu na pic 18f4520

iz milion procitanih tutoriala o matrix tastaturi vidim da je dovoljno da stavim prekidac izmedju izlaznog i ulaznog pina i to je to

e sad
ulazni pin je postavljen na nulu, izlazni na jedan
kada ja izlazni pin ukljucim na jedinicu i pritisnem prekidac kako bih prebacio taj signal na ulazni pin ovaj ga ne registruje
dok kada dovedem na zivo 5v od napajanja na ulazni pin on ga registruje
proverio sam izlazni pin i on daje 4.9 v (isto koliko ima na napajanju) ali kada pokusam da prespojim rekidacem ili direktno zicom izlaz koji daje jedinicu i ulaz nikako ulaz ne moze da ga registruje
da napisem da ulaz citam sa kodom
if (PORTCbits.RC3) naredba
/*ako je pin rc3 jedan izvrsi naredbu

Da li je ovo nedostatak struje iz izlaznog pina pa ga ne moze pokrenuti ili sta vec

Video sam u tutorialima da svi koriste port b na kome je b4,b5,b6,b7 ulaz , u semi za 18f4520 na ovim pinovima imam oznaceno da su ovo interrupt on change pin
sta ovo znaci i da li se mora koristiti ovaj port b za matrix tastaturu posto na njemu ima povezan displej pa ne bih da ga otkacinjem i da menjam kod ako nemoram

pozdrav
Devil 2000
 
Odgovor na temu

Struja01
Beograd

Član broj: 166347
Poruke: 190



Profil

icon Re: Matrix tastatura i PIC19.07.2009. u 09:35 - pre 178 meseci
Citat:
devil 2000:
sta ovo znaci i da li se mora koristiti ovaj port b za matrix tastaturu posto na njemu ima povezan displej pa ne bih da ga otkacinjem i da menjam kod ako nemoram

Nije bitno koji port koristis.
Siguran sam da ti je problem u programu, okaci program, a i ne bi bilo lose i shemu da vidimo. Siguran sam da nije nedostak struje iz izlaznog(pin kolona) pina, ako si radio po pravilnoj semu.
 
Odgovor na temu

devil 2000

Član broj: 132722
Poruke: 99
77.46.231.*



+3 Profil

icon Re: Matrix tastatura i PIC19.07.2009. u 18:10 - pre 178 meseci
izgleda da sam uspeo

umesto sto sam dosad pravio da mi je pocetna vrednost input signala 0 pa na njega dovodim 5v, sada sam odradio da mi je pocetna vrednost inputa 5v pa ga povezem sa nulom sa drugog pina i onda registruje

ali mi opet nije jasno zasto ne radi rva kombinacija, evo koda te stare kombinacije

TRISD = 0x00; // izlazni port za biranje kog displeja da se ukljuci
TRISC = 1; // ulazni port
LATD = 0x00; // stavi na nulu sve vrednosti pinova na izlazu

LATC = 0x00; // ovako ne radi kada su pinovi na ulazu na nuli pa mu dovodim 5v nego mora da su svi na jedinici tj 0xff pa da mu dovodim nulu

LATDbits.LATD0 = 1; // kada prespojim ovaj pin koji je sada ukljucen sa ulaznim pinom rc3 koji je bio nula nece da ga registruje, dok kada ovaj pin ostaim na nuli, a ulaz rc3 postavim na visoki nivo i kada ih prespojim zicom onda bez problema radi tj smanjujem rc3 sa 5v na nula?????

LATDbits.LATD1 = 1; // isto vazi i za ovaj pin kada ga prespojim sa rc3

if (PORTCbits.RC3) {ukljuci displej 1} else { ukljuci diplej 2}

Kada radim sa obicnim prekidacem i dovedem 5v na ulazni pin koji je nula radi bez problema ali kada pokusavam da dovedem direktno sa drugog pina koji je upaljen nece ????

Da li za matrix tastaturu mora da se svodi samo sa 5v na 0 ili negde gresim ?
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Re: Matrix tastatura i PIC19.07.2009. u 18:23 - pre 178 meseci
Kakva ti je matriks tastatura? Da li je na primer 4x4. Takva tastatura ima 4 kolone i 4 reda. Svaki red se pobudjuje preko diode, a svaka kolona ide na po jedan ulaz MCU-a i svaka ima jedan otpornik. Ako su diode vezane tako da je prema izlazu MCU-a anoda, onda se tastatura pobudjuje log. jedinicama, a otpornici kolona su vezani na masu. Ako je dioda obrnuta, onda se tastatura pobudjuje log. nulama, a otpornici su vezani na +5V. Diode postoje da ne bi doslo do kratkospajanja dva ili vise izlaza kada se istovremeno pritisnu dva ili vise tastera.

Kada ovo utvrdis za tvoju tastaturu, bice ti sve jasno.

Pozdrav.
 
Odgovor na temu

devil 2000

Član broj: 132722
Poruke: 99
77.46.231.*



+3 Profil

icon Re: Matrix tastatura i PIC19.07.2009. u 19:38 - pre 178 meseci
umesto da odmah krenem sa 4x4 tastaturom mislio sam da prvo probam da prespojim 1 ulaz i 1 izlaz kao sto sam i uradio da vidim da li to funkcionise pa onda bih se prebacio na vece

Dosad nisam naleteo na shemu sa diodama

Korak, jel to moze da se pokrepi nekom shemicom i objasnjenjem koja se od njih pobudjuje sa visokim a koja sa nulom

[Ovu poruku je menjao devil 2000 dana 19.07.2009. u 20:57 GMT+1]
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
93.86.14.*



+321 Profil

icon Re: Matrix tastatura i PIC20.07.2009. u 10:54 - pre 178 meseci
Meni se čini da si ti ostavio pin koji očitavaš kao izlazni, a ne kao ulazni pa ti u stvari praviš kratak spoj prespajanjem na nulu.
Instrukcijom TRISC=1 ti si samo nulti bit postavio kao ulazni, dok ti je onaj koji očitavaš, RC3, izlazni. Znači, osnovni princip je da na npr. redovima držiš stalno visok nivo, a onda jedan po jedan spuštaš na nulu. Pinove za kolone postaviš kao ulazne sa pull-up otpornicima i provervaš njihovo stanje - kad detektuješ nulu, znaš šta si pritisnuo. Mana ovog metoda je pojavljivanje lažnog pritiska u nekim situacijama, ali da ne bih sad sve pisao, pogledaj ove linkove:
http://techref.massmind.org/techref/microchip/keymatrix.htm
http://techref.massmind.org/techref/io/keyswitch.htm

Pozdrav.
Sinisha

 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
93.86.14.*



+321 Profil

icon Re: Matrix tastatura i PIC20.07.2009. u 11:30 - pre 178 meseci
Nadjoh sad i ovaj dokument na Microchip sajtu pa pogledaj i njega. Što se tiče dioda, može i ne mora sa njima da se radi kao što se vidi u ovom pdf-u.
http://ww1.microchip.com/downloads/en/AppNotes/00529e.pdf

Pozdrav.
Sinisha
 
Odgovor na temu

devil 2000

Član broj: 132722
Poruke: 99
*.adsl.eunet.rs.



+3 Profil

icon Re: Matrix tastatura i PIC20.07.2009. u 11:50 - pre 178 meseci
cek cek, zar sa:
trisc=00xff ne dobijam sve pinove porta c kao izlazne

meni sa trisc=0xff reaguje rc3 na ulaz

[Ovu poruku je menjao devil 2000 dana 20.07.2009. u 18:57 GMT+1]

[Ovu poruku je menjao devil 2000 dana 20.07.2009. u 18:58 GMT+1]
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
77.46.216.*



+321 Profil

icon Re: Matrix tastatura i PIC20.07.2009. u 14:37 - pre 178 meseci
He, pisao sam na brzinu i u stojećem stavu izlazeći sa posla u minut do 15h pa je došlo do greške. Ajmo sad polako.

Citat:
rsinisa: Reaguje kad praviš kratak spoj. Da bi sve pinove postavio kao izlazne moras trisc da postaviš na 255.

Pogrešno sam napisao. Ispravno treba da glasi:
Reaguje kad praviš kratak spoj. Da bi sve pinove postavio kao ulazne moras trisc da postaviš na 255. (Obrisao sam prethodnu, pogrešnu, poruku da ne zbunjuje).


A ti si pogrešio tako što si FF u hexa sistemu poistovetio sa 1 u decimalnom.
FF u hex = 255 u decimalnom odn. = 11111111 u binarnom.

E sad, pošto ti radiš samo sa pinom RC3 dovoljo je njega da postaviš na log. 1, odn. kao ulazni pa možeš da napišeš
08h za hex, 8 za dec, ili 00001000 za binarni sistem.
Za postavljanje pojedinačnih bitova uvek koristim binarni oblik jer se odmah vidi kako je postavljen svaki bit.

Pozdrav.
Sinisha

 
Odgovor na temu

devil 2000

Član broj: 132722
Poruke: 99
79.101.143.*



+3 Profil

icon Re: Matrix tastatura i PIC20.07.2009. u 18:02 - pre 178 meseci
U pravu si pogresio sam u prethodnom postu
Ja sam dosad radio ovako

kada napisem
trisc=0x00 - ovim podesim da mi ceo port bude izlaz

trisc=0xff - ovim podesim da mi ceo port bude ulaz

latc=0x00 - ovim podesim sve pinove porta na nula

latc0xff - ovim podesim sve pinove porta na jedinicu
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
77.46.216.*



+321 Profil

icon Re: Matrix tastatura i PIC20.07.2009. u 18:53 - pre 178 meseci
Ako si tako pisao onda je u redu. Daj ti lepo ovde program koji ti pravi problem; ja ne radim u C-u, ali ima ljudi koji ga koriste (a i ja ću za toliko da se snadjem) pa će možda neko da vidi u čemu je problem. Najbolje bi bilo kada bi koristio PROTEUS pa lepo u njemu simuliraš i igraš se do mile volje, a i neko drugi bi mogao lakše da ti pomogne.

Pozdrav.
Sinisha
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
87.116.130.*



+7 Profil

icon Re: Matrix tastatura i PIC21.07.2009. u 18:03 - pre 178 meseci
Evo to detaljnijeg objasnjenja.

Pozdrav.
Prikačeni fajlovi
 
Odgovor na temu

devil 2000

Član broj: 132722
Poruke: 99
213.198.239.*



+3 Profil

icon Re: Matrix tastatura i PIC22.07.2009. u 09:02 - pre 178 meseci
Ovo je bas servirano na tacnu

Veliko Hvala, Korak

dugujem ti pice
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Re: Matrix tastatura i PIC22.07.2009. u 13:42 - pre 178 meseci
Nisam napisao, ali sigurno shvatas da umesto da skeniras redove log 1-cama, to mozes da uradis i log 0-ama, podrazumeva se da ostala 3 izlazna pina moraju da budu na log 1. Tada treba obrnuti diode, a otpornike umesto na masu vezati za VCC. Ovo ti napominjem zato sto neke integrisane tastature imaju vec ugradjene diode pa se unimerom mora ustanoviti kako su okrenute diode kako bi izabrao pravi nacin skeniranja redova.

Detekcija pritiska samo jednog tastera je jednostavna. Ali mozes uvesti i sift taster, i onda u case strukturi izaberes samo kombinacije koje detektuju jedan i dva pritiska, ali jedan od ta dva mora da bude sift taster. Tada imas efekat kao da tastatura od 4x4 = 16 ina 15*2 = 30 tastera. To je razlog zasto sam dao i case strukturu sa svim kombinacijama.

Obrati paznju na problem titranja tastera u trenutku kada ostvari kontakt, a cesce kada se otpusta. MCU je dovoljno brz da to detektuje kao visestruko pritiskanje tastera. Ja za to koristim filtriranje (digitalni filter sa konacnim impulsnim odzivom - nemoj da te plasi naziv). Evo kako: svakom tasteru dodelim jeno varijablu tipa bajt. Citanje tastature radim u interrupt-u od 10ms, i tada usiftam stanje svakog tastera u pripadajuci bajt. Ako za n-ti taster imas i TnB bajt u koji usiftavas njegovo stanje onda uradis sledece: ako je TnB = $ff onda Tn = 1, i ako je TnB = 0 onda Tn = 0. Dakle, Tn bit, koji odgovara n-tom tasteru, ce biti detektovan ako je 8 puta uzastopce citana log 1-ca, odnosno, preci ce na nulu ako je 8 puta uzastopce procitana nula. Sva ostala stanja koja imaju u TnB i nule i jedinice (titranja) nece promeniti stanje Tn bita. Uz interrupt od 10ms ovo znaci da ce se taster detektovati ako on daje stabilno stanje u trajanju od najmanje 80ms. Ja sam nekada merio koliko traji pritisak na taster (mada zavisi od tastature) kada se brzo kuca, i on iznosi od 80ms do 120ms. Sa ovim filtriranjem nikada nisam imao laznih citanja sa tastature cak i u uslovima velikih industrijskih smetnji a to koristim vise od 15 god.

Posto se citanje tastature vrsi u interrupt-u, onda moras napraviti jedan bafer u koji interrupt procedura ubacuje procitane tastere. Ovo zato sto moze da se desi da dok program radi neki obimniji posao interrupt procita nekoliko pritisnutih tastera, a ti moras da opsluzis svaki pritisnuti taster.

Dakle, napravis bafer TBaf[10] kao niz od karaktera. Uz to imas Wndx i Rndx dva indeksa bafera, jedan se koristi prilikom upisa u bafer, a drugi prilikom citanja. Inicijalno treba da je:

Wndx := 0;
Rndx := 0;

U interrupt proceduri, kada se detektuje da je procitan taster uradis:

TBaf[Wndx] := T;
if Wndx = 9 then Wndx := 0
else Wndx := Wndx+1;

Ovim upisujes procitani taster u bafer i pomeras za jedno mesto indeks upisa Wndx. Ako je Wndx dosao do kraja bafera, onda se vracas na pocetak (napravio si kruzni bafer). Zapazas da Wndx pokazuje na neupisanu lokaciju bafera (praznu).

Citanje bafera radis u glavnoj petlji programa (ili bilo gde). Za to napravis podprogram GetTast koji ti vraca ASCII vrednost tastera, ili 0 ako nije nista pritisnuto. Ta procedura treba da izgleda otprilike:

procedure GetTast;
begin
if Wndx = Rndx then
begin
Akumulator := 0;
exit; //izlaz iz procedure sa vrednoscu 0 jer je bafer prazan
end;

Akumulator := TBaf[Rndx];
if Rndx = 9 then Rndx := 0
else Rndx := Rndx+1;

end;

Vidi sa da Rndx ukazuje na neprocitanu vrednost tastera, pa zato kada je Wndx = Rndx znaci da ne postoji vrednost tastera koja treba da se procita.

Vidis da GetTast vraca procitanu vrednost u akumulatoru, a moze biti i u bilo kom drugom rgistru ili memorijskoj lokaciji. U glavnom programu citas tastere sve dok ti ova procedura ne vrati 0. Ovo radis u petlji koja se zavrsava sa citanje vrednosti koja je 0. Za svaki procitani taster program treba da pokrene neku funkciju koju si sam definisao

Mozda ti izgleda komplikovano, mada nije, ali je vrlo efikasno i pouzdano.

Pozdrav.

 
Odgovor na temu

devil 2000

Član broj: 132722
Poruke: 99
79.101.252.*



+3 Profil

icon Re: Matrix tastatura i PIC23.07.2009. u 19:59 - pre 178 meseci
Ovo bi moglo u STICKY!



 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Matrix tastatura i PIC

[ Pregleda: 2852 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.