Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » JU+TE Computer 4K & PS/2-Tastatur » Themenansicht

Autor Thread - Seiten: -1-
000
08.05.2024, 23:23 Uhr
OE4DEA



Ich möchte meinen JU+TE Computer 4K gern um eine PS/2-Tastatur erweitern.
Bei meiner Recherche bin ich auf die Entwicklungen von E. Müller gestoßen.
Was ich an diesen nicht verstehe, warum immer zusätzlich zum MCU die XILINX oder klassischen Logic ICs zum Einsatz kamen.
Kann die Aufgabe der MCU nicht alleine lösen oder was ist der Grund?

Was ist eigentlich aus E. Müller geworden?
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
09.05.2024, 08:31 Uhr
Bert



Hallo Denny,

der Mikrocontroller dekodiert das serielle Signal der PS/2-Tastatur. Anschließend muss der Tastendruck (oder gar mehrere) auf der originalen Matrix simuliert werden.

Um die Tastatur abzufragen wird vom Ju+Te kurz jede Spalte einmal aktiviert (unterste Messkurve) und auf den Zeilenleitungen geschaut ob eine entsprechende Taste gedrückt wurde:


Mit einem Mikrocontroller auf die Spaltenaktivierung entsprechend schnell zu reagieren, dürfte recht sportlich werden.
Daher der Trick mit den programmierbaren Logikbausteinen.

Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
09.05.2024, 08:31 Uhr
PC-Opa



Für den Tiny 4k mit dem ES1988 reicht eine einfache Schaltung mit einem PIC16F628(A) und zwei Standard-TTL Bausteine.
Das einseitige Layout im SL 6 Format, PIC-File und Beschreibung kannst du gerne haben.
--
Gruß Wolfgang
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
09.05.2024, 08:51 Uhr
jute-tom



Ein Microcontroller wäre VIEL zu langsam, um beim Abfragen auf einer Speicheradresse sofort (<1us) die richtige Antwort zu liefern.

PS: In meinem Tang Nano 9k-Projekt für verschiedene JU+TE-Varianten habe ich auch eine PS/2-Schnittstelle umgesetzt.
--
Viele Grüße,
Thomas
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
09.05.2024, 13:15 Uhr
OE4DEA




Zitat:
Bert schrieb
Hallo Denny,

der Mikrocontroller dekodiert das serielle Signal der PS/2-Tastatur. Anschließend muss der Tastendruck (oder gar mehrere) auf der originalen Matrix simuliert werden.

Um die Tastatur abzufragen wird vom Ju+Te kurz jede Spalte einmal aktiviert (unterste Messkurve) und auf den Zeilenleitungen geschaut ob eine entsprechende Taste gedrückt wurde:


Mit einem Mikrocontroller auf die Spaltenaktivierung entsprechend schnell zu reagieren, dürfte recht sportlich werden.
Daher der Trick mit den programmierbaren Logikbausteinen.

Viele Grüße,
Bert



Hallo Bert,

