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!!
@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.
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
@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.
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!!
@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.
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.
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.