Forum: Analoge Elektronik und Schaltungstechnik 20 PINs umschalten ?


von Carsten S. (casuda)


Lesenswert?

Hallo Zusammen,

ich versuche mir theoretisch vorzustellen, wie ich mir einen Umschalter 
für 20 PINs gleichzeitig bauen könnte.

Beispiel:

Ich habe 4 Platinen mit jeweils 20 PINs I/O und eine "Steuerplatine" die 
die 20 PINs ebenfalls I/O in Richtung der Platinen 1:1 verbunden werden 
sollen.
Es soll immer nur eine 1:1 Verbindung sein.

Welche IC könnte das am Besten abbilden ?

Danke & Grüße

von Paul Baumann (Gast)


Lesenswert?

Du hast nicht angegeben, was für Pegel da umzuschalten sind. Eventuell
gehen für Deine Aufgabe die Analogschalter CD4051,52,53

http://www.ti.com/litv/schs047g

MfG Paul

von Carsten S. (casuda)


Lesenswert?

Paul Baumann schrieb:
> Du hast nicht angegeben, was für Pegel da umzuschalten sind. Eventuell
> gehen für Deine Aufgabe die Analogschalter CD4051,52,53
>
> http://www.ti.com/litv/schs047g
>
> MfG Paul

Hallo Paul,

nun ich bin nicht so der Elektroniker, sorry, ich denke mit Pegel meinst 
du sicher die Spannung ? Es sind max. 5 V.

Nur das ich mich nochmal richtig ausdrücke. Ich möchte 20 PINs 
gleichzeitig 1:1 Umschalten können.

Und das gerne mit 4 Platinen.

Genau geht es darum eine C64 Tastatur an 4 C64 anzuschliessen.

von Ralf (Gast)


Lesenswert?

Wenn die Signale wirklich I/O sind (bidirektional) und nicht entweder I 
oder O (unidirektional) dann ist ein Analogschalter-IC schon die 
richtige Wahl, denke ich. Wenn du allerdings nur unidirektionale Signale 
hast wäre evtl. ein Bustreiber aus der *24x-Reihe sinnvoller, weil du 
dort dann weniger ICs brauchst.
Also schieb am besten mal eine komplette Liste der Signale her.

Ralf

von Ralf (Gast)


Lesenswert?

Nachtrag: Übrigens ganz ohne ICs würde es gehen wenn du einfach einen 
guten alten mechanischen Parallelport-Switch verwendest ;)

Ralf

von Carsten S. (dg3ycs)


Lesenswert?

Carsten Sulzberger schrieb:
> Nur das ich mich nochmal richtig ausdrücke. Ich möchte 20 PINs
> gleichzeitig 1:1 Umschalten können.
>
> Und das gerne mit 4 Platinen.
>
> Genau geht es darum eine C64 Tastatur an 4 C64 anzuschliessen.

Also die Steuerplatine (Tastatur) immer auf einen einzelnen C64, drei 
C64 bleiben jeweils unbeschaltet - richtig?

Wenn Mechanisch reicht besorg dir bei Ebay o.ä einen alten 1 zu 4 
Druckerumschalter. Soll es Elektronisch sein dann ist ein Multiplexer 
wie der CD 4052 schon eine denkbare Möglichkeit. Brauchst halt 10 davon 
und es ist ein ziemlicher "Drahtverhau".

Etwas eleganter ließe sich das mit Programmierbaren Bausteinen 
erledigen, also µC oder CPLD. Wobei die Bausteine dann aber 5V vertragen 
können müssen was bei den größeren Gehäusen über 40 Pin im Bereich der 
µC schon selten geworden ist und CPLD in 5V Technik ist mittlerweile 
noch exotischer. (Alternativ zu 5V Bauteilen geht auch Pegelwandlung, 
ist aber wieder erheblich mehr Bauteilaufwand)

Zusätzlich muss noch das Programm bzw. die Hardwarebeschreibung erstellt 
werden.

Dafür ließe sich so ein Umschalter mit deutlich einfacherem Layout und 
bei verwendung von 40Pin µC mit drei Bausteinen realisieren...