mit dem Timeing war auch schon meine Vermutung.
Nun habe ich aus einem anderen Versuch den MCU PIC16F13145 (https://www.microchip.com/en-us/product/pic16f13145) mit integrierter CLB-Peripherie (Configurable Logic Block) hier liegen.
Ich habe gestern meine Implementierung einmal zusammen gesteckt und konnte auch schon einen ersten Buchstaben übertragen.
Leider ist es bisher auch dabei geblieben.
Der Fehler kann natürlich aktuell überall drin stecken, zumal ich die PS/2 Tastatur auch über einen weiteren MCU emuliere.

Viele Grüße
Denny
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
09.05.2024, 13:15 Uhr
OE4DEA




Zitat:
PC-Opa schrieb
Für den Tiny 4k mit dem ES1988 reicht eine einfache Schaltung mit einem PIC16F628(A) und zwei Standard-TTL Bausteine.
Das einseitige Layout im SL 6 Format, PIC-File und Beschreibung kannst du gerne haben.



Hallo Wolfgang,

danke für dein Angebot.
Hast du noch weitere Informationen als Volker auf seiner gut sortierten Homepage?
Mir geht es weniger darum einfach etwas nachzubauen.
Ich möchte lieber wie beschrieben eigene Ideen probieren.

Viele Grüße
Denny
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
09.05.2024, 13:16 Uhr
OE4DEA




Zitat:
jute-tom schrieb
Ein Microcontroller wäre VIEL zu langsam, um beim Abfragen auf einer Speicheradresse sofort (<1us) die richtige Antwort zu liefern.

PS: In meinem Tang Nano 9k-Projekt für verschiedene JU+TE-Varianten habe ich auch eine PS/2-Schnittstelle umgesetzt.



Hallo Thomas,

ich verfolge deine Arbeit schon.
Hättest du Lust mal einen Blick über meine Verilog Implementierungen zu werfen?

Viele Grüße
Denny
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
09.05.2024, 14:21 Uhr
Bert




Zitat:
OE4DEA schrieb
Nun habe ich aus einem anderen Versuch den MCU PIC16F13145 ... mit integrierter CLB-Peripherie (Configurable Logic Block) hier liegen.


Ja damit könnte es klappen. Wobei ich auf den ersten Blick in's Datenblatt nicht erkennen konnte, wie diese CLBs angebunden sind. Aber vermutlich könnte man die CLBs schnell genug umprogrammieren um den jeweiligen Tastendruck zu simulieren.
Meine Erfahrung mit PICs (bzw. deren Programmierumgebung) waren eher nicht so positiv, so das ich dazu nicht viel sagen kann.

Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
09.05.2024, 14:23 Uhr
HeikoS

Avatar von HeikoS

Hallo Denny,

für den JuTe 2K/4K braucht man nur einen 4-Bit-Komparator und einen Latch, so wie es E.Müller damals entwickelt hatte. Sonst würde das der PIC nicht schaffen.

Der PIC wandelt das PS/2-Signal in Zeile und Spalte um.

Er gibt also eine Spalte (A0-A3) aus und der Komparator vergleicht diese mit A0-A3, die der JuTe sendet beim Abfragen der Tastatur. Ausserdem gibt der PIC eine Zeile (S0-S3) aus und der Latch gibt diese Zeile frei, wenn der Komparator Übereinstimmung feststellt. Eine sehr clevere Lösung.

Jona (stone) hatte die Idee von E.Müller aufgegriffen und eine Leiterplatte entwickelt, mit der man PIC, Arduino oder die klassische Matrix verwenden kann.

https://github.com/seidat1/Tiny
https://github.com/seidat1/Tiny/blob/master/Bilder/Leiterplatte_Tastatur.png



Den Arduino-Code hatte ich damals geschrieben. Ich habe viel von Frieders-Lösung

https://github.com/friedertonn/AC1-Tastatur/tree/main

übernommen, aber natürlich die Spalten- und Zeilen-Logik des JuTe eingebaut, sogar mit "Auto-Shift", da das separate Eingeben schon nervt beim JuTe 2K. Bisher aber noch nicht veröffentlicht.



Ein sehr schönes Projekt, nochmal vielen Dank an Jona !

Viele Grüße,
Heiko

Dieser Beitrag wurde am 09.05.2024 um 14:27 Uhr von HeikoS editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
09.05.2024, 20:02 Uhr
PC-Opa




Zitat:
OE4DEA schrieb

Zitat:
PC-Opa schrieb
Für den Tiny 4k mit dem ES1988 reicht eine einfache Schaltung mit einem PIC16F628(A) und zwei Standard-TTL Bausteine.
Das einseitige Layout im SL 6 Format, PIC-File und Beschreibung kannst du gerne haben.



Hallo Wolfgang,

danke für dein Angebot.
Hast du noch weitere Informationen als Volker auf seiner gut sortierten Homepage?
Mir geht es weniger darum einfach etwas nachzubauen.
Ich möchte lieber wie beschrieben eigene Ideen probieren.

Viele Grüße
Denny



Ich habe alle Unterlagen zu diesem Projekt von Enrico Müller bekommen.
Warum soll man denn das Fahrrad 2x erfinden?
Das mit der PS2-Tastatur funktioniert super und ist auch schnell aufgebaut.
--
Gruß Wolfgang
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
10.05.2024, 17:42 Uhr
jute-tom



Hallo Denny,


Zitat:
OE4DEA schrieb
Mir geht es weniger darum einfach etwas nachzubauen.
Ich möchte lieber wie beschrieben eigene Ideen probieren.


Das geht mir ähnlich.


Zitat:
OE4DEA schrieb
Hättest du Lust mal einen Blick über meine Verilog Implementierungen zu werfen?


Wo finde ich die denn? Hinweis: ich bin weit weg von Experte. Arbeite mich erst seit Dezember da hobbymäßig ein.
--
Viele Grüße,
Thomas

Dieser Beitrag wurde am 10.05.2024 um 17:43 Uhr von jute-tom editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
10.05.2024, 20:32 Uhr
OE4DEA



Hallo Thomas,

hier was ich in Verilog fabriziert habe:

Buffer

Quellcode:

module buffer(out, in, en);
    input in,en;
    output out;
    assign out = en ? in : 1;
endmodule



Comparator

Quellcode:

module comparator(a0, a1, a2, a3, b0, b1, b2, b3, eq);
    input a0,a1,a2,a3,b0,b1,b2,b3;
    output eq;
    assign eq = (a0 && !b0) || (!a0 && b0) || (a1 && !b1) || (!a1 && b1) || (a2 && !b2) || (!a2 && b2) || (a3 && !b3) || (!a3 && b3);
endmodule





Viele Grüße
Denny

Dieser Beitrag wurde am 10.05.2024 um 20:33 Uhr von OE4DEA editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
012
10.05.2024, 22:17 Uhr
jute-tom



Was ist'n dein genaues Ziel? Was sollen a0-a3 und b0-b3 darstellen?
--
Viele Grüße,
Thomas
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
013
11.05.2024, 09:40 Uhr
OE4DEA



b0 - b3 entspricht A0 - A3 vom JU+TE Computer.
a0 - a3 wird von der folgenden Programmlogik auf der MCU bespielt:

Quellcode:
case 0x16: Matrix=0b01001110; break;   //Zahl 1


Die oberen 4 Bit entsprechen der Spalte der Tastatur (0100) = a0 - a3.
Wenn diese 4 Bit gleich b0 - b3 sind, soll eq 1 werden.

Dieser Beitrag wurde am 11.05.2024 um 09:41 Uhr von OE4DEA editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
014
11.05.2024, 10:11 Uhr
schlaub_01



Aber bei Deiner Logikgleichung ist das ja eher so, daß bei schon einer Ungleichheit EQ = 1wird. Sollte das nicht eher so aussehen:
assign eq = (a0 == b0) && (a1 == b1) && (a2 == b2) && (a3 == b3);

Viele Grüße,
Sven.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
015
11.05.2024, 10:30 Uhr
jute-tom



Ich würde es so sehen wie Sven.

Wenn du a0-a3 und b0-b3 in einem Array (Bus) zusammenfasst, sollte es noch einfacher sein:

module comparator(input wire[3:0] a, input wire[3:0] b, output wire eq);
assign eq = a == b;
endmodule

Da braucht es dieses module auch gar nicht mehr.

Wenn du eh ein FPGA hast, warum machst du dann nicht alles mit diesem? Braucht es doch keinen uController mehr. Meinen PS/2 Code findest du in
https://github.com/tmssngr/z8verilog/blob/main/src/Ps2Rx.v und
https://github.com/tmssngr/z8verilog/blob/main/src/Ps2Decoder.v
--
Viele Grüße,
Thomas

Dieser Beitrag wurde am 11.05.2024 um 10:30 Uhr von jute-tom editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
016
11.05.2024, 11:13 Uhr
OE4DEA



Intuitiv hätte ich es auch wie Sven umgesetzt.
Ich habe mich aber erstmal streng daran gehalten, was wohl schon funktioniert hat.
Heißt, ich habe die Entwürfe von E. Müller nachgebaut.
Hier der Verilog Code wie es im XILINX Chip umgesetzt wurde:

Quellcode:
$OpTx$INV$6__$INT <= ((NOT A1 AND RB6)
      OR (A3 AND NOT RB4)
      OR (NOT A3 AND RB4)
      OR (A0 AND NOT RB7)
      OR (NOT A0 AND RB7)
      OR (A1 AND NOT RB6)
      OR (A2 AND NOT RB5)
      OR (NOT A2 AND RB5));
S0_I <= RB3;
     S0 <= S0_I when S0_OE = '1' else 'Z';
     S0_OE <= NOT $OpTx$INV$6__$INT;
S1_I <= RB2;
     S1 <= S1_I when S1_OE = '1' else 'Z';
     S1_OE <= NOT $OpTx$INV$6__$INT;
S2_I <= RB1;
     S2 <= S2_I when S2_OE = '1' else 'Z';
     S2_OE <= NOT $OpTx$INV$6__$INT;
S3_I <= RB0;
     S3 <= S3_I when S3_OE = '1' else 'Z';
     S3_OE <= NOT $OpTx$INV$6__$INT;
Register Legend:
      FDCPE (Q,D,C,CLR,PRE);
      FTCPE (Q,D,C,CLR,PRE);
      LDCP (Q,D,G,CLR,PRE);



Testweise habe ich jetzt den Comparator "hart verdrahtet" und es funktioniert auf Anhieb - es wird der Buchstabe B übertragen.



Der von mir eingesetzte IC PIC16F13145 ist ein MCU mit integrierter CLB-Peripherie (Configurable Logic Block). Sehr günstig in der Anschaffung und einfach im Betrieb und zu flashen.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
017
11.05.2024, 11:19 Uhr
schlaub_01



Da steht aber: NOT $OpTx$INV$6__$INT;
Diese Invertierung fehlt bei Dir, dann passt das auch, denn sobald alle gleich sind, ist die Gleichung ja 0.

Viele Grüße,
Sven.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
018
11.05.2024, 11:26 Uhr
OE4DEA




Zitat:
schlaub_01 schrieb
Da steht aber: NOT $OpTx$INV$6__$INT;
Diese Invertierung fehlt bei Dir, dann passt das auch, denn sobald alle gleich sind, ist die Gleichung ja 0.

Viele Grüße,
Sven.



Du sprichst jetzt aber vom Buffer, oder?
Dann sollte dieser bei mir so aussehen:


Quellcode:
module buffer(out, in, en);
    input in,en;
    output out;
    assign out = !en ? in : 1;
endmodule

Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
019
11.05.2024, 11:34 Uhr
schlaub_01



Im Prinzip schon, ich kann nur VHDL... ;-)
Aber was mir an dem Buffer noch aufgefallen ist - Bei E.Müllers Gleichungen geht der Buffer in einen High-Z Zustand im inaktiven Fall. Bei Dir sehe ich das irgendwie nicht und auch in der Simulation bleibt der Buffer mit der Logik immer aktiv.
Müsste dann vielleicht so aussehen: assign out_pin = !en ? in_pin : 1'bZ;

