Forum: Mikrocontroller und Digitale Elektronik Schieberegister an langer Leitung


von Peter M. (hames)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe gerade ein Problem mit einer Schaltung, bei der eine Kette von 
zehn Schieberegister LEDs schaltet.
Die einzelnen Schieberegister sind jeweils 4 Meter auseinander und über 
einen Kabelbaum [12V/GND/5V/Latch/Clock/Data] miteinander verbunden.
Als Ansteuerung dient ein Arduino über SPI (bei langsamster Taktung).
Die Daten werden jeweils aus Pin 9 in den nächsten Registereingang 
geschoben.
Im Schaltplan hatte ich einen MC3487 als Verstärker eingezeichnet, doch 
diesen inzwischen überbrückt, da er das Clock Signal stark gedämpft hat.
Am ende der Kette sind die Leitungen mit 150 Ohm Widerständen gegen 
Masse terminiert (wird evtl noch gegen AC-Terminierung getauscht).

Clock und Latch Leitung habe ich mit dem Oszilloskop am Strang-Anfang 
und -Ende gemessen und sie sehen gut aus. Kein Delay und auch keine 
großen Rippel.

Das Problem ist jetzt eine sehr starke Verzögerung des Datensignals nach 
jedem Schieberegister. Im Anhang ist ein Bild des Delays:
Logic0 = Clock 1. Register (Eingang)
Logic1 = Daten 1. Register
Logic2 = Latch 1. Register
Logic3 = Clock 2. Register
Logic4 = Daten 2. Register (Eingang)
Logic5 = Latch 2. Register

Beim 1. Register liegt der High Pegel der Datenleitung noch schön über 
der steigenden Clockflanke. Beim 2. ist er schon stark nach links 
verschoben, sodass er garnicht mehr erkannt wird.

Die Schieberegister sind von 74HC595 von UTC von Reichelt. Laut 
Datenblatt mit deutlich schlechteren Gatterlaufzeiten als z.B. von NXP. 
Vielleicht liegt es auch daran?

Wie könnte ich das jetzt möglichst einfach zum laufen bringen?
Tauschen der 74HC595 (TTL) gegen 74HCT595 (CMOS)?
Abschnittweise Schmitt Trigger an die Clock Leitung um diese ebenfalls 
zu verzögern (stelle ich mir schwierig mit der Abstimmung vor)?

Viele Grüße, Peter

von Wolfgang H. (Firma: AknF) (wolfgang_horn)


Lesenswert?

Hi, peter,

verschwende keine Zeit mit halbem Kram. Die brauchst Du nachher zehnfach 
für Fehlersuche und Reparatur.
(Das Geheimnis effizienter Sparsamkeit ist die Großzügigkeit an der 
richtigen Stelle.)

40 Meter, scharfe Flanken, Kabelkapazität und ein kurzatmiger Treiber - 
mach's wie im IDE für Festplatten: Steig um auf RS-485 oder auf RS-422 - 
auf symmatrisch. Drei RS-485-Empfänger pro Schieberegister und ein 
Sender sind billiger als 15 Minuten zur Suche nach Stundensatz. Es gibt 
ja auch Mehrfach-Transceifer für RS-485, aber nicht in meiner 
Bastelkiste.

Ciao
Wolfgang Horn

: Bearbeitet durch User
von Lurchi (Gast)


Lesenswert?

Wenn man die lange Leitung am Ende gegen GND terminiert, reduziert sich 
die Amplitude. Dann macht es tatsächlich die 74HCT Version  (für echte 
TTl Pegel) statt der 74HC Version (für CMOS Pegel) zu nehmen. Bei 74HC 
müsste die Terminierung gegen 2,5 V sein.

Echte dafür vorgesehene Treiber und reciever sind aber wirklich besser.

Vom Timing her sollten die 4094 weniger kritisch sein als HC595 - der
Unterschied liegt im Timing zwischen den Chips.

von Peter M. (hames)


Lesenswert?

Hallo Wolfgang,

