Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Problem mit Tastaturabfrage

Basteleien analog und digital mit Strom und Spannung.

Moderator: radioscout

Antworten
Hucky3000
Geocacher
Beiträge: 177
Registriert: Do 8. Nov 2007, 17:43
Wohnort: 32120 Hiddenhausen
Kontaktdaten:

Problem mit Tastaturabfrage

Beitrag von Hucky3000 »

Hallo !
Ich steh mal wieder im Regen, irgendwie blicke ich es nicht was mit der Variable "Wert" passiert.
Es soll eine "Tastaturmatrix" mit gemeinsamer Masse ausgelesen werden.
Wenn ich keine Taste drücke sollte die Variable den Wert "0" haben. Hat sie aber nicht. Nur wenn ich DIREKT vor der Abfrage "Wert = 0" schreibe. Wenn ich irgendwo hänge kontrolliere ich Programmpunkte indem ich einfach ne LED ansteuere, damit ich überhaupt sehe WAS passiert, bzw. wann was passiert.
Die LED leuchtet nur wenn ich direkt vor der Abfrage "if wert = 0 then goto Abfrage" den Wert wirklich auf 0 setzte. WARUM ?!

Hucky

Code: Alles auswählen

'***********************************************
'Blechkasten - Nachtcache
'Compiler : BASCOM-AVR
'Hardware : Tastencode,LEDs,Servo
'Version 0.1
'Hucky3000
'***********************************************

$regfile = "attiny2313.dat"
$crystal = 4000000
$framesize = 32
$swstack = 10
$hwstack = 40

Config Portb = &B00000000                                   'PortB komplett auf Eingang
Config Portd = &B01111000                                   'PortD 0-2 auf Eingang - Rest auf Ausgang - PD7 nicht vorhanden
Portb = &B11111111                                          'PortB komplett Pull Up ein
Portd = &B00000111                                          'PortD 0-2 Pull Up ein


Dim Sperre As Byte
Dim Zaehler As Byte
Dim Wert As Byte
Dim Daten As Byte
Dim Ok As Byte



Anfang:

Portd.3 = 0
Portd.4 = 0

Sperre = 0
Zaehler = 0
Ok = 0
Wert = 0


Restore Dta1

Abfrage:

If Sperre = 1 Then Goto Weiter1

If Pinb.0 = 0 Then Wert = 10
If Pinb.1 = 0 Then Wert = 1
If Pinb.2 = 0 Then Wert = 2
If Pinb.3 = 0 Then Wert = 3
If Pinb.4 = 0 Then Wert = 4
If Pinb.5 = 0 Then Wert = 5
If Pinb.6 = 0 Then Wert = 6
If Pinb.7 = 0 Then Wert = 7
If Pind.0 = 0 Then Wert = 8
If Pind.1 = 0 Then Wert = 9

If Wert = 0 Then Goto Abfrage


Lesen:

Sperre = 1

Read Daten

If Wert = Daten Then Ok = Ok + 1
Zaehler = Zaehler + 1
Portd.4 = 1
Waitms 300
Portd.4 = 0
If Ok = 6 Then Goto Tuerauf
If Zaehler = 6 Then Goto Falsch

Goto Abfrage


Weiter1:
If Portb = 255 Then Goto Weiter2
Goto Abfrage
Weiter2:
If Pind.0 = 1 Then Goto Weiter3
Goto Abfrage
Weiter3:
If Pind.1 = 1 Then Goto Weiter4
Goto Abfrage
Weiter4:
Sperre = 0
Goto Abfrage



Tuerauf:
Portd.4 = 1
Wait 5
Goto Anfang

Falsch:
Portd.3 = 1
Wait 5
Goto Anfang

Dta1:
Data 1 , 2 , 3 , 4 , 5 , 6
Lanfair
Geocacher
Beiträge: 28
Registriert: Fr 23. Okt 2009, 22:16

Re: Problem mit Tastaturabfrage

Beitrag von Lanfair »

Goto?!? :schockiert: :schockiert: :schockiert: :schockiert: :schockiert:

Goto ist böse, nimm Gosub.