Gruß
Carsten

von Dirk W. (Gast)


Lesenswert?

Ralf schrieb:
> Nachtrag: Übrigens ganz ohne ICs würde es gehen wenn du einfach einen
> guten alten mechanischen Parallelport-Switch verwendest ;)

Das würde ich in diesem Fall aber nicht empfehlen, da die C64-Tastatur 
direkt an einer der CIA angeschlossen ist und die sind erfahrungsgemäß 
sehr empfindlich was das Umstecken/Umschalten von Peripherie unter 
Spannung angeht.

von Oliver R. (orb)


Lesenswert?

Da währe es fast einfacher den C64 eine PS2-Tastatur beizubringen und 
dann die Daten- und Clockleitungen zu schalten.

von Carsten S. (casuda)


Lesenswert?

Dirk W. schrieb:
> Ralf schrieb:
>> Nachtrag: Übrigens ganz ohne ICs würde es gehen wenn du einfach einen
>> guten alten mechanischen Parallelport-Switch verwendest ;)
>
> Das würde ich in diesem Fall aber nicht empfehlen, da die C64-Tastatur
> direkt an einer der CIA angeschlossen ist und die sind erfahrungsgemäß
> sehr empfindlich was das Umstecken/Umschalten von Peripherie unter
> Spannung angeht.

Danke, für den Tipp, auf das bin ich gerade auch gekommen, könnte 
gefährlich für die CIA werden.

von Carsten S. (casuda)


Lesenswert?

Oliver R. schrieb:
> Da währe es fast einfacher den C64 eine PS2-Tastatur beizubringen und
> dann die Daten- und Clockleitungen zu schalten.

Jo, das klingt ja auch nach einer Lösung, aber ich würde gerne die 
Tastatur vom C64 verwenden, kann man die auf PS/2 umbauen ?

von Carsten S. (casuda)


Lesenswert?

Gibt es keine Möglichkeit, das man die Tastatur vorher vom CIA 
entkoppelt und dann wieder sanft anhängt ? Bin auch gerne für einen 
Kabelverhau bereit, wenn es sein muß, oder ich mache mit eine saubere 
Platine in Eagle.

von Carsten S. (casuda)


Lesenswert?

Wie vorher schon gesagt, bin nicht so der Elektroniker, habe aber eine 
steile Lernkurve :-)

Wenn man die ganze Sache mit Optokopplern trennt, würde das gehen ?
So würde doch die Spannung auf dem jeweiligem Board bleiben und der CIA 
nichts vom Schalten "merken".


Grüße
Carsten

: Bearbeitet durch User
von Carsten S. (dg3ycs)


Lesenswert?

Hi,

Carsten Sulzberger schrieb:
> Gibt es keine Möglichkeit, das man die Tastatur vorher vom CIA
> entkoppelt und dann wieder sanft anhängt ?

Naja, das kommt etwas darauf an "was" den CIA denn tatsächlich hinnraft.
Wenn es Einflüsse von Aussen sind (z.B. ESD) kann man durchaus 
Schutzmaßnahmen ergreifen. Im Einfachsten Fall halt Porttreiber davor.

Können aber auch einfach "unzulässige" Signalzustände oder falsches 
Timing eine Zerstörung herbeiführen (z.B. weil im IC zwei Transistoren 
gegeneinander Treiben) geht ohne eigene Logik nichts.
ICh (BJ79) habe die C64 Zeit zwar noch fast von Anfang an Live 
miterlebt, aber nur als Anwender... Für erfolgreiche Umbauten an dem 
Gerät war ich noch zu Jung. Deshalb weiß ich darüber nicht viel mehr als 
das man aussen am USerport die Module nicht unter Spannung stecken 
sollte und auch das ein Freund von mir seinen C64 so wirklich gekillt 
hat.
Aber was nun wirklich das Problem war ?