Danke für den Tip, an etwas ähnliches habe ich auch schon gedacht, und 
werde es für zukünftige Projekte auf jeden Fall im Hinterkopf behalten.
Mein Problem ist nur das die Zeit davonläuft und jetzt eine schnelle 
Bastellösung hermuss, ohne noch großartig Teile bestellen zu müssen.
Außerdem hätte ich dann ja wieder Chanchen auf das Delay Problem.

Die Signale an sich sehen ja gut aus, nur die Schieberigster an sich 
verzögern eben den Datentakt.
Arbeitszeit zählt bei der Sache schon lange nicht mehr ;)

Grüße,
Peter

von Falk B. (falk)


Lesenswert?

@ peter müööer (hames)

>ich habe gerade ein Problem mit einer Schaltung, bei der eine Kette von
>zehn Schieberegister LEDs schaltet.

Aha. Im Schaltplan ist nur eins zu sehen.

>Die einzelnen Schieberegister sind jeweils 4 Meter auseinander und über
>einen Kabelbaum [12V/GND/5V/Latch/Clock/Data] miteinander verbunden.

Wie sieht das Kabel aus? FLachband?

>Als Ansteuerung dient ein Arduino über SPI (bei langsamster Taktung).

Das ist egal, die Anstiegszeit ist das Problem, siehe 
Wellenwiderstand.

>Im Schaltplan hatte ich einen MC3487 als Verstärker eingezeichnet,

Brauchst du nicht, der Arduino hat genug Dampf.

> doch
>diesen inzwischen überbrückt, da er das Clock Signal stark gedämpft hat.

Wie hast du das gemessen? Dein Screenshot zeigt nur einen Logicanalyzer.

>Am ende der Kette sind die Leitungen mit 150 Ohm Widerständen gegen
>Masse terminiert (wird evtl noch gegen AC-Terminierung getauscht).

Besser. Thevenin-Terminierung. Hat schon einmal gewirkt.

Beitrag "Re: Skurriles Problem mit BS170 Mosfets"

>Clock und Latch Leitung habe ich mit dem Oszilloskop am Strang-Anfang
>und -Ende gemessen und sie sehen gut aus. Kein Delay und auch keine
>großen Rippel.

>Das Problem ist jetzt eine sehr starke Verzögerung des Datensignals nach
>jedem Schieberegister.

Das ist doch logisch! Jedes Schieberegister verzögert um 8 Takte!

>Beim 1. Register liegt der High Pegel der Datenleitung noch schön über
>der steigenden Clockflanke. Beim 2. ist er schon stark nach links
>verschoben, sodass er garnicht mehr erkannt wird.

Dann hat dein Logicanalyzer ein Problem. Abtastrate zu klein?

>Die Schieberegister sind von 74HC595 von UTC von Reichelt. Laut
>Datenblatt mit deutlich schlechteren Gatterlaufzeiten als z.B. von NXP.
>Vielleicht liegt es auch daran?

Nein.

>Wie könnte ich das jetzt möglichst einfach zum laufen bringen?
>Tauschen der 74HC595 (TTL) gegen 74HCT595 (CMOS)?

Nein.

>Abschnittweise Schmitt Trigger an die Clock Leitung um diese ebenfalls
>zu verzögern (stelle ich mir schwierig mit der Abstimmung vor)?

Nein. Gescheite Leitungsführung, idealerweise Flachbandkabel mit jeder 
2. Leitung auf GND, am Ende des Strangs eine Theveninterminierung.

: Bearbeitet durch User
von Peter M. (hames)


Angehängte Dateien:

Lesenswert?

Hallo Falk,

ja, der Schaltplan ist nur für eine Einzelplatine.
Signalkabel sind 0,14mm² Litzen zusammen mit allen anderen in einem 
Strang.
Genau den Artikel über den Wellenwiderstand und die Terminierung habe 
ich auch gelesen, Thevenin-Terminierung probiere ich noch aus.

Das Clock Signal habe ich natürlich mit dem Analogeingang (Bitscope) 
gemessen. Bild ist jetzt auch im Anhang. Die Anstiegszeit verändert sich 
da nicht wirklich. Interessant wurde es nachdem ich wechselnd ALLE LEDs 
ein und aus geschaltet habe. Da zeigen sich doch starke Störspitzen. 
Uiuiui, da scheint ja doch ganz schön was zu passieren. Gelb ist am 
Strangeingang, grün am Ausgang.

