Hallo, ich habe eine Tastatur made in GDR auf dem Trödelmarkt erstanden und würde diese gern mit einem USB-Anschluss ausrüsten. Es handelt sich um das KC85 Keyboard, wunderbar dokumentiert unter http://www.mpm-kc85.de/dokupack/kc852_keyboard.pdf Die Tastatur verfügt über eine zweiadrige Leitung, die gleichzeitig Stromversorgung und Signalleitung ist. Sie soll laut Handbuch über einen 270 Ohm-Widerstand mit 12V Spannung versorgt werden. Das Signal wird pulsabstandsmoduliert. Was bedeutet das, wie hoch sind hier die Logikpegel? Mir ist nicht ganz klar, wie ich das am besten realisiere. Ich hatte gedacht, aus den 5V des USB-Anschluss per Step-Up-Wandler die benötigten 12V zu erzeugen und das Signal mit einem Arduino o.ä. auszuwerten. Würde es wie folgt funktionieren? - StepUp-Wandler: Plus über 270 Ohm an Tastaturplus, Minus an Tastaturminus - Pullup 10k an Arduino Pin - Vom Arduino Pin über 150 Ohm Strombegrenzungswiderstand und Zener-Diode 5.1V zur Spannungsbegrenzung an das Tastaturplus Vielen Dank für alle Hinweise Gregor
:
Verschoben durch User
Gregor N. schrieb: > wie hoch sind hier die Logikpegel Es gibt keine Logikpegel, da die Übertragung durch Modulation der Stromaufnahme stattfindet. Gregor N. schrieb: > wie ich das am besten realisiere U807 entfernen und durch Controller mit USB (z.B. ATMega32U4) ersetzen?
Rot ist blau und plus ist minus! Einfach zusammenknubbeln und fertig. Endlich wieder Ladder spielen! Dank 3d-Drucker eine neue Taste!
Merkwürdige Idee, aber was solls. Ich würde die Auswerteschaltung aus Bild 3 aufbauen und das entstehende Signal in einem kleinen V-USB µC auswerten und als USB-HID ausgeben.
Lösungsvorschlag, wenn du die Tatstatur nicht „verbasteln“ möchtest. Der U807 (SAB3021) ist ein IR Fernbedienungssender. Der dazu passen zugehörige Decoder ist der U806 (SAB3022B). Besorge dir diesen Decoder und klemme ihn an eine passende Schaltung (meinetwegen Arduino).
:
Bearbeitet durch User
Der Bedienkomfort einer KC85-2/3 Tastatur ist etwa der eines chinesischen Bluetoothminikeyboards. Ich würde sowas in die nächste Tonne werfen...
Gregor N. schrieb: > Die Tastatur verfügt über eine zweiadrige Leitung, die gleichzeitig > Stromversorgung und Signalleitung ist. Sie soll laut Handbuch über einen > 270 Ohm-Widerstand mit 12V Spannung versorgt werden. Das Signal wird > pulsabstandsmoduliert. > > Was bedeutet das, wie hoch sind hier die Logikpegel? Das bedeutet (wie du aus dem Schaltplan entnehmen kannst), daß diese Tastatur auf der kombinierten Daten- und Versorgungsleitung kurze Low-Impuls-Bursts erzeugt. Sonderlich groß sind die wohl nicht, denn da wird lediglich ein 2k2 Widerstand von 9.1 Volt gegen GND gezogen. Wahrscheinlich wäre es weitaus besser gewesen, die Anschlußleitung dreiadrig zu machen: GND+VCC+Signal, um sich den Zirkus mit dem Komparator am µC zu ersparen. Aber das läßt sich ja nachholen. Und eben die Zeit von einem Burst zum nächsten ist, was du messen mußt. Für eine Null sind das etwa 5 ms, für eine Eins etwa 7 ms und als Endekennzeichen so etwa 14 ms oder mehr. Ob du da mit 5 Volt auskommst, mußt du ausprobieren. Intern arbeitet das Ding mit maximal 9.1 Volt, vielleicht funktioniert der Chip auch noch bei 5 Volt. Ich hatte mal von Pollin zusammen mit anderen Fernbedienungen auch sowas dabei. Im Vergleich zu anderen FB sind das ziemliche Exoten. Im Gegensatz zum Rest der Welt brauchen diese FB gleich 4 Stück AAA als Versorgung. W.S.
Gregor N. schrieb: > Mir ist nicht ganz klar, wie ich das am besten realisiere. Ich hatte > gedacht, aus den 5V des USB-Anschluss per Step-Up-Wandler die benötigten > 12V zu erzeugen und das Signal mit einem Arduino o.ä. auszuwerten. Würde > es wie folgt funktionieren? > > - StepUp-Wandler: Plus über 270 Ohm an Tastaturplus, Minus an > Tastaturminus > - Pullup 10k an Arduino Pin > - Vom Arduino Pin über 150 Ohm Strombegrenzungswiderstand und > Zener-Diode 5.1V zur Spannungsbegrenzung an das Tastaturplus Wahrscheinlich nicht. Warum nimmst du nicht einfach die Originalschaltung des "Empfängers" aus der von dir selbst verlinkten Beschreibung, bzw. den relevanten Teil davon? D.h.: Bild 3 auf Seite 11. Der relevante Teil ist: R1..R4 und C1. Das ganze Gedöns danach ersetzt du einfach durch einen AVR8 mit Analogkomparator (also nahezu jeden). Das, was in der Originalschaltung Pin1 und 2 des B2761 darstellt, macht am AVR8 AIN1 und AIN0. Allenfalls könnte man als Übervorsichtiger noch eine zusätzliche Schottky-Diode zwischen dem Verbindungspunkt von C1/R4 und Masse des AVR vorsehen. Nötig ist das aber aller Wahrscheinlichkeit nach nicht. Der Rest ist reine Software...
c-hater schrieb: > Allenfalls könnte man als Übervorsichtiger noch eine zusätzliche > Schottky-Diode zwischen dem Verbindungspunkt von C1/R4 und Masse des AVR > vorsehen. Nötig ist das aber aller Wahrscheinlichkeit nach nicht. Mist, ich sehe gerade, dass ich da ein Detail übersehen habe: der Spannungsteiler R2/R3 liegt an -5V, nicht an +5V. Also müßte man die Schaltung für den AVR-AC doch ein wenig abwandeln.
c-hater schrieb: > Mist, ich sehe gerade, dass ich da ein Detail übersehen habe: der > Spannungsteiler R2/R3 liegt an -5V, nicht an +5V. Also müßte man die > Schaltung für den AVR-AC doch ein wenig abwandeln. Wobei das auch kein Problem sein muss. Als OPV könnte man einen LM393 nehmen, die beiden Eingänge auf U/2 vorspannen. Das wäre auch mit dem B2761 so gegangen, aber wer weiss, wofür die 2. Hälfte von dem ursprünglich genutzt wurde. Die -5V waren im KC sowieso vorhanden, für die alten 16k-DRAMs also wurden sie hierfür gleich mitgenutzt.
Sempfdazugeber schrieb: > Der Bedienkomfort einer KC85-2/3 Tastatur ist etwa der eines > chinesischen Bluetoothminikeyboards. Das ist leider nur zu wahr. Die Tasten klemmen gerne und/oder geben schlechten Kontakt. Und zu schnell darf man auch nicht tippen. Der einzige Grund, warum man eine solche Tastatur verwenden wollen würde, wäre der Betrieb eines KC85 selber. Joe G. schrieb: > Der U807 (SAB3021) ist ein IR Fernbedienungssender. Der dazu passen > zugehörige Decoder ist der U806 (SAB3022B). Besorge dir diesen Decoder Wohl nicht. Zum einen dürfte der Decoder mittlerweile absolut unkaufbar sein (oder wenn dann zu Wucherpreisen). Das simple Pulsabstandsprotokoll kriegt man mit jedem µC der Welt in Software ganz locker nebenbei decodiert. Es sind immer 7 Bursts von 36kHz mit 152µs Länge, die Länge zwischen zwei Bursts codiert entweder eine 0 (5.12ms) oder eine 1 (7.14ms). Das erste Bit ist immer 0 (das Startbit). Bei andauerndem Drücken einer Taste werden Frames mit 14.34ms Abstand gesendet, sonst ist der Abstand mindestens 19.46ms. Das alles unter der Maßgabe, daß der U807 mit 4MHz läuft.
Vielen Dank für all die Hinweise. Ich fasse die Hardwareoptionen mal für mich zusammen: 1. Hauruckmethode: Schaltung inkl. Controller in der Tastatur komplett durch Microcontroller mit USB oder V-USB und um die 16 In/Out-Pins bzw. Kombination mit Schieberegister ersetzen. Maximalinvasiv aber einfach zu verstehen, vermutlich relativ schnell umzusetzen und passt im besten Fall in die Tastatur rein. 2. Nachbaumethode: Auswertungsschaltung nachbauen (Bild 3), entweder nur bis ran an den B2761 oder bis direkt dahinter oder bis zum Ende. Das ist wegen der negativen Spannungen nicht ganz trivial, könnte aber durch "vorspannen" (= "virtuelle Masse"?) erreicht werden. Die 12V müssten auch noch irgendwie aus 5V USB erzeugt werden (Step-Up-Wandler). Wenn ich das richtig verstehe, könnten aber auch 9V reichen, weil die Tastatur ohnehin intern durch Z-Diode auf 9 Volt runtergeht. Statt B2761 könnte auch ein LM393 verwendet werden. Egal wie...es ist immer irgendeine Art Schaltung mit Operationsverstärker. Ich habe noch keine Ahnung, wie genau man das aufbaut, werde aber in den nächsten Tagen mal einen Vorschlag ersinnen. Das könnte relativ groß werden und passt dann vielleicht nicht mehr in die Tastatur. 3. Nachkaufmethode: Einen passenden Dekoderbaustein besorgen. Das könnte teuer werden. Und ich wüsste noch nicht, wie der dann beschaltet wird. 4. Naivmethode: Warum eigentlich muss ein Operationsverstärker her? Weil die Bursts intern mit runterziehen auf Ground über 2,2kOhm erzeugt werden und das zu schwach ist? Ich hatte zwischendurch die Hoffnung, dass sich irgendeine Art Spannungsteiler aufbauen lässt, der direkt an einen Pin vom Mikrocontroller geht, ggf. noch mit Z-Diode gegen Überspannung gesichert. Aber das scheint nicht zu funktionieren? 5. Hauwegmethode Tastatur wegwerfen, denn sie ist nicht ergonomisch. Das wäre schade, denn ich zitiere aus dem Handbuch (S.4): > Bei der Entwicklung des Kleincomputers KC 85 durch den VEB > Mikroelektronik "Wilhelm Pieck" Mühlhausen wurde ein Hauptaugenmerk > auf die Entwicklung einer ergonomisch und ökonomisch optimalen Tastatur > gelegt. Als ergonomisch günstig haben sich vom Computer abgesetzte, > flache und leicht bewegliche Tastaturen erwiesen. Was kann daran falsch sein? Ich tendiere zu einer abgewandelten Nachbaumethode (Option 2), d.h. möglichst nur die vorderen Teile von Bild 3 nachbauen und als Operationsverstärker LM393 verwenden. Denn ich will gern lernen, wie so etwas funktioniert - auch für zukünftige Projekte. Softwaremäßig ist mir übrigens einigermaßen klar, wie das funktionieren kann, das bekomme ich hin. Über konkrete, möglichst einfache Schaltungsvorschläge würde ich mich sehr freuen, versuche aber selbst in den nächsten Tagen einmal eine Skizze. Nochmals vielen Dank für die bisherigen und die zukünftigen Ideen und Hinweise.
:
Bearbeitet durch User
Sempfdazugeber schrieb: > Der Bedienkomfort einer KC85-2/3 Tastatur ist etwa der eines > chinesischen Bluetoothminikeyboards. > Ich würde sowas in die nächste Tonne werfen... Zumindest für einige Ossis ist auch das ein Stück Technik-Geschichte. Ein Stück das ins Museum gehört (und zwar unverbastelt) und nicht in die Tonne. Selbst wenn es im Museum nur als gutes Beispiel für "martialisches Minimaldesign ohne Benutzerkomfort" ausgestellt wird, ist es besser als in Afrika als Stück tiefschwarz qualmendes Stück "Rohstoff" zu verbrennen.
Gregor N. schrieb: > Warum eigentlich muss ein Operationsverstärker her? Weil einerseits die Unterschiede der Logikpegel ziemlich gering sind, andererseits aber auch ein gewisser Mindesthub überschritten werden soll, damit es überhaupt als Änderung des Logikpegels zählt. Das Problem ist halt das Grundkonzept, die Logikpegel durch Modulation der Stromaufnahme einer digitalen Schaltung zu übertragen. Aber was hast du gegen einen OV? Wie gesagt: jeder AVR8 enthält einen in Form des Analogkomparators und du willst doch letztlich sowieso einen AVR8 benutzen. Das passt doch gut. Die Originalschaltung brauchst du dafür bloß minimal abwandeln. Etwa so:
1 | +12V +5V |
2 | o---- -------*------o |
3 | | | | |
4 | | | - |
5 | - - | |22k |
6 | | | 270 | |22k | | |
7 | | | | | - |
8 | - - | AIN0 |
9 | | | *------o |
10 | | | || | | AIN1 |
11 | o----*----| ||----*--------------o |
12 | | || | | |
13 | TAS 4.7µ - - |
14 | | |22k | |18k GND |
15 | o---- | | | | --o |
16 | | - - | |
17 | | | | | |
18 | --- --- --- --- |
Gregor N. schrieb: > ich habe eine Tastatur made in GDR auf dem Trödelmarkt erstanden und > würde diese gern mit einem USB-Anschluss ausrüsten. Welche denn genau: Die Flache (http://www.mpm-kc85.de/html/D001BasisDevise.htm#Tastatur) oder die Dicke (http://www.mpm-kc85.de/html/D005Tastatur.htm)? Axel S. schrieb: >> Der Bedienkomfort einer KC85-2/3 Tastatur ist etwa der eines >> chinesischen Bluetoothminikeyboards. > > Das ist leider nur zu wahr. Die Tasten klemmen gerne und/oder geben > schlechten Kontakt. Und zu schnell darf man auch nicht tippen. Für die flache Tastatur stimmt das. Aber mit der D005 kann man auch heute noch komfortabel arbeiten. Allerdings sieht man heutzutage eher den umgekehrten Weg: Da wird eine PS/2-Tastatur mit Protokollwandler am KC85 betrieben. P.S.: Die Schaltungsvariante mit dem Analogkomperator am ATtiny/ATmega hätte ich auch gewählt.
Mike B. schrieb: > Sempfdazugeber schrieb: >> Der Bedienkomfort einer KC85-2/3 Tastatur ist etwa der eines >> chinesischen Bluetoothminikeyboards. >> Ich würde sowas in die nächste Tonne werfen... > > Zumindest für einige Ossis ist auch das ein Stück Technik-Geschichte. > Ein Stück das ins Museum gehört (und zwar unverbastelt) und nicht in die > Tonne. Man darf auch nicht vergessen, daß diese Tastatur Mitte der 80er in der DDR-Mangelwirtschaft für einen Heimcomputer entworfen wurde. Das heißt, sie mußte einfach und billig herzustellen sein, ohne hochwertige oder knappe Materialien zu verwenden. Unter diesen Voraussetzungen ist sie den Ingenieuren m.E. gut gelungen. Und wer mal mit der Flachfolientastatur eines Z1013 "gearbeitet" hat, wird sie als reglerecht komfortabel empfinden. Axel S. schrieb: > Der einzige Grund, warum man eine solche Tastatur verwenden wollen > würde, wäre der Betrieb eines KC85 selber. Dann würde man sie einfach anstecken und müßte keinen USB-Zauber dranbasteln. Ich vermute, der TE will sie als Eingabegerät für den KC-Emulator am PC benutzen.
Axel S. schrieb: > Das ist leider nur zu wahr. Die Tasten klemmen gerne und/oder geben > schlechten Kontakt. Und zu schnell darf man auch nicht tippen. Das ist auch meine Erinnerung, die Tastatur taugte nichts. Sie war nur solange gut, solange es nichts besseres gab. Außerdem hatte sie durch den FB-IC eine extrem lange Verzögerungszeit. Reaktionsspiele ließen sich damit fast nicht spielen. Man mußte die Tasten schon drücken, lange bevor der Ball ins Tor rollte.
@Gregor N.: Sieh Dich mal im Forum von robotrontechnik.de um, Du findest dort verschiedene Lösungen PS/2 und USB Tastaturen mit dem KC85 zu koppeln um die teilweise mittlerweile defekten oder aber nur die aus heutiger Sicht unergonomischen Originaltastaturen zu ersetzen. Ich habe auch einen KC85 Turm da stehen, den mir ein Bastelfreund mal als Kompensation für eine P8000 hingestellt hat, ich habe die Originaltastatur und eine kleine POS -PS/2 Tastatur mit Attiny85 im DIN-Stecker. Die Originale Tastatur hat den Vorteil das sie eben genau das macht was dran steht...das ist aber bereits Alles. Laß die Tastatur einem Besitzer eines KC85 (Jemandem Anderen als mir) zukommen und verwirf die Idee das Teil an einen PC zu prömpeln, Du wirst damit nicht froh. Ist wirklich nur ein gut gemeinter Rat. Gruß, Holm
Holm T. schrieb: > Laß die Tastatur einem Besitzer eines KC85 (Jemandem Anderen als mir) > zukommen und verwirf die Idee das Teil an einen PC zu prömpeln, Du wirst > damit nicht froh. Ist wirklich nur ein gut gemeinter Rat. Das würde das Beste sein! MfG
Tim schrieb: > Gregor N. schrieb: > Welche denn genau: Die Flache > (http://www.mpm-kc85.de/html/D001BasisDevise.htm#Tastatur) oder die > Dicke (http://www.mpm-kc85.de/html/D005Tastatur.htm)? Die flache in schwarz mit roten Tasten in der obersten Reihe. Also die ältere, mit Charme, aber ohne Bedienkomfort. > Allerdings sieht man heutzutage eher den umgekehrten Weg: Da wird eine > PS/2-Tastatur mit Protokollwandler am KC85 betrieben. Ja, das habe ich im Netz auch mehrfach gefunden. Das ergibt für mich wiederum keinen Sinn - wenn ich ernsthaft einen Computer brauche, dann nehme ich lieber ein schnelles, vielseitiges, ergonomisches, leises, aktuelles Gerät. So unterschiedlich können Menschen sein. Al.Kn. schrieb: >> Laß die Tastatur einem Besitzer eines KC85 (Jemandem Anderen als mir) >> zukommen und verwirf die Idee das Teil an einen PC zu prömpeln, Du wirst >> damit nicht froh. Ist wirklich nur ein gut gemeinter Rat. > > Das würde das Beste sein! Jetzt mal ernsthaft: die Frage ist nicht, wie ich die Tastatur loswerde, sondern wie ich sie per USB anschließe. Warum? Mir reicht als Grund erst einmal, dass ich dabei etwas lerne, zum Beispiel über Elektronik und über das aktuelle und historische Verhältnis Mensch-Computer. Vielleicht gibt das auch anderen Anlass, darüber nachzudenken, wenn man eine E-Mail mit der Tastatur einer vergangenen Ära schreiben kann. Außerdem finde ich den Kontrast reizvoll...letztendlich werde ich weder einen orginalen KC noch einen Emulator damit betreiben, sondern das für einen F-Tsch-Chq-&-Wumm-Apparat verwenden oder als Zusatztastatur mit Makros für Programmieren, Spiele, Multimedia belegen oder als Twitter oder E-Mailmaschine. Wozu wurde die @-Taste eigentlich vorrangig eingesetzt? Für welche Programmiersprache oder was auch immer war das gut? Weiß jemand, wie die den Weg auf die Belegung gefunden hat oder wer damals dabei gewesen ist? Interessant ist auch, dass es eine Negatortaste gibt, aber keine Tilde.
c-hater schrieb: > Die Originalschaltung brauchst du dafür bloß minimal abwandeln. Etwa so: > >
1 | > +12V +5V |
2 | > o---- -------*------o |
3 | > | | | |
4 | > | | - |
5 | > - - | |22k |
6 | > | | 270 | |22k | | |
7 | > | | | | - |
8 | > - - | AIN0 |
9 | > | | *------o |
10 | > | | || | | AIN1 |
11 | > o----*----| ||----*--------------o |
12 | > | || | | |
13 | > TAS 4.7µ - - |
14 | > | |22k | |18k GND |
15 | > o---- | | | | --o |
16 | > | - - | |
17 | > | | | | |
18 | > --- --- --- --- |
19 | > |
Wow, danke, das sieht richtig gut aus. Ich versuche noch zu verstehen, wie das funktioniert. Ist folgende Interpretation einigermaßen sinnvoll? An AIN0 liegt durch den Spannungsteiler aus 22k und 18k normalerweise 2,25V an. An AIN1 liegt durch den Spannungsteiler aus 22k und 22k normalerweise 2,5V an. Das heißt Spannung an AIN1 ist 0,25 V größer als AIN0. Die Tastatur zieht AIN1 auf Masse, dadurch wird AIN1 kurzzeitig bis zu 2,25V kleiner als AIN0. Das dreht den Logikpegel um. Bitte entschuldige meine Naivität, ich lerne noch. Woher weiß ich, wie die Spannungsteiler dimensioniert werden? Und wozu ist eigentlich der 4.7µ-Kondensator da? Glättet der nicht die bursts weg? [Anmerkung zum Edit: habe meine Interpretation noch einmal geändert]
:
Bearbeitet durch User
Gregor N. schrieb: > Jetzt mal ernsthaft: die Frage ist nicht, wie ich die Tastatur loswerde, > sondern wie ich sie per USB anschließe. Wenn du die Tastatur original belässt und Sie nur an USB adaptieren willst ist doch o.k. Mir geht es darum dieses Teil nicht als Schrott zu sehen, wie es sehr viele machen!
Na dann: -eine Buchse für den Klinkenstecker -ein 5 zu 12V DCDC Wandler -ein 270Ω R und ein 4,7µ C und evtl. eine 3V3 Z Diode -ein BluePill Board Der Rest ist Software.
Gregor N. schrieb: > An AIN0 liegt durch den Spannungsteiler aus 22k und 18k normalerweise > 2,25V an. An AIN1 liegt durch den Spannungsteiler aus 22k und 22k > normalerweise 2,5V an. Das heißt Spannung an AIN1 ist 0,25 V größer als > AIN0. Die Tastatur zieht AIN1 auf Masse, dadurch wird AIN1 kurzzeitig > bis zu 2,25V kleiner als AIN0. Das dreht den Logikpegel um. So isses. > Woher weiß ich, wie > die Spannungsteiler dimensioniert werden? Die Spannungsverhältnisse entstammen der Originalschaltung, die absoluten Werte des Spannungsteilers hinter dem Kondensator ergaben sich dadurch, dass ich versucht habe, die Zeitkonstante des Diffenziergliedes des Originals beizubehalten (in der gut begründeten Annahme, dass die Entwickler sich damals etwas dabei gedacht haben). Um das zu verstehen, muss man wissen: AC-mäßig verhalten sich die beiden Widerstände dieses Spannungsteilers wie eine Parallelschaltung (weil sie über + und - der 5V-Versorgung praktisch kurzgeschlossen sind), haben also zusammen 11kOhm (10kOhm waren's im Original). Die Werte des anderen Spannungsteilers sind dann wiederum so gewählt, dass möglichst schon in der Schaltung benutzte Widerstandswerte verwendet werden, sich aber in etwa die Spannungsverhältnisse der Originalschaltung ergeben. D.h.: Referenz gut 0,2V unter "Neutrallage" des Signals. > Und wozu ist eigentlich der > 4.7µ-Kondensator da? Glättet der nicht die bursts weg? Genau. Der ist der eigentliche Trick der Originalschaltung. Primär hält er die DC-Komponente des zu messenden Signals (immer so ungefähr +12V) vom Messeingang fern. Sekundär bildet er zusammen mit dem 10k-Widerstand der Originalschaltung eine Zeitkonstante, die als Tiefpass (wenn auch nur erster Ordnung) wirkt. Damit werden die für Digitalschaltungen typischen kurzen Spikes mit der Betriebsfrequenz etwas weggedämpft. Insgesamt erleichtert es also dieser Tiefpass, das Nutzsignal (also die gewollte Modulation der Stromaufnahme) von der unvermeidlichen Modulation durch den normalen Betrieb des U807 zu trennen.
Gregor N. schrieb: > 1. Hauruckmethode: Nein, das hast du nicht richtig verstanden. Die 1. Methode wäre, das zweipolige Anschlußkabel gegen ein dreipoliges Kabel zu ersetzen, wobei die dritte Leitung an die Ausgänge der zwei UND-Gatter gelegt wird - allenfalls über einen einfachen Spannungsteiler. Sowas geht mit einem einfachen Stereo-Kabel. Damit hätte man schon mal einen µC-gerechten Spannungspegel des auszuwertenden Signals. Den Rest kann dann tatsächlich der µC per Software erledigen. W.S.
W.S. schrieb: > Nein, das hast du nicht richtig verstanden. Die 1. Methode wäre, das > zweipolige Anschlußkabel gegen ein dreipoliges Kabel zu ersetzen, wobei > die dritte Leitung an die Ausgänge der zwei UND-Gatter gelegt wird - > allenfalls über einen einfachen Spannungsteiler. Sowas geht mit einem > einfachen Stereo-Kabel. Diese Möglichkeit hatte ich tatsächlich nicht richtig verstanden, ich hatte mich mit Option 1 auf folgenden Kommentar bezogen: Mario M. schrieb: > U807 entfernen und durch Controller mit USB (z.B. ATMega32U4) ersetzen?
Tatsächlich habe ich gerade die vorgeschlagene Schaltung von c-hater nachgebaut, an den Komparator von einem einen Arduino Uno (ATmega 328P) gehängt, per Zeitmessung zwischen Interrupts das Signal ausgewertet...und es funktioniert! Unglaublich, ganz herzlichen Dank bis hierhin! Ok, es funktioniert fast. Das Signal ist nicht sauber. Es funktioniert gut, wenn ich die Tasten gedrückt halte. Bei einfachen Anschlägen entsteht aber meistens Datenmüll. Mal längere, mal sehr kurze Impulsabstände gemischt mit den im Handbuch beschriebenen Abständen. Ich kann versuchen, das per Software zu optimieren. Aber vielleicht liegt das auch an der Schaltung? Und einige Tasten gehen leider gar nicht, z.B. die Entertaste.
Gregor N. schrieb: > Es funktioniert > gut, wenn ich die Tasten gedrückt halte. Also dann, wenn "das System" eingeschwungen ist. > Bei einfachen Anschlägen > entsteht aber meistens Datenmüll. Mal längere, mal sehr kurze > Impulsabstände gemischt mit den im Handbuch beschriebenen Abständen. > Ich kann versuchen, das per Software zu optimieren. Aber vielleicht > liegt das auch an der Schaltung? Da hilft ein Oszilloskop, um sich das resultierende Signal genauer anzuschauen. Im Handbuch steht ja was von 5 und 7 ms für '0' und '1'. Da würde ich die Unterscheidung bei 6 ms machen. Testweise kann man auch den Koppel-Kondensator mal auf 2,2µF verkleinern. > Und einige Tasten gehen leider gar nicht, z.B. die Entertaste. http://www.robotrontechnik.de/html/forum/thwb/showtopic.php?threadid=13059
Tim schrieb: > Da hilft ein Oszilloskop, um sich das resultierende Signal genauer > anzuschauen. Ich habe leider kein Oszilloskop, das steht noch ganz oben auf meiner Wunschliste. Mit dem Arduino kann ich aber die Mikrosekunden zwischen den Impulsen messen, das sieht zum Beispiel bei Taste "m" so aus:
1 | 7552 7552 7552 7552 5396 5396 7552 19444 |
2 | 628 60648 316 216 216 216 224 208 |
3 | 216 216 216 216 216 216 216 240 |
4 | 248 228 220 216 216 224 208 |
Die erste Zeile entspricht 1111001, beendet durch einen Doppelwortabstand von ca. 19,4ms. Das Bit ganz links ist das Bit für die Shift-Taste (Startbit). Den Rest muss man umdrehen, dann entspricht es der IBUS-Code-Nr. im Handbuch. Sprich: Startbit == 1, IBUS-Nummer = 100111 = 39. Danach kommt Müll. Manchmal fehlt aber auch das erste Bit, zum Beispiel bei der Leertaste:
1 | 7548 7552 5392 5392 5392 7548 19564 |
2 | 320 216 60380 |
3 | 312 220 220 212 216 216 216 216 |
4 | 216 220 216 216 236 244 216 220 |
5 | 216 216 216 216 |
Als erstes Bit hätte hier laut Handbuch eine 0 stehen müssen. Hält man die Leertaste gedrückt, wird es eindeutiger:
1 | 7544 7548 5392 5388 5392 7548 15092 |
2 | 7548 7548 7544 5392 5392 5388 7544 15096 |
3 | 7548 7544 7548 5392 5388 5392 7544 15096 |
4 | 7548 7544 7548 5388 5392 5388 7548 15096 |
5 | 7544 7544 7548 5392 5388 5392 7548 15092 |
6 | 7548 7544 7548 22892 |
7 | 320 68412 |
8 | 296 216 216 216 224 208 220 216 |
9 | 216 216 216 216 220 252 236 204 |
10 | 216 220 216 316 |
In der ersten Zeile fehlt wieder das erste Bit, eine 0. Danach wird vier Mal (bis man loslässt) ein vollständiges Wort gesendet, allerdings mit dem falschen Startbit, aber vielleicht ist da ja auch ein Fehler im Handbuch. Danach kommt wieder Müll. Bei anderen Tasten kommt das erste Bit mal mit, mal nicht, je nach Laune. Ich werde mal probieren, den Elko zu tauschen.
Gregor N. schrieb: > Danach kommt Müll. Sollte eigentlich nicht sein, wenn auf der Leitung tatsächlich Ruhe ist. Vielleicht statt der Widerstände an Ain0 ein Poti (ca. 47k) einbauen. Am Mittelabgriff kommt Ain0 und an die Enden jeweils +5V und GND. Dann solange von der Mittelstellung wegdrehen (ggf. beide Richtungen probieren), bis das "Rauschen" aufhört, aber der Empfang von Bits noch läuft... > Ich werde mal probieren, den Elko zu tauschen. Ja, sieht so aus, als wenn der das erste Bit verschluckt...
Ich habe verschiedenes versucht: den Elko gegen 2,2µF getauscht, die beiden Spannungsteiler mit Potis gebaut (hatte keine 47k, habe 22k und 100k probiert). Ja, das Signal lässt sich verändern. Aber sauber wird es nicht und ich kann nicht sagen, dass man es dadurch verbessern kann. Ich vermute fast, dass das im Original auch so war und per Software abgefangen wurde. Mit mehrfachem Debouncing per Software (und Invertierung des Startbits) lässt sich die Tastatur zum Schreiben benutzen. Das fühlt sich extrem lahm an, aber vielleicht war das einfach nicht anders? Zur Schaltung habe ich noch eine Frage: dieser Koppelkondensator trennt die beiden Stromkreise mit ihren unterschiedlichen Spannungsversorgungen, so dass sie sich gegenseitig nicht (zer)stören können, richtig? Ist das eine Technik, die für beliebige Messungen verwendet werden kann? Also zum Beispiel, um analoge Audiosignale mitzuschneiden oder um das digitale Signal in einer Heizungsanlage (Bus-System) mitzulesen? Ich werde noch etwas an der Software optimieren. Und mir ein Oszilloskop zulegen. Eigentlich ein anderes Thema aber vielleicht habt ihr eine ganz kurze Einschätzung zu folgendem Gerät: Rigol DS1054Z. Ist das zu teuer für den Einstieg?
Gregor N. schrieb: > Ich habe leider kein Oszilloskop, das steht noch ganz oben auf meiner > Wunschliste. Mit dem Arduino kann ich aber die Mikrosekunden zwischen > den Impulsen messen, das sieht zum Beispiel bei Taste "m" so aus: > >
1 | > 7552 7552 7552 7552 5396 5396 7552 19444 |
2 | > 628 60648 316 216 216 216 224 208 |
3 | > 216 216 216 216 216 216 216 240 |
4 | > 248 228 220 216 216 224 208 |
5 | >
|
Das ist doch schon fast so gut wie ein Oszi.
Was das Rauschen betrifft: Rechne einfach mal aus, welcher Frequenz dein
Messwert "216" entspricht. Dann überlege, wo diese Frequenz herstammen
kann. Im Prinzip sehe ich nur zwei Möglichkeiten, entweder ist es die
Betriebsfrequenz des U807 oder Ripple auf der 12V-Spannung
(Schaltwandler).
Was auch immer: der Wert ist weit weg von den Werten des Nutzsignals und
wesentlich kürzer, das Zeug kann also sehr leicht und ohne Nachteile für
die Benutzbarkeit der Sache per Software ausgefiltert werden. Dass das
nötig sein würde, ergibt sich schon aus der Originalschaltung. Da ist
nämlich auch noch was zwischen dem OV und der eigentlichen
Rechentechnik, dessen Funktion musst du natürlich in Software
nachbilden...
> Manchmal fehlt aber auch das erste Bit, zum Beispiel bei der Leertaste:
Bei dieser Sache tippe ich mal ganz stark auf einen Fehler in deiner
Auswertesoftware und wage folgende Prophezeiung: nachdem du o.g. Filter
implementiert hast, wirst du (fast) durchgängig das Phänomen haben, dass
das Startbit beim ersten Tastendruck fehlt und für die restlichen Fälle
wirst du einen scheinbar willkürlichen Messwert haben...
Die Störungen werden durch das Umladen des Elkos entstehen. Auch nimmt man statt eines Komparators eher einen Schmitt-Trigger. Ich habe mal Pulse mit einem 74HC14 regeneriert. Der Spannungsteiler legt den Eingang auf die Mitte zwischen den Schwellen. Der Koppelkondensator wird so klein gewählt, daß er aus den Flanken nur kurzen Nadeln macht.
c-hater schrieb: > Da ist > nämlich auch noch was zwischen dem OV und der eigentlichen > Rechentechnik, dessen Funktion musst du natürlich in Software > nachbilden... Ich verstehe leider noch nicht, was der Rest der Schaltung macht...auch weil ich über die Bauteilnummern nicht so recht was finde. Aber per Software funktioniert es mittlerweile ganz gut und ich bin kurz davor, mir ein Oszilloskop zu kaufen, um dem Signal weiter auf den Grund zu gehen. > wage folgende Prophezeiung: nachdem du o.g. Filter > implementiert hast, wirst du (fast) durchgängig das Phänomen haben, dass > das Startbit beim ersten Tastendruck fehlt und für die restlichen Fälle > wirst du einen scheinbar willkürlichen Messwert haben... Interessante Prognose...aber warum? Die Schaltung (das meinst Du mit Filter, nehme ich an) sollte doch im Orginal funktioniert haben? Die Auswerteroutine ist tatsächlich noch nicht so ganz gut. Anscheinend verbraucht die Ausgabe auf dem Serial Monitor hin und wieder trotz hoher Baudrate so viel Zeit, dass Impulse übersprungen werden...was ich erst jetzt feststelle. Das hat bislang nicht gestört, da es eine Art unfreiwilliges Debouncing war.
Gregor N. schrieb: > Ich verstehe leider noch nicht, was der Rest der Schaltung macht...auch > weil ich über die Bauteilnummern nicht so recht was finde. Das ist im Kern ein Monoflop. Also ein digitaler Tiefpass einfachster denkbarer Bauart. Der macht genau das, was ich dir empfohlen habe: einfach stumpf alles ausfiltern, was wesentlich kürzer ist, als das, was du erwartest. In Software kann man das eleganter umsetzen, als es diese primitive Schaltung zu leisten vermag, denn die ist "polaritäts-sensitiv". In Software kannst du dasselbe Verhalten leicht auch unipolar herstellen. Eine Hardwareschaltung dafür ist auch möglich, wäre aber deutlich aufwendiger als die Originalvorlage. Deswegen wurde wohl damals darauf verzichtet, auch deshalb, weil es schlicht nicht nötig war. In Software kann man sich diesen Luxus aber locker leisten, denn er kostet nicht einen Takt Rechenzeit mehr als die "polaritäts-sensitive" Variante. Jedenfalls nicht auf einem AVR8... > Interessante Prognose...aber warum? Weil ich ein erfahrener Programmierer bin und deswegen wahrscheinlich schon 99,9% aller denkbaren blöden Fehler selber schon mindestens einmal gemacht (und behoben) habe. Z.B. eben auch den, den du sehr wahrscheinlich gemacht hast (weil er das aufgezeichnete Verhalten perfekt erklären könnte...)
c-hater schrieb: > Z.B. eben auch den, den du sehr > wahrscheinlich gemacht hast (weil er das aufgezeichnete Verhalten > perfekt erklären könnte...) Na dann hier mal mein aktueller Code. Ich habe lediglich ein paar debug-Definitionen entfernt, unübersichtlich ist es trotzdem noch. Der Filter ist direkt unterhalb des Kommentars "Frequenzen ausfiltern" zu finden. Ich hatte diese Bedingung erst nicht drin, sondern nur die untere Grenze über TIME_ZERO ausgewertet. So ist es aber besser. Wo hat oder hätte sich dort ein Fehler eingeschlichen?
1 | /*
|
2 | |
3 | KC85 Keyboard
|
4 | |
5 | */
|
6 | |
7 | // Times
|
8 | #define TIME_MINIMUM 1000
|
9 | #define TIME_ZERO 4500 //tD0 = 5 tu = 5,12 ms Pulsabstand für lohgische Null
|
10 | #define TIME_ONE 6500 //tD1 = 7 tu = 7,168 ms Pulsabstand für lohgische Eins
|
11 | #define TIME_WORD 13500 //tDW = 14 tu = 14,336 ms Wortabstand
|
12 | #define TIME_DOUBLEWORD 18500 //tDS = 13 tu = 19,456 ms Doppelwortabstand
|
13 | #define TIME_MAXIMUM 70000
|
14 | |
15 | |
16 | // Char mappings
|
17 | char* keychars_bit0[]= {"W", "A", "2", " ", "HOME", "-", "F2", "Y", "E", "S", "3", " ", "CLR (BS)", ":", "F3", "X", "T", "F", "5", "P", "DEL", "0", "F5", "V", "U", "H", "7", "O", "INS", "9", "BRK", "N", "I", "J", "8", "SPACE", "K", ",", "STOP", "M", "Z", "G", "6", "nicht belegt", "L", ".", "F6", "B", "R", "D", "4", "_", "+", "/", "F4", "C", "Q", "SHIFT LOCK", "1", "", "", "", "F1", "", ""}; |
18 | char* keychars_bit1[]= {"w", "a", '"', " ", "CLS", "=", "F8", "y", "e", "s", " ", "(NEG)", "(HCOPY)", "*", "F9", "x", "t", "f", "%", "p", "(CLEAR LINE)", " ", "FB", "v", "u", "h", "'", "o", "INS", ")", "BRK", "n", "i", "j", "(", "NEG SPACE", "k", " ", "STOP", "m", "z", "g", "&", "", "l", "", "FC", "b", "r", "d", " ", "Ö", ";", "?", "FA", "c", "q", "SHIFT LOCK", "!", "SCROLL", "PAGE", "CONT", "F7", "ENTER", ""}; |
19 | |
20 | // States
|
21 | volatile boolean triggered; |
22 | volatile boolean rising; |
23 | volatile byte acsr_value; |
24 | |
25 | boolean key_hold = false; |
26 | boolean key_pressed = false; |
27 | |
28 | unsigned long last_charout = 0; |
29 | |
30 | unsigned long last_time = 0; |
31 | unsigned long current_time= 0; |
32 | unsigned long signal_time= 0; |
33 | unsigned long signal_count = 0; |
34 | |
35 | // Buffer
|
36 | byte keybuffer = 0; |
37 | byte keylast = 0; |
38 | |
39 | //ISR routine
|
40 | ISR (ANALOG_COMP_vect) { |
41 | // Ignore the interrupt if we haven't reported the last one yet (debounce)
|
42 | if (triggered) |
43 | return; |
44 | |
45 | cli(); |
46 | acsr_value = ACSR; |
47 | rising = (acsr_value & bit(ACO)) > 0; |
48 | triggered = true; |
49 | sei(); |
50 | }
|
51 | |
52 | void setup() { |
53 | Serial.begin (115200); |
54 | Serial.println ("Started."); |
55 | |
56 | ADCSRB = ADCSRB & ! bit(ACME); // disable Analog Comparator Multiplexer Enable |
57 | ACSR = bit(ACI) // clear Analog Comparator Interrupt Flag |
58 | | bit(ACIE) // set Analog Comparator Interrupt Enable |
59 | | bit(ACIS1) | bit(ACIS0) // select rising edge: ACIS1/ACIS0 Analog Comparator Interrupt Mode Select |
60 | ;
|
61 | }
|
62 | |
63 | void loop() { |
64 | if (triggered) |
65 | read_signal(); |
66 | |
67 | if (key_pressed | key_hold) { |
68 | showKeyNumber(); |
69 | }
|
70 | |
71 | key_pressed = false; |
72 | key_hold = false; |
73 | triggered = false; |
74 | }
|
75 | |
76 | |
77 | void read_signal() { |
78 | static byte blockcount = 0; |
79 | |
80 | current_time = micros(); |
81 | signal_time = current_time - last_time; |
82 | |
83 | // Frequenzen ausfiltern
|
84 | if ((signal_time < TIME_MINIMUM)) { |
85 | return false; |
86 | } else { |
87 | last_time = current_time; |
88 | }
|
89 | |
90 | if (signal_time > TIME_MAXIMUM) |
91 | Serial.println("\n\n----------\n"); |
92 | |
93 | if ((signal_time < TIME_ZERO)) { |
94 | resetBuffer(); |
95 | Serial.print(signal_time); |
96 | }
|
97 | |
98 | else if ((signal_time > TIME_MAXIMUM)) { |
99 | resetBuffer(); |
100 | Serial.print(signal_time); |
101 | blockcount = 8; |
102 | }
|
103 | |
104 | else if ((signal_time > TIME_DOUBLEWORD) ) { |
105 | key_pressed = ( signal_count == 7); |
106 | finishBuffer(); |
107 | |
108 | Serial.print(signal_time); |
109 | Serial.print(" [D] "); |
110 | blockcount = 8; |
111 | }
|
112 | else if ((signal_time > TIME_WORD) ) { |
113 | key_hold = (signal_count == 7); |
114 | finishBuffer(); |
115 | |
116 | Serial.print(signal_time); |
117 | Serial.print(" [W] "); |
118 | blockcount = 8; |
119 | }
|
120 | else if (signal_time > TIME_ONE) { |
121 | addBuffer(1); |
122 | |
123 | Serial.print(signal_time); |
124 | Serial.print(" [1] "); |
125 | }
|
126 | else if (signal_time > TIME_ZERO) { |
127 | addBuffer(0); |
128 | |
129 | Serial.print(signal_time); |
130 | Serial.print(" [0] "); |
131 | |
132 | } else { |
133 | Serial.print(signal_time); |
134 | }
|
135 | |
136 | blockcount+= 1; |
137 | if (blockcount >= 8) { |
138 | Serial.println(); |
139 | blockcount = 0; |
140 | } else { |
141 | Serial.print(" "); |
142 | }
|
143 | |
144 | }
|
145 | |
146 | void addBuffer(byte state) { |
147 | keybuffer = keybuffer >> 1; //Platz machen für neues Bit |
148 | keybuffer = keybuffer | (state << 6); //Neues Bit an Position 7 setzen |
149 | signal_count += 1; |
150 | }
|
151 | |
152 | void finishBuffer() { |
153 | //Startbit invertieren und nach vorne schieben
|
154 | byte startbit = ~(keybuffer & 1) << 7; |
155 | keylast = (keybuffer >> 1) | startbit; |
156 | |
157 | resetBuffer(); |
158 | }
|
159 | |
160 | void resetBuffer() { |
161 | signal_count = 0; |
162 | keybuffer = 0; |
163 | }
|
164 | |
165 | |
166 | // Output decimal number
|
167 | void showKeyNumber() { |
168 | if (key_pressed) |
169 | Serial.print("PRESSED "); |
170 | if (key_hold) |
171 | Serial.print("HOLD "); |
172 | |
173 | Serial.print (keylast); |
174 | |
175 | Serial.print (" "); |
176 | showKeyChar(); |
177 | Serial.println(); |
178 | }
|
179 | |
180 | |
181 | // Output char
|
182 | void showKeyChar() { |
183 | static unsigned long time_char_current = 0; |
184 | static unsigned long time_char_last = 0; |
185 | |
186 | static char* keychar; |
187 | |
188 | //Startbit == 1
|
189 | if (keylast >> 7 == 1) |
190 | keychar = keychars_bit1[keylast & ~(1<<7) ]; |
191 | |
192 | //Startbit == 0
|
193 | else
|
194 | keychar = keychars_bit0[keylast & ~(1<<7) ]; |
195 | |
196 | //Debouncing
|
197 | time_char_current = millis(); |
198 | if ((time_char_current - time_char_last) > 80) { |
199 | Serial.print(keychar); |
200 | time_char_last = time_char_current; |
201 | }
|
202 | }
|
Ich kenne diese Tastatur nicht direkt. Aber ich kann mir nicht vorstellen, dass man da so ein kompliziertes Programm braucht. Ich würde mir da erst einmal den Eingang am KC85 ansehen. Speicherplatz war damals sehr knapp.
michael_ schrieb: > Ich kenne diese Tastatur nicht direkt. > Aber ich kann mir nicht vorstellen, dass man da so ein kompliziertes > Programm braucht. Das sieht nur kompliziert aus, weil so viel Output-Code dazwischen liegt. Nimm alles mit "Serial" und was so dazu gehört raus. Dann ist es immer noch nicht besonders elegant, aber es bleibt nur noch übrig:
1 | /*
|
2 | |
3 | KC85 Keyboard
|
4 | |
5 | */
|
6 | |
7 | // Times
|
8 | #define TIME_MINIMUM 1000
|
9 | #define TIME_ZERO 4500 //tD0 = 5 tu = 5,12 ms Pulsabstand für lohgische Null
|
10 | #define TIME_ONE 6500 //tD1 = 7 tu = 7,168 ms Pulsabstand für lohgische Eins
|
11 | #define TIME_WORD 13500 //tDW = 14 tu = 14,336 ms Wortabstand
|
12 | #define TIME_DOUBLEWORD 18500 //tDS = 13 tu = 19,456 ms Doppelwortabstand
|
13 | #define TIME_MAXIMUM 70000
|
14 | |
15 | |
16 | // States
|
17 | volatile boolean triggered; |
18 | |
19 | boolean key_hold = false; |
20 | boolean key_pressed = false; |
21 | |
22 | unsigned long last_time = 0; |
23 | unsigned long current_time= 0; |
24 | unsigned long signal_time= 0; |
25 | unsigned long signal_count = 0; |
26 | |
27 | // Buffer
|
28 | byte keybuffer = 0; |
29 | byte keylast = 0; |
30 | |
31 | //ISR routine
|
32 | ISR (ANALOG_COMP_vect) { |
33 | cli(); |
34 | triggered = true; |
35 | sei(); |
36 | }
|
37 | |
38 | void setup() { |
39 | Serial.begin (115200); |
40 | Serial.println ("Started."); |
41 | |
42 | ADCSRB = ADCSRB & ! bit(ACME); // disable Analog Comparator Multiplexer Enable |
43 | ACSR = bit(ACI) // clear Analog Comparator Interrupt Flag |
44 | | bit(ACIE) // set Analog Comparator Interrupt Enable |
45 | | bit(ACIS1) | bit(ACIS0) // select rising edge: ACIS1/ACIS0 Analog Comparator Interrupt Mode Select |
46 | ;
|
47 | }
|
48 | |
49 | void loop() { |
50 | if (triggered) |
51 | read_signal(); |
52 | |
53 | if (key_pressed | key_hold) |
54 | showKeyNumber(); |
55 | |
56 | key_pressed = false; |
57 | key_hold = false; |
58 | triggered = false; |
59 | }
|
60 | |
61 | |
62 | void read_signal() { |
63 | current_time = micros(); |
64 | signal_time = current_time - last_time; |
65 | |
66 | // Frequenzen ausfiltern
|
67 | if ((signal_time < TIME_MINIMUM)) |
68 | return false; |
69 | else
|
70 | last_time = current_time; |
71 | |
72 | if ((signal_time < TIME_ZERO) | (signal_time > TIME_MAXIMUM)) |
73 | resetBuffer(); |
74 | |
75 | else if ((signal_time > TIME_DOUBLEWORD) ) { |
76 | key_pressed = ( signal_count == 7); |
77 | finishBuffer(); |
78 | }
|
79 | else if ((signal_time > TIME_WORD) ) { |
80 | key_hold = (signal_count == 7); |
81 | finishBuffer(); |
82 | }
|
83 | else if (signal_time > TIME_ONE) |
84 | addBuffer(1); |
85 | |
86 | else if (signal_time > TIME_ZERO) |
87 | addBuffer(0); |
88 | }
|
89 | |
90 | void addBuffer(byte state) { |
91 | keybuffer = keybuffer >> 1; //Platz machen für neues Bit |
92 | keybuffer = keybuffer | (state << 6); //Neues Bit an Position 7 setzen |
93 | signal_count += 1; |
94 | }
|
95 | |
96 | void finishBuffer() { |
97 | //Startbit invertieren und nach vorne schieben
|
98 | byte startbit = ~(keybuffer & 1) << 7; |
99 | keylast = (keybuffer >> 1) | startbit; |
100 | |
101 | resetBuffer(); |
102 | }
|
103 | |
104 | void resetBuffer() { |
105 | signal_count = 0; |
106 | keybuffer = 0; |
107 | }
|
108 | |
109 | |
110 | // Output decimal number
|
111 | void showKeyNumber() { |
112 | if (key_pressed) |
113 | Serial.print("PRESSED "); |
114 | if (key_hold) |
115 | Serial.print("HOLD "); |
116 | |
117 | Serial.println (keylast); |
118 | }
|
michael_ schrieb: > Was sagt eigentlich der Assembler-Code des KC-85? Hui, muss ich erstmal lesen lernen. Nach dem ersten Überfliegen sieht es ganz ähnlich aus wie mein Programm. Das Rückwärtszählen der Takte finde ich sehr elegant.
W.S. schrieb: > Nein, das hast du nicht richtig verstanden. Die 1. Methode wäre, das > zweipolige Anschlußkabel gegen ein dreipoliges Kabel zu ersetzen, wobei > die dritte Leitung an die Ausgänge der zwei UND-Gatter gelegt wird - > allenfalls über einen einfachen Spannungsteiler. Sowas geht mit einem > einfachen Stereo-Kabel. Da muss ich jetzt noch einmal nachhaken: was machen diese beiden UND-Gatter denn da überhaupt? Die sehen so überflüssig aus. Beide Eingänge sind kurzgeschlossen, das ergibt doch gar keinen Sinn?
michael_ schrieb: > Aber ich kann mir nicht vorstellen, dass man da so ein kompliziertes > Programm braucht Die Fernbedienungscodes in passende Scancodes einer IBM Tastatur mit völlig anderem Layout umzuwandeln wird beliebig komplex. Beide Tastaturen senden schliesslich KEIN ASCII.
Trommelwirbel.....mein Oszilloskop ist angekommen. Tastatur wie im Handbuch beschrieben über 270 Ohm an 12 Volt angeschlossen, Tastkopf zwischen Widerstand und Tastatur gesetzt. Hier die ersten Aufnahmen. Erkenntnisse: - Der Spannungspegel liegt zwischen ca. 9,7 und 10,4 Volt (die dicken Linien). Das ist aber nicht immer gleich und sinkt auch mal auf 9,5 zu 10,2 Volt ab. - Das Signal ist durch Abfall der Spannung um ca. 0,5 Volt aufmoduliert. - Man kann gut den "Wortabstand" zwischen den einzelnen Sendepaketen erkennen. - Print 6: Das Signal besteht wie in der Anleitung beschrieben aus einem Burst mit fünf Tälern (sagt man das so?) - Print 10 zeigt das Signal hinter dem Kondensator in der oben von c-hater beschriebenen Schaltung. Ziemlich verrückt, dass das überhaupt mit dem Arduino auswertbar ist. - Dummerweise funktioniert das erste Bit nicht immer. Man sieht hier denke ich sehr schön, wie es verschollen geht. Nach einem Tastendruck wird der gesamte Pegel erst hochgezogen, aber das erste Bit sendet schon während der Aufwärtsfahrt. Kann man da was machen? Das ist ja eigentlich ein Problem in der Tastatur und wohl kaum durch externe Beschaltung und nur mit sehr trickreicher Software zu bewältigen, oder?
:
Bearbeitet durch User
Hier noch ein Print mit den Signalen an beiden Spannungsteilern (Schaltung von c-hater). Der Bitverlust ist ja noch viel krasser als gedacht: es braucht erst ein komplettes Sendepaket und manchmal mehr, bis die Bursts unter die Triggerspannung fallen. Und das ist auch alles ziemlich rauschig. Muss das so sein?
Kannst Du die Daten von Kanal 1 aus Deinem Oszi exportieren (Format: csv, xls o.ä) und hier einstellen? Dann könnte man die Simulation damit füttern und nach einem geeigneten Hochpass suchen.
Tim schrieb: > Kannst Du die Daten von Kanal 1 aus Deinem Oszi exportieren (Format: > csv, xls o.ä) und hier einstellen? > Dann könnte man die Simulation damit füttern und nach einem geeigneten > Hochpass suchen. Interessant, das geht? Mit welchem Programm macht man das? Anbei die Daten auf dem Bild als csv-Datei, dazu noch die Einstellungen des Scopes in der txt-Datei. Sind das die Daten, die man für eine Simulation braucht? Ich kann sonst auch trc- oder wfm-Dateien exportieren. Bei den Dateien mit Kennzeichnung "precap" hängt das Scope vor dem Koppelkondensator (4.7µ), bei den anderen Dateien hinter dem Kondensator. Das Signal wird beim kurzen Drücken der Leertaste erzeugt. Zu sehen sind zwei Pakete mit sieben Bit, getrennt durch Wortabstand. Wenn man die Taste gedrückt hält, wird die Bitfolge auf dem oberen Spannungsneiveau fortlaufend weitergesendet.
:
Bearbeitet durch User
Du bist also zu doof, mit einem einfachen Komparator die Impulse da herausfischen. Und ohne Fremderleuchtung wird das mit USB wohl auch nix.
Miss doch mal ganz ohne Auswerteschaltung. Meine Vermutung ist, dass der gezeigte Spannungssprung erst durch die Auswerteschaltung verursacht wird (Klemmdioden?). Sonst müsste die Tastatur ihre Stromaufnahme zu Beginn der Datenübertragung um mehr als 3 mA senken, wofür ich in deren Schaltplan keinen Grund erkennen kann. Du bist ja nicht der Erste, der sich an der KC85-Tastatur versucht. Z.B. habe ich obige Grafik gefunden und da ist eine glatte Linie bei 9V mit 0,5V-Impulsen nach unten zu sehen.
Mario M. schrieb: > Miss doch mal ganz ohne Auswerteschaltung. Habe ich als allererstes getan. Ohne Auswerteschaltung -> die obigen Messungen und Bilder mit Sprung, aber geradem Spannungsniveau. Ich werde noch einmal komplett neu aufbauen, mit anderer Spannungsversorgung. Wüsste aber nicht, was das ändern kann. > Z.B. habe ich obige Grafik gefunden > und da ist eine glatte Linie bei 9V mit 0,5V-Impulsen nach unten zu > sehen. Danke für den Tipp. Die habe ich auch gefunden. Vielleicht ist meine Tastatur ja auch kaputt. Ein paar Tasten gehen wie gesagt gar nicht, ein Pin des Controllers ist tot. --- schrieb: > zu doof [...] > ohne Fremderleuchtung Interessant, wie einige Menschen glauben, das Wissen sei von allein in sie hinein gepurzelt. Du müsstest ja alles, was Du kannst, ganz allein erfinden. Keine Schule, keine Bücher, kein Internet, keine Familie, keine Freunde. Realistischer ist doch, dass wir alle das Produkt unseres Umfelds sind. Ich wünsche Dir ein freundlicheres Umfeld. You made my day.
Mario M. schrieb: > Miss doch mal ganz ohne Auswerteschaltung. Das ist ganz sicher eine gute Idee im Sinne der klassischen Fehlersuche: man versucht, mögliche Störeinflüsse zu eleminieren. > Meine Vermutung ist, dass der > gezeigte Spannungssprung erst durch die Auswerteschaltung verursacht > wird (Klemmdioden?). Das allerdings halte ich doch für eher unwahrscheinlich. Die verwendete Auswerteschaltung war doch im Thread enthalten. Keine Dioden als reale Bauelemente drin. Kämen also höchstens noch die Substratdioden der AVR-Eingänge in Frage. Aber noch nicht bei den Spannungen, die sich aus dem Oszibildern ablesen lassen. Also: nein, nix Dioden-Einflüsse. Ich würde mal sagen: die Tastatur ist schlicht und einfach defekt. > Sonst müsste die Tastatur ihre Stromaufnahme zu > Beginn der Datenübertragung um mehr als 3 mA senken, wofür ich in deren > Schaltplan keinen Grund erkennen kann. Ganz genau so ist das. Würde sie normal funktionieren, gäbe es diesen Puls nicht. Wahrscheinlich war sie deshalb so günstig bei ePay...
c-hater schrieb: >> Sonst müsste die Tastatur ihre Stromaufnahme zu >> Beginn der Datenübertragung um mehr als 3 mA senken, wofür ich in deren >> Schaltplan keinen Grund erkennen kann. > > Ganz genau so ist das. Würde sie normal funktionieren, gäbe es diesen > Puls nicht. Wahrscheinlich war sie deshalb so günstig bei ePay... Von wegen günstig...5 Euro. Nicht bei eBay, sondern aus einem total verrückten Trödelladen, eine Halle mit unglaublich viel unsortiertem Kram. Ok, ich gehe nun davon aus, dass sie kaputt ist und werde den kompletten Controller rauswerfen, durch einen ATmega328 ersetzen und mit V-USB die USB-Verbindung bauen. Bis hierhin habe ich schon unglaublich viel gelernt und bin in mir vorher verschlossene Welten eingetreten. Herzlichen Dank soweit, ganz besonders an c-hater, Tim und Mario M. Jetzt habe ich hoffentlich niemanden vergessen.
Gregor N. schrieb: > Von wegen günstig...5 Euro. Wenn ich diese utopischen 5 Euro dafür ausgegeben hätte, würde ich nicht eher ruhen, bis ich entweder ein Lösung dafür gefunden hätte, dieses halbkaputte Stück Hardware doch noch irgendwie sinnvoll benutzen zu können oder besser: bis ich es repariert hätte. Das wäre für mich eine reine Frage der Ehre. Also völlig jenseits von Sinn und Verstand und wirtschaftlichen Erwägungen... Zum Glück habe nicht ich es gekauft. ;o)
Gregor N. schrieb: > Bei den Dateien mit Kennzeichnung "precap" hängt das Scope vor dem > Koppelkondensator (4.7µ), bei den anderen Dateien hinter dem > Kondensator. Ich hab jetzt nur die Daten vor dem Kondensator genommen. Mit einem Pythonskript waren die schnell ins PWL-Format für LTSpice gewandelt (alles oben als Anhang). In der Simulation bildet C1 mit R2||R3 einen Hochpass mit einer Grenzfrequenz von 3 Hz. Wenn C1 auf 47n reduziert wird, erhöht sich die Grenzfrequnz auf 300 Hz. Damit sieht das Signal für den Komparator doch schon ganz brauchbar aus... Wegen dem defekten Chip würde ich mal im richtigen Forum nachfragen: http://robotrontechnik.de/html/forum/thwb/index.php
Gregor N. schrieb: > Ok, ich gehe nun davon aus, dass sie kaputt ist und werde den kompletten > Controller rauswerfen Das ist sehr unwahrscheinlich. Ein kaputter U807 würde schlicht gar nichts tun. Die Tastatur sendet ja aber. Alle anderen Bauteile in der Tastatur wären problemlos ersetzbar (falls defekt). Mal ne verrückte Idee: man könnte eine IR-LED an den Ausgang des U807 hängen (ok ich sags extra dazu: mit einem Treibertransistor natürlich) und die Tastatur so als IR-Fernbedienung betreiben. Ein TSOP34136 (31236, 1836, ... einer für 36kHz halt) als IR-Empfänger. Und schon hat man saubere Impulse für einen µC. Im Anhang die empfohlene Beschaltung des U807 als IR-Sender. > durch einen ATmega328 ersetzen und mit V-USB die USB-Verbindung bauen. Frevel. Das ist etwa so als würdest du einen handgepflegten Oldtimer kaufen und dann den Motor rauswerfen und durch einen aktuellen ersetzen.
:
Bearbeitet durch User
Axel S. schrieb: > Ein kaputter U807 würde schlicht gar > nichts tun. Es ist zwar ein Digital-IC, aber zwischen funktionierend und kaputt gibt es trotzdem Abstufungen. Zum Beispiel: Gregor N. schrieb: > ein > Pin des Controllers ist tot. Axel S. schrieb: > einer für 36kHz halt) als IR-Empfänger Original sendet die Tastatur mit 31kHz und 5 Impulsen pro Burst, also müsste man einen passenden Empfänger nehmen oder den Taktgeber umbauen. Außerdem brauchen die TSOP mindestens 6 Impulse. Ich weiß nicht, ob es IR-Empfänger gibt, die mit weniger funktionieren. Axel S. schrieb: > Frevel. Das ist etwa so als würdest du einen handgepflegten Oldtimer > kaufen und dann den Motor rauswerfen und durch einen aktuellen ersetzen. Andere würden es einen Hot Rod nennen. ;-)
Axel S. schrieb: > Frevel. Das ist etwa so als würdest du... ...naja, ganz so schlimm ist das auch nicht. Ich hatte vor lange Zeit mal eine IR-Fernbedienung auf ähnliche Weise umgebaut, nämlich für einen DVD-Player, dessen FB verloren war. Den ursprünglichen Chip raus, dafür einen PIC16F870 (oder so) rücklings reingeklebt, dann alles mit feinem CuL Draht verstrippt. Aber so eine Tastatur zur IR-Tastatur umzubauen, halte ich für kontraproduktiv. Dann eher schon ein dreipoliges Kabel oder eben einen mechanisch kleinen µC zum Umsetzen auf USB hinein. W.S.
Mario M. schrieb: > und 5 Impulsen pro Burst Ups, falsches Datenblatt. Es sind doch 6 Impulse, dann passt es zu den TSOP.
Axel S. schrieb: > Mal ne verrückte Idee: man könnte eine IR-LED an den Ausgang des U807 > hängen (ok ich sags extra dazu: mit einem Treibertransistor natürlich) > und die Tastatur so als IR-Fernbedienung betreiben. Ein TSOP34136 > (31236, 1836, ... einer für 36kHz halt) als IR-Empfänger. Und schon hat > man saubere Impulse für einen µC. > > Im Anhang die empfohlene Beschaltung des U807 als IR-Sender. Könnte man da nicht auch einen Optokoppler mit Hysterese nehmen? Ich habe hier zum Beispiel einen H11L1M rumzuliegen. Mario M. schrieb: > Mario M. schrieb: >> und 5 Impulsen pro Burst > > Ups, falsches Datenblatt. Es sind doch 6 Impulse, dann passt es zu den > TSOP. Es sind gemessen 5 Impulse mit eine Periode von 34μs bzw. 29,4 kHz, siehe oben der Output vom Oszilloskop: https://www.mikrocontroller.net/attachment/375029/DS1Z_QuickPrint6.png Es scheint mir mit der IR-Idee dann doch etwas komplizierter zu werden.
:
Bearbeitet durch User
Gregor N. schrieb: > Es sind gemessen 5 Impulse Stimmt. Das scheint von der Beschaltung der Mode-Eingänge abhängig zu sein.
Tim schrieb: > Mit einem Pythonskript waren die schnell ins PWL-Format für LTSpice > gewandelt (alles oben als Anhang). Deine LTSpice-Datei hat mir den Weg in diese Richtung gewiesen, vielen Dank! Bis zur Umwandlung zu PWL bin ich sogar schon gekommen, allerdings mit Excel+Texteditor. Auch das Simulieren hatte ich hinbekommen. Beim nächsten Schritt habe ich dann gehangen... > In der Simulation bildet C1 mit R2||R3 einen Hochpass mit einer > Grenzfrequenz von 3 Hz. Wenn C1 auf 47n reduziert wird, erhöht sich die > Grenzfrequnz auf 300 Hz. Damit sieht das Signal für den Komparator doch > schon ganz brauchbar aus... > Perfekt! Ich habe gerade keinen 47nF parat gehabt und bin deshalb mit 68nF eingestiegen, anbei das Bild vom Oszilloskop. Rein theoretisch kann man doch die optimale Grenzfrequenz ausrechnen, oder? Wäre nicht eine Grenzfrequenz optimal, die nur die bursts mit um die 30kHz durchlässt bzw. unter Berücksichtigung des Sampling Theorems davon die Hälfte? Wenn ich es richtig verstanden habe, dann wären das für 15kHz ca. 1nF bei einem Spannungsteiler mit ca. 2 x 10kOhm. Sind denn irgendwelche Nebenwirkungen zu erwarten? Kann man diese Technik eigentlich verallgemeinern und unabhängig von der Spannung der ursprünglichen Schaltung einfach so mit einem beliebigen Kondensator einen Spannungsteiler an einen Mikrocontroller ankoppeln? Fragen über Fragen.
Gregor N. schrieb: > Axel S. schrieb: > >> Mal ne verrückte Idee: man könnte eine IR-LED an den Ausgang des U807 >> hängen (ok ich sags extra dazu: mit einem Treibertransistor natürlich) >> und die Tastatur so als IR-Fernbedienung betreiben. Ein TSOP34136 >> (31236, 1836, ... einer für 36kHz halt) als IR-Empfänger. Und schon hat >> man saubere Impulse für einen µC. >> >> Im Anhang die empfohlene Beschaltung des U807 als IR-Sender. > > Könnte man da nicht auch einen Optokoppler mit Hysterese nehmen? Nein. <seufz> sind da irgendwelche Kenntnisse vorhanden? >> Ups, falsches Datenblatt. Es sind doch 6 Impulse, dann passt es zu den >> TSOP. > > Es sind gemessen 5 Impulse mit eine Periode von 34μs bzw. 29,4 kHz ... > Es scheint mir mit der IR-Idee dann doch etwas komplizierter zu werden. Nicht wirklich. Es gibt auch TSOP's für 30kHz. Und so super trennscharf sind die ohnehin nicht. Die 36kHz gelten übrigens für 4MHz Taktfrequenz am U807. Genau sind es 4MHz/112. Wenn die Tastatur bei 30kHz Träger rauskommt, ist die Taktfrequenz offensichtlich niedriger. Was der TSOP auf jeden Fall schon mal macht, ist den Träger zu entfernen. Außerdem kuriert er deine Unfähigkeit, die Impulse von der 12V Schiene auszukoppeln. Zu der Zeit als diese Tastatur designed wurde, war man noch in der Lage, eine solche Auswerteschaltung aufzubauen. Im Gegenteil wäre damals der IR-Empfänger aufwendiger gewesen, weil es die integrierten Empfänger noch nicht gab. Tatsächlich ist die gewählte Schaltungsvariante nur der Nichtverfügbarkeit von Steckverbindern mit mehr als 2 Polen anzulasten. Denn schon ein simpler dreipoliger Stecker hätte es erlaubt, GND, Vcc und Signal separat zu führen.
Gregor N. schrieb: > Sind denn irgendwelche Nebenwirkungen zu erwarten? Eigentlich nicht. Je höher die Grenzfrequenz ist, desto runder werden die Flanken an den Spikes. Irgendwann werden die Spikes dann kleiner und dann reicht es irgendwann nicht mehr für den Komparator. > Kann man diese Technik eigentlich verallgemeinern und unabhängig von der > Spannung der ursprünglichen Schaltung einfach so mit einem beliebigen > Kondensator einen Spannungsteiler an einen Mikrocontroller ankoppeln? Warum nicht? Nur wenn die Werte die Grenzen der Kleinspannung überschreiten, würde ich mir doch ein paar mehr Gedanken machen.
Axel S. schrieb: > Nein. <seufz> sind da irgendwelche Kenntnisse vorhanden? > Außerdem kuriert er deine Unfähigkeit, die Impulse von der > 12V Schiene auszukoppeln. Tja, was soll ich sagen? Ich habe leider in diesen Bereichen kaum Kenntnisse, bin dafür aber umso wissbegieriger. Ich bin übrigens Sozialwissenschaftler.
Gregor N. schrieb: > Ich bin übrigens > Sozialwissenschaftler. Na und? Guck dir mal den Rothammel an. Ist ein dickes Buch über Antennen. Der Autor war auch kein Diplomelektroniker, sondern Soldat, Landwirt, Gastwirt, Postler und so weiter. W.S.
Dup didup dup. Laeuft. Dies ist mein erster Beitrag mit KC85 Tastatur ueber USB. Das beste an der Sache ist, dass es ohne StepUp Wandler geht, die Tastatur haengt direkt an den 5 Volt vom USB Port. Erstaunlich, dieses rauschige Signal mit gerade mal 200mV Hub reicht aus. Mit den Potis und einer Status LED kann man den Abstand prima einstellen. Jetzt muss nur noch der U807 repariert werden. Dann ist es kein Oldtimer, kein Hot Rod, sondern ein Trabi am Abschleppseil.
Axel S. schrieb: > Mal ne verrückte Idee: man könnte eine IR-LED an den Ausgang des U807 > hängen (ok ich sags extra dazu: mit einem Treibertransistor natürlich) > und die Tastatur so als IR-Fernbedienung betreiben. Ein TSOP34136 > (31236, 1836, ... einer für 36kHz halt) als IR-Empfänger. Und schon hat > man saubere Impulse für einen µC. > > Im Anhang die empfohlene Beschaltung des U807 als IR-Sender. Danke für den Schaltplan, gutes Lernmaterial, ich habe wieder das eine und andere mitgenommen. Die Idee finde ich ganz famos - gehe jetzt aber erst einmal den angefangenen Weg weiter...der scheint ebenfalls zum Ziel zu führen.
Gregor N. schrieb: > Jetzt muss nur noch der U807 repariert werden. Dann ist es kein > Oldtimer, kein Hot Rod, sondern ein Trabi am Abschleppseil. Gregor N. schrieb: > Vielleicht ist meine Tastatur ja auch kaputt. Ein paar Tasten > gehen wie gesagt gar nicht, ein Pin des Controllers ist tot. Kannst du dazu mehr sagen? Welcher Pin? Wie festgestellt? Achte auf kalte Lötstellen. Ebenfalls nicht auszuschließen ist eine weggegammelte Leiterbahn. Tastaturen sind typisch widrigen Umgebungsbedingungen ausgesetzt. Schon Handschweiß allein ist erstaunlich aggressiv, da muß noch nicht mal Cola in die Tastatur geflossen sein. Falls es den U807 wirklich gerissen hat und du sonst keinen Ersatz findest, dann melde dich bei mir. Ich schaue dann mal in meinem Fundus.
Mission erfuellt. Nachdem ich den U807 getauscht hatte, ging es immer noch nicht. Letztlich hatte sich zwischen zwei Leiterbahnen unsichtbar leitender Dreck gebildet. Isopropanol und Freikratzen, alles auf Verdacht, waren die Loesung. Tada...ich kann nun aucc 0en und Qs schreiben und habe Cursortasten. Das laeuft alles mit Minimalbeschaltung: wie oben, aber mit zwei 10k Potis und 68nF Koppelkondensator. Dahinter haengt ein Digispark USB Board mit ATtiny85. Herzlichen Dank an alle fuer die grossartige Unterstuetzung.
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.