Forum: Mikrocontroller und Digitale Elektronik Schieberegister - Anschluss über PCB Verbinder?


von Mario La (Gast)


Lesenswert?

Huhu,

ich würde gerne einen Schaltungsteil auf eine zweite Platine auslagern.

Derzeit habe ich auf dem Controller-Board ein Schieberegister, an dem 
ein ULN2803 hängt, welches wiederum LEDs schaltet.

Die LEDs, den 2803 und das 74HC595 Schieberegister würde ich nun gerne 
auf eine externe Platine verfrachten und dann die Spannungsversorgung, 
Clock, OutputEnable und SerialInput über ein Flachbandkabel verbinden.

Ist das eine gute Idee? Wie lang dürfen solche Flachbandkabel eurer 
Meinung nach sein?

Freue mich auf Anregungen ;)

Danke, Mario

von Holla (die Waldfee) (Gast)


Lesenswert?

Das ist kein Problem. Bis zu zwei Meter dürfen TTL Signale über auch 
über Kabel geführt werden. ABER: Spannungsabfall beachten!

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Mario La schrieb:
> Wie lang dürfen solche Flachbandkabel eurer
> Meinung nach sein?

Das dürfte stark von den von Dir geforderten Geschwindigkeiten abhängen.

Was brauchst Du also/was hast Du aktuell laufen?

MfG

von Manfred (Gast)


Lesenswert?

Holla (die Waldfee) schrieb:
> Bis zu zwei Meter dürfen TTL Signale über auch
> über Kabel geführt werden.
Das ist bei einem taktgesteuerten IC ganz großer Mist, erfreue Dich an 
undefinierten Schaltzuständen, weil Störungen einstrahlen.

> ABER: Spannungsabfall beachten!
Quatsch! Ein Leiter mit 0,14qmm hat 0,255 Ohm pro Meter - gibt bei 2 
Metern Kabel ein ganzes Ohm.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Holla (die Waldfee) schrieb:
> Das ist kein Problem. Bis zu zwei Meter dürfen TTL Signale über auch
> über Kabel geführt werden.

Woher stammt diese wirre Weisheit?


Es kommt auf die Taktfrequenz an. Je schneller, desto kürzer.

> gibt bei 2 Metern Kabel ein ganzes Ohm.

Das kann bei der angedachten Spannungsversorgung durchaus schon ein 
Problem werden, immerhin sollen hier LEDs (in unspezifizerter Menge) 
betrieben werden.

Bei 1 A Strom ergibt 1 Ohm einen Spannungsabfall von einem Volt.

von Mario La (Gast)


Lesenswert?

Hallo @all,

vielen Dank für eure Antworten.

Also das Flachbandkabel soll keine zwei Meter lang werden ;)

10-15cm reichen völlig aus - den Spannungsabfall sehe ich daher erstmal 
nicht so problematisch.

Was die Geschwindigkeit betrifft, so müsste ich das morgen mal mit dem 
Oszilloskop messen, wie schnell das SR mit Daten beschickt wird.

Im Code mache ich es so:
1
#include <avr/io.h>
2
3
#define SR_PORT      PORTB
4
#define SR_DDR       DDRB
5
#define SR_DS        PB0
6
#define SR_SHIFT_CLK PB1
7
#define SR_STORE_CLK PB2
8
9
#define SRHigh() (SR_PORT |= (1<<SR_DS))
10
#define SRLow()  (SR_PORT &= (~(1<<SR_DS)))
11
12
void sr_clock() {
13
   SR_PORT |= (1<<SR_SHIFT_CLK);
14
   SR_PORT &= (~(1<<SR_SHIFT_CLK));
15
}
16
17
18
void sr_latch() {
19
   SR_PORT |= (1<<SR_STORE_CLK);
20
   _delay_loop_1(1);
21
   SR_PORT &= (~(1<<SR_STORE_CLK))
22
   _delay_loop_1(1);
23
}
24
25
26
void sr_shiftout(uint8_t data) {
27
   for(uint8_t i=0;i<8;i++) {
28
      if(data & 0b10000000) {
29
         SRHigh();
30
      }
31
      else {
32
         SRLow();
33
      }
34
35
      sr_clock();
36
      data=data<<1;
37
   }
38
39
   sr_latch();
40
}
41
42
43
void main() {
44
45
   // Pins für Schieberegister konfigurieren:
46
   SR_DDR |= ((1<<SR_SHIFT_CLK)|(1<<SR_STORE_CLK)|(1<<SR_DS));
47
48
   while(1) {
49
   
50
     if( irgendeine_bedingung_erfuellt ) {
51
       sr_shiftout(0b10101010);
52
     }
53
54
   }
55
}