Bei solchen Störspannungen würde natürlich CMOS alles noch schlimmer 
machen. Das Clocksignal als Stromschleife mit Optokopplern zu schalten 
wurde mir noch vorgeschlagen, vielleicht wäre das noch eine Möglichkeit 
wenn es wirklich am fehlerhaften Clock Signal liegt.
Allerdings tritt das Problem auch auf wenn nur ein einzelnes Bit 
durchgeschoben wird. Dabei konnte ich keine Störspitzen messen.

Jetzt messe ich an einem einzelnen Schieberegister.
Geschrieben werden (most significant bit first):
B10000000
B00000000

Logic0 -> Clock (pin 11)
Logic1 -> Latch (pin 12)
Logic2 -> Eingang (pin 14)
Logic3 -> Ausgang (pin 9)

Beim ersten Byte ist noch alles klar. Am eingang wird mit der ersten 
Clock Flanke das gesetzte Bit übernommen und liegt dann am Ausgangspin 
an.
Beim 2. Bit fällt jedoch mit der ersten Clock-Flanke gleich das Bit 
(welches weitergeschoben werden müsste) ab? Das ist natürlich jetzt ein 
Delay in die falsche Richtung.... Wo liegt der Denkfehler?

von Falk B. (falk)


Lesenswert?

@peter müööer (hames)

>Signalkabel sind 0,14mm² Litzen zusammen mit allen anderen in einem
>Strang.

Geht so.

>Das Clock Signal habe ich natürlich mit dem Analogeingang (Bitscope)
>gemessen.

Was ist das für ein Oszi? Klingt nach einer Notlösung. Welche Bandbreite 
hat das DInge, Samplingfrequenz? Hast du 10:1 Tastköpfe genutzt?

> Bild ist jetzt auch im Anhang. Die Anstiegszeit verändert sich
>da nicht wirklich.

Weil dein Scope zu langsam ist. Du misst nicht das Signal sondern die 
Bandbreite deines Analogeingangs ;-)

> Interessant wurde es nachdem ich wechselnd ALLE LEDs
>ein und aus geschaltet habe. Da zeigen sich doch starke Störspitzen.
>Uiuiui, da scheint ja doch ganz schön was zu passieren. Gelb ist am
>Strangeingang, grün am Ausgang.

Es fehlt ein Elko an den 12V auf jeder Platine. Wahrscheinlich hast du 
durch die vielen LEDs ne saftige Masseverschiebung. Sprich, auf deiner 
Masseleitung fällt wegen des hohen Stroms zuviel Spannung ab. -> dickere 
Masse! 0,14mm^2 reicht bei weitem NICHT. Eher 1mm^2++

>Bei solchen Störspannungen würde natürlich CMOS alles noch schlimmer
>machen.

???

> Das Clocksignal als Stromschleife mit Optokopplern zu schalten
>wurde mir noch vorgeschlagen,

Nein.

>Logic0 -> Clock (pin 11)
>Logic1 -> Latch (pin 12)
>Logic2 -> Eingang (pin 14)
>Logic3 -> Ausgang (pin 9)

Dein Eingang sieht komisch aus, als ob dort ein Spike entsteht. Der 
Ausgang ist voll OK, der schaltet mit jeder steigenden Flanke.

>Beim ersten Byte ist noch alles klar. Am eingang wird mit der ersten
>Clock Flanke das gesetzte Bit übernommen und liegt dann am Ausgangspin
>an.

Nö, es liegt ACHT Takte später am Ausgang an! Ausserdem meinst du das 
erste BIT, nicht Byte!

>Beim 2. Bit fällt jedoch mit der ersten Clock-Flanke gleich das Bit
>(welches weitergeschoben werden müsste) ab?

Du siehst den Ausgang nach ACHT Bits! An die internen FlipFlops kommst 
du gar nicht ran!

> Das ist natürlich jetzt ein
>Delay in die falsche Richtung.... Wo liegt der Denkfehler?

Siehe oben.

