Bascom GETKBD Routine ändern

OP #2348905
Lesenswert?

Hallo Liebe Microcontroller Gemeinde,

ich habe mir ein Platinenlayout erstellt und diese Platine 100 x 
herstellen lassen, das Problem ist jetzt nur, das ich für mein 
Matrixkeyboard vergessen habe´die Pins im Layout zu Spiegeln.

Jetzt funktioniert das Programm und die Platine einwandfrei, nur in mein 
gehäuse kann ich es nicht einbauen, da die Tastatur falsch angeschlossen 
ist und ich somit das Gehäuse nicht mehr zu bekomme.

Das Keypad wird über die GETKBD - Routine von Bascom angesteuert.

Ist es möglich diese Routine zu ändern oder die Pins manuel zu vergeben, 
wie gesagt ist jetzt spiegelverkehrt und so herum werden die Tasten 
nicht erkannt.

Bei der LCD Routine ist es möglich die Pins einzustellen aber bei dem 
Keypad habe ich nichts gefunden.

Ich möchte auch das Programm nicht umschreiben wenn es nicht sein muss 
und meine eigene Routine erstellen.

Ich bitte euch um eure Hilfe.

vielen dank

Kai Burghart
#2348927
Lesenswert?

Verstehe ich das richtig: Du hast die Tastatur von mir aus an PB0 bis 
PB7
dran und jetzt ist sie verkehrt herum, d.h. von PB7 bis PB0?

Wenn das so ist, dann mußt Du das Byte, in das GETKBD seine Werte 
hinein-
schmeißt, umdrehen.

Dim Erwin as Byte
Dim Erwin_umgedreht as Byte

Erwin=Getkbd()

Erwin_umgedreht.0 = Erwin.7
Erwin_umgedreht.1 = Erwin.6
.
.
.
Erwin_umgedreht.7 = Erwin.0

Print "MfG Paul"
OP #2348934
Lesenswert?

Hallo Paul,

ja das ist soweit richtig, das habe ich auch schon gemacht, geht aber 
aus folgenden Grund nicht:

ich habe eine Matrix Tastatur mit 7 Pins (3x4) nicht mit 8

Somit habe ich die 3 Spalten an Pin 0-2 und die 4  reihen an Pin 4-7

Der Pin 3 ist nicht belegt.

Wenn ich die tastatur jetzt anstecke, habe ich die Spalten an 5-7 und 
die Reihen an 0-2 und an pin 4

Somit erkennt er die Tastatur nicht mehr.
#2348937
Lesenswert?

Dann würde ich an deiner Stelle folgendes tun:

1) Den Schaltplan gleich mal ändern :-)

2) mit scharfem Messer die Leitungen an geeigneten Stellen unterbrechen

3) Mit Fädeldraht neue Verbindungen ziehen, so dass sich die geforderte
   Belegung ergibt. Sind ja nur 7 Stück

4) Das ganze als Lehrgeld abhaken



> und diese Platine 100 x herstellen lassen

Das nächste mal nicht so voreilig. Ehe man den ersten Prototyp nicht am 
laufen hat, gibt man keine Massenfertigung in Auftrag. Genau das ist der 
Zweck eines derartigen Protoypen, derartige Fehlerchen am 'fertigen' 
Produkt auszumerzen und erst dann in Serie zu gehen.
Gast #2348940
Lesenswert?

>ja das ist soweit richtig, das habe ich auch schon gemacht, geht aber
>aus folgenden Grund nicht:

Mein Gott, das ist ein simples Softwareproblem.

Drück mal eine Taste nach der anderen
und schreib dir den Wert von Erwin für jede Taste auf.
Dann machst du dir ne Übersetzungstabelle
von Erwin-Ist zu Erwin-Soll.

Alternativ baust du dein vergurkte Hardware um;)
OP #2348946
Lesenswert?

Ja Layout wurde schon geändert,