Und rück die Zeilen ein wenig ein, die innerhalb einer Schleife sind. Das erhöht die Lesbarkeit enorm.

Sorry, habe keine HIlfe für Dein Problem, da ich mir den Source mit den Goto-Sprüngen nicht antun wollte.
Benutzeravatar
qByter
Geocacher
Beiträge: 203
Registriert: Fr 30. Mai 2008, 23:20
Wohnort: Wadersloh, NRW

Re: Problem mit Tastaturabfrage

Beitrag von qByter »

Poste mal den Schaltplan...

Du sagst Du fragst eine Matrix ab, in Deinem Code aber einfach 10 Pins ohne irgendeine erkennbare Matrix und auch ohne Entprellung (schau Dir mal die Hilfe zum Befehl DEBOUNCE an!).

Eine "normale" Nummern-Matrix hat eigentlich 3x4 oder 4x4 Pins, und da würde Deine Abfrage nicht passen, da für eine Eingabe immer zwei Pins nötig wären.
Zum Abfragen einer Matrix bietet sich der Bascom-Befehl "getkbd" an, der entprellt auch gleich vernünftig...

Aus der Hilfe zu getkbd noch dazu:
Sometimes it can happen that it looks like a key is pressed while you do not press a key. This is caused by the scanning of the pins which happens at a very high frequency.

It will depend on the used keyboard. You can add series resistors with a value of 470-1K
Das dürfte auch bei Dir zutreffen, Du scannst ja ebenfalls rapide in Schleife. Also ruhig mal ein paar Widerstände davor hängen und entprellen, dann sollte das schon anders aussehen...
Hucky3000
Geocacher
Beiträge: 177
Registriert: Do 8. Nov 2007, 17:43
Wohnort: 32120 Hiddenhausen
Kontaktdaten:

Re: Problem mit Tastaturabfrage

Beitrag von Hucky3000 »

Schaltplan habe ich nicht.
Da ich vorher nicht wusste, dass es mit einer 3x4 Matrix so einfach ist habe ich mir so nen Ding von Conrad geholt, dass eine gemeinsame Masse hat und jede Taste einzeln rausgeführt ist. Ist praktisch so als hätte ich 10 einzelne Taste, die ich über Masse auf die Eingänge vom AVR gebe. Daher Matrix in Anführungszeichen :p
Den Befehl zum Entprellenhabe ich auch schon irgendwo gefunden - kommt später.
Im Prinzip MUSS es so funktionieren. Zumindest was ich mir an Basic auf anderen Systemen angeeignet habe.
Vorhin habe ich mir erstmal ein Buch bei Amazon bestellt. Alles wird (hoffentlich) gut :roll:

Die Tasten werden ja korrekt abgefragt. Habe z.B bei Pinb.0 ne LED eingeschaltet, bei Pinb.4 wieder aus.
Aber ich muss doch mit der If Then - Anweisung einer Variablen einen Wert zuordnen können ?!
Wenn keine Taste gedrückt ist müsste es ja bei "0" bleiben. So. Damit kann ich zum Anfang springen und so lange abfragen bis irgendetwas gedrückt wird. Mit der Variablen "Sperre" umgehe ich die Tastaturabfrage solange noch ne Taste betätigt ist.
Wieso wird die Variable "Wert" nicht korrekt beschrieben ?
Würde mich mal interessieren was da drin steht. Dafür müsste ich wohl ein LCD-Display anschliessen :(
Soooo weit bin ich noch nicht...

Hucky
Hucky3000
Geocacher
Beiträge: 177
Registriert: Do 8. Nov 2007, 17:43
Wohnort: 32120 Hiddenhausen
Kontaktdaten:

Re: Problem mit Tastaturabfrage

Beitrag von Hucky3000 »

Ich habs !
Hab durch probieren rausbekommen welchen Wert die Variable "Wert" hat. Es ist die 7.
Das heißt PinB.7 ist "betätigt".
USCK ? Programmierkabel ?!? :kopfwand: :kopfwand: :kopfwand:

Wieder was gelernt....

War schon am verzweifeln :irre:

Hucky
Antworten