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
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.
@ 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.
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.
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.
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!?
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
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
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...
> 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.
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.
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 ;-)))
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
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.
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.
;-)
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.
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.