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
Das ist kein Problem. Bis zu zwei Meter dürfen TTL Signale über auch über Kabel geführt werden. ABER: Spannungsabfall beachten!
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
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.
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.
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
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.
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 :)
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?
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."
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!
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"
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.