Forum: Mikrocontroller und Digitale Elektronik uP anzahl inputs erhöhen


von Simon (Gast)


Lesenswert?

Habe gerade ein neues Projekt begonnen und steh nun vor folgendem
Problem:
Habe einen Hauptprint mit einen uP. von diesem aus gehe ich mit einem
Flachbandkabel das 26 Adern hat (es kann keins genommen werden mit mehr
adern!) auf Nebenprints. Insgesamt 6 Nebenprints, die alle der Rheie
nach angeordnet sind, und jeweils mit einem 26 Adrigen Flachbandkabel
verbunden sind.
Auf jedem Nebenprint brauch ich nun 32 Ouputs, was noch kein Problem
darstellt, dies kann ich über Schieberegister lösen.
Zusätzlich brauch ich aber auch noch 32 Inputs. Bei 16 dieser 32 Inputs
recht es wenn ich alle in einem Zeitraum von etwa 5-10ms einlesen kann
(also 16 * 6 pro print).  Denke da drängt sich ein i2c auf (mit einem
PCF8575CPW Baustein der 16 IO's drauf hat) mit 400kHz , oder ne
bessere Lösung?
Bei den anderen 6*16 ist Problematischer, die muss ich Periodisch
abfragen, und Brauche den Zustand aller 6*16 Inputs innerhalb 100us,
i2C ist allso zu langsam. Ausser, ich nehme für jeden Print einen
eigenen i2c bus mit einem PCF8575CPW Baustein, dann hät ich den zustand
jeweils innerhalb von 70us.
Passt mir irgendwo nicht ganz, da dies nicht wirklich der sinn eines
Buses ist...
hat jemand ne bessere Lösung? (Arbeit mit 5V, über die Prints sind die
IO's max 1.2m entfernt.
Der entscheidende Punkt ist der Preis, billiger ist besser!


Weiter, bin was i2c anbelang neuling. z.b. stellt sich mir die frage ob
ich einen speziellen i2c treiber (z.b PCA9306DCUR) umbedingt brauche,
oder ob ich ihn bei nur einem Slave weglassen kann.
Habe einen uP mit nur einem 400kHz i2c interface. Das heisst bei
mehreren i2c bussen müsste ich diesen softwaremassig inplementieren und
über einen gewöhnlichen io gehen. kann ich da einfach 2 IO's nehmen,
den einen als Output, wo ich auf einen low-side driver gehe, und nach
dem low seid driver fange ich die Spannung ab und gehe auf einen Input
(natürlich noch die entsprechenden Widerstände und Kondensatoren auf
5V). Funktiniert das so?

Ganz schön viele fragen... Falls sich einer die mühe mach meinen text
durchzulesen und mir weiterhelfen kann, möchte ich ihm jetzt schon
danken...

liebe grüsse aus der Schweiz
Simon

So bin mal gespannt ob ich hier in diesem Forum mit hilfe rechnen
kann...

von Christian Rötzer (Gast)


Lesenswert?

Was das hochrüsten von IO's angeht:
Man kann einerseits ein Schieberegister mit parallelem Ladebefehl und
seriellem Ausgang benutzen (z.B. 4021, bzw 74HC4021). Diese müssen
nicht zwangsweise hintereinander sitzen, was ja 6 x 16 Clocks zum
Auslesen benötigen würde. Man kann auch jeden seriellen Ausgang eines
Schieberegisters auf einen eigenen Porteingang des uC geben. Auch
Mischversionen sind möglich:
Beispiel: An die 6 I/Os eines uCs werden jeweils 2 Schieberegister
angeschlossen. Somit kannst Du mit 16 Clockpulsen alle Schieberegister
lesen.
Andererseits kannst Du auch "einfach" 12 Stück 74HC244
Tri-State-Buffer nacheinander auf einen 8-Bit-Port schalten und so der
Reihe nach alle Eingänge abklappern.
Die Selektion der einzelnen HC244 erfolgt dann z.B. über zwei Stück
HC138, an die ein 4-Bit-Addresse angelegt wird.

von Simon (Gast)


Lesenswert?

ok, wie ich geschrieben habe, das mit den Outputs erachte ich als eher
einfach lösbar...

doch wie siehts mit den inputs aus? hat jemand eine idee?????

von A.K. (Gast)


Lesenswert?

Man kann auch Inputs mit Schieberegistern realisieren (z.B. dem
'4021).

Alternativen zu Schieberegister:

Output: Adressierbares Latch '259. Macht Einzelbitsteuerung
ausgesprochen einfach.

Input: 8-zu-1 Multiplexer kann man auch verwenden.

von Markus (Gast)


Lesenswert?

Hallo,
hast Du wegen Deinen Inputs schon mal sowas wie hier in der
Codesammlung gedacht:
http://www.mikrocontroller.net/forum/read-4-264943.html#new
Die 165er dann kaskadieren und ein Pin als CLK über alle laufen lassen,
wärend ein Pin dann seriell die acht Eingänge abklappert ;)
Also sowas:


+---------+             +---------+
|         |--CLK-----+--| 74HC165 |--- 8 Eingänge
|  µC     |-In1------|--|         |
|         |          |  +---------+
|         |          |  +---------+
|         |          +--| 74HC165 |--- 8 Eingänge
|         |-In2------|--|         |
|         |          |  +---------+
|         |          |  +---------+
|         |          +--| 74HC165 |--- 8 Eingänge
|         |-In3------|--|         |
|         |          |  +---------+
|         |          |  +---------+
|         |          +--| 74HC165 |--- 8 Eingänge
|         |-In4---------|         |
|         |             +---------+
+---------+

Dmit hättest Du 32 Eingänge mit 5 Pins am µC realisiert ;)
Wie schnell die 165er sind kannst Du im Datenblatt nachlesen, aber ich
denke Deine 5 ms sollten kein großes Problem sein ;)
Ist allerdings eine reine Polling Lösung !!!!!!!!
Hoffe weitergeholfen zu haben,
Markus

von Simon (Gast)


Lesenswert?

Vielen dank

Nach datenblatt kann ich den 165er mit mehreren MHz takten.
würde da was dagegensprechen wenn ich dann einfach 12 Stück in serie
schalte?

von DerLöter (Gast)


Lesenswert?

Hallo Simon,
nur mal interessehalber,
entwickelst du eventuell für einen deutschen Roboterhersteller?
mfg DerLöter

von Simon (Gast)


Lesenswert?

DerLöter
weder deutsch noch roboter...

von Hauke Sattler (Gast)


Lesenswert?

Man kann auch statt der ganzen Buffer und Schieberegister kann man auch
einfach zwei 82C55 pro Print nehmen. Die haben jeweils 24
konfigurierbare I/O Pins.
Diese werden dann an einem 8bit Port angeschlossen.
Die 12 Chipselect Leitungen kann st du entweder separat über das Kabel
führen oder mit einem Multiplexer aufdröseln (HC4514 , HC237).
Falls du einen AVR mit XRAM Interface (mega162,mega64,mega128,mega8515
usw.) nimmst, dann kannst du damit die Abfrage oder das Setzen eines
8bit Ports mit einem einzigen Assemblerbefehl bewerkstelligen.
Die zusätzlichen Portpins werden dann einfach wie RRAM Adressen
angesprochen.

cu
Hauke

von Tom (Gast)


Lesenswert?

Alternativ könntest du den MAX7301 hernehmen, der hat 28 I/Os und wird
per SPI angesprochen.

Grüße

von Markus (Gast)


Lesenswert?

Zitat Simon:
"Vielen dank

Nach datenblatt kann ich den 165er mit mehreren MHz takten.
würde da was dagegensprechen wenn ich dann einfach 12 Stück in serie
schalte?"

Hi Simon,
nein Du kannst soviele nehmen wie Du brauchst und die Leitungen nicht
zu lang werden für den CLK Eingang ;)
Bei zwölf Stück benötigst Du bei meinem Vorschlag 13 Pins.
Du kannst aber auf 6 Pins kommen, wenn Du die Chips addressierst und
nacheinander abfragst (vereinfacht auch die Programmierung):

1 Pin CLK
1 Pin seriell in
4 Pin 4bit Adresse = 16 Chips maximal

Die Adressierung kannst Du auf verschieden Weisen erreichen, ein paar
Vorschläge sind ja in dem Thread hier vorhanden ;)
Aber wenn Du 13 Pins übrig hast geht's direkt am schnellsten und
günstigsten.
Bye,
Markus

von Simon (Gast)


Lesenswert?

Markus
Danke für deine Hilfe

Adressierungen möcht ich nach Möglichkeit vermeiden.

"nein Du kannst soviele nehmen wie Du brauchst und die Leitungen
nicht
zu lang werden für den CLK Eingang ;)"

Naja stellt sich die Frage wie lange dauf die CLK Leitung sein vor
probleme auftretten? Hab vor mit 1MHz zu takten, liegen da 3m
drin?????

mfg
Simon

von Markus (Gast)


Lesenswert?

Hi Simon,
bei der einfachsten Variante müssen alle Bauteile gleichzeitig den Takt
erhalten, damit Du keine "Stolperer" in Dein Programm zum auslesen
bekommst ;)
Da die suchfunktion in der http://de.wikipedia.org gerade asugefallen
ist kann ich Dir keinen direkten link geben.
1Mhz bei drei Metern Länge solten noch OK sein, aber suche bitte vorher
nochmal im Netz nach der Formel für die Verzögerung bei Signalen auf
Leitungen ;)
Der Takt des Timers für die CLK Leitung muß sowohl am µC Pin als auch
dem letzten 165er an der drei Meter Leitung zeitgleich erfolgen.
Umgekehrt natürlich auch !
Um Einstreuungen zu vermeiden und Du dir Möglichkeit hast Deinen
Anschluß mit einem breiteren Kabel zu versehen, empfehle ich die
doppelte Anzahl an Leitungen und immer ein GND zwischen zwei
Signalleitungen zu haben ;)
Wenn hier jemand ein paar nützliche Links zum Thema hat, bitte posten
;)
Bye,
Markus

von holm (Gast)


Lesenswert?

Wo ist das Problem?

SPI und verschiedene Chipselekt Leitungen, fertig.
Die SPI liest und schreibt sowiso gleichzeitig, Du kannst also
neue Ausgaben in an die SPI angeschlossene Schieberegister
rausschieben, während Deine Input Daten in der selben Zeit reinkommen.
Das funktioniert mit mehreren MHZ, wenn die Leitungen nicht zu lang
werden. Wieso soll das mit dem Schieberegister nur für Ausgaben gehen?

Gruß,

Holm.

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.