Die 5V VErsorgung vom Schieberegister braucht einen 100nF 
Entkoppelkondensator, KEINE 470uF Elko!

https://www.mikrocontroller.net/articles/Kondensator#Entkoppelkondensator

: Bearbeitet durch User
von Peter M. (hames)


Lesenswert?

Hm Notlösung trifft es, aber etwas anderes habe ich nicht. Es ist diese 
Bitscope Micro (20 Mhz Bandbreite hat es wohl).

Elkos für die 12V Leitung suche ich gerade zusammen.
Für die Masse und 12V habe ich natürlich 0,75mm² genommen.


Falk B. schrieb:
> Nö, es liegt ACHT Takte später am Ausgang an! Ausserdem meinst du das
> erste BIT, nicht Byte!

Ne ich meinte schon das erste Byte. Dieser Spike wird vom Arduino 
gesendet nachdem ein Byte übertragen wurde. Weiß allerdings nicht ob das 
die SPI Hardware im Atmega erzeugt. Ich denke jetzt verstehe ich es. 
Weil mit der Steigenden Flanke ein Bit weitergeschoben wird, 
verschwindet es gleich wieder am Ausgang. Aber wie kann es das nächste 
Schieberegister aufnehmen wenn es gleichzeitig mit der Clock-Flanke 
verschwindet?

Falk B. schrieb:
> Die 5V VErsorgung vom Schieberegister braucht einen 100nF
> Entkoppelkondensator, KEINE 470uF Elko!

Okay wird gemacht.

Die Thevenin-Terminierung habe ich mit 2x150 ohm und einem 100nF 
Kondensator durchgeführt und es hat eine deutliche Verbesserung 
gebracht. Komplett durchgeschoben wird allerdings noch nichts.

Das hat schon alles seine Tücken, aber man lernt ja auch eine Menge dazu 
...

von Falk B. (falk)


Lesenswert?

@ peter müööer (hames)

>Hm Notlösung trifft es, aber etwas anderes habe ich nicht. Es ist diese
>Bitscope Micro (20 Mhz Bandbreite hat es wohl).

Das ist nicht viel mehr als ein schnelles Multimeter ;-)

>Elkos für die 12V Leitung suche ich gerade zusammen.
>Für die Masse und 12V habe ich natürlich 0,75mm² genommen.

OK.

>Ne ich meinte schon das erste Byte. Dieser Spike wird vom Arduino
>gesendet nachdem ein Byte übertragen wurde.

SEHR merkwürdig!

>Weiß allerdings nicht ob das
>die SPI Hardware im Atmega erzeugt.

Nein.

>Weil mit der Steigenden Flanke ein Bit weitergeschoben wird,
>verschwindet es gleich wieder am Ausgang. Aber wie kann es das nächste
>Schieberegister aufnehmen wenn es gleichzeitig mit der Clock-Flanke
>verschwindet?

Danz einfach. Mit der steigenden Taktflanke übernimmt das nachfolgende 
Schieberegister die Daten. Die "verschwinden" erst ein paar Nanosekunden 
später. Das reicht.

>Die Thevenin-Terminierung habe ich mit 2x150 ohm und einem 100nF

150 Ohm ist recht wenig, mach mal eher 2x240 oder 2x300 Ohm.

>Kondensator durchgeführt und es hat eine deutliche Verbesserung
>gebracht. Komplett durchgeschoben wird allerdings noch nichts.

Step by step. Ohne die 100nF an JEDEM Schieberegister wird das nix.

von Wolfgang H. (Firma: AknF) (wolfgang_horn)


Lesenswert?

Hallo peter,

erst muss die CLK Deiner Notlösung sauber sein, dann erst kann die 
Fehlersuche im Rest erfolgreich sein.

> Weil mit der Steigenden Flanke ein Bit weitergeschoben wird,
> verschwindet es gleich wieder am Ausgang. Aber wie kann es das nächste
> Schieberegister aufnehmen wenn es gleichzeitig mit der Clock-Flanke
> verschwindet?

Das darf nicht gleich wieder verschwinden, sondern sich erst mit der 
nächsten Taktflanke ändern.
Vermutung: Wo Dein Arduino eine Flanke sendet, da meint das 
Schieberegister, mehrere erkannt zu haben. Mindestens zwei.

Das Häßliche an 74HC: Die zusätzlichen Flanken entgehen dem Scope, vom 
dem der Hersteller behauptet, es hätte eine Bandbreite von 20 MHz.
Da haben die alten 4094 diese Vorteile:
1. Langsamkeit.
2. Höherer Störabstand.
3. Weniger Spikes auf der GND-Leitung.

Ciao
Wolfgang Horn

von Peter M. (hames)


Angehängte Dateien:

Lesenswert?

Okay, danke erstmal für die Tipps, ich denke auch das der Schlüssel zum 
Erfolg das Clock Signal ist.

Hm und ihr meint wirklich die Spikes im Datensignal sollen da nicht 
sein?
Ich habe nochmal an einem einzelnen Arduino gemessen, und wenn ich 
3xB00000000 nacheinander schicke, so generiert er nach jedem Byte einen 
Spike. Naja, vielleicht aber auch ein Problem des Bitscopes.

Er hier hat auch eine interesante Lösung für ein ähnliches Problem, 
nämlich einfach einen Kondensator zum Schieberegisterausgang geschaltet. 
Dieser hält das Bit noch eine weile:
http://www.microchip.com/forums/m857350.aspx
Wenn es wirklich an einer Verschiebung des Datentaktes liegt würde ich 
das auch noch probieren.

von Wolfgang H. (Firma: AknF) (wolfgang_horn)


Lesenswert?

Was mir gerade auffällt, peter,

In Deinem Bildschirmfoto aollte "Logic 2" für "latch" nicht nach jedem 
geschobenen Byte gegeben werden, sondern nur ein einziges Mal, nachdem 
alle 24 Byte durchgeschoben sind!
Denn so schalten die ULN2803 und die LED verdächtig nahe an dem Moment, 
wo das folgende Schieberegister ein Bit aufnehmen soll.
(Disclaymer: So habe ich die innere Schaltung des HC595 im Kopf - da hat 
der das 8-Bit-Schieberegister, das seinen Ausgang zum folgenden 595 
weiter leitet.)

Ciao
Wolfgang Horn

von Schlumpf (Gast)


Lesenswert?

Solange du mit so ungeeignetem Messwerkzeug an die Sache ran gehst, wird 
es ein Stochern im Nebel bleiben.

Mit nem 20 MHz Oszi wirst du Refelxionen etc nicht vernünftig erkennen 
können.

Und Reflexionen sind bei so einem Aufbau sogar sehr wahrscheinlich.

Du schaust immer nur das ganze Datenpaket an..
zoome mal weiter rein. Wenn es Reflexionen sind, dann siehst du die in 
der AUflösung sonst nicht.

Rechnen wir mal:
4m Leitung machen eine Laufzeit von ca. 20ns.. Reflexionen sind also im 
Bereich zwischen 20ns und von mir aus 80 ns zu erwarten..

Du löst aber mit 100µs/div auf.. da siehst du nix, was sich im 
ns-Bereich abspielt.
Zoome mal auf 100ns/div und schaue dir die Bereiche um die Flanken an.

Vielleicht kannst du da mit viel Glück mit dem schnarchlahmen Oszi 
zumindest ein verdächtige Hubbel auf dem Signal sehen... aber vermutlich 
nicht..

Deine SPI-Takt ist langsam, die Flanken aber steil..die müssen gar nicht 
so steil sein. Bedämpfe sie doch mal mit nem Tiefpass. Damit filterst du 
die hochrequenten Anteile aus dem Signal, die letztendlich die 
reflektierten Anteile sein können.. Damit machst du zwar die Flanken 
"rund", aber filterst ggf auftretende Reflexionen mit raus.

Also einfach nen TP in die CLK-Leitung bauen. Und am Besten auch gleich 
in die Latch-Leitung.

ggf musst du dann an jedem Empfänger das Signal mit einem 
Schmitt-Trigger wieder steiler machen.
Aber erstmal CLK filtern und schauen, ob es dann funktioniert.
Leider kannst du mit deinem Spiel- äh Werk-Zeug nicht sinnvoll messen.. 
Daher bleibt nur probieren.

