Forum: Mikrocontroller und Digitale Elektronik Ports eines GPIO expanders verbinden


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Max (Gast)


Lesenswert?

Hallo zusammen,

ich möchte mir gerne einen "intelligenten" Durchgangsprüfer basteln, um 
z.B LAN-Kabel oder komplexere Kabelbäume zeitschonend zu prüfen.

Für meinen ersten Prototypen hatte ich mir einen eigenen 96bit 
Multiplexer aus &-Gattern gebastelt. Funktionierte eigentlich ganz gut - 
musste aber selber mit einer Prüfspitze an das andere Ende der Adern 
gehen und alles abtasten.

Für das neue Projekt möchte ich aber jetzt einen GPIO expander (z.B 
MCP23S18), welchen ich über i2c steuere, verwenden. Im Endausbau soll 
die Schaltung dann O(100) Verbindungen testen können - brauche also etwa 
200 GPIOs (oder mehr...).

Funktionieren soll es dann so, dass ich einen Port per Write auf High 
setzte
und dann die restlichen Ports auslese und mit einen Prüfliste 
vergleiche.

Jetzt hätte ich eine sehr grundlegende Frage, die mir vielleicht ein 
initiales trail-and-error erspart:

Kann ich Ports von einem einzelnen Baustein verbinden? Sprich, kann ich 
einen Port auf High setzen und am zweiten Port das Signal ablesen? Das 
tritt z.B auf wenn ich eine Brücke zwischen zwei Adern habe.

Danke schon mal im voraus!

LG,
Max

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Max schrieb:
> Kann ich Ports von einem einzelnen Baustein verbinden?
Du kannst beliebig viele mit beliebigen anderen verbinden, solange
1. nur 1 davon ein Ausgang ist
oder
2. mehrere davon Ausgänge sind, aber den selben Pegel ausgeben.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Max schrieb:
> GPIO expander (z.B MCP23S18), welchen ich über i2c steuere
Wieviele solcher Port-Expander kannst du an 1 I2C betreiben? Wieviele 
unterschiedliche Adressen kannst du einstellen?

Ich würde da einfach die "übliche" Schieberegisterlösung nehmen. Die ist 
durch simples Einfügen von zusätzlichen Schieberegistern beliebig 
skalierbar.

: Bearbeitet durch Moderator
von Frank K. (fchk)


Lesenswert?

Max schrieb:

> Kann ich Ports von einem einzelnen Baustein verbinden? Sprich, kann ich
> einen Port auf High setzen und am zweiten Port das Signal ablesen? Das
> tritt z.B auf wenn ich eine Brücke zwischen zwei Adern habe.

Ja. Du brauchst aber auf der Empfangsseite an jedem Pin Pulldown- oder 
Pullup-Widerstände. Digitale Eingänge dürfen niemals offen sein, weil 
sie dann in einen undefinierten Zustand geraten können, in dem 
unzulässig hohe Querströme auftreten können, die möglicherweise den 
Pintreiber beschädigen können. Daher Pins, die offen sein können, immer 
mit einem Widerstand von 10...100k auf einen definierten Pegel ziehen.

Aonsonsten schließe ich mich lkmiller an: die Lösung mit 
Schieberegistern (74HC595 für die Ausgänge, 74HC597 für die Eingänge) 
wäre billiger und sinnvoller.

fchk

von Wolfgang (Gast)


Lesenswert?

Max schrieb:
> Für das neue Projekt möchte ich aber jetzt einen GPIO expander (z.B
> MCP23S18), welchen ich über i2c steuere, verwenden.

Lothar M. schrieb:
> 2. mehrere davon Ausgänge sind, aber den selben Pegel ausgeben.

Bei Ports mit Open-Drain Ausgang (MCP23S18) ist es völlig egal, ob die 
den selben Pegel ausgeben. Ein einziger Ausgang, der das Netz runter 
zieht, reicht für Low an den Eingängen (wired-OR in negativer Logik).

von Max (Gast)


Angehängte Dateien:

Lesenswert?

Vielen Dank schon mal für die Antwort(en)!

Den Ansatz mit den Schieberegistern habe ich im Forum bereits des 
öfteren gefunden, bin mir aber nicht sicher ob sich mit dieser 
"üblichen" Lösung meine Idee realisieren lässt. Der Plan ist, dass ich 
mithilfe von Musterkabelbäumen meinem Durchgangsprüfer beibringe welche 
Verbindungen er zu testen hat. Dazu muss
es mir a-priori mal möglich sein jede Verbindung bidirektional zu testen 
(danach kann ich mittels Software auf die notwendigen reduzieren).
Übersehe ich da etwas wenn ich sage, dass das mit Schieberegistern nicht 
machbar ist?

Dann zur Frage wieviele Expander ich betreiben kann. Grundsätzlich habe 
ich eine 3 bit Adresse. Somit müsste ich den Adressbereich des MCP23S18 
eigentlich multiplexen um auf meine 200 Ports zu kommen. Deswegen habe 
ich jetzt nach Bauteilen mit mehr Ports wie z.B den PCA9698 (3bit Adr / 
40bit I/O) gesucht.

Zu meiner eigentlichen Frage:
Als Anhang habe ich eine sehr rudimentäres Bild (bitte um Verzeihung...) 
wie ich mir die Beschaltung vorgestellt hätte. Wenn ich pin 4 auf High 
schalte sollte ich also auf pin 3 und 5 ein High bekommen. Auf den 
anderen Low.
Aber wie Frank geschrieben hat, würden pin 1, 2 und 6 eigentlich 
undefiniert sein.
Also müsste ich entweder pin 2 oder 6 auf Low setzen (dann den jeweils 
anderen auslesen) und pin 1 ignorieren damit jeder Pegel definiert ist.
Oder wäre es besser alle Ports mittels pull-up auf Vcc zu hängen und 
beim Prüfen die Ports auf Low zu schalten?



Danke,
Max

von Frank K. (fchk)


Lesenswert?

Max schrieb:
> es mir a-priori mal möglich sein jede Verbindung bidirektional zu testen
> (danach kann ich mittels Software auf die notwendigen reduzieren).
> Übersehe ich da etwas wenn ich sage, dass das mit Schieberegistern nicht
> machbar ist?

Wieso sollte das mit Schieberegistern nicht machbar sein? Erkläre das 
genauer. Warum meinst Du, dass Du mit Schieberegistern nicht beliebige 
Bitmuster erzeugen kannst, wie Du es mit IO-Expandern machen kannst?

> Zu meiner eigentlichen Frage:
> Als Anhang habe ich eine sehr rudimentäres Bild (bitte um Verzeihung...)
> wie ich mir die Beschaltung vorgestellt hätte. Wenn ich pin 4 auf High
> schalte sollte ich also auf pin 3 und 5 ein High bekommen. Auf den
> anderen Low.
> Aber wie Frank geschrieben hat, würden pin 1, 2 und 6 eigentlich
> undefiniert sein.

Nicht nur eigentlich. Serienwiderstände nützen Dir da nichts.

> Also müsste ich entweder pin 2 oder 6 auf Low setzen (dann den jeweils
> anderen auslesen) und pin 1 ignorieren damit jeder Pegel definiert ist.

Wie willst Du Pin 1 ignorieren? Der würde Dir irgendwann kaputt gehen. 
Nochmals: Du darfst niemals zu irgendeinem Zeitpunkt undefinierte Pegel, 
womöglich noch in der Nähe von VCC/2 (was Du nicht weißt, weil ist ja 
undefiniert) haben. Das killt Dir irgendwann die Schaltung. Nicht 
sofort. Irgendwann. Solche Pins sind nämlich auch sehr empfänglich für 
elektrostatische Entladungen.

> Oder wäre es besser alle Ports mittels pull-up auf Vcc zu hängen und
> beim Prüfen die Ports auf Low zu schalten?

Genau das ist der richtige Weg. Idealerweise mit Open Drain Ausgängen, 
dann hast Du auch keine Umschaltung der Datenrichtung mehr. Die HC595 
haben keine OpenDrain Ausgänge, da müsstest Du z.B. auf TI TPIC6C596 
oder Nexperia NPIC6C596A ausweichen (letztere gehen auch mit 3.3V 
Logikspannung erstere nur mit 5V). Für die Eingänge dann weiterhin 
74HC597 oder HC165.

fchk

von Max (Gast)


Lesenswert?

> Wieso sollte das mit Schieberegistern nicht machbar sein? Erkläre das
> genauer. Warum meinst Du, dass Du mit Schieberegistern nicht beliebige
> Bitmuster erzeugen kannst, wie Du es mit IO-Expandern machen kannst?