Wie schnell die Daten dann allerdings übertragen werden, habe ich mir 
noch garnicht angesehen.

Werde das prüfen. Oder kann man das ausrechnen? Der AVR läuft mit 
16MHz...

LG, Mario

von Patrick (Gast)


Lesenswert?

Für meine Nixieuhr habe ich es genauso gemacht. Eine Controllerplatine, 
ein Netzteil und drei Anzeigeplatinen mit je zwei Röhren, 3x 
Adressierbarem D-Latch und 3x ULN2803A.
Die längste Kabelstrecke zu den Anzeigen ist bei mir 40 cm. Der Atmega8 
taktet mit 4 MHz und die 5-V-Schaltflanke ist gegenwärtig etwa vier 
Taktzyklen lang (müsste ich noch mal in meinem Asm-Code gucken). Eine 
Zustandsänderung habe ich logischerweise einmal pro Sekunde. Die 
Schieberegister auf der entfernten Platine unbedingt abblocken mit 100 
nF Kerkos, sonst rutscht dir beim Umschalten die Versorgungsspannung 
zusammen.

Ich hatte auch Angst vor Störeinflüssen, aber das funktioniert ohne wenn 
und aber. Du wirst ja wahrscheinlich eher keine hochfrequente Taktung 
des Schieberegisters anstreben, da würde ich mir keine allzu großen 
Sorgen machen.

von Patrick (Gast)


Lesenswert?

Mario La schrieb:
> Werde das prüfen. Oder kann man das ausrechnen? Der AVR läuft mit
> 16MHz...

Du kannst dir mal den Asm-Code anzeigen lassen, da kannst du dann draus 
folgern, wie schnell dein Schieberegister angesprochen wird.
Ggf. einfach ein paar "nop" Befehle einfügen wenn es dir zu schnell ist, 
ich glaub Inline-Assembler heißt das. Da kann dir jemand anders eher 
helfen, ich habs direkt in Asm geschrieben und bei mir gehts.
Mit Messen bist du aber sicher schneller und musst dich nicht durch den 
Asm-Wust durchwurschteln :)

von Mario La (Gast)


Lesenswert?

Huhu,

Assembler lesen fällt mir sehr schwer. Ich habe das zwar mal MASM auf 
80386 CPUs gelernt, fand das aber wenig ästhetisch und überlasse das 
daher den echten Freaks ;)

Mit meinem Scope-Meter habe ich gerade immerhin noch 610.505 kHz am 
Shift-Clock-Pin gemessen (wenn ich in einer Dauerschleife Bytes 
rausshifte).
Das könnte ich aber zur Not auch reduzieren, wenn das ein Problem 
darstellen könnte.

Aus dem Bauch heraus: Ab welcher frequenz wird's denn kritisch?
Sollte man generell das Flachbandkabel so belegen, dass zwischen den 
Signalleitungen immer eine GND liegt?

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Rufus Τ. F. schrieb:
> Es kommt auf die Taktfrequenz an. Je schneller, desto kürzer.

Wenn dat mal da Falk liest.... ;)

https://www.mikrocontroller.net/articles/Wellenwiderstand#Terminierung

"Eine Leitung ist dann als elektrisch lang zu betrachten, wenn die 
einfache Laufzeit der Leitung größer als ca. 1/6 der minimalen 
Anstiegszeit der Signale ist."

von Patrick (Gast)


Lesenswert?

Mario La schrieb:
> Aus dem Bauch heraus: Ab welcher frequenz wird's denn kritisch?
> Sollte man generell das Flachbandkabel so belegen, dass zwischen den
> Signalleitungen immer eine GND liegt?

Das würde ich lassen, erhöht nämlich den Kapazitätsbelag der Leitung und 
sie wird "langsamer", d.h. die Signale verschleifen.

Ich würde da nich so viel überlegen, das ganze aufbauen und dann am Ende 
der Leitung mal den Flankenverlauf angucken. Wenn der passt, kanns so 
bleiben, wenn nicht, musst du eben mit der Frequenz bisschen runter, das 
sollte dir ja zeitmäßig keine Probleme bereiten.

Einen weiteren Tipp würde ich dir mitgeben:

Sieh Widerstände (Pullup/-down) vor, die das Schieberegister beim 
Programmieren des uC vorm Einfangen von Quatsch schützen. Habe ich bei 
meiner Nixieuhr nicht gemacht und jedes Mal beim Programmieren, wenn die 
Ausgänge wieder zu hochohmigen Eingängen werden, treibt meine Anzeige 
Schabernack, wenn die Anodenspannung nicht aus ist!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Rufus Τ. F. schrieb:
> Es kommt auf die Taktfrequenz an. Je schneller, desto kürzer.
Es kommt auch sehr auf die Flankensteilheit an... ;-)
Klar hängt "höhere Taktfrequenz" mit "steilen Flanken" zusammen (ein 
10MHz Signal kann nicht mit 100ns Flanken übertragen werden), aber die 
Ursache des Übels sind die Flanken selber.

Patrick schrieb:
> Ich würde da nich so viel überlegen, das ganze aufbauen und dann am Ende
> der Leitung mal den Flankenverlauf angucken. Wenn der passt, kanns so
> bleiben, wenn nicht, musst du eben mit der Frequenz bisschen runter
Das hilft nur bei Datensignalen. Der Takt muss sauber kommen, 
Überschwinger sind da sehr gefährlich, denn im dümmsten Fall kann eine 
Taktflanke mit anständigem Überschwinger als 2 Takte erkannt werden.

Zum Thema Serienterminierun siehe den 
Beitrag "Signalproblem bei langem Kabel" und besonders auch das 
letzte Drittel des Beitrag "Serienwiderstand bei Hochfrequenz"

von Mario La (Gast)


Lesenswert?

Hallo Lothar,

vielen Dank für die Hinweise. Ich werde das heuteabend mal mit 
verschiedenen Kabellängen aufbauen und dann messen.

So ein Serienwiderstand kommt dann einfach vor am Schieberegister vor 
CLK und DS? Oder muss der controller-seitig sitzen?

Vielen Dank,

Mario

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Mario La schrieb:
> So ein Serienwiderstand kommt dann einfach vor am Schieberegister vor
> CLK und DS? Oder muss der controller-seitig sitzen?
Die Serienterminierung muss direkt an bzw. nahe bei der Signalquelle 
erfolgen. Und wie in den Links beschrieben ist der Takt problematisch. 
Denn der sagt, wann die Daten gültig sind. Es reicht also "prinzipiell" 
aus, den Takt zu terminieren. Ich sehe so einen widerstand aber bei den 
Datenleitungen auch vor. Der kann dann immer noch später im Kupfer 
gebrückt werden, wenn er nicht gebraucht wird.

: Bearbeitet durch Moderator
von Mario La (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Also die Variante mit der Flachbandkabel-Verbindung zwischen Controller 
und Schieberegister funktioniert auf der Werkbank schonmal ganz gut.

Nun meinte ein Bekannter von mir, dass die bei ihm in der Firma in 
solchen Fällen ganz gerne Schmitt-Trigger dazwischen setzen. Auf beiden 
Seiten des Flachbandkabels jeweils einen, so dass die Invertierung sich 
wieder aufhebt.

(siehe Anhang)

Zwischen SV1 und SV2 wäre also eine ca. 30cm lange Kabelverbindung...

Kennt jemand von euch diese Praxis? Und was tut der Kondensator zwischen 
Clock und GND?

Vielen Dank für weitere Anregungen und frohe Ostern ;)

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.