Ich arbeite an einem Projekt, in dem ich 32 Ausgänge von einer MCU benötige, die nur 8 freie Ausgänge hat.
Um mein Ziel zu erreichen, habe ich folgende Voraussetzungen:
Ich muss in der Lage sein, mehr als einen Ausgang gleichzeitig umzuschalten
Daten müssen so schnell wie möglich eintreffen
Ich kann keine Datenpakete verlieren
Die Daten sollten zuverlässig übertragen werden
Ich überlege, einen 4-16 Decoder zu verwenden, aber ich kann damit nicht mehr als einen Ausgang gleichzeitig schalten.
Ich kann die I2C-Kommunikation verwenden, um meine IOs-Pins zu erweitern, aber ich bin mir nicht sicher, ob ich Probleme mit Timing und Datenpaketen haben werde.
Eine Möglichkeit besteht darin, Multiplexing zu verwenden.
Ich verwende einen AM3359 ARM Cortex-A8 @ 25Mhz
Irgendwelche anderen Ideen?
I2C arbeitet standardmäßig mit 100 kHz, 400 kHz, 1 MHz und 3,4 MHz. Viele i2c-Expander können das tun, was Sie brauchen, sowohl Eingang als auch Ausgang. Und es hat Bestätigungsbits, damit Sie (irgendwie) wissen, ob ein Expander das Datenpaket empfangen hat.
Ohne Ihre genauen Datenratenanforderungen zu kennen, kann ich nicht sicher sein, aber i2c-Expander sind so gut wie jeder andere Typ.
Update: Da Sie 1MHz und einen 25MHz MCU erwähnt haben, könnte der Microchip MCP23009 3,4MHz 8bit I2C Expander funktionieren. Mit einem Spannungsteiler am Adress-Pin können bis zu 8 auf einem einzigen Bus verwendet werden. Der MCP23018 ist die 16-Bit-Version, Sie benötigen also nur 2 (und könnten sie bei Bedarf abtasten).
Alternativ gibt es SPI-Expander, die bis zu 10 MHz erreichen können. Der MCP23009/18 kann sowohl I2C bei 3,4 MHz als auch SPI bei 10 MHz, sodass Sie beide testen können, um zu sehen, was am besten zu Ihnen passt.
Ein üblicher Ansatz besteht darin, eine Kette von 74HC595 oder ähnlichen Serial-In-Parallel-Out-Schieberegister-Chips zu verwenden und die Kette über die Taktausgangs- und MOSI-Drähte eines SPI-Ports sowie einen "normalen" I/O anzusteuern Stift. Der SPI-Clock-Output-Pin sollte mit dem Shift-Clock-Eingang jedes Schieberegisters verbunden sein, und der gewöhnliche I/O-Pin sollte mit dem Register-Clock-Eingang jedes Shifters verbunden sein. Ein Shifter sollte seinen Dateneingang mit MOSI verbunden haben; Ein zweiter Shifter sollte seinen Dateneingang mit dem Datenausgang des ersten verbinden. Wenn es einen dritten Schalthebel gibt, sollte sein Dateneingang mit dem Datenausgang des zweiten verbunden werden usw.
Unter Verwendung dieses Ansatzes können drei Prozessorpins mit einer beliebigen Anzahl von Schieberegisterchips verbunden werden, die gemeinsam eine beliebige Anzahl von Pins steuern. Um die Ausgänge einzustellen, senden Sie an den SPI-Port die Daten, die in alle Shifter gehen sollen, und senden Sie zuerst die Daten für den Shifter, der am weitesten vom Prozessor entfernt ist. Sobald alle Daten gesendet wurden, bewirkt das Pulsen des Registertaktpins hoch und dann niedrig, dass sich alle Schieberegisterausgänge gleichzeitig ändern. Man kann bei jedem Schritt so viele oder so wenige Ausgänge wie gewünscht ändern; Der einzige Faktor, der die Anzahl der Ausgänge begrenzt, die man steuern kann, ist die Notwendigkeit, den Zustand jedes Ausgangs jedes Mal neu zu spezifizieren, wenn man einen von ihnen ändern möchte.
Wenn Sie nur bestimmte Gruppen von Ausgängen benötigen, um gleichzeitig wechseln zu können, kann es hilfreich sein, mehrere unabhängige Schieberegisterketten zu haben. Alle Ketten können sich den Taktausgang und die MOSI-Pins teilen (unter Verwendung eines Registertaktausgangs pro Kette), wenn man sicherstellt, dass, sobald der Code beginnt, Daten in eine Kette zu verschieben, alle Daten für diese Kette gesendet und vor dem SPI getaktet werden Bus wird für irgendetwas anderes verwendet. Wenn man 240 Ausgänge hat, die gelegentlich geändert werden müssen, und 16, die etwas häufiger geändert werden müssen, bedeutet das Geben der Chips, die 16 sich häufig ändernde Ausgänge steuern, ihren eigenen Registertaktpin, dass das Ändern dieser Pins nur das Senden von zwei Bytes aus dem SPI erfordern wird statt 32.
Wie @passerby sagt, ist I2C das einfachste Protokoll, eine Leitung für Daten und eine andere für die Uhr. Sie können es mit Sodtware erstellen, und ich denke, dass die Timing-Anforderungen minimal sind, und da Sie den Expander nur als Ausgänge verwenden, wird es keine geben Irgendein Problem ... Ich denke, es gibt kein Minimum für I2C ...
Eine andere Idee, die ich dachte, ist die Verwendung von Latches mit einem Decoder, um den Bus zu adressieren, aber mit diesem Maximum können Sie 16 Ausgänge erreichen.
gbmhunter
Joe Hass
Butzke
Butzke
pjc50
Butzke