von Schlumpf (Gast)


Lesenswert?

Und was mir noch auffällt (ok vielleicht sehe ich das gerade auch nicht 
richtig zu der Uhrzeit)

Mit welcher Flanke wird denn nun geschrieben und mit welcher gelesen?

Der Treiber für das Eingangssignal wechselt andert seinen Pegel mit der 
fallenden Flanke und der Ausgang wechselt mit der steigenden Flanke??

Und mit welcher Flanke wird am Eingang übernommen???
Kann es sein, dass du das SPI an deinem Controller falsch konfiguriert 
hast??

Polarity und/oder Phase?

von Falk B. (falk)


Lesenswert?

@ peter müööer (hames)

>Hm und ihr meint wirklich die Spikes im Datensignal sollen da nicht
>sein?

Nein. Aber das ist im Moment nicht dein Problem.

>Spike. Naja, vielleicht aber auch ein Problem des Bitscopes.

Kann sein.

>Er hier hat auch eine interesante Lösung für ein ähnliches Problem,
>nämlich einfach einen Kondensator zum Schieberegisterausgang geschaltet.

NEIN! Das ist MURKS!

von Falk B. (falk)


Lesenswert?

@ Schlumpf (Gast)

>Mit welcher Flanke wird denn nun geschrieben und mit welcher gelesen?

Es wird nur geschrieben. Mit SPI MOde 0. Daten vom Arduino wechslen mit 
fallender Flanke, die Schieberegister lesen und geben aus mit steigender 
Flanke.

Der Treiber für das Eingangssignal wechselt andert seinen Pegel mit der
fallenden Flanke und der Ausgang wechselt mit der steigenden Flanke??

>Und mit welcher Flanke wird am Eingang übernommen???

Steigende

>Kann es sein, dass du das SPI an deinem Controller falsch konfiguriert
>hast??

Nein.

von Schlumpf (Gast)


Lesenswert?

@Falk,

ja, das ist mir heute morgen dann auch aufgefallen.. war spät gestern 
und ich hatte irgendwie das klassiche SPI im Kopf, wo eben alle 
Teilnehmer auf der einen Flanke lesen und auf der anderen schreiben..
Aber war mein Fehler.
Hier ist ja nur ein Schieberegister angeschlossen. Das passt also.

Na ja, ich würde dann auf jeden Fall mal nen Tiefpass auf die 
flankensensitiven Eingänge basteln. Das ist bei solchen Leitungen und 
Datenraten sicher kein Fehler.

Und dann ist Ground Bounce hier wohl sicher auch ein Thema. Aber das 
wurde ja schon erwähnt.

von Dietrich L. (dietrichl)


Lesenswert?

Schlumpf schrieb:
> Deine SPI-Takt ist langsam, die Flanken aber steil..die müssen gar nicht
> so steil sein. Bedämpfe sie doch mal mit nem Tiefpass. Damit filterst du
> die hochrequenten Anteile aus dem Signal, die letztendlich die
> reflektierten Anteile sein können.. Damit machst du zwar die Flanken
> "rund", aber filterst ggf auftretende Reflexionen mit raus.

Dann brauchst Du aber am Eingang einen Schmitt-Trigger, was die 74HC595 
üblicherweise nicht haben.
Schlappe Flanken an einem schnellen IC ohne Schmitt-Trigger-Eingang sind 
nicht gut und können mehrfache Taktung bewirken.

Gruß Dietrich

von Schlumpf (Gast)


Lesenswert?

Dietrich L. schrieb:
> Dann brauchst Du aber am Eingang einen Schmitt-Trigger, was die 74HC595
> üblicherweise nicht haben.

Schlumpf schrieb:
> ggf musst du dann an jedem Empfänger das Signal mit einem
> Schmitt-Trigger wieder steiler machen.

von Dietrich L. (dietrichl)


Lesenswert?

