Forum: Mikrocontroller und Digitale Elektronik Individuelle Ansteuerung von mehreren Shieberegister mit SPI


von Nesrine G. (nesrine_g920)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

Ich habe einen board mit resistiver Last, die Auf mehrere Widerstaende 
verteilt ist. Jeder Widerstandslast ist mit einem power MOSFET an oder 
ausgeschaltet. Das Muster für das an und ausschalten möchte ich mit SPI 
zu einem Shieberegister schicken und dann am Ausgang ausgeben. Mein Ziel 
ist es mehrere Shieberegister zu kaskadieren, sie aber individuell 
auszugeben.

Ich habe diesen Artikel gefunden für die Schaltung der Schieberegister:

http://rn-wissen.de/wiki/index.php/Portexpander_am_AVR#Schaltplan

nur diese Schaltung schaltet gleich den Ausgang nach dem die Werte 
geladen worden sind, indem der chip select Signal of hoch gestellt wird.

Meine Frage: Kann ich einfach total auf das CS Signal verzichten? und 
nur das clock und den Data signal benutzen? Für das Latchen werde ich 
einen anderen unabhängigen PIN signal benutzen , damit ich den Ausgang 
nach meinem Willen einschalten kann. Der Schieberegister braucht ja eh 
an sich nur den Clock zum Shieben, oder? Das CS wird von der Software 
Seite natürlich "existieren"

Was denkt ihr? Ich habe ein Foto hinzugefügt um ein bisschen mein 
Vorhaben zu verdeutlichen.

Edit:
======================================================================

Vielleicht noch zur Erklärung, warum ich das machen möchte:

Die verschiedenen Schieberegister sitzen auf unterschiedliche Boards. 
Außer der Signal Sende Kontrolle gibt es auch ein Timer control. Die 
Werte von den Schieberegister werden an deren entsprechenden boards an 
verschiedenen Zeiten durchgeschaltet. Daher brauche ich die 
unterschiedlichen Latch Signale. Ausserdem möchte ich nicht direct nach 
dem Senden die Werte durchschalten, was ja der Fall mit chip select ist.

Daher denke ich mir im normal Fall braucht ja ein Schieberegister zum 
schieben nur die CLock und die data und zum Latchen nur das Latch 
signal. Also könnte ich ich die Clock and die Data dem SPI entziehen und 
mein latch signal selber hinzufügen.


würde es so Sin  machen?
======================================================================== 
=

danke!!

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@Nesrine Ghajati (nesrine_g920)

>zu einem Shieberegister schicken und dann am Ausgang ausgeben. Mein Ziel
>ist es mehrere Shieberegister zu kaskadieren, sie aber individuell
>auszugeben.

Das ist der Normalfall.

>nur diese Schaltung schaltet gleich den Ausgang nach dem die Werte
>geladen worden sind, indem der chip select Signal of hoch gestellt wird.

Das ist der Sinn der Sache.

>Meine Frage: Kann ich einfach total auf das CS Signal verzichten?

Nein.

> und
>nur das clock und den Data signal benutzen? Für das Latchen werde ich
>einen anderen unabhängigen PIN signal benutzen , damit ich den Ausgang
>nach meinem Willen einschalten kann.

Man braucht nicht mehrere Chip Select Signale für die einzelnen 
Schieberegister, ein gemeinsames ist ausreichend und logisch besser.

>an sich nur den Clock zum Shieben, oder? Das CS wird von der Software
>Seite natürlich "existieren"

Wo ist dann das Problem?

>Was denkt ihr?

Du denkst zu kompliziert. In deiner Software gibt es ein Array, welches 
alle Daten aller Schieberegister enthält. Willst du nun nur ein 
einzelnes Bit ändern, tust du das mittels Bitmanipulation in diesem 
Array und schreibst ALLE Daten erneut auf die Schieberegister incl. Chip 
Select. Dann ändert sich nur dieses eine Bit an den Ausgängen, alle 
anderen werden mit dem gleichen Wert wie zuvor geladen. So kann man 
jedes beliebige Bit einzeln ansteuern.

von Nesrine G. (nesrine_g920)


Lesenswert?

Vielleicht noch zur Erklärung, warum ich das machen möchte:

Die verschiedenen Schieberegister sitzen auf unterschiedliche Boards. 
Außer der Signal Sende Kontrolle gibt es auch ein Timer control. Die 
Werte von den Schieberegister werden an deren entsprechenden boards an 
verschiedenen Zeiten durchgeschaltet. Daher brauche ich die 
unterschiedlichen Latch Signale. Ausserdem möchte ich nicht direct nach 
dem Senden die Werte durchschalten, was ja der Fall mit chip select ist.

Daher denke ich mir im normal Fall braucht ja ein Schieberegister zum 
schieben nur die CLock und die data und zum Latchen nur das Latch 
signal. Also könnte ich ich die Clock and die Data dem SPI entziehen und 
mein latch signal selber hinzufügen.


würde es so Sin  machen?

Danke

von Falk B. (falk)


Lesenswert?

@Nesrine Ghajati (nesrine_g920)

>Die verschiedenen Schieberegister sitzen auf unterschiedliche Boards.

Und sind dennoch nacheinenander verschaltet? Das klingt nach einem 
ungünstigen Konzept.

>Außer der Signal Sende Kontrolle gibt es auch ein Timer control. Die
>Werte von den Schieberegister werden an deren entsprechenden boards an
>verschiedenen Zeiten durchgeschaltet.

In welchem Bereich liegen diese Zeiten? Mikrosekunden, Millisekunden 
oder größer?

> Daher brauche ich die
>unterschiedlichen Latch Signale.

Nicht zwangsläufig.

> Ausserdem möchte ich nicht direct nach
>dem Senden die Werte durchschalten,

Hmmm. Mit diesem Misch/Masch kommst du aber ziemlich schnell in andere 
Probleme, denn du kannst die jeweils anderen Schieberegister nicht 
laden, ohne die vorherigen/nachfolgenden zu beeinflußen. Dein 
Gesamtkonzept ist fragwürdig.

Entweder macht man es so wie von mir oben beschrieben, das geht auch mit 
verschiedenen Ausgabezeiten für die einzelnen Register.

Oder man trennt die Register komplett auf und klemmt die seriellen 
Eingänge
alle parallel an MOSI und verpasst jedem Schieberegister ein eigenes 
chip select Signal. Dann ist jedes Schieberegister ein unabhängiger 
SPI-Slave. Allerdings braucht man dann für das einfach 74HC595 noch ein 
Logikgatter, welches den Schiebetakt deaktiviert, wenn Chip Select nicht 
aktiv ist. Und da du das Einschieben neuer Daten vom Speichern und 
Ausgeben trennen willst, brauchst du sogar ZWEI Chip Selects pro 
Schieberegister! Ein zur Eintakten neur Daten und eins zur Übernahme!

Du siehst, das 2. Konzept ist noch aufwändiger.

>Daher denke ich mir im normal Fall braucht ja ein Schieberegister zum
>schieben nur die CLock und die data und zum Latchen nur das Latch
>signal. Also könnte ich ich die Clock and die Data dem SPI entziehen und
>ein latch signal selber hinzufügen.

Das wird alles chaotisch.

K.I.S.S.!!!

https://de.wikipedia.org/wiki/KISS-Prinzip


>würde es so Sin  machen?

Nein.

von Nesrine G. (nesrine_g920)


Lesenswert?

Falk B. schrieb:
> @Nesrine Ghajati (nesrine_g920)
>
>>Die verschiedenen Schieberegister sitzen auf unterschiedliche Boards.
>
> Und sind dennoch nacheinenander verschaltet? Das klingt nach einem
> ungünstigen Konzept.

nicht so ganz , die boards werden alle Arduino Shields sein und werden 
aufeinander gestapelt werden. Ich koennte die pins so waehlen, dass sie 
kaskadiert sind.
>
>>Außer der Signal Sende Kontrolle gibt es auch ein Timer control. Die
>>Werte von den Schieberegister werden an deren entsprechenden boards an
>>verschiedenen Zeiten durchgeschaltet.
>
> In welchem Bereich liegen diese Zeiten? Mikrosekunden, Millisekunden
> oder größer?

Also jetzt liegen die im Millisekunden Bereich, in der Zukunft aber soll 
auch für viel kleinere zeitbereiche passen, also im Mikro.

>
>> Daher brauche ich die
>>unterschiedlichen Latch Signale.
>
> Nicht zwangsläufig.


>
>> Ausserdem möchte ich nicht direct nach
>>dem Senden die Werte durchschalten,
>
> Hmmm. Mit diesem Misch/Masch kommst du aber ziemlich schnell in andere
> Probleme, denn du kannst die jeweils anderen Schieberegister nicht
> laden, ohne die vorherigen/nachfolgenden zu beeinflußen. Dein
> Gesamtkonzept ist fragwürdig.

Das Wichtige indem Fall sind die Werte am Ausgang und die werden mit dem 
Senden der neuen Werte nicht beinfluesst, solange ich den entsprechenden 
Shieberegister nicht latche. oder?

>
> Entweder macht man es so wie von mir oben beschrieben, das geht auch mit
> verschiedenen Ausgabezeiten für die einzelnen Register.

Könntest du bitte deine Methode mehr erklären, hab nicht so richtig 
verstanden.

>
> Oder man trennt die Register komplett auf und klemmt die seriellen
> Eingänge
> alle parallel an MOSI und verpasst jedem Schieberegister ein eigenes
> chip select Signal. Dann ist jedes Schieberegister ein unabhängiger
> SPI-Slave. Allerdings braucht man dann für das einfach 74HC595 noch ein
> Logikgatter, welches den Schiebetakt deaktiviert, wenn Chip Select nicht
> aktiv ist. Und da du das Einschieben neuer Daten vom Speichern und
> Ausgeben trennen willst, brauchst du sogar ZWEI Chip Selects pro
> Schieberegister! Ein zur Eintakten neur Daten und eins zur Übernahme!
>

Du meinst jetzt ein Logikgatter zum multiplexen der Clock?
ob ich jetzt ein Chip select signal oder einen von mir definierten 
signal nehme (für das latchen) , würde es einen großen Unterschied 
machen?

> Du siehst, das 2. Konzept ist noch aufwändiger.
>
>>Daher denke ich mir im normal Fall braucht ja ein Schieberegister zum
>>schieben nur die CLock und die data und zum Latchen nur das Latch
>>signal. Also könnte ich ich die Clock and die Data dem SPI entziehen und
>>ein latch signal selber hinzufügen.
>
> Das wird alles chaotisch.


das war nur weiteres Erklaeren von meiner Denkweise:)
>
> K.I.S.S.!!!
>
> https://de.wikipedia.org/wiki/KISS-Prinzip
>
>>würde es so Sin  machen?
>
> Nein.

ok ich versteh es ist nicht die eleganteste Lösung...bei weitem. Aber 
zumindest bei der Methode  (falls ich das zweite Konzept nehme) brauche 
ich kein extra Gatter. aber das gatter is dedinitiv die bessere Lösung.

Wie oben gefragt, koenntest du mir deine Methode mit dem Array näher 
erkären ( mit for dummies Weise):)


Danke für die zeit!!

von Falk B. (falk)


Lesenswert?

@Nesrine Ghajati (nesrine_g920)

>nicht so ganz , die boards werden alle Arduino Shields sein und werden
>aufeinander gestapelt werden. Ich koennte die pins so waehlen, dass sie
>kaskadiert sind.

Hmmm, gerade da ist eine Kaskadierung eher fragwürdig.

>> In welchem Bereich liegen diese Zeiten? Mikrosekunden, Millisekunden
>> oder größer?

>Also jetzt liegen die im Millisekunden Bereich, in der Zukunft aber soll
>auch für viel kleinere zeitbereiche passen, also im Mikro.

Ganz schön schnell. Was willst du denn damit machen?

>Das Wichtige indem Fall sind die Werte am Ausgang und die werden mit dem
>Senden der neuen Werte nicht beinfluesst, solange ich den entsprechenden
>Shieberegister nicht latche. oder?

Ja.

>> Entweder macht man es so wie von mir oben beschrieben, das geht auch mit
>> verschiedenen Ausgabezeiten für die einzelnen Register.

>Könntest du bitte deine Methode mehr erklären, hab nicht so richtig
>verstanden.

Steht doch alles oben. Die kaskadierten Schieberegister werden als ein 
einziges Register mit nur einem Chip Select behandelt.

>Du meinst jetzt ein Logikgatter zum multiplexen der Clock?

Ja. Und es heißt der Takt 8-0

>ob ich jetzt ein Chip select signal oder einen von mir definierten
>signal nehme (für das latchen) , würde es einen großen Unterschied
>machen?

???
Du brauchst auf jeden Fall 2 Signale pro Schieberegister.

>ok ich versteh es ist nicht die eleganteste Lösung...bei weitem. Aber
>zumindest bei der Methode  (falls ich das zweite Konzept nehme) brauche
>ich kein extra Gatter.

Doch. Extra Gatter UND je zwei Steuersignale, eins als chip select, eins 
zum Speichern (latch)

>Wie oben gefragt, koenntest du mir deine Methode mit dem Array näher
>erkären ( mit for dummies Weise):)

Hmmm, viel mehr gibt es dazu nicht zu sagen. Man lädt immer alle Daten 
aller Register und übernimmt die am Ende der Übertragung durch die 
steigende Flanke vom Chip Select Signal.

von Nesrine G. (nesrine_g920)


Lesenswert?

Hallo nochmal:

ich habe diesen thread gefunden, das ungefaehr auch mein Problem 
shildert.

Beitrag "2 Schieberegister am selben SPI Bus"


Sonst für das MUX für den CLK, brauche ich nicht eher die andere 
Richtung? also DEMUX?

Da ich schon meine Platine für den µC habe (XMC4700 Relaxkit von 
Infineon) , brauche ich wahrscheinlich eine extra platine für den MUX 
oder? ich kann doch nicht bei jedem Board einen DEMUX am Eingang stellen 
oder?


(hoffe das ist das Ende:)

Danke!




Falk B. schrieb:
> @Nesrine Ghajati (nesrine_g920)
>
>>nicht so ganz , die boards werden alle Arduino Shields sein und werden
>>aufeinander gestapelt werden. Ich koennte die pins so waehlen, dass sie
>>kaskadiert sind.
>
> Hmmm, gerade da ist eine Kaskadierung eher fragwürdig.
>
>>> In welchem Bereich liegen diese Zeiten? Mikrosekunden, Millisekunden
>>> oder größer?
>
>>Also jetzt liegen die im Millisekunden Bereich, in der Zukunft aber soll
>>auch für viel kleinere zeitbereiche passen, also im Mikro.
>
> Ganz schön schnell. Was willst du denn damit machen?
>
>>Das Wichtige indem Fall sind die Werte am Ausgang und die werden mit dem
>>Senden der neuen Werte nicht beinfluesst, solange ich den entsprechenden
>>Shieberegister nicht latche. oder?
>
> Ja.
>
>>> Entweder macht man es so wie von mir oben beschrieben, das geht auch mit
>>> verschiedenen Ausgabezeiten für die einzelnen Register.
>
>>Könntest du bitte deine Methode mehr erklären, hab nicht so richtig
>>verstanden.
>
> Steht doch alles oben. Die kaskadierten Schieberegister werden als ein
> einziges Register mit nur einem Chip Select behandelt.
>
>>Du meinst jetzt ein Logikgatter zum multiplexen der Clock?
>







> Ja. Und es heißt der Takt 8-0
>
>>ob ich jetzt ein Chip select signal oder einen von mir definierten
>>signal nehme (für das latchen) , würde es einen großen Unterschied
>>machen?
>
> ???
> Du brauchst auf jeden Fall 2 Signale pro Schieberegister.
>
>>ok ich versteh es ist nicht die eleganteste Lösung...bei weitem. Aber
>>zumindest bei der Methode  (falls ich das zweite Konzept nehme) brauche
>>ich kein extra Gatter.
>
> Doch. Extra Gatter UND je zwei Steuersignale, eins als chip select, eins
> zum Speichern (latch)
>
>>Wie oben gefragt, koenntest du mir deine Methode mit dem Array näher
>>erkären ( mit for dummies Weise):)
>
> Hmmm, viel mehr gibt es dazu nicht zu sagen. Man lädt immer alle Daten
> aller Register und übernimmt die am Ende der Übertragung durch die
> steigende Flanke vom Chip Select Signal.

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.