Interapti na pinovima RB4 do RB7 jednostavno nisu prakticni za tastere. Mogu se primenjivati jedino gde nema varnicenja kontakata (lepo su Vam preporucili da nadjete pdf "A Guide to Debouncing" sa
http://www.ganssle.com/ ), ili prilikom budjenja tasterima iz sleep moda, ali ne interaptima, vec obicnim nastavkom programa.
Ukratko, pinovi RB4 do RB7 ce reagovati na svaku promenu stanja. I sa +5V na 0, i sa 0 na +5V. Znaci, interapt ce se (u idealnom slucaju) izazvati i kada pritisnete, i kada otpustite prekidac. Dva puta umesto jednom.
Tasteri ipak nisu idealni, pa ce im se izmedju kontakata prilikom prebacivanja javiti par provodnih i neprovodnih stanja pre nego sto se napon na njima konacno smiri. Da bi se ovo neutralisalo koristi se hardverski ili softverski debouncing. To ce izazvati jos vise interapta. Bila je pre oko 2-3 meseca ovde jedna tema oko debouncinga, pa pretrazite ovaj podforum.
Ovi razlozi su sasvim dovoljni za izbegavanje tastera sa ovim interaptima, ali kod vase seme ima ih jos.
U trenutku dok se na displejima prikazuje slika, pinovi RB4 do RB7 su izlazni, pa se zato njihov interapt flag nece setovati, iako ocigledno na njemu ima promena stanja. Tako ovi interapti ne vrse nikakvu funkciju, i moguce je da u medjuvremenu (ukoliko se taster pritisne bas u toku osvezavanja displeja) propustite koji pritisak tastera.
Pretpostavljam da sema ide ovako: Pin (npr. RB7) pa otpornik (oko 220oma) pa LED iz segmenta ka masi ili ka naponu napajanja (zajednicka anoda ili katoda). Medjutim, i dalje je nejasno kako su povezani prekidaci.
Pretpostavljam da su prekidaci vezani ili direktno za pin pa na masu, ili direktno za spoj otpornika i LED, pa odatle na masu. Oba ova nacina su losa (a ima ih kod pocetnika), pa zato pitam.
U oba ova nacina povezivanja prekidaca struja ce umesto kroz LED moci "pobeci" kroz prekidace.
Njlaksi nacin za osvezavanje svih displeja i istovremeni test tastera je poolovanjem po tajmerskom interaptu na sledeci nacin:
1. Iskljuce se svi displeji (preko zajednicke elektrode), postavi se slika prvog displeja i samo on se ukljuci (preko RA0).
2. Iskljuce se svi displeji (preko zajednicke elektrode), postavi se slika drugog displeja i samo on se ukljuci (preko RA1).
3. Iskljuce se svi displeji, postavi se slika treceg i samo on se ukljuci (preko RA2).
4. Iskljuce se svi displeji, postavi se slika cetvrtog i samo on se ukljuci (preko RA3).
5. Iskljuce se svi displeji, pinovi na kojima su tasteri se konfigurisu kao ulazni i testiraju.
6. Nastavak od koraka 1.
Kako se ne bi primetilo treperenje displeja potrebno je displej osvezavati bar 30 puta u sekundi (30Hz). Znaci za 1 sekundu treba se javiti bar 5*300 interapta (zbog 5 ciklusa u interaptu). Moze svakako biti i vise, a konkretan broj zavisio bi od takta i preskalera.
Takodje je pozeljno u petom interaptu (onom u kojem se testiraju tasteri) realizovati debouncing.