Schlumpf schrieb:
> Dietrich L. schrieb:
>> Dann brauchst Du aber am Eingang einen Schmitt-Trigger, was die 74HC595
>> üblicherweise nicht haben.
>
> Schlumpf schrieb:
>> ggf musst du dann an jedem Empfänger das Signal mit einem
>> Schmitt-Trigger wieder steiler machen.

Soweit hatte ich dummerweise nicht mehr gelesen   :-(

von Schlumpf (Gast)


Lesenswert?

Dietrich L. schrieb:
> Soweit hatte ich dummerweise nicht mehr gelesen   :-(

Macht ja nix ;-)

iwoasesned schrieb im Beitrag #4373037:
> Das ist doch totaler Murks!

Warum?

von Peter M. (hames)


Lesenswert?

Wolfgang H. schrieb:
> In Deinem Bildschirmfoto aollte "Logic 2" für "latch" nicht nach jedem
> geschobenen Byte gegeben werden, sondern nur ein einziges Mal, nachdem
> alle 24 Byte durchgeschoben sind!

Ja, das weißt ich. Es war nur ein Testprogramm an einem nicht verbauten 
Arduino, um euch die Spikes zu zeigen. Den Artikel über Oszilloskope 
habe ich mir jetzt auch durchgelesen und es scheinen einem mit dem 
Bitscope wirklich die meisten Störspitzen zu entgehen. Tastköpfe habe 
ich dafür übrigens nicht. Einfache Klemmen.
Glück gehabt, wollte mir auch schon eines kaufen, da ich ganz begeistert 
war wie viel man damit "sieht" ;)

Habe jetzt einen Großteil der Schieberegister mit 100nF Keramik 
durchkondensiert. Morgen bekomme ich weitere, dann kann ich den Rest 
auch noch machen. Terminiert habe ich jetzt die Clock und Latch Leitung 
mit jeweils 2x220 Ohm und 1 uF Folie. Es hat auf jeden Fall gewirkt. Das 
Bit wird komplett bis zum Schluss durchgeschoben und ich konnte den SPI 
Takt sogar von 125 kHz auf 500 kHz anheben!

Elkos an der 12V Leitung sind auch überwiegend eingebaut und jetzt kann 
man sogar alle gleichzeitig Strobomäßig ein/aus schalten. Vorher gabe es 
dann immer ein großes Chaos.

Schlumpf schrieb:
> Na ja, ich würde dann auf jeden Fall mal nen Tiefpass auf die
> flankensensitiven Eingänge basteln. Das ist bei solchen Leitungen und
> Datenraten sicher kein Fehler.

Tiefpass habe ich an der Clockleitung ausprobiert (mit 2.2nF und auch 
mit 47nF und dann per 100 ohm Poti herumprobiert), aber es hat alles nur 
verschlechtert. Da werden dann schon Schmitt Trigger nötig sein ...

Morgen werde ich die restlichen Kondensatoren einbauen und das gesamte 
nocheinmal testen.

von Falk B. (falk)


Lesenswert?

@peter müööer (hames)

>Bitscope wirklich die meisten Störspitzen zu entgehen. Tastköpfe habe
>ich dafür übrigens nicht. Einfache Klemmen.

AUA!

>Habe jetzt einen Großteil der Schieberegister mit 100nF Keramik
>durchkondensiert. Morgen bekomme ich weitere, dann kann ich den Rest
>auch noch machen. Terminiert habe ich jetzt die Clock und Latch Leitung
>mit jeweils 2x220 Ohm und 1 uF Folie.

Geht auch, aber 100nF Keramik reichen. Der Kondensator muss ja nur ein 
paar Dutzend ns Strom liefern bzw. schlucken.

> Es hat auf jeden Fall gewirkt. Das
>Bit wird komplett bis zum Schluss durchgeschoben und ich konnte den SPI
>Takt sogar von 125 kHz auf 500 kHz anheben!

TATA!

>Elkos an der 12V Leitung sind auch überwiegend eingebaut und jetzt kann
>man sogar alle gleichzeitig Strobomäßig ein/aus schalten. Vorher gabe es
>dann immer ein großes Chaos.

Sehr schön. Machmal stimmt die Theorie sogar in der Praxis ;-)