Eine absolut Sichere und vom Layout unkritische Lösung wäre es wenn du 
auf beiden Seiten etwas Intelligenz hereinbrinst. Also eine µC Schaltung 
an die Tastatur welche die Tastatureingaben auswertet und in etwas 
Serielles Umsetzt (evtl. sogar "echtes PS2 kompatible Signale" oder 
einfach nur SPI bzw. UART) und pro C64 dann eine 
Mikrocontrollerschaltung die elektrisch dann wieder die Tastenanschläge 
simuliert.

Gruß
Carsten

: Bearbeitet durch User
von Carsten S. (casuda)


Lesenswert?

Also, gut dann verstehe ich es so:

Sauber eher mit Intelligenz, also µC = Arduino ?

Wenn das die Richtige Richtung ist, dann wäre das schon mal was.
Habe hier "zufällig" ein paar UNOs rumliegen, die beschäftigt werden 
wollen.

An die Tastatur kommt der Arduino und der verteilt an die entsprechenden 
Elektronik des anzusprechenden Boards die Tastatur Signale. Schalten tue 
ich dann quasi per "software". Wir würde ich am geschicktesten an die 
umsetzende Hardware rangehen ? Pro Board ne eigene Logik ?

Grüße
Carsten

von Oliver R. (orb)


Lesenswert?

Die Tastatur ist als Matrix mit 8 Spalten und 8 Zeilen aufgebaut, dazu 
kommt die Restore(?)-Taste die einem NMI auslöst. Das kannst Du mit 
Arduinos umsetzen, aber die Tastatur mit einem AVR/Arduino abfragen und 
den C64 eine andere Tastaturschnittstelle beibringen vereinfacht die 
Umschaltung unheimlich.
Ist aber schon über 20 Jahre her daß ich dadran gebastelt hab.

von Carsten S. (casuda)


Lesenswert?

Oliver R. schrieb:
> Die Tastatur ist als Matrix mit 8 Spalten und 8 Zeilen aufgebaut,
> dazu
> kommt die Restore(?)-Taste die einem NMI auslöst. Das kannst Du mit
> Arduinos umsetzen, aber die Tastatur mit einem AVR/Arduino abfragen und
> den C64 eine andere Tastaturschnittstelle beibringen vereinfacht die
> Umschaltung unheimlich.

Klingt schon mal gut. Wie kann ich das verstehen 'dem C64 eine andere 
Tastaturschnittstelle beibringen' ?

Grüße
Carsten

von Carsten S. (dg3ycs)


Lesenswert?

Carsten Sulzberger schrieb:
> Sauber eher mit Intelligenz, also µC = Arduino ?

Arduino ist eine Möglichkeit von vielen.
Kannst du nehmen, oder halt jeden X beliebigen µC der genug IO hat und 
den du Programmieren kannst.

> Wir würde ich am geschicktesten an die
> umsetzende Hardware rangehen ? Pro Board ne eigene Logik ?

Ja! genau so würde ich es machen. Das Layout könnte bei allen Platinen 
sogar genau gleich sein. Beim "Sender" (Tastatur) funktioniert dasselbe 
Layout wie bei den vier Empfängern. Nur die Firmware muss sich bei 
Sender und Empfänger unterscheiden. Wenn du auf Nummer "ganz Sicher" 
gehen Willst könntest du pro Platine mit einem bzw. zwei Optokopplern 
(je nach der von dir gewählten Seriellen Schnittstelle) eine komplette 
galvanische Trennung schaffen.

Gruß
Carsten

von chris (Gast)


Lesenswert?

Es sind nicht 20 Pin, sondern nur 17, die NMI Resetleitung (RESTORE) ist
kritisch und sollte nicht verlàngert werden.
Ein Druckerumschalter hat 18 Leitungen, passt also perfekt. Theoretisch
kònntest du die NMI Leitung aktive buffern und somit auch umschaltbar 
machen,
ist jedoch àhnlich der Resetleitung des FTDI Kabels beim ARDUINO 
aufgebaut
(DTR).
Es gilt auch, Tastatur und die zwei Joystick Ports benutzen dieselben
Leitungen, also solltest du auch diese gleich Multiplexen oder stoert 
dich das? Es sind einfach zwei Ports, ein fixer 8bit Ausgang und ein 
fixer 8bit
Eingang. Software fuer AVR fuer PS2 Tastatur oder als PS2 Tastatur gibt
es auch, Arduino sehe ich da sehr schlecht, da das Timing doch recht 
Anspruchsvoll und Zickig ist, es werden da ja 4 Peripherien gemultiplext
und auch die internen pull-up ausgenutzt, um externe Widerstànde zu 
sparen.
Beim AVR kann man zusàtzliche pull-up einschalten, wenn man da was 
verlàngert, beim Drucker Umschalter sollte man aber 8x pull-up vorsehen.

