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
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
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.
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
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...
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!)
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
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
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.
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
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?
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
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.
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
Es heißt zwar, wer misst misst Mist, aber ohne mein Scope sage ich garnichts. MfG Klaus
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
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
@ 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
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
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.