Viele Grüße,
Sven.

Dieser Beitrag wurde am 11.05.2024 um 11:37 Uhr von schlaub_01 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
020
11.05.2024, 11:41 Uhr
OE4DEA




Zitat:
schlaub_01 schrieb
Im Prinzip schon, ich kann nur VHDL... ;-)
Aber was mir an dem Buffer noch aufgefallen ist - Bei E.Müllers Gleichungen geht der Buffer in einen High-Z Zustand im inaktiven Fall. Bei Dir sehe ich das irgendwie nicht und auch in der Simulation bleibt der Buffer mit der Logik immer aktiv.

Viele Grüße,
Sven.



Der PIC16F13145 mit seiner CLB-Peripherie beherrscht einen High-Z Zustand aktuell nicht.
Dies habe ich aber nicht als Problem gesehen, da die Pins (S0 - S3) bei Aktivierung auf 0 gezogen werden. Die Leitungen hängen alle über 10K Widerstande an +5 Volt.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
021
11.05.2024, 11:45 Uhr
schlaub_01



Ist mir nur aufgefallen - wenn das keine Rolle spielt, ist das ja okay. Schade, daß der Mikrocontroller das nicht kann. Hatte schon überlegt, so was für den Z1013 oder Spectrum zu nutzen, aber dann ist das mit einem externen CPLD ja doch okay.

