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...
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.
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?????
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.
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
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?
Hallo Simon, nur mal interessehalber, entwickelst du eventuell für einen deutschen Roboterhersteller? mfg DerLöter
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.