Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.sci.electronics > #226227 > unrolled thread

74HC595 und 74HC166 an einem SPI

Started byJohannes Bauer <dfnsonfsduifb@gmx.de>
First post2017-04-14 00:07 +0200
Last post2017-04-14 11:40 +0200
Articles 9 — 3 participants

Back to article view | Back to de.sci.electronics


Contents

  74HC595 und 74HC166 an einem SPI Johannes Bauer <dfnsonfsduifb@gmx.de> - 2017-04-14 00:07 +0200
    Re: 74HC595 und 74HC166 an einem SPI Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2017-04-14 02:21 +0200
      Re: 74HC595 und 74HC166 an einem SPI Johannes Bauer <dfnsonfsduifb@gmx.de> - 2017-04-14 10:15 +0200
        Re: 74HC595 und 74HC166 an einem SPI Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2017-04-14 11:26 +0200
    Re: 74HC595 und 74HC166 an einem SPI Rafael Deliano <rafael_deliano@arcor.de> - 2017-04-14 07:58 +0200
      Re: 74HC595 und 74HC166 an einem SPI Rafael Deliano <rafael_deliano@arcor.de> - 2017-04-14 09:59 +0200
      Re: 74HC595 und 74HC166 an einem SPI Johannes Bauer <dfnsonfsduifb@gmx.de> - 2017-04-14 10:20 +0200
        Re: 74HC595 und 74HC166 an einem SPI Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2017-04-14 11:53 +0200
      Re: 74HC595 und 74HC166 an einem SPI Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2017-04-14 11:40 +0200

#226227 — 74HC595 und 74HC166 an einem SPI

FromJohannes Bauer <dfnsonfsduifb@gmx.de>
Date2017-04-14 00:07 +0200
Subject74HC595 und 74HC166 an einem SPI
Message-ID<ocosqr$q65$1@news.albasani.net>
Hallo Gruppe,

ich glaube ich habe gerade ein volles Brett vorm Kopf und bin mir jetzt
unsicher, ob ich überhaupt ein Problem habe oder nicht. Folgendes: Ich
habe mehrere kaskadierte HC595 und mehrere kaskadierte HC166. Anzahl 595
gleich Anzahl 166. Also zwei Ketten.

Ich würde gerne beide an demselben SPI betreiben und gleichzeitig
Schreiben und Lesen. Heißt also DS des ersten 595 an MOSI, Q7 des
letzten 166 an MISO, SCK an SHCP der 595 und an CP der 166. Wenn ich die
Datenblätter richtig lese, übernehmen beide IC jeweils an der positiven
Flanke Daten.

Wenn ich jetzt also mit CPOL = 0, CPHA = 0 da ran gehe, dann wird doch
folgendes passieren, fürs erste Bit:

- µC setzt MOSI auf Bitwert (DS der 595-Kette)
- µC gibt steigende Flanke auf SCK
- 595-Kette übernimmt DS, 166-Kette spuckt erstes Bit aus
- µC gibt fallende Flanke auf SCK und sampled MISO (Q7 der 166-Kette,
jetzt stabil weil Änderung nur bei steigender Flanke)

Das sollte doch also exakt so sein, wie ich das habe will, oder? Ich bin
aber beim Stöbern auf Hinweise wie den hier gestoßen:
http://www.mikrocontroller.net/attachment.php/30856/SPI_74HC595.pdf

"Note the software must change the clock phase, CPHA, for reads/writes
to this circuit."

Oder hier: https://www.mikrocontroller.net/topic/215399 (allerdings 165
statt 166): "Theoretisch ist der SPI-Mode für den 595 der falsche für
den 165."

Ich hab ein totales Brett vorm Kopf und verstehe nicht, warum 595 und
165 (identisch zum 166, aber asynchroner parallel load) inkompatibel
zueinander sein sollen. Das ist für die ganze Welt offensichtlich, aber
ich kapiere es gerade nicht.

Wäre also für eine Nachhilfestunden im Diagrammlesen sehr dankbar :-)
Viele Grüße,
Johannes

-- 
>> Wo hattest Du das Beben nochmal GENAU vorhergesagt?
> Zumindest nicht öffentlich!
Ah, der neueste und bis heute genialste Streich unsere großen
Kosmologen: Die Geheim-Vorhersage.
 - Karl Kaos über Rüdiger Thomas in dsa <hidbv3$om2$1@speranza.aioe.org>

[toc] | [next] | [standalone]


#226230

FromHans-Peter Diettrich <DrDiettrich1@aol.com>
Date2017-04-14 02:21 +0200
Message-ID<elaj05Fb542U1@mid.individual.net>
In reply to#226227
Am 14.04.2017 um 00:07 schrieb Johannes Bauer:
> Hallo Gruppe,
>
> ich glaube ich habe gerade ein volles Brett vorm Kopf und bin mir jetzt
> unsicher, ob ich überhaupt ein Problem habe oder nicht. Folgendes: Ich
> habe mehrere kaskadierte HC595 und mehrere kaskadierte HC166. Anzahl 595
> gleich Anzahl 166. Also zwei Ketten.
>
> Ich würde gerne beide an demselben SPI betreiben und gleichzeitig
> Schreiben und Lesen. Heißt also DS des ersten 595 an MOSI, Q7 des
> letzten 166 an MISO, SCK an SHCP der 595 und an CP der 166. Wenn ich die
> Datenblätter richtig lese, übernehmen beide IC jeweils an der positiven
> Flanke Daten.

Soweit richtig.

> Wenn ich jetzt also mit CPOL = 0, CPHA = 0 da ran gehe, dann wird doch
> folgendes passieren, fürs erste Bit:
>
> - µC setzt MOSI auf Bitwert (DS der 595-Kette)
> - µC gibt steigende Flanke auf SCK
> - 595-Kette übernimmt DS, 166-Kette spuckt erstes Bit aus
> - µC gibt fallende Flanke auf SCK und sampled MISO (Q7 der 166-Kette,
> jetzt stabil weil Änderung nur bei steigender Flanke)
>
> Das sollte doch also exakt so sein, wie ich das habe will, oder?

Jein.

Schau Dir mal im Datenblatt die Diagramme 18-3 Transfer Format und 28-3 
Timing Requirements (Master Mode) an.

Beim 165/166 liegt das erste Bit (H) ständig auf MISO, mit einer 
steigenden Flanke wird das *nächste* Bit (G) auf den Ausgang gelegt. Da 
der Controller ebenfalls mit der steigenden (aktiven) Flanke sampelt, 
könnte er also schon das nächste Bit erwischen.

Mit der fallenden (inaktiven) Flanke ändert sich nur MOSI, d.h. dort 
erscheint das nächste auszugebende Bit.


Nach einigem Überlegen bin ich der Meinung, daß Deine Einstellung 
trotzdem funktionieren sollte. Die Hold-Zeit für MISO ist mit 10ns nach 
der aktiven Flanke angegeben, also ziemlich klein. Da auf der Leitung 
sowohl SCK (hin) als auch MISO (zurück) verzögert werden, sollte das 
alte Bit lange genug am Controller anliegen, um dort richtig 
reingeschoben zu werden.

Wenn es trotzdem Probleme gibt, könnte MISO nochmal zusätzlich verzögert 
werden, oder SCK für die 165/166 invertiert werden.

Wenn Du mir ein paar Schieberegister schickst, könnte ich das auch für 
Dich ausprobieren ;-)

DoDi

[toc] | [prev] | [next] | [standalone]


#226238

FromJohannes Bauer <dfnsonfsduifb@gmx.de>
Date2017-04-14 10:15 +0200
Message-ID<ocq0ft$jhm$1@news.albasani.net>
In reply to#226230
On 14.04.2017 02:21, Hans-Peter Diettrich wrote:

> Beim 165/166 liegt das erste Bit (H) ständig auf MISO, mit einer
> steigenden Flanke wird das *nächste* Bit (G) auf den Ausgang gelegt. Da
> der Controller ebenfalls mit der steigenden (aktiven) Flanke sampelt,
> könnte er also schon das nächste Bit erwischen.

Ah, daher kam mein Brett vorm Kopf!

Ich war der irrigen Meinung, dass Setup bei CPOL=0, CPHA=0 mit der
steigenden Flanke, aber Sampling mit der fallenden Flanke passiert.

> Nach einigem Überlegen bin ich der Meinung, daß Deine Einstellung
> trotzdem funktionieren sollte. Die Hold-Zeit für MISO ist mit 10ns nach
> der aktiven Flanke angegeben, also ziemlich klein. Da auf der Leitung
> sowohl SCK (hin) als auch MISO (zurück) verzögert werden, sollte das
> alte Bit lange genug am Controller anliegen, um dort richtig
> reingeschoben zu werden.

Ich bin auf einem STM32F407, d.h. sogar noch kleiner: 2.5ns.

> Wenn es trotzdem Probleme gibt, könnte MISO nochmal zusätzlich verzögert
> werden, oder SCK für die 165/166 invertiert werden.

Ich glaube einen 74LVC1G04 werde ich spendieren. Dann sollte das laufen.

> Wenn Du mir ein paar Schieberegister schickst, könnte ich das auch für
> Dich ausprobieren ;-)

Bisher alles nur CAD ;-)

Vielen Dank nochmal,
Viele Grüße,
Johannes

-- 
>> Wo hattest Du das Beben nochmal GENAU vorhergesagt?
> Zumindest nicht öffentlich!
Ah, der neueste und bis heute genialste Streich unsere großen
Kosmologen: Die Geheim-Vorhersage.
 - Karl Kaos über Rüdiger Thomas in dsa <hidbv3$om2$1@speranza.aioe.org>

[toc] | [prev] | [next] | [standalone]


#226252

FromHans-Peter Diettrich <DrDiettrich1@aol.com>
Date2017-04-14 11:26 +0200
Message-ID<elblcdFh3m5U1@mid.individual.net>
In reply to#226238
Am 14.04.2017 um 10:15 schrieb Johannes Bauer:
> On 14.04.2017 02:21, Hans-Peter Diettrich wrote:

>> Wenn Du mir ein paar Schieberegister schickst, könnte ich das auch für
>> Dich ausprobieren ;-)
>
> Bisher alles nur CAD ;-)

Falls Du simulierst, dann baue kleine Delays (RC Filter?) in die 
Leitungen ein. Falls die in den Schieberegistern nicht schon drin sind...

DoDi

[toc] | [prev] | [next] | [standalone]


#226231

FromRafael Deliano <rafael_deliano@arcor.de>
Date2017-04-14 07:58 +0200
Message-ID<ocpo7l$hcl$1@dont-email.me>
In reply to#226227
Günstige 74HC-Datenblätter suchen.
Ich vermeide NXP, bevorzuge NS/Fairchild oder TI.

Timing mit Lineal auf Blatt Papier aufmalen:

      ---      ---
     |   |    |   |    74HC595 CLK rising edge
----     ----     ---

----X--------x------ 74HC595 sample MOSI

      ---      ---
     |   |    |   |    74HC166 CLK rising edge
----     ----     ---

----00000000011111111 74HC166 data-out MISO

      ---      ---
     |   |    |   |    SCK (CPOL=0)
----     ----     ---

----     ----     ---
     |   |    |   |    SCK (CPOL=1)
      ---      ---

     00000000011111111  CPU data-out MOSI (CPHA=1)
     ----X--------X---  CPU sample MISO   (CPHA=1)

00000000011111111      CPU data-out MOSI (CPHA=0)
----X--------X-------  CPU sample MISO   (CPHA=0)

Auf Breadboard 74HC04 für /CLK bereithalten ?

MfG JRD


[toc] | [prev] | [next] | [standalone]


#226235

FromRafael Deliano <rafael_deliano@arcor.de>
Date2017-04-14 09:59 +0200
Message-ID<ocpvav$6j6$1@dont-email.me>
In reply to#226231
> Breadboard

Bei langen Schieberegisterketten ist
Testschleife sinnvoll.
D.h. den Aushang des letzten 74HC595 Schieberegisters
mit dem Eingang des letzten 74HC166 Schieberegisters
verbinden.
Wenn man in Testroutine mehr taktet kommen
die Bits die man gesendet hat zurück.

MfG  JRD

[toc] | [prev] | [next] | [standalone]


#226241

FromJohannes Bauer <dfnsonfsduifb@gmx.de>
Date2017-04-14 10:20 +0200
Message-ID<ocq0o7$2du$1@news.albasani.net>
In reply to#226231
On 14.04.2017 07:58, Rafael Deliano wrote:
> Günstige 74HC-Datenblätter suchen.
> Ich vermeide NXP, bevorzuge NS/Fairchild oder TI.
> 
> Timing mit Lineal auf Blatt Papier aufmalen:
> 
>      ---      ---
>     |   |    |   |    74HC595 CLK rising edge
> ----     ----     ---
> 
> ----X--------x------ 74HC595 sample MOSI
> 
>      ---      ---
>     |   |    |   |    74HC166 CLK rising edge
> ----     ----     ---
> 
> ----00000000011111111 74HC166 data-out MISO
> 
>      ---      ---
>     |   |    |   |    SCK (CPOL=0)
> ----     ----     ---
> 
> ----     ----     ---
>     |   |    |   |    SCK (CPOL=1)
>      ---      ---
> 
>     00000000011111111  CPU data-out MOSI (CPHA=1)
>     ----X--------X---  CPU sample MISO   (CPHA=1)
> 
> 00000000011111111      CPU data-out MOSI (CPHA=0)
> ----X--------X-------  CPU sample MISO   (CPHA=0)
> 
> Auf Breadboard 74HC04 für /CLK bereithalten ?

Ja, ich glaube ich invertiere einfach SCK für die 166er Kette und gut
ist. Mein Denkfehler war, dass ich dachte, vor der fallenden Flanke wird
der Input gesampelt. Dabei ändert da nur der Master die Daten. Schade
eigentlich, dass man nicht beides konfigurieren kann.

Vielen Dank & viele Grüße,
Johannes

-- 
>> Wo hattest Du das Beben nochmal GENAU vorhergesagt?
> Zumindest nicht öffentlich!
Ah, der neueste und bis heute genialste Streich unsere großen
Kosmologen: Die Geheim-Vorhersage.
 - Karl Kaos über Rüdiger Thomas in dsa <hidbv3$om2$1@speranza.aioe.org>

[toc] | [prev] | [next] | [standalone]


#226254

FromHans-Peter Diettrich <DrDiettrich1@aol.com>
Date2017-04-14 11:53 +0200
Message-ID<elblceFh3m5U3@mid.individual.net>
In reply to#226241
Am 14.04.2017 um 10:20 schrieb Johannes Bauer:

> Mein Denkfehler war, dass ich dachte, vor der fallenden Flanke wird
> der Input gesampelt. Dabei ändert da nur der Master die Daten. Schade
> eigentlich, dass man nicht beides konfigurieren kann.

Wozu? Wenn die Weitergabe mit der gleichen Flanke nicht funktioniert, 
dann kannst Du auch keine 166 hintereinanderschalten!

Da jammern die Leute immer, daß die IC zu langsam sind, bis man 
plötzlich feststellt, daß gerade eine synchrone (getaktete) Schaltung 
ohne Signalverzögerung garnicht gehen würde! Schlimm nur, wenn die 
Delays sich aufsummieren, dann begrenzen sie die Taktrate.


Eben fällt mir noch auf, daß normalerweise alle digitalen Eingänge mit 
dem Prozessortakt synchronisiert werden. Ist das bei SPI nicht so? Bei I2C?

DoDi

[toc] | [prev] | [next] | [standalone]


#226253

FromHans-Peter Diettrich <DrDiettrich1@aol.com>
Date2017-04-14 11:40 +0200
Message-ID<elblceFh3m5U2@mid.individual.net>
In reply to#226231
Am 14.04.2017 um 07:58 schrieb Rafael Deliano:
> Günstige 74HC-Datenblätter suchen.
> Ich vermeide NXP, bevorzuge NS/Fairchild oder TI.

Den TTL Pocket Guide kenne ich noch von früher, gibt's inzwischen auch 
als PDF.

> Timing mit Lineal auf Blatt Papier aufmalen:

Karopapier hilft :-)

>      ---      ---
>     |   |    |   |    74HC595 CLK rising edge
> ----     ----     ---
>
> ----X--------x------ 74HC595 sample MOSI
>
>      ---      ---
>     |   |    |   |    74HC166 CLK rising edge
> ----     ----     ---
>
> ----00000000011111111 74HC166 data-out MISO

Das sollte eher so aussehen:
   00001111111122222222 74HC166 data-out MISO
oder
   HHHH/GGGGGGG\FFFFFFF/ 74HC166 data-out MISO

DoDi

[toc] | [prev] | [standalone]


Back to top | Article view | de.sci.electronics


csiph-web