von Carsten S. (casuda)


Lesenswert?

Hallo Chris,

erstmal danke und das mit den Joystickport habe ich nur zwecks der 
Einfachheit unerwähnt gelassen, geplant ist es alle mal.

Gut ich werde mich dann mal an die Sache experimentell annähern. Erstmal 
die Tastatur mit dem Arduino an einem C64 testen.

Wenn ich das hinbekomme, werde ich mal wieder bei Euch nachfragen.

Danke für Eure tolle Hilfe bzw. Denkanstösse.

Grüße
Carsten

von chris (Gast)


Lesenswert?

Vergiss nicht, GND auch umzuschalten, ist sehr wichtig, ansonsten wird 
der
CIA kaputt. Arduino, wie bereits gesagt, zu langsam, ist nichr 
realisierbar, zumindest nicht mit der ARDUINO IDE. Zu den Joysticks, es 
existieren da
zwei ADC Wandler, sogennannte RCTIME basierte, es wird die Entladung und
Ladung eines Kondensators gemessen. Diese befinden sich nicht an der 
20pin
Steckerleiste, sondern sind separat gerouted. Wenn du die Funktionalitàt 
nicht brauchst, dann ist es egal. Weiters CIA is MOS und AVR ist CMOS 
(C=complementary). Viel Glueck mit ARDUINO und errinnere dich, dass 
alles
mit sehr krummen Frequenzen ablàuft, da alles mit der Videoausgabe 
syncronisiert ist, um z.B. Videoeingabestifte oder Pistolen zu 
ermòglichen,
oder SW generierte erweiterete Farbpaletten usw.

Mfg Chris

von Carsten S. (dg3ycs)


Lesenswert?

Hi,

ICh habe mir jetzt auch mal den Schaltplan aus dem Netz gezogen...
chris schrieb:
> Vergiss nicht, GND auch umzuschalten, ist sehr wichtig, ansonsten wird
> der CIA kaputt.

Wie meinst du das? Das er auf jeden Fall aufpassen soll das GND immer 
sicher verbunden ist? -> Da würde ich sicherheitshalber zustimmen

Oder das er GND auch Auftrennen soll wenn er Umschaltet...
DA würde ich aber laut Schaltplan wehemennt wiedersprechen. Die GND 
Verbindung des Steckers geht direkt auf den allgemeinen SystemGND Zudem 
ist es "dasselbe" GND das auch bei den Joystickports verwendet wird. Und 
die sind definitiv Hotplugfähig...

Aber ein wirkliches Umschalten findet bei der "Mehrplatinenlösung" ja 
überhaupt nicht mehr statt - Elektrisch bleibt sowieso immer alles 
Verbunden. Es wird nur noch gewechselt welcher µC gerade aktiv 
Tastendrücke Simuliert während die anderen sich still verhalten.

> Arduino, wie bereits gesagt, zu langsam, ist nichr
> realisierbar, zumindest nicht mit der ARDUINO IDE.
Hhhm - da kann ich jetzt nichts definitives zu sagen. Wobei ich das 
wirklich enttäuschend fände wenn das wirklich nicht mit den Arduino 
gehen würde - auch bei halbwegs Sinnvoller Programmierung nicht.
Das man gerade mit Arduino sicher sein Programm so schreiben kann das 
der µC viele hundert Befehle abarbeiten muss nur um einen Pin zu toggeln 
ist wohl bekannt. Aber das es immer so langsam sein soll?

Schließlich sind die Timinganforderungen ja nicht wirklich hoch. Das 
sind viele Millisekunden pro Spalte.

