Forum: Mikrocontroller und Digitale Elektronik Porterweiterung mit Schieberegistern: wie entstören?


von Boris N. (neubert)


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

von Manfred S. (mandinice)


Lesenswert?

Hallöchen

Eigentlich sollte auf diese kurze Entfernung keine Störung auftretten ?

Kann es kein Softwareproblem sein ?
Oder das Timing ?

Aber einfach PullDown-Widerstände setzen. ( z.B.: 2200 Ohm gegen Masse )

mfg
Mandi

von Thomas E. (thomase)


Lesenswert?

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.

mfg.

von Boris N. (neubert)


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

von Armin (Gast)


Lesenswert?

möglichst nahe zwischen VCC und GND der hc595
Die Werte liegen in der Regel zwischen 10nF und 100nF.

Geht nicht so genau, Hauptsache der Kondensator ist da!

Sag, ob's geholfen hat...

von lol (Gast)


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!)

von Peter D. (peda)


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

von Boris N. (neubert)


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

von Christian H. (jhetfield)


Lesenswert?

Wie groß ist der Abstand zwischen den beiden Schieberegistern?

Ich hatte mal den Fall, dass die CLK mit Verzögerung am 2. 
Schieberegister anlag (Leitung zu lang), in der Zwischenzeit hatte 
Register 1  aber schon geshiftet, ergo wurde der falsche Wert ins 
Register 2 eingelesen.

von Boris N. (neubert)


Lesenswert?

Hallo Christian,

der Abstand ist ca. 1 bis 2 cm. Allerdings tritt das Problem auch schon 
beim ersten Schieberegister und auch bei nur einem Schieberegister auf.

Viele Gruesse,
Boris

von HildeK (Gast)


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?

von spess53 (Gast)


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

von Yoschka (Gast)


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.

von Peter D. (peda)


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

von Klaus (Gast)


Lesenswert?

Es heißt zwar, wer misst misst Mist, aber ohne mein Scope sage ich 
garnichts.

MfG Klaus

von Boris N. (neubert)


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

von Boris N. (neubert)


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

von Falk B. (falk)


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

von Boris N. (neubert)


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

von Falk B. (falk)


Lesenswert?

@Boris Neubert (neubert)

>auszukommen, müßte ich die 5V auf 3V herabsetzen, um die delaborierte

>LED. Bin mir auch nach Lektüre des Artikels Pegelwandler nicht im
>Klaren, wie ich das am besten mache (simpler Aufbau, minimale Verluste)?

Nimm einen Spannungsregler ala LP2950, LM1117 etc.

Und dann einen HCT Chip als Pegelwandler. Fettig.

MFG
Falk

von Boris N. (neubert)


Lesenswert?

Falk Brunner schrieb:

> Nimm einen Spannungsregler ala LP2950, LM1117 etc.

Danke!
Boris

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.