Bitte korrigiere mich wenn ich falsch liege, aber die Lösung mit 
Schieberegistern eignet sich
nur wenn ich eine Art Bus teste. Sprich ich habe eine Eingangsseite und 
eine Ausgangsseite. Also für den Fall, dass ich einen einzigen Kabelbaum 
habe. (Ein- und Ausgänge fest definiert sind.)
Das Problem das ich habe kommt ins Spiel, weil Ein- und Ausgänge bei 
unterschiedlichen Kabelbäumen mit unterschiedlichen Steckern 
Konfektioniert sein können. Die Stecker haben zwischen 1-37 Kontakte.

Also als Beispiel:

Kabelbaum 1 hat auf einer Seite zwei Stecker Typ A und auf der anderen 
Seite einen Stecker Typ B und einen Stecker Typ C
(AA)->(BC).

Kabelbaum 2 hat nun Stecker A und B auf einer und A und C auf der 
anderen
(AB)->(AC)

Natürlich kann ich jetzt jeweils einen Adapter pro Kabelbaum basteln - 
Ist aber sehr unpraktisch. Wenn ich aber einen Adapter für die Stecker 
AA habe und einen für BC
bei denen ich über meine Software einen der A Stecker dann als Ausgang 
und den B Stecker als Eingang verwenden kann, kann ich alle beliebigen 
Kombinationen testen.

Sollte das mit Schieberegistern auch machbar sein, wäre das natürlich 
super. Dann bräuchte ich aber bitte jemanden der meinen Knopf im Kopf 
lösen könnte :)

Max

von Frank K. (fchk)


Lesenswert?

Max schrieb:

> Bitte korrigiere mich wenn ich falsch liege, aber die Lösung mit
> Schieberegistern eignet sich
> nur wenn ich eine Art Bus teste. Sprich ich habe eine Eingangsseite und
> eine Ausgangsseite. Also für den Fall, dass ich einen einzigen Kabelbaum
> habe. (Ein- und Ausgänge fest definiert sind.)

Mit dieser Konfiguration könntest Du niemals Kabelbrücken in einem 
Stecker testen.

Nein, Du musst das schon so machen, dass JEDER Pin sowohl an einem 
OpenDrain Ausgang eines Ausgangs-Schieberegisters als auch an einem 
Eingang eines Eingangsschieberegisters angeschlossen ist. Damit kannst 
Du den Ausgangspin quasi zurückmessen, und Du siehst, was an allen 
anderen Pins passiert.

D.h.
Aussgangsmuster rausschieben (mit Shift Clock)
Ausgangsmuster vom Ausgangs-Schieberegister in die Ausgaberegister 
raustakten (Register Clock), damit erscheinen sie an den Ausgangspins.
Delay
Eingangsmuster von den Eingangspins ins Eingabe-Schieberegister Laden
Eingangsmuster hineintakten

wobei jeder Pin zu jeder Zeit GLEICHZEITIG Eingangspin als auch 
Ausgangspin ist.

fchk

von Peter D. (peda)


Lesenswert?

Statt einem Schaltkreisgrab würde ich einfach mehrere MCs nehmen. Die 
kann man dann als Open-Drain mit Pullup konfigurieren.

Ich hab so mal einen Tester für bis 40-polige Flachkabel gebaut, also 80 
IO-Pins. Es waren 3 Stück AT89C51, die Kommunikation erfolgte über die 
UART, der letzte zeigte das Ergebnis an.
32 IOs abzüglich 2 für die UART ergibt so 30 nutzbare Pins je MC.
Aufgebaut auf einer Rasterplatine mit DIP-40 MCs.
Die Firmware war identisch, der erste erkannte seine Funktion als Master 
mit permanent low an RXD.

von Max (Gast)


Lesenswert?

Frank K. schrieb
> Nein, Du musst das schon so machen, dass JEDER Pin sowohl an einem
> OpenDrain Ausgang eines Ausgangs-Schieberegisters als auch an einem
> Eingang eines Eingangsschieberegisters angeschlossen ist. Damit kannst
> Du den Ausgangspin quasi zurückmessen, und Du siehst, was an allen
> anderen Pins passiert.
>
> D.h.
> Aussgangsmuster rausschieben (mit Shift Clock)
> Ausgangsmuster vom Ausgangs-Schieberegister in die Ausgaberegister
> raustakten (Register Clock), damit erscheinen sie an den Ausgangspins.
> Delay
> Eingangsmuster von den Eingangspins ins Eingabe-Schieberegister Laden
> Eingangsmuster hineintakten
>
> wobei jeder Pin zu jeder Zeit GLEICHZEITIG Eingangspin als auch
> Ausgangspin ist.

Jetzt macht es endlich Sinn. Danke für die Klarstellung!
Das war eben auch meine Grundidee, als ich an die GPIO expander dachte - 
Die Ports  müssen gleichzeitig als Ein- und Ausgang betrieben werden 
können. Ich habe aber nicht beachtet, dass die Ports Ein- und Ausgang 
GLEICHZEITIG sein müssen.

Also für 200 Ports würde ich demnach 25 Eingangs (74HC597) + 25 
Ausgangsregister (74HC595).

Für die Ausgänge kaskadiere ich die Register (Serial-out von Register N 
auf serial-in von Register N+1) und schiebe einen Low Zustand durch wenn 
ich eine Verbindung testen will. Mit einer steigenden Flanke am Storage 
Clock liegt dann mein gewünschter Zustand an.

Aber wie lese ich die Eingangsregister aus? Ich habe mein Bitmuster and 
den jeweiligen parallelen Eingängen anliegen und schiebe das Muster auf 
den seriel-out. Damit nicht alle 25 gleichzeitig auf serial out schieben 
müsste ich jedes Bauteil einzeln adressieren können. Wenn ich das 
Datenblatt richtig lese wäre das mehr oder weniger ein High am parallel 
load des jeweiligen 597 - Brauche also 25 "Adressleitungen"?!
Oder gibt es da einen simplere Lösung dafür?

Max

von Bauform B. (bauformb)


Lesenswert?

Max schrieb:
> Aber wie lese ich die Eingangsregister aus? Ich habe mein Bitmuster and
> den jeweiligen parallelen Eingängen anliegen und schiebe das Muster auf
> den seriel-out. Damit nicht alle 25 gleichzeitig auf serial out schieben
> müsste ich jedes Bauteil einzeln adressieren können.

Die schieben zwar alle gleichzeitig, aber jeweils vom serial out in den 
serial in vom nächsten Baustein. Die werden genau wie die 
Ausgangsregister in Reihe geschaltet.

> Oder gibt es da einen simplere Lösung dafür?

Allerdings, und zwar deinen PCA9698, der ist doch wie gemacht für diese 
Aufgabe. Das wären fünf statt fünfzig ICs. Oder was spricht dagegen?

: Bearbeitet durch User
von schmitti (Gast)


Lesenswert?

Du kannst auch mit 4017 kaskadiert immer einen Ausgang schalten und auf 
allen Eingängen gleichzeitig messen. Wie "lauflicht" und an den 
Eingängen darf dann auch nur der Eingang sich ändern, wo der Draht drann 
geht. Ändert sich der Zustand am Eingang nicht, ist der Draht 
unterbrochen; ändern sich mehrere, hast Verbindung zu anderen Drähten.
Du könntest auch (bei verteilten µCs) alle Portregister auf "H" schalten 
und nur ne Bitmaske 1<< auf den Datenrichtungsregistern(DDR) 
durchschieben und nen kurzen LOW-Impuls generieren. Somit hast du immer 
einen Ausgang und der Rest deiner Portpins sind alles Eingänge mit 
pull-up.
Auch wenn du somit deinen Kabelbaum nur squentiell testest und nicht 
alle Drähte gleichzeitig, sollte das trotzdem (im Vergleich zur 
Rüstzeit) immernoch schnell genug sein.
<Achtung: Opa erzählt ausm Krieg>
1
Früher(tm) hatten wir auf der einen Seite des Kabelbaums einen LED-Treiber-Schaltkreis (2xA277) und auf der anderen Seite eine LED-Reihe.
2
Auf den A277 haben wir eine Sägezahnspannung gegeben und auf der anderen Seite ist dann eine LED nach der anderen angegangen. So, in KnightRider-manier.
3
Da hat man sofort und genau gesehen, wenn da was nicht stimmte.
4
Erst waren Meister und auch die Damen aus der Produktion skeptisch. nach zwei Tagen bereits waren alle hellauf begeistert.
5
Aber -> das ist lange her.
</Achtung: Opa erzählt ausm Krieg>

Gruß#schmitti

von schmitti (Gast)


Lesenswert?

PCA9698 sieht in der Tat sehr gut aus!

von Max (Gast)


Lesenswert?

Bauform B. schrieb
> Allerdings, und zwar deinen PCA9698, der ist doch wie gemacht für diese
> Aufgabe. Das wären fünf statt fünfzig ICs. Oder was spricht dagegen?

Das war auch mein Ursprünglicher Gedanke. Jedoch hat Frank sehr 
einleuchtend argumentiert, warum ich für meine Durchgangsprüfung 
(Brücken zwischen Verbindungen können vorkommen - kein Flachbandkabel) 
Ports brauche die gleichzeitig Ein- und Ausgang sind. Ich will ja später 
auch in der Lage sein nicht nur Verbindungen zu testen, sondern auch 
Musterkabelbäume zu lernen.

Jedoch sind 50 ICs wirklich etwas viel...
Ich könnte aber die 74HC595 für die Ausgänge verwenden und die PCA9698 
als Eingänge. Das würde zumindest das ganze auf 30 reduzieren.

Max

von Frank K. (fchk)


Lesenswert?

Max schrieb:

> Jedoch sind 50 ICs wirklich etwas viel...
> Ich könnte aber die 74HC595 für die Ausgänge verwenden und die PCA9698
> als Eingänge. Das würde zumindest das ganze auf 30 reduzieren.

Und das Systemdesign komplexer machen.

Du kannst die gesamte Logik in einen einzigen Chip hineinbekommen. 
Technisch ist das überhaupt kein Problem. Es gibt FPGAs mit 600 oder 
1000 Pins, damit kannst Du sehr viel größere Kabelbäume testen. Dann 
brauchst Du nicht mal mehr einen Microcontroller. Du steckst einen 
"guten" Kabelbaum an, drückst auf eine "Lernen"-Taste, klemmst 
nacheinander die zu testenden an, drückst auf eine "Prüfen" Taste, und 
bekommst entweder ein rotes oder grünes Licht.

Technisch einfach.

Das Problem ist:

1. Kannst Du solch großere Gehäuse noch löten? Eher nicht. SO16 kannst 
Du
löten. Ist zwar eine Heidenarbeit, aber es geht, und es ist einfach.

2. Je komplexer und größer die Bausteine, desto empfindlicher werden sie 
und desto schneller gehen sie auch kaputt. Ich habe Dir deswegen auch 
die NPIC6C596 genannt, weil die (a) Open Drain Ausgänge haben (das haben 
die HC595 nicht) und (b) etwas höhere Treiberleistungen von 250mA pro 
Pin. So schnell sollte da also nichts kaputt gehen. Das Risiko besteht 
aber immer, durch ESD oder was auch immer. Dann musst Du in der Lage 
sein, Dein Zeug zu reparieren.

Kannst Du einen SO16 im 1.27mm Raster tauschen, ohne dass die 
Leiterplatte beschädigt wird? Wahrscheinlich. Pins mit gutem 
Seitenschneider abknipsen und Pads mit Entlötlitze säubern.
Kannst Du Du einen SSOP48 im 0.635mm Raster per Hand tauschen, ohne auch 
nur ein Pad zu beschädigen? Es geht, aber Du brauchst das richtige 
Werkzeug. Heißluft ist fast Voraussetzung dafür. Das wäre Dein PCA9698.

3. Es bleibt ja nicht bei den ICs. Du solltest unbedingt an jeden Pin 
eine ESD-Schutzdiode gegen GND hängen. Sowas wie Semtech UCLAP3301H oder 
Nexperia PESD3V3U1UB, und dazu einen 22 Ohm Serienwiderstand. Klar. Das 
ist Arbeit.

Ich würde das mit HC165 und NPIC6C596 machen, und dann modular. Pro 
Board 48 Pins. Da orderst Du einmal einen 10'er Pack Leiterplatten beim 
Chinesen und kannst dann nacheinander aufbauen und testen, je nach 
Bedarf. Wenn Dir da mal ein Pin hopps geht, kannst Du es leicht 
reparieren.

Und die Chips sind in größeren Mengen auch billiger. Ein 74HC165 im 
SOIC16N kostet 33 Cent einzeln, im 25'er Paket sind es nur noch 24 Cent. 
Das gesamte 25'er Paket kostet nur 6€. Ein NPIC6C596ADJ im SOIC16N 
kostet einzeln 62 Cent, im 25'er Paket nur noch 50 Cent, d.h. 12.50€ für 
das ganze 25'er Paket. Bei 100 wirds noch weniger.

