Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Keyboard Matrix

Pagina: 1
Acties:

  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 03:25
Beste Forummers,

Ik ben bezig met het uitvogelen van een keyboard-matrix voor aan een AVR, Nu kom ik alleen een probleem tegen:
Ik heb de volgende site gevonden: Klik
Hier wordt gesproken over het probleem van ghosting:

Het standaard circuit:
Afbeeldingslocatie: http://www.dribin.org/dave/keyboard/one_html/diode_open.gif

Men drukt 3 toetsen (A, B en D) tegelijk in:
Afbeeldingslocatie: http://www.dribin.org/dave/keyboard/one_html/diode_A_B_D_2.gif
Hier is rij 1 (R1) en rij 2 (R2) geactiveerd. Ook zijn de kollommen (C1) en (C2) geactiveerd.

Hier is dus niet te weten of toets C of B ingedrukt is.

Klopt mijn gedachtegang? En is hier iets tegen te doen?

  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 29-10 06:07

Sprite_tm

Semi-Chinees

Klopt, en dat is de reden waarom je de kolommen moet afscannen: eerst c1 activeren, zodat je kan zien dat A is ingedrukt, en daarna c2 activeren, zodat je kan zien dat B en D ingedrukt zijn.

Het hele ghosting-probleem is hier dus al opgelost door de dioden in de schakeling op te nemen; het probleem van ghosting is dat spanning 'terug kan lopen' van een geactiveerde rij naar een inactieve colom; de diodes voorkomen dit.

[ Voor 39% gewijzigd door Sprite_tm op 05-02-2006 14:32 ]

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 03:25
Sprite_tm schreef op zondag 05 februari 2006 @ 14:28:
Klopt, en dat is de reden waarom je de kolommen moet afscannen: eerst c1 activeren, zodat je kan zien dat A is ingedrukt, en daarna c2 activeren, zodat je kan zien dat B en D ingedrukt zijn.
Hmm dan gaan we dat maar eens proberen. Volgens mij kan een ATmega16 dat wel aan kwa snelheid toch?

  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 29-10 06:07

Sprite_tm

Semi-Chinees

Makkelijk; je hoeft een keypad maar met een Hz of 200 af te scannen namelijk.

Ow, een probleem waar je tegenaan kan lopen maar dat stukkie tekst niet beschrijft is contactdender: als je een knop indrukt gaat 'ie stiekem meestal eerst een paar keer aan en uit (in het tijdsbestek van een paar ms, mind you) om daarna volledig aan te gaan. Hetzelfde verhaal met uitgaan. Als je dus iets wilt doen wat daarop reageert, zul je meerdere toetsindrukken krijgen, terwijl je de knop maar 1 keer indrukt. Of je daar last van krijgt is afhankelijk van je scansnelheid enzo, kan best zijn dat je er niets van merkt, maar dan weet je in ieder geval waar je naar moet zoeken als je er wel last van krijgt.

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 03:25
Sprite_tm schreef op zondag 05 februari 2006 @ 14:36:
Makkelijk; je hoeft een keypad maar met een Hz of 200 af te scannen namelijk.

Ow, een probleem waar je tegenaan kan lopen maar dat stukkie tekst niet beschrijft is contactdender: als je een knop indrukt gaat 'ie stiekem meestal eerst een paar keer aan en uit (in het tijdsbestek van een paar ms, mind you) om daarna volledig aan te gaan. Hetzelfde verhaal met uitgaan. Als je dus iets wilt doen wat daarop reageert, zul je meerdere toetsindrukken krijgen, terwijl je de knop maar 1 keer indrukt. Of je daar last van krijgt is afhankelijk van je scansnelheid enzo, kan best zijn dat je er niets van merkt, maar dan weet je in ieder geval waar je naar moet zoeken als je er wel last van krijgt.
Had dat daarover inderdaad al gelezen. Maar stond niet in dat stukje.

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Een oplossing om te ontdenderen is om, op het moment dat een ingedrukte toets gedetecteerd is, 50ms te wachten en dan nogmaals te kijken of de toets is ingedrukt. Zo nee, dan was het niets (ruis, storing) en zo ja, dan was het een toets.

  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 03:25
Krankenstein schreef op zondag 05 februari 2006 @ 17:17:
Een oplossing om te ontdenderen is om, op het moment dat een ingedrukte toets gedetecteerd is, 50ms te wachten en dan nogmaals te kijken of de toets is ingedrukt. Zo nee, dan was het niets (ruis, storing) en zo ja, dan was het een toets.
Als je 50ms wacht haal je wel de snelheid met een factor 10 omlaag. Als je 5 kolommen hebt wordt elke kolom nog maar 4 keer in een seconde gecheckt. Vraag me af of je daar hinder van ondervind.

  • naftebakje
  • Registratie: Februari 2002
  • Laatst online: 19:33
Werkt een RC netwerkje niet beter? Ik zag laatst in een datasheet een weerstandje naar de +5V, en een condensator naar de massa, als ontdendering van een rotary encoder (zo'n leuke draai-en-drukknop die tijdens het draaien zo leuk tikt). De tijdsconstante van je RC netwerkje zou ik zo niet weten, maar in die ene datasheet gebruiken ze 10 kOhm en 33 nF, in een andere datasheet van een vergelijkbare rotary encoder zetten ze nog een weerstand van 10 kOhm in serie en gebruiken ze 10 nF. Dus een waarde die er een beetje op lijkt zal wel werken.

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


  • _ferry_
  • Registratie: Januari 2002
  • Niet online

_ferry_

Moderator Tweaking

Nipple Tweaker

timcooijmans schreef op zondag 05 februari 2006 @ 20:42:
[...]

Als je 50ms wacht haal je wel de snelheid met een factor 10 omlaag. Als je 5 kolommen hebt wordt elke kolom nog maar 4 keer in een seconde gecheckt. Vraag me af of je daar hinder van ondervind.
neehoor, die 50ms is alleen van toepassing als er een signaal binnenkomt. Mocht je dus geen toets indrukken zal er ook geen dender/binnenkomend signaal zijn, en gaat het programma gewoon verder.

dus zeg maar zo:

main:
1 als input hoog is ga naar delay
2 rest van het programma
3 ....

delay:

A 50ms wachten
B als input nog steeds hoog is, roep functie op
C als input nu laag is, ga terug naar stap 2

  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 03:25
_ferry_ schreef op zondag 05 februari 2006 @ 22:43:
[...]

neehoor, die 50ms is alleen van toepassing als er een signaal binnenkomt. Mocht je dus geen toets indrukken zal er ook geen dender/binnenkomend signaal zijn, en gaat het programma gewoon verder.

dus zeg maar zo:

main:
1 als input hoog is ga naar delay
2 rest van het programma
3 ....

delay:

A 50ms wachten
B als input nog steeds hoog is, roep functie op
C als input nu laag is, ga terug naar stap 2
Ik hoop dat me AVR deze week binnen is dan kan ik gaan testen of het werkt
Pagina: 1