Sollte es aber wirklich nicht mit der Arduino SW gehen müsste er sich 
halt direkt mit nativen C unter AVR Studio herumschlagen. Dann ist der 
LErneffekt wenigstens größer.

> Weiters CIA is MOS und AVR ist CMOS (C=complementary).
Wenn die Spannungen gleich sind spielt der Unterschied zwischen CMOS und 
dem vermutlich in NMOS ausgeführten CIA bei dieser Anwendung keine 
Rolle. Das sind technische FEinheitendas der internen Strukturen und 
lange nicht so wichtig wie die Unterschiede zwischen CMOS und TTL.

> errinnere dich, dass alles
> mit sehr krummen Frequenzen ablàuft, da alles mit der Videoausgabe
> syncronisiert ist, um z.B. Videoeingabestifte oder Pistolen zu
> ermòglichen oder SW generierte erweiterete Farbpaletten usw.

Naja - so krumm finde ich die Frequenzen des C64 gar nicht... Da habe 
ich weit schlimmeres gesehen. Gerade die 50 Tastaturabfragen pro Sekunde 
sind doch schön gerade ;-)
Allerdings spielen die Frequenzen für diese Anwendung keine Rolle. Da 
würde ich einfach eine Tabelle im Speicher anlegen wo für jede mögliche 
Taste hinterlegt ist ob gedrückt oder nicht. Im Prinzip würde da sogar 
ein 8Byte Array reichen. Und immer wenn die Zeile eins weitergeschaltet 
wird gibt man das zugehörige Byte über einen der Ports aus... (Entweder 
direkt oder über einen Transistor in OC bzw. OD Schaltung wenn einem das 
lieber ist... Mit Transistor könnte man aber auch 3V µC verwenden - 
zudem käme das dem elektrischen Verhalten der echten Tastatur um 
nächsten....)

Man muss also nur auf die Zeilenwechsel schnell reagieren, der Rest kann 
völlig losgelöst vom C64 Timing erfolgen.

Den weiteren Softwareteil würde ich so aufbauen das der µC an der 
Tastatur die Zeilenleitungen wie der C 64  der Reihe nach abfragt und 
jeweils den Zustand der Spaltenleitungen dann als Ergebniss ebenfalls in 
ein 8Byte schreibt. (ein Byte pro Zeilen). Die tatsächliche 
Abfragegeschwindigkeit ist dabei völlig egal, sollte nur schnell genug 
sein damit keine spürbaren Verzögerungen entstehen. Nach jedem Durchlauf 
wird dann ein 9Byte Datenburst seriell an die vier Empfänger gesendet. 
Entweder UART oder SPI.
Dabei enthält das erste Byte dann die Information über die nicht 
Multiplexte Taste und -wenn die Umschaltung des Ziel mechanisch nahe an 
der Tastatur erfolgen soll- die Information für welchen Rechner die 
Tastaturinformationen gerade bestimmt sind.
Die Empfangsboards empfangen diese Datenbursts und prüfen dann ob sie 
adressiert sind. ISt dies der Fall werden die Daten dann in das interne 
Array übernommen. (Quasi ein ähnlicher Ablauf wie bei einem 
Bildspeicher...)
 Die Reaktion auf die Zeilenwechsel würde ich beim Empfänger als 
Interrupt ausführen da zeitkritisch aber nur sehr wenig Rechenzeit 
beanspruchend,  die Reaktion auf die eingehenden Seriellen Daten 
entweder über Polling oder falls vorhanden über einen niedriger 
priorisierten Interrupt. Der Empfangsbuffer sollte einen 
Spaltenwechselinterrupt ja notfalls überbrücken können...

Aber genug der Anregungen - Jetzt ist selber weitermachen angesagt ;-)

Gruß
Carsten

von Carsten S. (casuda)


Lesenswert?

Hallo Carsten und Chris,

danke das ihr Euch so damit auseinander setzt. Gibt mir sehr viel Input 
um darüber nachzudenken. :-)

Es soll immer nur ein C64 mit der Tastatur gleichzeitig verbunden sein.
Die Tastatur wird auch nicht für viel Text benutzt, eher als 
Programmbedienung. Wahrscheinlich ist eher die Mouse anzubinden der 
grössere Act.

