Mischnick-Blog
Sie sind hier:   Startseite « 1 E-Projekte « 1.1 Picaxe « 1.1.2 Projekte « 1.1.2.A Abfrage einer Tastaturmatrix

1.1.2.A Abfrage einer Tastaturmatrix

Erstellt ab 01.01.2022

Es erreichte mich eine Leseranfrage, die sich damit beschäftigte, einen alten Verstärker wieder flott zu bekommen. In dem Verstärker war ein Mirkocontroller alter Bauart ausgefallen und die Umschaltung der diversen Audioquellen funktionierte deshalb nicht mehr.

Ich erklärte mich bereit, das mit einer Picaxe zu lösen.

Der Leser reichte diese Dokumente ein:

 
Dieses ist die einzulesende Matrix


Der Hintergrund (links) und der auszugebende BCD-Code (Tabelle rechts)

Der Controller in der linken Hälfte des Bildes ist also defekt und kann nicht mehr beschafft werden, weil er nicht mehr hergestellt wird.

Der Leser bat mich also, die Tastatur einzulesen, und dann den BCD-Code gemäß Tabelle auszugeben. Den Einbau der fertigen Schaltung würde der Leser selber übernehmen.

Soweit also die Leseranfrage.

 Ich entwickelte erst einmal eine Gesamttabelle daraus, um Überblick zu schaffen:

 

Tabelle 1

Eingabetaster
(Zeichnung 1)

Zeile K1 Zeile K2 Zeile K3 Zeile K4 Spalte D1 Spalte D2 Spalte D3 30 29 28 Funktion
(Zeichnung 2)
Phono x       x     1 0 0 Phono
CD   x     x     0 0 0 CD
Tuner     x   x     1 0 1 Tuner
VDP       x x     0 0 1 VDP
Dat 1 x         x   0 1 0 Tape 1
Dat 2   x       x   0 1 1 Tape 2
VCR 1     x     x   1 1 0 VCR 1
VCR 2       x   x   1 1 1 VCR 2
DD x           x x x x nicht beziffert
Mute     x       x x x x nicht beziffert

 

Jetzt, da ich die Tabelle fertig habe, sehe ich, dass es zwei Tatser gibt ("DD" und "Mute"), die nicht in den 3-Bit-Code der Ausgabe passen. Es wäre also entweder ein viertes Bit nötig, oder aber könnte ich jeweils einen Extra-Ausgang des Controllers ansteuern, sobald "DD" oder "Mute" gedrückt wird.
Da auch die eingereichten Unterlagen keine greifbaren Aussagen darüber liefern, was geschehen soll, muss ich also beim Leser eine Rückfrage stellen.

 Nach erneuter Absprache konnte ich diese Tabelle entwerfen:

 

Tabelle 2

Eingabe-
taster
(Zeichnung 1)

Zeile K1 Zeile K2 Zeile K3 Zeile K4 Spalte D1 Spalte D2 Spalte D3 Mute D.D. 30 29 28 Funktion
(Zeichnung 2)
  7 Eingänge 5 Ausgänge  
Phono x       x     0 0 1 0 0 Phono
CD   x     x     0 0 0 0 0 CD
Tuner     x   x     0 0 1 0 1 Tuner
VDP       x x     0 0 0 0 1 VDP
Dat 1 x         x   0 0 0 1 0 Tape 1
Dat 2   x       x   0 0 0 1 1 Tape 2
VCR 1     x     x   0 0 1 1 0 VCR 1
VCR 2       x   x   0 0 1 1 1 VCR 2
D.D. x           x 0 1

x
un-
ver-
ändert

x
un-
ver-
ändert
x
un-
ver-
ändert
D.D.
Mute     x       x 1 0

x
un-
ver-
ändert

x
un-
ver-
ändert
x
un-
ver-
ändert
Mute

 

Wir sehen also hier, dass die Taster "DD" und "Mute" einfach an jeweils einen zugehörigen Ausgang "durchgereicht" werden. Die drei Bits der anderen Taster bleiben dabei unverändert.

Jetzt habe ich jedoch vergessen, nachzufragen, ob die Ausgänge für "Mute" und "D.D." ebenfalls tastend sein sollen, oder ob diese so ähnlich wie ein Stromstoßschalter wirken sollen:

1x tasten = EIN , nochmal tasten = AUS

Das ist jetzt die nächste Frage, die es zu erkunden gilt.

 04.01.2022

Die Rückfrage ergab, dass sowohl "Mute" als auch "D.D." rastende Schalter sind, also keine Tastenfunktion haben. Daher werden diese beiden Signale einfach "durchgereicht" und auf die Ausgänge "Mute" und D.D. gegeben.

Aus diesen Erkenntnissen entstand dieses Schaltbild:

 

Schaltbild der Tastaturmatrix --- Grafik vergrößern

Jetzt wäre es sinnvoll, erst einmal eine Testschaltung aufzubauen, um das Picaxe-Programm entwickeln zu können.

 Es ist reichlich Litzengewirr zu sehen, aber solch ein Aufbau mit einer funktionellen Entwicklungsumgebung hat enorme Vorteile bei der Programmentwicklung. Gerade bei dieser Matrix-Sache muss man sich höllisch konzentrieren, damit alle Bits sitzen, wo sie hin gehören.