fchk

von Bauform B. (bauformb)


Lesenswert?

Max schrieb:
> Jedoch hat Frank sehr
> einleuchtend argumentiert, warum ich für meine Durchgangsprüfung
> (Brücken zwischen Verbindungen können vorkommen - kein Flachbandkabel)
> Ports brauche die gleichzeitig Ein- und Ausgang sind.

Genau das können die PCAs doch? Oder umgekehrt: das kann kein Baustein, 
je nachdem, was man unter gleichzeitig versteht. Jeder Pin kann einzeln 
als Eingang oder Ausgang konfiguriert werden und als Bonus kann man den 
Zustand eines Ausgangs-Pins lesen. Dabei liest man aber immer nur das, 
was man eben ausgegeben hat -- es sei denn, es gibt einen Kurzschluss 
nach VDD oder GND. Wobei beide nicht vom kaputten Kabel her kommen 
können (GND schon garnicht).


Frank K. schrieb:
> Ich würde das mit HC165 und NPIC6C596 machen, und dann modular. Pro
> Board 48 Pins. Da orderst Du einmal einen 10'er Pack Leiterplatten beim
> Chinesen und kannst dann nacheinander aufbauen und testen, je nach
> Bedarf. Wenn Dir da mal ein Pin hopps geht, kannst Du es leicht
> reparieren.

Keine schlechte Idee, das sollte man auch mit dem PCA machen, da wären 
es 40 Pins pro Board.

von Peter D. (peda)


Lesenswert?

Max schrieb:
> Die Ports  müssen gleichzeitig als Ein- und Ausgang betrieben werden
> können. Ich habe aber nicht beachtet, dass die Ports Ein- und Ausgang
> GLEICHZEITIG sein müssen.

Nö, müssen sie nicht.
Es darf nur nicht zu Datenkämpfen kommen bei Kurzschlüssen im Kabel, 
daher open-drain Ausgänge.
Und Eingänge müssen Unterbrechungen erkennen, daher mit Pull-Up.

Die beste Lösung ist daher eine entsprechende Anzahl MCs, z.B. 3 Stück 
ATmega640 für die 200 Anschlüsse. Die sind noch gut lötbar (0,8mm 
Raster).

Man schiebt natürlich nicht 100-mal ein einzelnes Bit durch, sondern 
gibt nur soviele verschiedene Muster aus, daß ein Fehler eindeutig 
erkannt wird.
Wenn die Tests schön schnell erfolgen, lassen sich auch Wackelkontakte 
gut lokalisieren.

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Bauform B. schrieb:

> Frank K. schrieb:
>> Ich würde das mit HC165 und NPIC6C596 machen, und dann modular. Pro
>> Board 48 Pins. Da orderst Du einmal einen 10'er Pack Leiterplatten beim
>> Chinesen und kannst dann nacheinander aufbauen und testen, je nach
>> Bedarf. Wenn Dir da mal ein Pin hopps geht, kannst Du es leicht
>> reparieren.
>
> Keine schlechte Idee, das sollte man auch mit dem PCA machen, da wären
> es 40 Pins pro Board.

Sollte man nicht.

Rechnen wir mal den Worst-Case-Fall durch. Der Fragesteller will 200 
Pins haben. Wir haben also 200 zurücklesbare Open-Drain-Ausgänge, und 
jeder Ausgang hat einen 10k Pullup. Wenn ein einzelner Ausgang auf Low 
gezogen wird, fließen I=U/R=3.3V/10000R=330uA. Das ist vernachlässigbar 
für den Treiberpin, aber auf der anderen Seite sollte es auch nicht 
weniger Strom sein, damit im offenen Zustand der Pin sicher auf High 
gezogen wird.

So, jetzt nehmen den gemeinst möglichen Fall: Alle 200 Pins sind 
miteinander verbunden. Wir haben also 200 parallel geschaltete 
10k-Pullups, die ein Treiberpin auf Low ziehen können muss. Ist also der 
200-fache Strom, also 330uA*200=66mA. Der NPIC6C596 macht das problemlos 
- der kann bis zu 100mA pro Pin zeitlich unbegrenzt im Dauerbetrieb. Der 
PCA kann nur 17mA bei 3V Versorgunsgspannung. Reicht also nicht, das 
wird langfristig zu einer Zerstörung des Pintreibers führen.