Wie schon zuvor gesagt ich nähere mich der Sache Experimentell und werde 
erneut davon berichten.

Grüße
Carsten

von chris (Gast)


Lesenswert?

Carsten Sch. schrieb:
> Hi,
>
> ICh habe mir jetzt auch mal den Schaltplan aus dem Netz gezogen...
> chris schrieb:
>> Vergiss nicht, GND auch umzuschalten, ist sehr wichtig, ansonsten wird
>> der CIA kaputt.
>
> Wie meinst du das? Das er auf jeden Fall aufpassen soll das GND immer
> sicher verbunden ist? -> Da würde ich sicherheitshalber zustimmen

Bezog sich auf die LPT Switch Loesung. Trotzdem solltest du dir mal 
ausmahlen was passiert, wenn di Massen zusammengeschaltet ist, und einer
nicht eingeschalten ist, bzw erst eingeschalten wird.
>> Arduino, wie bereits gesagt, zu langsam, ist nichr
>> realisierbar, zumindest nicht mit der ARDUINO IDE.
> Hhhm - da kann ich jetzt nichts definitives zu sagen. Wobei ich das

> Schließlich sind die Timinganforderungen ja nicht wirklich hoch. Das
> sind viele Millisekunden pro Spalte.
Sie sind nicht so extrem hoch, aber es spielt sich nicht im 
Millisekunden Bereich ab, sondern im Mikrosekunden bereich.
>
> Wenn die Spannungen gleich sind spielt der Unterschied zwischen CMOS und
> dem vermutlich in NMOS ausgeführten CIA bei dieser Anwendung keine
> Rolle. Das sind technische FEinheitendas der internen Strukturen und
> lange nicht so wichtig wie die Unterschiede zwischen CMOS und TTL.
Grundsaetzlich ist (N)MOS Opencollector mit 4kohm pull-up zu VCC und
die Levels sind TTL, teilweise aber auch push-pull sowie niedrigen
Treiber und Input Kapazitaeten. Sprich AVR auf MOS ist kein Problem,
umgekehrt kann es zu Problemen kommen.
Es gibt viele Programme, welche PortB als Ausgang und PortA als Eingang 
nutzen. Ohne entsprechende externe Schaltung geht eine AVR da nicht,
da PortB push-pull ist (mit pull/up Widerstand). Kernel verwendet PortA
als Output, da ist der AVR kompatibel.

> Naja - so krumm finde ich die Frequenzen des C64 gar nicht... Da habe
> ich weit schlimmeres gesehen.
 17.734475 Mhz / 18 =  0,98524861 Mhz bzw durch 9 fuer die 2Mhz Version.

> Gerade die 50 Tastaturabfragen pro Sekunde
> sind doch schön gerade ;-)
Wenn diese vom Quarz kommen, sind sie ca 50.74 Hz, kommen sie vom RTC
Interrupt, dann sind sie mit der Netzfrequenz syncronisiert welches von
der 9V Wechselspannung kommt. Heute ist diese schlimmer als Frueher.
Zudem musst du beachten, dass viele Programme die Tastatur direkt 
abfragen,
speziell solche welche Tastatur und Joystick gleichzeitig verwenden.
Die Tastatur ist nicht alles, auch der Joystick wird an den gleichen 
Ports
bedient, wie auch der Lightpen usw, sei es vom Kernel wie auch von den
Programmen selbst.

von Dirk W. (Gast)


Lesenswert?

Carsten Sch. schrieb:
> Zudem
> ist es "dasselbe" GND das auch bei den Joystickports verwendet wird. Und
> die sind definitiv Hotplugfähig...

Das stimmt leider nicht, da die Joystick-Ports ebenfalls direkt an die 
CIAs gehen. Es gibt eine gewisse Chance, dass z.B. beim Umstecken eines 
Joysticks von Port 1 auf Port 2 während der C64 eingeschaltet ist 
anschließend der CIA im Eimer ist. Habe ich damals selbst miterleben 
dürfen.

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