>Tiefpass habe ich an der Clockleitung ausprobiert (mit 2.2nF und auch
>mit 47nF und dann per 100 ohm Poti herumprobiert),

NEIN!

von Peter M. (hames)


Lesenswert?

Nur zur Vollständigkeit.

Es gab dann doch Probleme mit den letzen beiden Schieberegistern. Diese 
ließen sich nicht zuverlässig ansteuern, da Clock und Datensignal 
wahrscheinlich zu stark gegeneinander verschoben waren.

Geholfen hat dann tatsächlich die bereits oben erwähnte Bastlerlösung: 
http://www.microchip.com/forums/m857350.aspx

Ein 100nF Kondensator zwischen dem Datenausgang der Register Q7*/QH und 
GND.
Mit langsamem Takt (keine SPI Schnittstelle sondern "Software-SPI") 
ließen sich dann zuverlässig alle 10 Schieberegister ansteuern.
Außer es wurde die Kombination B10101010 abwechselnd mit B01010101 
gesendet.
Da ich darauf verzichten konnte und für eine weitere 
Ursachenuntersuchung keine Geduld und Zeit mehr aufbringen möchte lasse 
ich es jetzt so.

Für das nächste mal werde ich entweder I2C Porterweiterungen verwenden 
oder einfach mit 3 Registern multiplexen. Diese können ja dann unten am 
Arduino sitzen, sodass Störsignale und Kabellängen nicht mehr so 
kritisch sind.

schöne Weihnachten,
Peter

von Falk B. (falk)


Lesenswert?

@ peter müööer (hames)

>Es gab dann doch Probleme mit den letzen beiden Schieberegistern. Diese
>ließen sich nicht zuverlässig ansteuern, da Clock und Datensignal
>wahrscheinlich zu stark gegeneinander verschoben waren.

Glaub ich nicht. Und ohne eine Messung GESCHEITE reine Spekulation

>Geholfen hat dann tatsächlich die bereits oben erwähnte Bastlerlösung:
>http://www.microchip.com/forums/m857350.aspx

>Ein 100nF Kondensator zwischen dem Datenausgang der Register Q7*/QH und
>GND.

AUA!! NEIN!!!!

>Da ich darauf verzichten konnte und für eine weitere
>Ursachenuntersuchung keine Geduld und Zeit mehr aufbringen möchte lasse
>ich es jetzt so.

Schlecht!

von eProfi (Gast)


Lesenswert?

Eine Lösung ist das Einfügen eines Dämpfungswiderstandes 10 - 100 Ohm 
zwischen dem Ausgangspin und der langen Leitung, zusammen mit der 
Leitungskapazität bildet das den von Schlumpf genannten Tiefpass.
Durch die verringerte Slew-Rate erübrigt sich evtl. sogar ein Abschluss 
auf der Empfängerseite.

Das Parallelschalten eines Cs zum Eingang kann eine temporäre Besserung 
bringen, aber es ist nicht reproduzierbar. Bei einer Änderung anderer 
Parameter kann es genauso schaden, denn der C erzeugt braucht zum 
Umladen zusätzlich Strom, welcher ein störendes Magnetfeld erzeugt. Das 
kann z.B. in die Gnd-Leitung transformieren und den Gnd-Level 
verseuchen.

von Falk B. (falk)


Lesenswert?

@ eProfi (Gast)

>Eine Lösung ist das Einfügen eines Dämpfungswiderstandes 10 - 100 Ohm
>zwischen dem Ausgangspin und der langen Leitung, zusammen mit der
>Leitungskapazität bildet das den von Schlumpf genannten Tiefpass.
>Durch die verringerte Slew-Rate erübrigt sich evtl. sogar ein Abschluss
>auf der Empfängerseite.

Nö. Schon gar nicht an einer Taktleitung. Das geht nur wenn diese einen 
Schmitt-Trigger hat. Hat der 74HC595 aber nicht.

>Das Parallelschalten eines Cs zum Eingang kann eine temporäre Besserung
>bringen, aber es ist nicht reproduzierbar.

Ist eine Verschleierung von Symtomen! Man muss aber die Ursachen 
bekämpfen.

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.