Viele Grüße,
Sven.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
022
11.05.2024, 11:59 Uhr
OE4DEA




Zitat:
schlaub_01 schrieb
Ist mir nur aufgefallen - wenn das keine Rolle spielt, ist das ja okay. Schade, daß der Mikrocontroller das nicht kann. Hatte schon überlegt, so was für den Z1013 oder Spectrum zu nutzen, aber dann ist das mit einem externen CPLD ja doch okay.

Viele Grüße,
Sven.



Ich will jetzt nichts Falsches verbreiten.
Über einen Workaround kann der MCU wohl doch den High-Z Zustand.
Ich bin nur noch nicht ganz dahinter gestiegen wie.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
023
11.05.2024, 18:33 Uhr
jute-tom




Zitat:
Der von mir eingesetzte IC PIC16F13145 ist ein MCU mit integrierter CLB-Peripherie (Configurable Logic Block). Sehr günstig in der Anschaffung und einfach im Betrieb und zu flashen.


Ah, es geht um einen uC mit "Mikro-FPGA". Immerhin hat er den Vorteil, 5V tauglich zu sein.

Wobei

Quellcode:
module buffer(out, in, en);
    input in,en;
    output out;
    assign out = !en ? in : 1;
endmodule


auch zu

Quellcode:
module buffer(out, in, en);
    input in,en;
    output out;
    assign out = en | in;
