Forum: Mikrocontroller und Digitale Elektronik Frage Kommunikation zwischen zwei Atmaga 162s


von Ralph W. (ralph1982)


Lesenswert?

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

von Micha (Gast)


Lesenswert?

Hi,
ich würde Variante 2) ausprobieren, da dies mit 8 Bit paralell meiner 
Meinung nach am bessten funktioniert.



mfg
Micha

von Falk B. (falk)


Lesenswert?

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

von Matthias L. (Gast)


Lesenswert?

>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.

von Ralph W. (ralph1982)


Lesenswert?

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

von Ralph W. (ralph1982)


Lesenswert?

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
Noch kein Account? Hier anmelden.