Forum: Mikrocontroller und Digitale Elektronik 40x SPI-Chipselect?


von Paul K. (Gast)


Lesenswert?

Hallo,

für ein Temperaturmessgerät, was ich für mein Hobbyprojekt benötige, 
verwende ich 40! ICs für PT100 mit SPI-Schnittstelle. Es ist sowohl 
Schreib- als auch Lesezugriff nötig.

Wie kann ich am besten die 40x Chip Select auf nur einen einzigen 
wandeln?

Ich möchte nicht die Variante von SPI benutzen, bei der MOSI bzw. MISO 
durchgeschliffen wird, sondern wirklich für jedes IC ein eigenes 
Chipselect.

Kennt evtl. jemand einen geeigneten Baustein?

Gruß,
Paule

von Alex W. (a20q90)


Lesenswert?

Schieberegister! 74HC164

von JojoS (Gast)


Lesenswert?

Von Linear kam vor kurzem Werbung, LTC2983 ist ein Chip für 20 Sensoren, 
hilft vielleicht auch.
http://cds.linear.com/docs/en/datasheet/2983f.pdf

von m.n. (Gast)


Lesenswert?

JojoS schrieb:
> LTC2983 ist ein Chip für 20 Sensoren,

Aber nur auf den 1. Blick:
Beitrag "Re: ca. 100 PT1000 Messwiderstände messen"

Paul K. schrieb:
> Wie kann ich am besten die 40x Chip Select auf nur einen einzigen
> wandeln?

Das finde ich ungeschickt, zumal dann alle Leitungen mit Ausnahme von 
/CS parallel liegen.
Wie genau muß denn die Temperaturmessung sein? Gingen auch PT1000?
Dann wäre es möglich, per µC mehrere Kanäle (<= 8) zu messen und dann 
von nur noch fünf Einheiten die Daten einzulesen.

von Schaulus Tiger (Gast)


Lesenswert?

74HC138

"Wenn man nur Schieberegister hat, sieht jedes Problem seriell aus"

von Falk B. (falk)


Lesenswert?

@ Paul K. (Gast)

>Wie kann ich am besten die 40x Chip Select auf nur einen einzigen
>wandeln?

Gar nicht.

Man kann z.B. 5 Stück 74HC138 und bissel andere Logik nehmen, um einen 1 
aus 40 Dekoder zu basteln. Dann braucht man aber 6 IO Pins.

von m.n. (Gast)


Lesenswert?

Schaulus Tiger schrieb:
> "Wenn man nur Schieberegister hat, sieht jedes Problem seriell aus"

Beim 74HC164 wird das Problem eher noch größer, da bei jedem 
Durchschieben eines Bits alle /CS einmal aktiviert werden.
Der Typ stammt nämlich aus einer Zeit, wo Ausgangsregister die Fachwelt 
noch überforderten.
74HC4094 bzw. 74HC595 sind da deutlich besser.

von Peter D. (peda)


Lesenswert?

Falk Brunner schrieb:
> Man kann z.B. 5 Stück 74HC138 und bissel andere Logik nehmen, um einen 1
> aus 40 Dekoder zu basteln. Dann braucht man aber 6 IO Pins.

Also 5 Pins mehr, als bei der 74HC164 Lösung.

Beim 74HC164 braucht man nur eine extra Taktleitung. Als Datenleitung 
für die einzuschiebende 0 kann man MOSI mitbenutzen.

Zwischenzeitliche /CS interessieren einen SPI-Slave nicht, solange SCK 
ruhig bleibt.

von Route_66 H. (route_66)


Lesenswert?

m.n. schrieb:
> Beim 74HC164 wird das Problem eher noch größer, da bei jedem
> Durchschieben eines Bits alle /CS einmal aktiviert werden.

Genau das will der TO doch!?

von Thomas DG5MPQ (Gast)


Lesenswert?

Hallo Zusammen

und wenn man einen 74hC595 nimmt, dann braucht man 2 Zusätzliche 
Leitungen zum SPI dazu und hat den Vorteil, dass der CS ruhig bleibt bis 
die Schieberegister geladen sind....

Gruß Thomas

von Christian K. (christian_rx7) Benutzerseite


Lesenswert?

Warum nicht 3 Stück 74HC154?
Die Datenleitungen kannst du parallel ansteuern und die Auswahl machst 
du über die Enable Leitungen, braucht insgesamt 7 Leitungen am µC.

Christian_RX7

von Martin (Gast)


Lesenswert?

Wieso nimmt man dann nicht gleich einen MCU mit mindestens 50 GPIOs?

Paul K. schrieb:
> Ich möchte nicht die Variante von SPI benutzen, bei der MOSI bzw. MISO
> durchgeschliffen wird, sondern wirklich für jedes IC ein eigenes
> Chipselect.

Verstehe ich nicht ganz? Ist SPI nicht ein BUS der für sowas vorgesehen 
ist?
Nimm doch einfach einen ATmega1280 oder so...

von uwe (Gast)


Lesenswert?

> ICs für PT100 mit SPI-Schnittstelle.
Welche denn? Kann man die nicht in einer Daisy chain betreiben, dann 
brauchst du nur einen CS, MISO, MOSI, und SCLK am Master.

von uwe (Gast)


Lesenswert?

Naj für SCLK und CS eventuell noch nen Bustreiber für den Strom bzw. um 
die Kapazität umzuladen.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Paul K. schrieb:
> für ein Temperaturmessgerät, was ich für mein Hobbyprojekt benötige,
> verwende ich 40! ICs für PT100 mit SPI-Schnittstelle.

Bei der Anforderung hätte ich auf I2C oder etwas Eigenes 
zurückgegriffen. Auf diese Weise kann man zum Beispiel die entsprechende 
Menge ATTinies an den Bus hängen, die dann alle separat ihre PT100 
Messung machen und die Daten nach Aufforderung an den Mastercontroller 
schicken.

von Ursus P. (unwichtig)


Lesenswert?

Paul K. schrieb:
> Hallo,
> Ich möchte nicht die Variante von SPI benutzen, bei der MOSI bzw. MISO
> durchgeschliffen wird, sondern wirklich für jedes IC ein eigenes
> Chipselect.

I/O Expander geht nicht, Was hast du für kontroller? Wenn ein kompletes 
Port frei hast, kannst dann ein Multiplexer nehmen ;-)))

von Georg (Gast)


Lesenswert?

Hallo,

entweder du dekodierst 6 Adressen auf 40 x CS, die Standardlösung. Oder 
du schiebst die 40 Bit durch entsprechend viele Schieberegister. Wenn du 
keinen wahlweisen Zugriff brauchst, kannst du 1 einzelnes Bit bei jedem 
Zugriff um eins weiterschieben, brauchst also zwischen 2 Slaves bloss 
einen Clk-Puls.

An der Tatsache dass man 40 Leitungen braucht führt so oder so kein Weg 
vorbei.

Georg

von Pete K. (pete77)


Lesenswert?

Paul K. schrieb:
> 40! ICs für PT100 mit SPI-Schnittstelle

Was sind denn das für ICs, die Du benutzt? D.h. jeweils ein PT100 hängt 
an einem dieser ICs?
Und Du willst alle 40 ICs dannn durch einen Master-IC (AVR?) steuern und 
jeweils die CS Leitungen vom Master-IC durchsteuern und die Messwerte 
dann per SPI auslesen?

Mit einem Port-Extender (MCP23017 et al.) oder einem TQFP64 AVR (z.B. 
ATMega644 oder ATMega128) als Master-IC ist das auch machbar. Diese 
haben 53 frei GPIOs und können die 40 CS der Reihe nach adressieren.

von ;-) (Gast)


Lesenswert?

Paul K. schrieb:
> Hallo,
>
> für ein Temperaturmessgerät, was ich für mein Hobbyprojekt benötige,
> verwende ich 40! ICs für PT100 mit SPI-Schnittstelle. Es ist sowohl
> Schreib- als auch Lesezugriff nötig.
>
> Wie kann ich am besten die 40x Chip Select auf nur einen einzigen
> wandeln?
>
> Ich möchte nicht die Variante von SPI benutzen, bei der MOSI bzw. MISO
> durchgeschliffen wird, sondern wirklich für jedes IC ein eigenes
> Chipselect.
>
> Kennt evtl. jemand einen geeigneten Baustein?
>
> Gruß,
> Paule

Servus Paule

wie mein Vorredner schon sagte, würde ich auch den MCP23S17 nehme. Der 
SPI Portexpander hat 2 volle 8 Bit Ports, somit hast du mit einem 
Baustein 16 GPIO, mit zwei 32 und mit drei 48 - das sollte dann reichen.

Empfehle dir wegen Platzbedarf die SMD Variante.

Wenn Du dann 3 solcher Bausteine im Einsatz hast, können die GPIO's lese 
und auch schreibend eingesetzt werden, auch als multipli, darunter 
verstehe ich, du kannst mit einem Instruct Byte mehrere GPIO 
gleichzeitig verändern.

write(0x25)

d0=1
d1=0
d2=1
d3=0
d4=0
d5=1
d6=0
d7=0

Ansteuern tust die SPI expander ganz einfach über seine Adresse, du 
kannst acht solcher gleichen Bausteine einsetzen, sie unterscheiden sich 
über die Adresse die man über A0 A1 A2 setzen kann.

Alle drei auf GND gezogen, ist das der Baustein 0
A0 auf Vcc+ gezogen ist das der Baustein 1
A0 und A1 auf Vcc+ Baustein 2
usw

Wenn du einen GPIO einlesen willst, und du weisst, welchen du einlesen 
willst, z.B den des Baustein 3 Port A Bit3
dann schreibst einfach

Value = SPI_READ(Device, GPIO);

Wenn du dir schöne Defines anlegst,

..
#define Regler19 SPI_READ(Device3,GPIOA3);
#define Regler20 SPI_READ(Device3,GPIOA4);
#define Regler21 SPI_READ(Device3,GPIOA5);
#define Regler22 SPI_READ(Device3,GPIOA6);
#define Regler23 SPI_READ(Device3,GPIOA7);
..

ist das ein klacks

ReadValue = Regler19;

und schreiben?

routine anlegen fürs schreiben, und dann genauso.

;-)

von Michael S. (rbs_phoenix)


Lesenswert?

Ich würde auch entweder einen größeren uC nehmen oder aber mit einem 2. 
uC einen "Treiber" bauen. Müsste dann wohl ein TQFP64/QFN64 sein. Der 
muss ja ansich nichts können. Dem kannst du via SPI, I2C, UART oder auch 
1wire sagen, welche Leitung er aktiv schalten soll. Es ginge natürlich 
auch mit 2 uCs in DIP28/SOIC28/SSOP28... Dann würde ich aber I2C nehmen.

Gibt es denn einen Grund, weshalb du nicht alle ICs in Reihe schalten 
kannst?

Vielleicht gibt es solche RTD2Digital ICs ja auch mit I2C? Oder mit SPI, 
dann aber mit der Möglichkeit, mehrere Pt100 zu messen.

von Peter D. (peda)


Lesenswert?

Michael Skropski schrieb:
> Gibt es denn einen Grund, weshalb du nicht alle ICs in Reihe schalten
> kannst?

SPI-ADCs sind üblicher Weise nicht kaskadierbar.
Sie kriegen ein Steuerwort und antworten mit dem Meßwert. Das Steuerwort 
wird nicht durchgeschleift.

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.