Gut, jetzt kann man sagen: "200 Pins parallel, das macht doch niemand!". 
Sicher, kann man. Aber wo zieht man die Grenze? Wenn man mal 
zurückrechnet, liegt sie bei 51 parallel geschalteten Pins, bevor man 
die Spezifikation überschreitet. Bei Verwendung von PCAs kann man also 
nicht mehr als 50 Pins bereitstellen, wenn man den gesamten Apparat 
idiotensicher machen will. Das ist aber ziemlich weit entfernt von den 
200 Pins, die als Ziel angegeben wurden.

Und ich als potentieller Kunde und Verwender erlaube mir jetzt einfach 
mal den Luxus, ein idiotensicheres Gerät zu fordern, das ich nicht mal 
eben so versehentlich kaputtbekomme. Klar, mit 230V und Vorschlaghammer 
bekommt man alles klein, aber ein einfaches, passives, nach Anleitung 
angeschlossenes Testkabel darf nach meinem Verständnis NIEMALS zu einem 
Defekt führen, egal wie es intern beschaltet ist.

Der Fragesteller möge sich daran vielleicht mal ein Beispiel nehmen, wie 
man Geräte und Schaltungen auslegt und was man ganz einfach mal 
übersehen kann.

fchk

PS: Warum selber löten? Es gibt doch Dienstleister, die die Boards nach 
Übermittlung von Gerber und Pick&Place Daten durch ihre 
Automatenbestückung schicken. Dafür designt man natürlich ausschließlich 
SMD-Bausteine ein, weil die Bestückung von TH Komponenten VIEL mehr 
(Faktor 3 bis 5) kostet. Aber das ist ja auch kein ernsthaftes Problem 
mehr in dieser Zeit, wo der geneigte Lochrasterer ernsthafte Probleme 
hat, Bausteine in DIL noch zu bekommen. Auch 400 SMD-Widerstände (200* 
10k Pullup und 200* 22R Serien) und 200 ESD-Schutzdioden im 
SOD523-Package (1.2mm*0.8mm) verlieren so ganz schnell ihre Schrecken.

von Peter D. (peda)


Lesenswert?

Frank K. schrieb:
> So, jetzt nehmen den gemeinst möglichen Fall: Alle 200 Pins sind
> miteinander verbunden.

Man kann sich aber auch die Hose mit der Kneifzange anziehen. Wenn Du 
solch große Angst hast, dann kannst Du das doch einfach in der Firmware 
abfangen. Niemand zwingt Dich, alle Pullups gleichzeitig anzuschalten 
und bei Überlast auch tagelang eingeschaltet zu lassen.
Es sind übrigens nur 100 Adern, d.h. 100 Pullups nötig.

Frank K. schrieb:
> PS: Warum selber löten?

Ich habe nicht den Eindruck, daß der TO gleich eine Massenproduktion 
vorhat.
Für Musterbestückung zahlst Du ordentlich drauf, da sich dann in der 
Regel die Einrichtungskosten potenzieren.
Eine Rasterplatine mit DIP kann sich da schnell rechnen.

Die ATmega640 kann man auch auf fertige Adapterplatinen setzen:

https://www.pollin.de/p/rapitus-samxs-adapterplatine-tqfp-100-810530?gclid=EAIaIQobChMIieODi5-m6AIVyPhRCh2vqQslEAkYASABEgIoavD_BwE

7 MCs im DIP-40 (ATmega162) ginge aber auch.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Peter D. schrieb:
> Man schiebt natürlich nicht 100-mal ein einzelnes Bit durch, sondern
> gibt nur soviele verschiedene Muster aus

um Kurzschlüsse oder Unterbrechengen festzustellen reicht pro Byte 8-Bit 
doch abwechselnd 0x55 und 0xAA alle 8-Bit geprüft

Max schrieb:
> Jedoch sind 50 ICs wirklich etwas viel...
> Ich könnte aber die 74HC595 für die Ausgänge verwenden und die PCA9698
> als Eingänge. Das würde zumindest das ganze auf 30 reduzieren.

da der PCA9698 40 Bit also 5 Byte macht und bis zu 8 adressiert werden 
können, hast du noch 3 Stück übrig! Reicht zwar nicht für alle Eingänge 
reduziert den IC Bedarf aber auf 3 freie PCA9698 und spart 12 
Schieberegister, also nur noch 8x PCA9698 und 13x 74HC595 also nur 21 IC 
statt 30.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.