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
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"
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.
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.
>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;)
>Alternativ baust du dein vergurkte Hardware um;)
Son Mist, Karl Heinz war schneller;)
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
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 :-(
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.
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?
> 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!
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 :-)
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.
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
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?
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
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.
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 ?
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
@ MWS meine kenntnisse diesbezüglich sind 0 aber ich würde es gerne lernen wie ich dies extrahieren kann
@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
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
Ok danke Paul, das werde ich mal testen :-) mal schaun wie es klappt. Vielen Vielen Dank
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.