4 Fach UART Sniffer

Gast #1923390
Lesenswert?

Hallo, ich möchte gerne 4 UART Kanäle auf eine gewisse Stringfolge 
prüfen, dafür hatte ich erst 4 einzelne Attinys eingeplant, aber heute 
bin ich über den Atmega640 gestolpert. Der Baustein bietet 4 HW UARTS 
und würde ideal dafür passen, aber etwas unschlüssig bin ich mir, ob der 
Baustein wirklich 4 Uart sniffen kann ohne Datenverlust. Die Sender 
senden kontinuerlich mit 115200Baud Daten über die UART Schnittstelle 
und der ATMega soll mit 7,3728MHz arbeiten, die Programmiersprache wäre 
C (AVR GCC).

Ich würde in den 4 auftretenen UART Interrupts jeweils ein Zeichen in 
einen eignen FIFO schreiben und in der Mainschleife die Stringfolge in 
dem Fifo suchen und nach positiver Auswertung ein paar Outputs toggeln.

Was meint Ihr ist das zu schaffen ohne Datenverlust oder lieber auf 
Nummer sicher gehen und jeweils einen eigenen AVR pro Teilnehmer 
einplanen?
Ein Protokoll zwischen AVR und Teilnehmer scheidet aus.
Gast #1923394
Lesenswert?

Torben schrieb:
> Was meint Ihr ist das zu schaffen ohne Datenverlust oder lieber auf
> Nummer sicher gehen und jeweils einen eigenen AVR pro Teilnehmer
> einplanen?

Hallo,

da bleiben für jedes neu eintreffende Zeichen ca 25 µs für die komplette 
Verarbeitung einschliesslich Vergleich, Entscheidung und ev. 
Weitermeldung. Ich denke, mit optimierter Assembler-Software wäre das 
möglich, in C eher nicht.

Gruss Reinhard
Gast #1923403
Lesenswert?

Möglich, das ich mich verrechnet habe oder einen Denkfehler mache, aber 
ich komme auf viel weniger Zeit.

115200 Baud an vier Schnittstellen sind 460800 Baud insgsamt. Das wäre 
alle 2,1us ein Byte. Das sind demnach 16 Takte pro Zeichen für den 
Vergleich.

Schon ziemlich sportlich.
(Firma: TravelRec.) Persönliche Seite #1923438
Lesenswert?

Andererseits kannst Du den Mega auch mit 14.7456Mhz takten, dann hast Du 
doppelt so viel Zeit.

Huch schrieb:
> 115200 Baud an vier Schnittstellen sind 460800 Baud insgsamt. Das wäre
> alle 2,1us ein Byte. Das sind demnach 16 Takte pro Zeichen für den
> Vergleich.

Das kann man so nicht sagen. Je nachdem, wann die Bytes eintreffen, kann 
es Überschneidungen geben, zu denen alle 4 RXC-Interrupte gleichzeitig 
feuern. Das abzuarbeiten, könnte schwierig werden. Alternativ gibt es 
den XMEGA, einige Bauformen bieten bis zu 8 UARTs. Das Abhohlen kann 
hier mit DMA erfolgen und das ist absolut zuverlässig. Die Taktrate des 
Controllers kann hier auch bei 29.xxxxMhz liegen, was zusätzlich Luft 
verschafft.
#1923467
Lesenswert?

Was ? Die Zeiten sind ganz falsch. 115200baud sind 10kbyte pro sekunde. 
Macht 100us/byte. Da wir vier haben sind es noch 25us. Mit einem 
14.xxMHz getakteten Mega64 sind das immerhin fast 300 Befehle pro 
empfangenes Byte. Die Frage ist eher, was macht man dann damit. Muss der 
Trigger dynamisch veraenderbar sein ? Wie wird der Trigger der 
Aussenwelt mitgeteilt? Dann wuerde sich ein externes 4 fach UART, zb ein 
16C754 anbieten. Das hat dann noch je 64byte buffer, falls es mal etwas 
eng wird. Die Frage nach der Reaktionszeit auf den Trigger stellt sich 
auch noch.
Gast #1923813
Lesenswert?

Danke an alle für die Hilfe!

>8MHz geht leider nicht, weil das komplette Sniffer und Teilnehmersystem mit 3,3V 
VCC arbeitet.

ATXMega kommt leider wegen Einarbeitungszeit nicht in Frage oder wie 
hoch war euer Umstieg von ATMega zum ATXMega? TL16C754B sieht sehr 
interessant aus wegen dem 64Byte Fifo.

>Die Frage nach der Reaktionszeit auf den Trigger stellt sich
>auch noch.

Reaktionszeiten von 5-10Sekunden auf den Trigger sind akzeptabel.

Was passiert, wenn alle 4 Interrupts zur gleichen Zeit zuschlagen? Kommt 
es dann zum Datenverlust?
(Firma: TravelRec.) Persönliche Seite #1923871
Lesenswert?

Torben schrieb:
> ATXMega kommt leider wegen Einarbeitungszeit nicht in Frage oder wie
> hoch war euer Umstieg von ATMega zum ATXMega?

Datenblatt und Manual lesen ist Pflicht. Die Befehle sind weitestgehend 
kompatibel, das Verhalten der XMega-Peripherie ist gleich bis sehr 
ähnlich zu vergleichbarer Mega-Peripherie. Die Init ist komplexer, aber 
verständlich. Ich würde sagen, ein paar Stunden Einarbeitungszeit, wenn 
man nicht tief in´s Detail geht und praktisch Mega-Code nach XMega 
portiert. Bei Nutzung aller Features ist die Einarbeitung in einigen 
Tagen bis Wochen zu schaffen. Inszwischen gibt es auch einige 
XMega-Projekte im Netz.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren