leider sind meine Bauteile noch nicht und ich kann es nicht testen.
Ich frage mich ob ich mit diesem vereinfachten Beispielcode mehrere Schieberegister ansprechen kann, die nicht hintereinander sein sollen.
Müßte funktionieren. Ich habe es aber weder ausprobiert non gründlich analysiert. Du kannst verschiedene Pins nehmen und 2 Schieberegister je mit einem Satz Pins betreiben.
Schieberegister sind so schnell daß das eigentlich nicht notwendig ist. auch 2 Schieberegister in serie sind schnell genug für 99% der Anwendungen.
Vielen Dank Uwe für die zügige Antwort.
Durch diese hätte ich dann gleich wieder ne Frage.
So über den Daumen gepeilt, wie oft pro Sekunde kann man so ein Register bespielen?
über den Daumen läßt sich sowas schlecht peilen, weil man es den Dingern ja nicht ansieht. Hilfreicher ist da vielleicht ein Blick ins Datenblatt! Für einen M74HC590 etwa findet sich dort (je nach Hersteller) eine max. Frequenz von 62 MHz.
Ich habe die Woche erst mit arduino und Elektro überhaupt erst angefangen, bin also ein absoluter noob.
Wenn ich jetzt von den 62 mhz ausgehe, steht das dann für 62 mal pro Sekunde?
Wahrscheinlich nicht, oder?
Wäre zu einfach für die Anfänger.
Kann man das irgendwie umrechnen.
Vielen Dank für deine Mühe.
also wollen wir doch mal etwas Schulwissen auffrischen:
Eine Frequenz ist definiert als die Anzahl von Schwingungen pro Zeiteinheit. Die Basis-Zeiteinheit ist die Sekunde. Die Basis Einheit für die Frequenz ist Herz. Damit ist 1 Hz = 1 Schwingung pro Sekunde.
62 Herz wären demnach 62 Schwingungen pro Sekunde. Jetzt haben wir aber als max. Frequenz nicht Hz sondern MHz also Mega-Herz. Da müssen wir uns also noch um die sog. SI-Präfixe kümmern.
die wichtigsten in der Elektronik:
p = Piko = 10^-12 = 0,000.000.000.001
n = Nano = 10^-9 = 0,000.000.001
u = Mikro = 10^-6 = 0,000.001
m = Milli = 10^-3 = 0,001
k = Kilo = 10^3 = 1.000
M = Mega = 10^6 = 1.000.000
G = Giga = 10^9 = 1.000.000.000
T = Tera = 10^12 = 1.000.000.000.000
62 MHz sind also 62 * 1.000.000 = 62.000.000 Schwingungen pro Minute Sekunde (ja ja ... immer diese Flüchtigkeitsfehler ... danke für den Hinweis!) und damit deutlich mehr als Du aus einem "normalen" Arduino max. herausholen kannst
der aeduino kann 16 millionen "einzelne vorgänge" in der sekunde ausführen. beim schicken eines byte an einen 74HC595 werden viele solcher vorgänge ausgeführt, bis das durch ist, ich nehme an, einige hundert.
wenn Du also 16 millionen durch, sagen wir mal, 300 dividierst, kommst Du auf etwa 50.000 durchgange pro sekunde. selbst wenn's 10mal schneller oder langsamer geht, isses immer noch recht flott.
Diese Schnelligkeit kann auch zum Problem werden, wenn man die Schaltung nicht sauber aufbaut und Störungen auf die Leitungen eingekoppelt werden. Deshalb immer großzügig mit Abblockkondensatoren arbeiten. Ein Keramik-C pro Schieberegister und einen kleinen Elko dann nochmals für mehrere Schieberegister. Sollen die Ausgänge mehrere Schieberegister mehrere LEDs treiben, dann die Spannungsversorgung sternförmig verdrahten und nicht hintereinenander, wie eine Lichterkette. Sonst bricht die Spannung durch die unterschiedliche Stromaufnahme beim Schalten ein. Die Takt- und Steuerleitungen können nicht beliebig lang werden, da sie für Störungen wie Antennen wirken.
Auf dem Steckbrett ist das noch unkritisch, aber wenn man auf Lochraster eine Schaltung dauerhaft aufbaut oder eine Leiterplatte entwirft, dann sollte man auf sowas achten. Ansonsten kann es sehr mühselig werden mit der Fehlersuche.
Eine Sache ist die max Frequenz die die Schieberegister vertragen. Das ist theoretisch da der Arduino immer langsamer ist.
Wenn man die Schieberegister über SPI ansteuert dann sind teoretisch bei 1/2 oder 1/4 Takt und 8 bit pro Schieberegister und damit ein update von ca 1MHz bzw 500kHz möglich. Praktisch ist der erreichbare Wert niedriger weil die Daten ja von irgendwo her kommen müssen. Shiftout ist bedeutend langsamer. Ein praktische Wert könnte der von Stefan genannte sein.
Am Ende es sind Werte von 5000 bis 100000 Updates pro Sekunde möglich.
Grüße Uwe
Nicht nur die Bereitstellung der Daten spielt eine Rolle, sondern auch ob der µC die Ausgangslast bei schneller Taktung bereitstellen kann. CMOS IC's brauchen theoretisch keinen Eingangsstrom - es fließen aber Umladeströme, wenn die Leitungskapazitäten und die Gates umgeladen werden müssen. Wenn man 10 Schieberegister kaskadiert hat und die Taktleitungen parallel liegen (nur die Daten gehen von DO zu DI von Register zu Register) dann kann es da eventuell schon enge werden. Aber selbst das läßt sich sehr einfach mit einem Leitungstreiber lösen. Man muß es nur bedenken
uwefed:
Müßte funktionieren. Ich habe es aber weder ausprobiert non gründlich analysiert. Du kannst verschiedene Pins nehmen und 2 Schieberegister je mit einem Satz Pins betreiben.
Schieberegister sind so schnell daß das eigentlich nicht notwendig ist. auch 2 Schieberegister in serie sind schnell genug für 99% der Anwendungen.
Grüße Uwe
Sorry dass ich mich hier mal reinhänge, aber meine Frage passt wunderbar zum ET:
Also wäre es z.B. möglich, wenn man eine 8 Stellige Anzeige mit 14 Segmentanzeigen aufbauen will, statt bei jeder Anzeige 2 Schieberegister zu verwenden, das ganze in einer Matrix aufzubauen. Also 2 Schieberegister für die Segmente und ein Schieberegister für die Anodenansteuerung zu verwenden.
Ich hab hier nämlich noch ein paar VQB201 liegen, schrecke aber vor den vielen Schieberegistern zurück. Da würde ich immerhin 13 Register einsparen, wobei selbst nur mit 3 Registern die Verdrahtung schon der Horror werden wird (Leiterplatten entwerfen und ätzen ist nicht so mein Ding).
nix_mehr_frei:
Och, na ja, Werte werden grundsätzlich immer in den ungebräuchlichsten Einheiten angegeben.
Geschwindigleiten z.B. im Angström je Woche...
Und ich dachte die gebräuchlichste Einheit ist das AE pro Monat.
Grüße Uwe
Moko:
Sorry dass ich mich hier mal reinhänge, aber meine Frage passt wunderbar zum ET:
Also wäre es z.B. möglich, wenn man eine 8 Stellige Anzeige mit 14 Segmentanzeigen aufbauen will, statt bei jeder Anzeige 2 Schieberegister zu verwenden, das ganze in einer Matrix aufzubauen. Also 2 Schieberegister für die Segmente und ein Schieberegister für die Anodenansteuerung zu verwenden.
Ich hab hier nämlich noch ein paar VQB201 liegen, schrecke aber vor den vielen Schieberegistern zurück. Da würde ich immerhin 13 Register einsparen, wobei selbst nur mit 3 Registern die Verdrahtung schon der Horror werden wird (Leiterplatten entwerfen und ätzen ist nicht so mein Ding).
Natürlich kannst Du 3 Schieberegister nehmen und die LED-Displays in MATRIX ansteueren. Dazu brauchst Du aber dann solche mit mehr Strom als die 74HC595 liefern zB 2 74HC595 und 2 ULN2803 oder TPIC6595N für die 16 Kathoden (mit Vorwiderstand) und ein 74HC595 mit 8 PNP Transistoren für die Anoden. Alle 3 Schiberegister können in Serie geschaltet werden. Du mußt die LED Segmente zyklisch ansteuern damit alle Segmente leuchten.
@Serenifly
Die MAX7219 können nicht zusammengeschaltet werden sodaß sie synchron zusammenarbeiten können um eine 8x16 Matrix anzusteuern.