endmodule


vereinfacht werden könnte.
--
Viele Grüße,
Thomas

Dieser Beitrag wurde am 11.05.2024 um 18:33 Uhr von jute-tom editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
024
11.05.2024, 22:15 Uhr
OE4DEA



Es ist vollbracht, System läuft.
Damit ist der PS/2 Anschluss für den JU+TE Computer mit einer aktuellen MCU für rund zwei Euro realisiert.
Komplettes Projekt mit Platine folgt demnächst.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
025
12.05.2024, 09:40 Uhr
jute-tom



Ist der FPGA-Teil auch leistungsfähig genug, um mehrere Tastendrücke gleichzeitig zu simulieren, sprich 2 solcher Comparatoren für die erste oder eine andere Spalte?
--
Viele Grüße,
Thomas
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
026
12.05.2024, 10:30 Uhr
HeikoS

Avatar von HeikoS


Zitat:
OE4DEA schrieb
Es ist vollbracht, System läuft.
Damit ist der PS/2 Anschluss für den JU+TE Computer mit einer aktuellen MCU für rund zwei Euro realisiert.
Komplettes Projekt mit Platine folgt demnächst.



Glückwunsch ! Finde es sehr interessant, dass man die Komparator-Logik noch in der MCU mit abbilden kann. Bin gespannt auf die Doku.

Viele Grüße,
Heiko
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
027
12.05.2024, 13:37 Uhr
OE4DEA




Zitat:
jute-tom schrieb
Ist der FPGA-Teil auch leistungsfähig genug, um mehrere Tastendrücke gleichzeitig zu simulieren, sprich 2 solcher Comparatoren für die erste oder eine andere Spalte?



Von der Anzahl der Logik-Zellen her, sollte sich dies ausgehen.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek