Forum: Mikrocontroller und Digitale Elektronik 2 MHz Digitalsignal manipulieren


von Dino H. (hdino)


Lesenswert?

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

von Winnie (Gast)


Lesenswert?

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.

von ah. (Gast)


Lesenswert?

Ein FPGA.

von Dino H. (hdino)


Lesenswert?

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.

von Martin H. (marrtn)


Lesenswert?

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.

von Udo S. (urschmitt)


Lesenswert?

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