Hallo, Ich habe maximal 5 I/O's zur Verfügung um 24 Relais zu schalten. Ich möchte den ULN2803 als Treiber verwenden. Weiter habe mir nun einige Port-Expander angesehen und finde vom Funktionsumfang her (konfigurierbare interne Pull-Ups, Reset-Pin) MCP23009 bzw. MCP23S09 passend. Mein Problem ist die Adressierung bei I2C (MPC23009) bzw. der Chip Select bei SPI (MPC23S09). Einer der 5 I/O's wird für den Reset (low-aktiv) benötigt. Bei I2C werden 2 I/O's für SCL und SDA benötigt, somit bleiben nur 2 I/O's um insgesamt 3 Port-Expander zu adressieren, ich kann aber keine festen Adressen geben da ich insgesamt noch mehr Port-Expander benötigen werde. Deshalb habe ich an einen AND-verknüpften Enable (SCK und EN) mit festen Adressen gedacht, ich weiss aber nicht wie gut das ist. Bei SPI werden 3 I/O's für SO, SI und SCK benötigt. Bleibt 1 I/O um 3 Port-Expander zu selektieren (geht nicht). Bei SPI gibt es aber die sogenannte Daisy Chain, aber der Chip muss diese unterstützen. Falls ich das Datenblatt richtig gelesen habe steht dort nichts davon. Gibt es eine einfache Möglichkeit mit 4 I/O's 24 Relais zu schalten? Oder was eint ihr zu meinem I2C + Enable Ansatz?
dann nimm doch einfach einen PCF8574 ... der hat 3 Pins, mit dem man seine Adresse konfigurieren kann. Damit brauchst Du am Controller nur SDA und SCL. Die Adressierung erfolgt dann software-mäßig. Durch die 3 Adress-Pins lassen sich 8 der Expander gleichzeitig an einem I2C betreiben.
Meine Meinung: SPI bringt hier nichts, es sei denn du kannst eine 'daisy chain' machen, d.h. die SPI-Devices ALLE in Serie schalten und nur EIN /CS nehmen. Besser I2C. Da ist Adressierung schon drin. Ich versteh dein Problem ehrlich gesagt gar nicht. Du kannst mit SCL und SDA 8*8 = 64 Kan"ale realisieren. Es bleiben also Pins "ubrig... Was meinst Du mit du kannst keine 'festen Adressen' vergeben?? Das hat doch nix damit zu tun, wie viele Expander du anschliesst.
Digi Spark schrieb: > dann nimm doch einfach einen PCF8574 ... der hat 3 Pins, mit dem man > seine Adresse konfigurieren kann. Damit brauchst Du am Controller nur > SDA und SCL. Die Adressierung erfolgt dann software-mäßig. > > Durch die 3 Adress-Pins lassen sich 8 der Expander gleichzeitig an einem > I2C betreiben. Und wenn das nicht reicht nimm noch die PCF8574A dazu... Die haben eine andere Basisadesse... nitraM
Hallo, aber gerade da ist doch die Idee mit 'daisy chain' genau das richtige. 2 Datenleitungen und einmal ^CS. Einfacher geht fast nicht. Grüße aus Berlin
Digi Spark schrieb: > dann nimm doch einfach einen PCF8574 ... der hat 3 Pins, mit dem > man > seine Adresse konfigurieren kann. Damit brauchst Du am Controller nur > SDA und SCL. Die Adressierung erfolgt dann software-mäßig. > > Durch die 3 Adress-Pins lassen sich 8 der Expander gleichzeitig an einem > I2C betreiben. Das war mein ursprünglicher Ansatz, geht aber nicht. Der MCP23009 kann auch I2C mit Adressen (Dabei wird ein Spannungsteiler mit ADC verwendet). Leider habe ich diese Vorgaben: Stecker mit max. 5 Pins (der Rest ist Speisung) -> 3 Portexpander (?) -> 24 Relais Von diesen Platten sollen mehrere universell mit einem µC verwendet werden. Zusätzlich sollen diese Platten austauschbar sein => Adressen müssen vom µC vergeben werden und nicht fest verdrahtet.
Als Alternative kannst du an die "Wechsel"-Platten einen ATtiny der macht die I/O's und Port-Expander und spricht über I2C/SPI mit dem Master. Dann kannst du alle Aufgabenstellungen damit erschlagen.
Rene Schube schrieb: > Hallo, > > aber gerade da ist doch die Idee mit 'daisy chain' genau das richtige. > 2 Datenleitungen und einmal ^CS. Einfacher geht fast nicht. > > Grüße aus Berlin Kannst du mir sagen ob der MCP23S09 das unterstützt? Ich habe wie gesagt nichts gefunden im Datenblatt. Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/22121b.pdf
Der SO (Serial OUT) des ersten geht in den SI (Serial IN) des zweiten, der SO2 -> SI3 ; SO3 -> SI(n) ; SO(n) -> zurück zum Controller
und warum soll das nicht gehen? Du brauchst sogar nur 4 Leitungen: Versorgungsspannung + SDA + SCL. Diese werden an alle Portexpander durchgereicht. Fertig! Den fünften Pin am Stecker kannst Du dann noch nutzen um die Weihnachtsbeleuchtung oder was auch immer sonst zu steuern ;-)
Rene Schube schrieb: > http://www.mikrocontroller.net/articles/SPI_Daisychain Ja das habe ich auch gefunden, da steht genau der springende Punkt unter Hinweise: > Unterstützen die Slaves Daisychaining?
Digi Spark schrieb: > und warum soll das nicht gehen? Du brauchst sogar nur 4 Leitungen: > Versorgungsspannung + SDA + SCL. Diese werden an alle Portexpander > durchgereicht. Fertig! Den fünften Pin am Stecker kannst Du dann noch > nutzen um die Weihnachtsbeleuchtung oder was auch immer sonst zu steuern > ;-) Wie ich geschrieben habe: > Von diesen Platten sollen mehrere universell mit einem µC verwendet > werden. Zusätzlich sollen diese Platten austauschbar sein => Adressen > müssen vom µC vergeben werden und nicht fest verdrahtet. 1. universell: Wenn jede Platte andere Adressen benötigt sind sie nicht universell. 2. austauschbar: Man sollte jede Platte irgendwie vertauschen/austauschen können, man sollte nicht auf Adressen schauen müssen. Rene Schube schrieb: > Als Alternative kannst du an die "Wechsel"-Platten einen ATtiny > der > macht die I/O's und Port-Expander und spricht über I2C/SPI mit dem > Master. Dann kannst du alle Aufgabenstellungen damit erschlagen. Dieser Ansatz tönt interessant falls ich mit Port-Expander nicht weiterkomme, werde mal schauen ob ich da einen passenden ATtiny finden kann :) Ansonsten könnte ich mir auch etwas mit Multiplexern überlege... Keine Ahnung wie ich das genau machen will.
ein dreifacher DIP-Schalter (und drei Pulldown-Widerstände) drauf und fertig. Beim Austauschen einer Platine sollte das Setzen der richtigen Schalterstellungen ein vertretbarer Aufwand sein. Damit kannst Du jedes Modul an jeder "Stelle" in der Kette (sprich mit jeder Adresse) verwenden. Das ist in meinen Augen durchaus universell ;-) Wenn Du das mit dem Attiny machst, muss der ja auch wissen, auf welche Adresse er reagieren soll. Also genau das selbe Thema wie bei den Portexpandern.
Ich versteh nicht wie manche so auf den I2C Bausteinen rumhacken können, wo es bei SPI viel einfacher läuft, ohne Adresse und 4 zusätzliche Bauteile. Warum nicht drei 74HC595 oder drei TPICxx595, die könnten deine Relais möglicherweise direkt treiben.
avr schrieb: > Ich versteh nicht wie manche so auf den I2C Bausteinen rumhacken > können, > wo es bei SPI viel einfacher läuft, ohne Adresse und 4 zusätzliche > Bauteile. Warum nicht drei 74HC595 oder drei TPICxx595, die könnten > deine Relais möglicherweise direkt treiben. So, mit deiner Möglichkeit habe ich nun 3 verschiedene machbare Szenarien. Ich werde mir das noch durch den Kopf gehen lassen und melde mich welche ich gewählt habe. Zusammenfassung: - I2C Portexpander (MCP23009), SCL Leitung mit einem Enable verknüpfen. - Feste Adressen (auf jeder Platte die gleichen) - 4 I/O's (SDA, SCL, Enable, Reset) - Platten werden durch den Enable nacheinander angesprochen - I2C Multiplexer (PCA9544A) auf Steuerboard - Feste Adressen (auf jeder Platte die gleichen) - 3 I/O's (SDA, SCL, Reset) - Jeweils 1 I2C-Multiplexer für 4 Platten - Schieberegister (74HCT595) kaskadiert - Keine Adressen - SPI kompatibel (SERIN = MOSI, CLK = SCK, RCLK = ^CS) - 4 I/O's Gruss
@ mnme (Gast) >So, mit deiner Möglichkeit habe ich nun 3 verschiedene machbare >Szenarien. 4.) - Schieberegister (TPIC6595) kaskadiert, können direk bis zu 250mA/ Kanal treiben - SPI kompatibel (SERIN = MOSI, CLK = SCK, RCLK = ^CS) - 3 I/Os - all in one Relaistreiber
mnme schrieb: > Von diesen Platten sollen mehrere universell mit einem µC verwendet > werden. Zusätzlich sollen diese Platten austauschbar sein => Adressen > müssen vom µC vergeben werden und nicht fest verdrahtet. Du musst also die Position der Relaisbaugruppen am Bus wissen. Andersherum geht es aber auch, wenn die Relaisgruppe ihre Position weiß. Dafür brauchst du nur eine Daisy chain. Also einen Draht rein und einen raus. Auf der läuft eine serielle Schnittstelle. Deren Pegel wird über Spannungsteiler abgestuft von einer Baugruppe zur nächsten abgeschwächt. Zur Positionsbestimmung wird der Signalpegel auf der Baugruppe gemessen und der Pegel auf den Eingangspegel der seriellen gebracht (besser abgesenkt). Durch die Stromaufnahme weißt du zusätzlich ob und wie viele Baugruppen am Bus hängen (oder stellst Drahtbruch fest). Mit z.B 42V Pegel am Master wird der Störabstand in traumhafte Regionen gezogen und durch die Spannungsteiler das ganze beliebig niederohmig gemacht. Zusätzlich kannst du gesicherte Protokolle fahren. Wenn du das ganze noch auf den LIN Standard aufsetzt ist Betrieb in zwei Richtungen möglich.
@ falk Danke für den Tipp, werde mir das im Hinterkopf behalten für später falls ich wieder so etwas mache. @ jens Eine sehr gute Möglichkeit, mal anders herum. Aber ich denke der Schaltungsaufwand ist zu hoch und lohnt sich nicht gegenüber den anderen Methoden. Schlussendlich habe ich mich für den PCA9544A entschieden, damit ist die Schaltung ausbaufähig und am einfachsten zu realisieren. Zusätzlich habe ich noch 2 freie Pins (einer werde ich für einen zusätzlichen 5V Anschluss verwenden, der andere bin ich noch am überlegen). Viele Dank für die zahlreichen Ideen! Gruss Nicolas
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.