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
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
;-)
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