Ich beomme leider keine Werte zurück wenn ich eine Taste drücke, da 
diese so nicht erkannt werden.

Software habe isch ja schon umgeschrieben, geht ja auch, nur leider 
falsch rum. wie gesagt anderst rum bekomme ich das gehäse nicht zu.

Die Routine umschreiben geht wohl nicht oder.

Hardware ändern ist bisl blöd, denn wie gesagt, ich hab e 100 platinen 
:-(
#2348949
Lesenswert?

holger schrieb:
>>ja das ist soweit richtig, das habe ich auch schon gemacht, geht aber
>>aus folgenden Grund nicht:
>
> Mein Gott, das ist ein simples Softwareproblem.

Soweit ich ihn verstanden habe, kommt die GetKBD mit seiner Belegung 
überhaupt nicht mehr zurecht, weil an den Leitungen an denen die Spalten 
sitzen sollten, er jetzt die Zeilen hat und umgekehrt.

Man könnte natürlich eine neue GetKBD Routine schreiben, die das 
berücksichtigt. Wäre vielleicht eine ganz gute Übung für den Bastler.
#2348954
Lesenswert?

> Software habe isch ja schon umgeschrieben, geht ja auch, nur
> leider falsch rum.

Was heißt das jetzt?
Geht dein Tastatur prinzipiell oder geht sie nicht?

D.h. erkennt GetKBD einzelne Tastendrücke (wenn auch die falschen) oder 
tut sie das nicht?

Bitte 100% klar ausdrücken!
OP #2348959
Lesenswert?

Ok, ja es werden die tasten erkannt, wenn ich sie "falsch" herum 
anschließe,

wenn ich den stecker dann umdrehe so da er passt, erkennt er keinen 
tastendruck mehr, auch nicht falsche tastenbelegung, denn das wäre kein 
problem diese im programm zu ändern aber er erkennt gar nichts, bzw. 
gibt immer den Wert 16 zurück und 16 ist ja wenn keine Taste gedrückt 
wird

Hoffe das ist jetzt verständlich :-)
#2348963
Lesenswert?

Kai Burghart schrieb:
> Ok, ja es werden die tasten erkannt, wenn ich sie "falsch" herum
> anschließe,

Diese 'falsch herum' das ist die Orientierung, die du nicht brauchen 
kannst.
Richtig?
Die interessiert keinen. Was wäre wenn, ist uninteressant. Interessant 
ist der Fall den du vorliegen hast. Und der ist ...


> wenn ich den stecker dann umdrehe so da er passt, erkennt er keinen
> tastendruck mehr,

... dieser hier. Also funktioniert sie grundsätzlich nicht.

Damit hast du 2 Möglichkeiten
* das Problem hardwaremässig zu korrigieren
* dir selber einen Ersatz für GetKBD zu schreiben, der den Verdreher 
auffängt.

Und ich ahne schon, wo das Problem bei der eigenen Funktion liegt :-)

Was muss man sich unter anstecken vorstellen?
Eventuell kann man ja mit einem Zwischen-Flachbandkabel welches den 
Dreher ausgleicht, was machen.
#2348964
Lesenswert?

Karl Heinz Buchegger schrieb:
> 2) mit scharfem Messer die Leitungen an geeigneten Stellen unterbrechen
>
> 3) Mit Fädeldraht neue Verbindungen ziehen, so dass sich die geforderte
>    Belegung ergibt. Sind ja nur 7 Stück

Erzähl mal noch einen vom Pferd.

Ne 3*4 Matrix einlesen ist doch einfach. Das kann man auch für beliebige 
Pins hinschreiben.

Wundert mich, daß die Black Box in Bascom nur bestimmte Pins akzeptieren 
soll, da ist doch sonst alles konfigurierbar.
Liegt sie vielleicht als Quelltext vor.


Peter
#2348967
Lesenswert?

Peter Dannegger schrieb:

> Wundert mich, daß die Black Box in Bascom nur bestimmte Pins akzeptieren
> soll, da ist doch sonst alles konfigurierbar.

Keine Ahnung. Wenn der Poster das nicht selbst nachgesehn hat, ich werds 
nicht für ihn tun.

> Ne 3*4 Matrix einlesen ist doch einfach. Das kann man auch für
> beliebige Pins hinschreiben.

Natürlich kann man. Ist aber die falsche Frage. Die Frage ist: Kann es 
der TO?
OP #2348985
Lesenswert?

Ja leider habe ich nichts gefunden wo ich die Pins konfigurieren kann,

für das LCD kann ich alle pins einzel konfigurieren, auch für viele 
andere sachen, aber nicht für das keyboard (bzw ich finde es nicht.

Das Flachbandkabel kann ich leider nicht ändern, da ich sonst einen 
adapter benötige und den Platz dafür nicht habe.
Gast #2348990
Lesenswert?

Kai Burghart schrieb:
> Ja leider habe ich nichts gefunden wo ich die Pins konfigurieren kann,

Du kannst da nix konfigurieren.
Der Vorteile ist, daß die Routine sehr straight-forward ist, besteht aus 
wenigen Assemblerbefehlen und ist einfach aus dem Compilat zu 
extrahieren.
Wie sind Deine Kenntnisse diesbezüglich ?
#2349003
Lesenswert?

als ob das jetzt n riesen Problem wäre da ne kleine Funktion dazwischen
zu klabustern ...

funktion get_keyboard () as byte
local z as byte
local y as byte

Portx =0
portx.4 = 1
z=pinx and &B11101111
y=0

if z=0
portx.4 = 0
portx.5 = 1
z=pinx and &B11011111
y=1
endif

if z=0
portx.5 = 0
portx.6 = 1
z=pinx and &B10111111
y=2
endif

if z=0
portx.6 = 0
portx.7 = 1
z=pinx and &B01111111
y=3
endif
portx.7 = 0

get_keyboard=y+z
end function

... so in der Art eben und scchon hast Du für jede Taste nen anderen 
Wert und kannst die Belegung beliebig tauschen.

Auf den PCB rumlöten würd ich glatt als Witz sehen
Gast #2349064
Lesenswert?

Kai Burghart schrieb:
> Somit habe ich die 3 Spalten an Pin 0-2 und die 4  reihen an Pin 4-7
>
> Der Pin 3 ist nicht belegt.
>
> Wenn ich die tastatur jetzt anstecke, habe ich die Spalten an 5-7 und
> die Reihen an 0-2 und an pin 4

Wenn das so geplant war, dann entspräche das dem hier:
SSS N RRRR
012 3 4567

Falsch rum ist's dann so:
RRRR N SSS
0123 4 567

Damit müsste GetKBD() genauso funktionieren, es bringt nur die falschen 
Scancodes. Da braucht man nicht die Funktion umbasteln, wobei ich das 
zugegebenermaßen bereits gemacht habe, bevor ich Deinen Text nochmal 
genau ansah.
OP #2370140
Lesenswert?

Hallo MWS,

leider geht es so nicht, es werden dann ja nicht falsche werte ausgegebn 
wenn die tastatur falsch angeschlossen ist, sondern gar nichts.

Das ist das Problem leider.

Wenn es nur falsche werte wären, könnte ich das ja ganz leicht im 
Quellcode ändern.

Aber vielen Dank für die Antwort
Gast #2370173
Lesenswert?

Kai Burghart schrieb:
> leider geht es so nicht, es werden dann ja nicht falsche werte ausgegebn
> wenn die tastatur falsch angeschlossen ist, sondern gar nichts.

Das deutet aber eher darauf hin, daß das Anschlussschema der Pins nicht 
wie von mir verstanden, bzw. wie in meinem vorherigen Post dargestellt 
ist.

Überprüf' das mal, bzw. stell die momentane Beschaltung nochmal genau 
dar.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren