Porterweiterung mit Schieberegistern: wie entstören?

OP #2081680
Lesenswert?

Hallo,

ich habe eine Porterweiterung mit zwei Schieberegistern vom Typ 
SN74HC595N gemäß Anleitung in 
http://www.mikrocontroller.net/articles/Porterweiterung_mit_SPI auf 
einem Breadboard aufgebaut. Zur Ansteuerung verwende ich 3 Leitungen als 
MOSI, SCK und EN von einem Port meines AVR-NET-IO von Pollin mit 
ATmega644 (5V). Versorgungsspannung für die Schieberegister ist 3,3V 
wegen weiterer Komponenten, die nur 3,3V vertragen, und kommt ebenfalls 
vom AVR-NET-IO. Die Verbindung vom ATmega-Board zum Breadboard erfolgt 
mit 20cm Flachbandkabel.

Problem: wenn ich das Bitmuster 10 (von MSB nach LSB) ins Register 
schiebe, wird 110 ausgegeben. Wenn ich das Bitmuster 100010 reinschiebe, 
wird 11000110 ausgegeben. Kompliziertere Muster ergeben komplizierteren 
Unsinn.

Ich vermute, daß es zum Übersprechen auf den Zuleitungen oder ähnlichen 
Dreckeffekten kommt, die dazu führen, daß das Anliegen eines 1-bits an 
MOSI (positive Flanke) zugleich SCK triggert.

Ich kann das auch nachvollzogen, indem ich die Portleitungen von Hand 
eine nach der anderen setze oder lösche. Dazu kommt dann noch der 
Effekt, daß sich die Inhalte des Schieberegisters nach einigen Sekunden 
von selbst verändern.

Ich vermute, daß ich die Schaltung noch durch Anbringen von 
Kondensatoren und ggf. Pull-down-Widerständen entstören muß.

Wer hat einen Tip für mich, was ich tun sollte?

Viele Grüße,
Boris
OP #2081892
Lesenswert?

Ich hatte es mit 1k-Pulldown-Widerständen versucht, aber ohne Erfolg. 
Die Software ist in Ordnung (io_expander aus Ethersex; Code ist 
korrekt).

Thomas Eckmann schrieb:
> Boris Neubert schrieb:
>> Ich vermute, daß ich die Schaltung noch durch Anbringen von
>>
>> Kondensatoren
>
> Vor allen Dingen ein Stützkondensator an jedem 595. Die verhalten sich
> besonders empfindlich.


Wo muß denn der Stützkondensator genau hin und welchen Typ und welche 
Kapazität soll ich wählen?

Viele Grüße,
Boris
Gast #2081899
Lesenswert?

Möglichkeiten:
- Terminierungswiderstand am Ende der Takt- und Enable-Leitung. (z.B. 
100 Ohm)
- Natürlich ein Kondensator zwischen VCC und GND an jedem 
Schieberegister (nahe dran!)
- Bei sehr vielen Schieberegistern in Reihe evtl. Bufferbausteine im 
Taktsignal verwenden. (ACHTUNG: Das Timing muss dann genau analysiert 
werden, so dass das Taktsignal auf keinen Fall von den Daten überholt 
wird!)
#2081970
Lesenswert?

Boris Neubert schrieb:
> Zur Ansteuerung verwende ich 3 Leitungen als
> MOSI, SCK und EN von einem Port meines AVR-NET-IO von Pollin mit
> ATmega644 (5V). Versorgungsspannung für die Schieberegister ist 3,3V

Das ist nicht erlaubt. Du brauchst Pegelwandler.

Ich hab auch schon 21 * HC595 angeschlossen, läuft super stabil.
Allerdings alles auf einer Platine (2-lagen) und jeder IC mit 
100nF-Pille.


Peter
OP #2082054
Lesenswert?

Danke Thomas, Armin und lol für die Tips. Ich werde es am kommenden 
Wochenende ausprobieren und sagen, ob es klappt.

Peter, Du meinst, daß ich die HC595 mit 5V betreiben soll? Das ist kein 
Problem - ich muß dann auch noch die 5V vom Pollin-Board abgreifen. Ich 
hatte nur bisher schon 3,3V auf dem Experimentierboard, weil ich damit 
meine Velux-Fernsteuerung fernbediene 
(http://www.neubert-volmar.de/Hausautomation/AVRNETIO/index.html).

Grüße,
Boris
Gast #2083426
Lesenswert?

lol schrieb:
> - Terminierungswiderstand am Ende der Takt- und Enable-Leitung. (z.B.
> 100 Ohm)

Ich würde eher sagen, einen 33 Ohm Widerstand am Anfang der 
Taktleitung. Und dann, wenn alle Takteingänge der verschiedenen 595 
nicht nahe genug beieinander sind (< 1 ... 2 cm), spendiere lieber 
mehrere 33 Ohm Widerstände und eine eigene Taktleitung an den 595.

Bist du sicher, dass der Takt in der Mitte der Daten seine aktive Flanke 
hat und nicht beim Datenwechsel?
Gast #2083439
Lesenswert?

Hi

>Problem: wenn ich das Bitmuster 10 (von MSB nach LSB) ins Register
>schiebe, wird 110 ausgegeben. Wenn ich das Bitmuster 100010 reinschiebe,
>wird 11000110 ausgegeben. Kompliziertere Muster ergeben komplizierteren
>Unsinn.

Bist du sicher, das du den richtigen SPI-Mode (CPOL/CPHA) richtig 
eingestellt hast?

MfG Spess
Gast #2083462
Lesenswert?

Peter Dannegger schrieb:
> Boris Neubert schrieb:
>> Zur Ansteuerung verwende ich 3 Leitungen als
>> MOSI, SCK und EN von einem Port meines AVR-NET-IO von Pollin mit
>> ATmega644 (5V). Versorgungsspannung für die Schieberegister ist 3,3V
>
> Das ist nicht erlaubt. Du brauchst Pegelwandler.
>
> Ich hab auch schon 21 * HC595 angeschlossen, läuft super stabil.
> Allerdings alles auf einer Platine (2-lagen) und jeder IC mit
> 100nF-Pille.

Das läuft evtl. stabil, aber niemals super stabil.
Diese HC595 Schiebekette hat einen kritischen Punkt:
Das Signal an Pin 9 QH* wechselt synchron zu SCK. Am nachfolgenden HC595 
haben wir nun das Problem, dass bei der pos. Flanke von SCK der alte 
Zustand von QH* nicht übernommen wird, sondern gleich der neue Zustand, 
der eigentlich erst im nächsten Zyklus dran wäre.
Dem kann man nur eine Signalverzögerung von QH* entgegensetzen.
RC-Glied mit Schmitt-Trigger.
Das mag der OP auch machen, ist aber nicht sein vorrangiges Problem.
#2083541
Lesenswert?

Yoschka schrieb:
> Das läuft evtl. stabil, aber niemals super stabil.
> Diese HC595 Schiebekette hat einen kritischen Punkt:
> Das Signal an Pin 9 QH* wechselt synchron zu SCK. Am nachfolgenden HC595
> haben wir nun das Problem, dass bei der pos. Flanke von SCK der alte
> Zustand von QH* nicht übernommen wird, sondern gleich der neue Zustand,
> der eigentlich erst im nächsten Zyklus dran wäre.
> Dem kann man nur eine Signalverzögerung von QH* entgegensetzen.
> RC-Glied mit Schmitt-Trigger.

Das ist Quatsch, schau bitte mal ins Datenblatt.
Bei NXP ist die Datenhaltezeit -2ns, d.h. der Dateneingang darf sogar 
2ns vor der Taktflanke wechseln und trotzdem werden die Daten stabil 
übernommen.
Der vorherige IC kann aber unmöglich seinen Ausgang schon vor der 
Taktflanke wechseln, da er nicht hellsehen kann. Der Ausgang wechselt 
typisch nach 15ns, man hat also 17ns Sicherheit und das ist für Standard 
CMOS dicke ausreichend.

Es wäre auch arg verwunderlich, wenn ein Schaltkreis mit 
Kaskadierausgang nicht kaskadierbar wäre. Die Leute waren ja damals 
nicht blöd und wußten schon, was sie entwickeln.


Peter
OP #2083764
Lesenswert?

Hallo HildeK und Spess53!

spess53 schrieb:
> Bist du sicher, das du den richtigen SPI-Mode (CPOL/CPHA) richtig
> eingestellt hast?

ich benutze nicht den SPI-Mode vom ATmega644, weil der im Pollin-Board 
schon fuer die Anbindung des Ethernet-Chip belegt ist, sondern den Port 
C oder den Port A (mit gleichen Ergebnissen). Die Reihenfolge der 
Flanken ist korrekt - sowohl das, was der Code im Ethersex-Modul macht 
als auch mein manuelles Takten: also erst Datenbit an SER auf 0 oder 1 
setzen, dann SCLK auf 1, SCLK auf 0 bei jeweils unveraendertem Datenbit, 
Datenbit an SER auf 0 oder 1 setzen, SCLK auf 1, SCLK auf 0, ..., RSCLK 
auf 1, RSCLK auf 0. Genau wie im Datenblatt im Timingprogramm 
beschrieben.

Gruesse,
Boris
OP #2090532
Lesenswert?

Hallo,

habe folgende Ergänzungen an der Schaltung vorgenommen:
- RCLK mit 120 Ohm gegen Masse gelegt
- SRCLK mit 120 Ohm gegen Masse gelegt
- an jedem 595 100nF zwischen VCC und GND gelegt
Spannungsversorgung von 3,3V an VCC und Steuerspannung von 5V an RCLK, 
SRCLK und SER belassen.

Es funktioniert!

Vielen Dank an alle, die mir geholfen haben!

Viele Grüße,
Boris
#2090679
Lesenswert?

@  Boris Neubert (neubert)

>- RCLK mit 120 Ohm gegen Masse gelegt
>- SRCLK mit 120 Ohm gegen Masse gelegt

Der arme Treiber. Macht bei 5V 40mA! Sowas macht man anders, siehe 
Artikel Wellenwiderstand.

>- an jedem 595 100nF zwischen VCC und GND gelegt
>Spannungsversorgung von 3,3V an VCC und Steuerspannung von 5V an RCLK,
>SRCLK und SER belassen.

Schlecht, da hast du massig Dreckeffekt noch drin. Siehe Artikel 
Pegelwandler.

>Es funktioniert!

Das hat mehr mit Glück als Verstand zu tun.

MFG
Falk
OP #2090784
Lesenswert?

Hallo Falk,

Danke für sachkundigen Hinweise!

Falk Brunner schrieb:
> Der arme Treiber. Macht bei 5V 40mA! Sowas macht man anders, siehe
> Artikel Wellenwiderstand.

werde morgen mit der AC-Terminierung experimentieren.

> Schlecht, da hast du massig Dreckeffekt noch drin. Siehe Artikel
> Pegelwandler.

Nach Prüfung der Schaltung habe ich festgestellt, daß die verwendeten 
ICs (74HC4066, 74HC595N, 74HCT238) allesamt auch mit 5V betrieben werden 
können (74HCT238 soll sogar).

Um weiterhin nur mit einer Versorgungsspannung (nun 5V statt 3,3V) 
auszukommen, müßte ich die 5V auf 3V herabsetzen, um die delaborierte 
Velux-Fernbedienung zu versorgen, die mit der Schaltung angesteuert 
wird. Darauf befindet sich ein Microcontroller, ein Funkmodul und eine 
LED. Bin mir auch nach Lektüre des Artikels Pegelwandler nicht im 
Klaren, wie ich das am besten mache (simpler Aufbau, minimale Verluste)?

> Das hat mehr mit Glück als Verstand zu tun.

Meinen eigenen (noch) nicht vorhandenen Sachverstand in diesen Dingen 
stocke ich gerade durch diesen Thread auf...

Viele Grüße,
Boris

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren