Hallo, ich möchte digitale Signale mit einer Frequenz von 2 MHz manipulieren. (Es geht um das XY2-100 Protokoll, welches zur Ansteuerung von Laserablenkeinheiten verwendet wird). Prinzipiell habe ich: - 1 Clocksignal mit besagten 2 MHz - 1 Syncsignal - 2 Datensignale (x,y), die verändert werden sollen - weitere Signale, die mit gleicher Verzögerung ausgegeben werden sollen Das Syncsignal zeigt den Beginn eines Datensatzes an, der danach auf dem Datensignal mit 20 bit Länge übermittelt wird. Die in den Datensätzen übermittelten Zahlen möchte ich dann verändern (Addition und Multiplikation) und wieder ausgeben. Es handelt sich um differenzielle Signale (40 mA, 120 Ohm Impedanz). Ich habe nun etwas über die Thematik gelesen und würde versuchen, das so umzusetzen: An die eingehende Datenleitung einen 240 Ohm Abschlusswiderstand, daran einen MAX490/491 angeschlossen. Von dem in einen Arduino Due (3,3 V I/O Spannung), wobei das Clock- und Syncsignal jeweils einen Interrupt auslösen. Nach der Datenmanipulation werden das veränderte Signal und gepufferte weitere Signale durch den Clockinterrupt bitweise ausgegeben, wobei erneut ein MAX die Wandlung in ein differenzielles Signal übernimmt. Könnte das so funktionieren oder habt ihr einen besseren Vorschlag? - Dino
Prinzipiell so, wie sonst? Bleibt die Frage - hast du am Eingang einen kontinuierlichen Datenstrom oder ausreichend Pausen? Quasi gleichzeitig Empfangen, umrechnen und wieder ausgeben könnte schon knapp werden werden für nen AVR. 20bit ist auch ne blöde Grösse für die SPI, d.h. du bist komplett auf Bitschubserei angewiesen. Wird eng. Vielleicht kannst du die SPI fürs versenden verwenden. Kommt auf den Empfänger an, was er mit den überflüssigen 4 Takten macht. Noch ne Idee: den clock durchschleifen und im Empfangsinterrupt auch gleich das passende Bit des vorherigen Darensatzes ausgeben, spart ne Menge Zeit. Ich würde einen schnelleren Prozessor nehmen.
Das Arduino Due Board ist mit einem Atmel SAM3X8E ARM Cortex-M3 bestückt, der taktet mit 84 MHz. Damit sollte sich theoretisch ein kontinuierlicher Datenstrom verarbeiten lassen.
Du hast einen Interrupt, der mit 2MHz getriggert wird und noch einen, der mit ca. 100kHz getriggert wird, währenddessen wird das vorherige Datenpaket rausgesendet und dann willst auch noch was rechnen. Das Ganze mit einer 84MHz-CPU - sportlich, sportlich... Ich kenne den SAM3 nicht, aber schaue mal ganz genau hin, mit welchen Latenzen die Interrupts dort behaftet sind. Falls Du mit dem Arduino-Zeugs programmierst, könnte da auch noch ein wenig Overhead dazukommen. An deiner Stelle würde ich schauen, ob man die Signale nicht vielleicht doch an eine vorhandene Peripherie, wie z.B. SPI oder USART flanschen kann. Ggf. mit etwas Vorbehandlung durch ein paar Logikgatter. So könnte ein Teil der Verarbeitung in Hardware geschehen und die Interruptlast deutlich verringert.
Dino H. schrieb: > Das Arduino Due Board ist mit einem Atmel SAM3X8E ARM Cortex-M3 > bestückt, der taktet mit 84 MHz. Damit sollte sich theoretisch ein > kontinuierlicher Datenstrom verarbeiten lassen. Rechne dir aus wieviele Assembler Befehle du bis zum nächsten Interrupt hast. Jetzt überlege dir wie viele Befehlerdu max. für Interruptoverhead, Einlesen, Verarbeiten und Ausgeben brauchst. Ich hatte jetzt auch eher auf FPGA getippt.
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.