Das Aderngewirr sieht wirklich recht massiv aus, so dass man meinen könnte, eine geätzte Platine einsetzen zu müssen. Da die Taster aber schon vorhanden sind genügt es, dort einen Stecker in Form einer Stiftleiste zu montieren. Genau so ist es auch bei der "Abgabe" des BCD-Codes, so dass eine Punktrasterplatine völlig genügen wird. Zusätzlich verbaue ich noch einen Kondensator mit 100nF, der die Versorgungsspannung etwas  vor etwaigen HF-Störungen schützen soll. Eine weitere LED als Anzeige für die Versorungsspannung rundet alles ab.

Nach einer Reihe von (unvermeidlichen) Korrekturen funktionierte dann auch das Programm wie es sollte. Ich habe ganz bewusst darauf verzichtet, Schleifen oder dergleichen einzuprogrammieren, denn für solch eine kleine Aufgabe ist der Controller auch bei sequentieller Abarbeitung einer Reihe von If-Then-Bedingungen noch locker schnell genug und der Speicherplatz ist mehr als ausreichend.

Hier ist dann auch der Quellcode:


; Abrage einer Tastaurmatrix

; Bei Start soll "CD" aktiv sein

low B.5
low B.6
low B.7

do
    
    high C.0 ; Zeile K1 ansteuern
    low c.1
    low c.2
    low c.3    
    
    if pinC.4=1 and pinc.0=1 then ;Spalte  D1 einlesen =  "Phono"
        low  B.5
        low B.6
        high  B.7
    endif
    if pinC.5=1 and pinc.0=1 then ;Spalte D2 einlesen = "Dat 1"
        low  B.5
        high B.6
        low  B.7
    endif
        
        if pinC.6=1 and  pinc.0=1 then ;In Zeile K1:  Spalte  D3 einlesen =  "D.D."
        high B.3
        else
            low B.3
    endif
        
    low c.0
    high c.1 ; Zeile K2 ansteuern
    low c.2
    low c.3
    
    if pinC.4=1 and pinc.1=1 then ;Spalte  D1 einlesen =  "CD"
        low  B.5
        low B.6
        low  B.7
    endif
    if pinC.5=1 and pinc.1=1 then ;Spalte D2 einlesen = "Dat 2"
        high  B.5
        high B.6
        low  B.7
    endif
    
    low c.0
    low c.1
    high c.2 ; Zeile K3 ansteuern
    low c.3
    
    if pinC.4=1 and pinc.2=1 then ;Spalte D2 einlesen = "Tuner"
        high  B.5
        low B.6
        high  B.7
    endif
    
    if pinC.5=1 and pinc.2=1 then ;Spalte  D1 einlesen =  "VCR 1"
        low B.5
        high B.6
        high  B.7
    endif
        
    if pinC.6=1 and  pinc.2=1 then ;In Zeile K3: Spalte  D3 einlesen =  "Mute"
        high B.4
        else
            low B.4
    endif
    
    low c.0
    low c.1
    low c.2
    high c.3 ; Zeile K4 ansteuern
    
    if pinC.4=1 and pinc.3=1 then ;Spalte  D1 einlesen =  "VDP"
        high  B.5
        low B.6
        low  B.7
    endif
    if pinC.5=1 and pinc.3=1 then ;Spalte D2 einlesen = "VCR 2"
        high  B.5
        high B.6
        high  B.7
    endif
    
loop

Das Programm funktioniert so, dass die Zeilen K1 bis K4 nacheinander einzeln auf "1" geschaltet werden. Bei jeder Zeile, die gearde auf "1" steht, schaut der Controller nach, welche Spalte (D1 bis D3) diese "1" aufweist. Daraus lässt sich erkennen, welcher Taster gedrückt ist. Jedem Taster ist einfach ein BCD-Ausgangcode zugeordnet und dieser Code wird mit den "high" und "low Befehlen gesetzt. Die beiden Schalter "D.D." und "Mute" werden einfach an je einen Ausgang "durchgereicht" solange sie sich im EIN-Zustand befinden. Des ganze Code wird in einer Endlos-Schleife wiederholt.

Das ist auch schon alles und ich kann beginnen, die Platine aufzubauen.

Bei einer Anfrage in China stellte sich heraus, dass die Preis für die Anfertigung von PCBs dort im Hintergrund in den letzten Jahren erheblich gestiegen sind. Auch hätte ich mich um die Steuern und den Zoll selber kümmern müssen.

Also erstellte ich die Platine im eigenen Labor.

Als "Bestückungsaufdruck" dienen Aufkleber aus Papier.

Ich danke für diese interessante Anfrage,

 




Home

Inhaltsverzeichnis

Letzte Änderungen

Der Strippenstrolch

Kontakt



Besucherstatistik:
1 aktuell online
3 Heute
31 Gestern
139 Woche
1257 Monat
1257 Jahr
Gesamt seit 2021: 1.715
Tagesrekord: 105 (28.12.2021)
(c): Kostenloser PHP Counter

Kaffeekasse



nach oben