Forum: Mikrocontroller und Digitale Elektronik Bascom GETKBD Routine ändern


von Kai B. (tekasiko)


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

von Paul B. (paul_baumann)


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"

von Kai B. (tekasiko)


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.

von Karl H. (kbuchegg)


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.

von holger (Gast)


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;)

von holger (Gast)


Lesenswert?

>Alternativ baust du dein vergurkte Hardware um;)

Son Mist, Karl Heinz war schneller;)

von Paul B. (paul_baumann)


Lesenswert?

Kai schrob:
>ja das ist soweit richtig, das habe ich auch schon gemacht...

Warum schreibst Du das dann nicht und läßt mich hier Ratschläge geben, 
Du
kleiner Schelm?
;-)

MfG Paul

von Paul B. (paul_baumann)


Lesenswert?

Ja, Holger -Du hast nun auch noch gefehlt....

MfG Paul

von Kai B. (tekasiko)


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 
:-(

von Kai B. (tekasiko)


Lesenswert?

somit sind es nicht 7 pins sonder 700 :-)

von Karl H. (kbuchegg)


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.

von Kai B. (tekasiko)


Lesenswert?

Sorry Paul :-)

von Kai B. (tekasiko)


Lesenswert?

Ja eine neue GetKBD routine wäre auch gut, nur wo bekomme ich die 
original her, bzw wo kann ich diese einsehen um eine neue zu schreiben 
und die alte zu ersetzten geht das?

von Karl H. (kbuchegg)


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!

von Kai B. (tekasiko)


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 :-)

von Karl H. (kbuchegg)


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.

von Peter D. (peda)


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

von holger (Gast)


Lesenswert?


von Karl H. (kbuchegg)


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?

von Paul B. (paul_baumann)


Lesenswert?

Und was hilft das jetzt, Holger?
Es gibt dort nicht die Möglichkeit, die Tastaturanschlüsse frei zu
definieren. Das Einzige, was man dort verändern kann ist, eine Tastatur
mit 6 statt 4 Reihen einzubinden.

Es bleibt in diesem Fall nur ein Selbstschreiben übrig.

MfG Paul

von Kai B. (tekasiko)


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.

von MWS (Gast)


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 ?

von spess53 (Gast)


Lesenswert?

Hi

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

In der Zeit seit deinem ersten Post hat man das zweimal selbst 
geschrieben.

MfG Spess

von holger (Gast)


Lesenswert?

>Und was hilft das jetzt, Holger?

Es beantwortet die Frage das OP?

von Kai B. (tekasiko)


Lesenswert?

@ MWS

meine kenntnisse diesbezüglich sind 0

aber ich würde es gerne lernen wie ich dies extrahieren kann

von Paul B. (paul_baumann)


Lesenswert?

@Kai
Guck Dir mal das an:

keinschnickschnack.de/etek/tutorials/matrix_tatstatur_direkt_und_adc.pdf

Das könnte Dir helfen. Sieht nicht so schön aus, aber besser als auf
den Platinen herumzuwürgen ist es wohl.

MfG Paul

von Weingut P. (weinbauer)


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

von Kai B. (tekasiko)


Lesenswert?

Ok danke Paul,

das werde ich mal testen :-)

mal schaun wie es klappt.

Vielen Vielen Dank

von MWS (Gast)


Lesenswert?

Kai Burghart schrieb:
> aber ich würde es gerne lernen wie ich dies extrahieren kann

Öffne das erzeugte .obj-File mit AVR-Studio 4 und lass Dir das 
Disassemblat anzeigen. Wenn Du kein Assembler kannst, hilft Dir das, was 
Du da siehst nur wenig.

von Kai B. (tekasiko)


Lesenswert?

@ Fhutdhb Ufzjjuz

ok, das werde ich auch mal testen

vielen dank

von MWS (Gast)


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.

von Kai B. (tekasiko)


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

von MWS (Gast)


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.

von Kai B. (tekasiko)


Lesenswert?

Danke, werde ich machen.

poste es dann hier

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.