Hallo allemaal,

Ik heb sinds vandaag een toetsenbord met 16 toetsen (de welbekende bekende van Velleman), welke werkt met een matrix-aansturing.

Opzich geen probleem, want ik weet hoe matrix werkt. 4 ingangen, 4 uitgangen, 4x4=16. De 4 uitgangen worden alleen doorverbonden als de toets wordt ingedrukt. Dus als de toets niet is ingedrukt, zweeft de ingang. Nu heb ik hele nare ervaringen met zwevende ingangen op een uC, dus dit wil ik zien te voorkomen.

Zie onderstaand schema:
http://i37.tinypic.com/1564ydv.jpg
(mijn excuus voor mijn slechte tekenskills, maar het idee is duidelijk)

Links is de situatie zoals ik hem aan zou sluiten wanneer ik een 1x NO contact heb. Als de toets niet ingedrukt is staat er 5V via een weerstand op de ingang, ingang hoog. Wordt de schakelaar ingedrukt, dan wordt de 5V naar de gnd getrokken en wordt gestabiliseerd door een (meestal 100nF) condensator.

Nu leek mij het meest logische om die schakelaar te vervangen door een tor (BC547 is de meest voor de hand liggende optie) en deze te schakelen via het numpad. Wederom wordt er een 100nF condensator gebruikt om de spanning af te vlakken.

Mijn vraag (vragen) is (zijn) nu: Heeft er iemand ervaring met een dergelijke opstelling? Gaat dit werken of is er een betere/andere oplossing? Vergeet ik niet wat componenten (zoals een weerstand tussen base en collector of tussen base en emitter)?

Groeten,
Nick

Sluit gewoon die matrix aan met pull-ups of pull-downs, en zorg voor ontdendering in de software, bijvoorbeeld door de toets pas als "ingedrukt" te beschouwen als hij 3 maal achtereen contact maakt. Of 10 maal, afhankelijk van hoe snel je de matrix scant.

Op 17 oktober 2009 00:03:53 schreef Nixk-89:
(mijn excuus voor mijn slechte tekenskills, maar het idee is duidelijk)

Er zijn genoeg schemaprogramma's, slecht excuus, en je tekening is niet eenduidig.

Vergeet ik niet wat componenten (zoals een weerstand tussen base en collector of tussen base en emitter)?

Geen van beiden, http://www.hobby-electronics.info/nl/course/

Je 'oplossing' met een transistor maakt de zaak ook niet veel beter. De ingang van de MCU zweeft dan wel niet meer, maar nu zweeft de basis van de transistor...

Gewoon met een weerstand is genoeg. De ingang zweeft niet meer en de µC is tevreden.

Ik zou zeggen: 4 pull-up weerstanden (10k) aan de ingangen, en 4 weerstanden (220R) in serie met de uitgangen. Dat laatste om onheil te vermijden als iemand 2 of meer toetsen gelijktijdig indrukt.

Op 17 oktober 2009 07:16:38 schreef pros:
Dat laatste om onheil te vermijden als iemand 2 of meer toetsen gelijktijdig indrukt.

De 'normale' manier om dat te vermijden is om altijd maar een van de uitgangen uitgang-en-laag te maken, en de andere 3 ingangen.

Het kan soms wel nuttig zijn om meerdere uitgangen tegelijk actief te maken.
Bijvoorbeeld bij een 8x8 matrix maak ik vaak alle uitgangen default actief.
Op die manier hoef je alleen 1x de inputs te lezen, om te zien of er uberhaupt een key is ingedrukt.
Daarna kun je dan alle keys apart scannen. Spaart nogal wat processortijd...
(En zolang alle outputs hetzelfde nivo hebben, maakt 't toch niets uit of er meerdere keys worden gedrukt...)