hallo, ich habe einen atmega 162 der mit 16 Mhz läuft und eine hohe Datenrate für 9 Schieberegister (in Reihe) ausgebit(~1,38 Mhz oder auch ~72LED*256*25Hz*3bit). Bei dieser Datenrate komme ich auf ca 26 Hz Wiederholungsfrequenz. Zum Überprüfen, wie viel Zeit nach jeder Ausgabe (72 Bit + latch..) noch übrig ist, habe ich nun eine For Schleife mit einem "NOP" nach jeder Ausgabe einfefügt. Wird der die Anzahl der NOPs in der Schleife größer als 56 so schaffe ich nicht mehr die angepeilten 25 Hz... Frage: Wie binde ich einen zweiten atmega 162 @16MHz am besten an, so das die Daten "am schnellsten und ohne CPU zeit zu verbrauchen" ausgetauscht werden können? (72 Byte) ( Der Zweite Atmega macht die Änderungen der Helligkeiten.. Muster ... --> Daten sind 72 Byte Helligkeit die sich so im 10ms Takt ändern können) Die ICs sind im Abstand von ca. 3cm angeordnet. Als Möglichkeiten überlegt habe ich mal vorab: 1) Uart mit 1Mbit ( ala #define UBRR_VAL 0x0000 ) @ 16 Mhz --> hat wer schon mal 2 µCs mit so einer Datenrate (1Mbit) schon am laufen gehabt? bzw. sind hier Probleme zu erwarten? 2)8Bit auf einen Portausgang + Int0 vom anderen µC triggern. --> Position übergeben, Daten Paralell übergeben, In der ISR nur das Empfangene Byte ins Ausgabe array schreiben und mehr nicht. 3) Mit SPI ? Bin mal auf die Vorschläge gespannt. mfg Ralph
Hi, ich würde Variante 2) ausprobieren, da dies mit 8 Bit paralell meiner Meinung nach am bessten funktioniert. mfg Micha
Für so ein rabiates Bitgeklimper nimmt man irgendwann sinnvollerweise einen CPLD, oder wenigstens ein paar CMOS ICs aus der TTL Reihe. Und Der TLC5922 und Co ist auch schon lange auf dem Markt. Man muss nicht mit aller Macht ohne sowas auskommen, um viele LEDs zu dimmen. Oder noch besser, man macht clevere Soft-PWM. MFG Falk
>Daten sind 72 Byte Helligkeit
Wenn ich das richtig verstanden habe, willst du 72Bytes über SPI
"schnellstmöglich" ausgeben.
Ich habe ein ähnliche Problem und es direkt in einem Interrupt gelöst:
Deine 72Bytes würde ich direkt hinternander ausgeben. Das ergibt bei
16MHz XTAL eine reine Schiebezeit von 72µs. Du hast also während des
Schiebens Zeit, das nächste Datum zu holen.
Hallo, Falk Brunner schrieb: > Für so ein rabiates Bitgeklimper nimmt man irgendwann sinnvollerweise > > einen CPLD, oder wenigstens ein paar CMOS ICs aus der TTL Reihe. Das währe eine Überlegung wert, wenn das nächste mal so etwas in die Richtung mit hoher Datenrate ansteht, allerdings habe ich mich noch nicht mit einem CPLD beschäftigt, bzw. habe auch kein Programmer dafür. Matthias Lipinsky schrieb: >>Daten sind 72 Byte Helligkeit > > > > Wenn ich das richtig verstanden habe, willst du 72Bytes über SPI > > "schnellstmöglich" ausgeben. Die Ausgabe erfolgt wie Falk richtig erkannt hat, mit "rabiatem Bitgeklimpern" auf einem Port. Die 72 Byte Helligkeit müssen zwischen dem µC der die Muster generiert und dem "armen" Ausgabe µC ausgetauscht werden. Wenn ich alle 25 Hz mit 8 Bit PWM machen will so muss alle Hz 8 Bit Datenausgaben /s Zeit alle ms 25 256 6400 0,15625 0,156 ms eine Ausgabe erfolgen, sprich 72 Bit rausgeclockt werden und ins Latch übernommen werden. Ob hier die von Falk zitierte SOFT PWM hilft, kann ich nicht sagen, (hatte leider noch keine Zeit es genau zu lesen), Überflogen ging es ja um 8 LED´s ich versuche es mit 72 Hinzubekommen.. Es ändert wohl nichts daran, das ich für die Schieberegister alle 0,156 ms ca.228 Bit ausgeben muss was wohl bei 16 MHz über den Daumen 0,01425 ms brauchen wird. - Werde ich mal nachmessen.. Insofern sollten mir ja theoretisch 0,156 ms - 0,01425 ms = 0,142 ms Zeit für andere Dinge bleiben.. Die Frage war eigentlich wie man die Kommunikation mit der Datenausgabe Zeittechnischr unter einen Hut bringt.. mfg Ralph
Sodele Nachtrag: Wie man sich doch verschätzen kann… Die Ausgabe der 72 Bit + latchen dauert um 34,6 µs, 255 mal ausgegeben (8Bit PWM am Stück) dauert 8,65 ms. Bei 25 Hz --> Kehrwert = 40 ms bleiben also noch 31,35 ms für Anderweitige Beschäftigungen. Nun habe ich den 8 Bit Timer abwechselnd mit 8,96 ms (Aufruf Ausgabefunktion) und danach 16,38 ms Pause laufen. (Ja die Pause könnte größer sein, nur flackern mir die LEDs sonst beim Minimalwert 1..) Ach ja würde man die Ausgabefunktion dauert ohne Pause laufen lassen, so würde man auf eine Wiederholungsfrequenz von 115 Hz kommen, was etwas über das Ziel hinausgehen würde. ^^ Als nächstes werde ich mal zusehen, das die Daten zwischen den µCs ausgetauscht werden. mfg Ralph
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.