Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller mit hoher Datenrate und Manchestercodierung


von Jens S. (herrjenso)


Lesenswert?

Hallo zusammen,

da dies mein erster Beitag ist, möchte ich mich kurz vorstellen. Ich 
lebe und arbeite im schönen Hamburg und habe mich während meines 
Studiums viel mit Mikrocontrollern, Schrittmotoren und 
Ultraschallsensoren beschäftigt und somit mikrocontroller.net kennen und 
schätzen gelernt :-)

Im Moment arbeite ich an einem Projekt, bei dem verschiedene Geräte 
miteinander kommunizieren. Die Daten werden mit einem speziellen 
Protokoll gesendet:

- serielle Übertragung
- Gerät A -> B: 49 Bit Daten (inklusive 2 Start- und 1 Stopbit)
- Gerät B -> A:  9 Bit Daten (inklusive 2 Start- und 1 Stopbit)
- Daten werden Manchester codiert übertragen
- Datenrate ist 2 Mbit/s
- Projekt soll Gerät A simulieren, also 49 Bit senden und 9 Bit 
empfangen

Kann mir jemand verraten, wie man am besten dieses Protokoll mit einem 
Mikrocontroller realisieren kann? Ich denke, die Verwendung der normalen 
UART-Schnittstelle scheidet auf Grund der 49 Bit und der Start- und 
Stopbits aus. Der AT91SAM9RL64 Mikrocontroller kann "von Haus aus" die 
Daten Manchester codieren, aber wohl nur über die serielle 
Schnittstelle.

Vielen Dank schonmal im Voraus und alles Gute,
Jens

von Matthias (Gast)


Lesenswert?

Geht es nur um kleine Stückzahlen? Dann ist eventuell ein FPGA-Hybrid 
wie der Microsemi SmartFusion interessant.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Jens Steckel schrieb:
> da dies mein erster Beitag ist, möchte ich mich kurz vorstellen. Ich
> lebe und arbeite im schönen Hamburg und habe mich während meines

Willkommen hier und schöne Grüße in den Norden!

> - serielle Übertragung
> - Gerät A -> B: 49 Bit Daten (inklusive 2 Start- und 1 Stopbit)
> - Gerät B -> A:  9 Bit Daten (inklusive 2 Start- und 1 Stopbit)
> - Daten werden Manchester codiert übertragen
> - Datenrate ist 2 Mbit/s
> - Projekt soll Gerät A simulieren, also 49 Bit senden und 9 Bit
> empfangen

Das lässt sich wahrscheinlich sogar mit dem kleinen ATtiny13A 
realisieren.

> Kann mir jemand verraten, wie man am besten dieses Protokoll mit einem
> Mikrocontroller realisieren kann? Ich denke, die Verwendung der normalen
> UART-Schnittstelle scheidet auf Grund der 49 Bit und der Start- und
> Stopbits aus. Der AT91SAM9RL64 Mikrocontroller kann "von Haus aus" die
> Daten Manchester codieren, aber wohl nur über die serielle
> Schnittstelle.

Sind es immer die gleichen 49 Bits, die gesendet werden? Falls nicht, 
nach welchen Kriterien werden sie verändert und wie sollen diese 
Veränderungen dem Mikrocontroller mitgeteilt werden?

9 Bits zu empfangen lässt sich per Software problemlos erledigen. Auch 
dekodieren ist sicher kein Thema. Aber was soll danach mit den 9 Bits 
passieren?

von Jim M. (turboj)


Lesenswert?

Markus Weber schrieb:
> 9 Bits zu empfangen lässt sich per Software problemlos erledigen.

Ich glaube, Du hast da was überlesen:

Jens Steckel schrieb:
> - Datenrate ist 2 Mbit/s

Das geht mit einem 20 Mhz Prozessor in Software eher nicht. Und die 
ungraden Bitzahlen sprechen auch eher gegen Hardware. Allerdings kann 
man 9 Datenbits mit vielen UARTs noch abbilden über das Parity-Bit - 
oder sind da Start- und Stopbits schon drin?

> AT91SAM9RL64

Der kann bis 190 MHz, ist somit schnell genug das in Software zu 
erledigen. Schau Dir mal Software UART Implementationen an, die 
funktionieren meist mit Timer Match und Capture Pins. Müsste man nur auf 
die 49 Bits anpassen.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Jim Meba schrieb:
> Ich glaube, Du hast da was überlesen:
> Jens Steckel schrieb:
>> - Datenrate ist 2 Mbit/s

Du hast Recht, ich hatte nicht daran gedacht, dass aus den 2 Mbps durch 
die Manchester-Codierung 4 Mbps werden. Trotzdem ist das mit einem 
ATtiny kein Problem. Bei 20 MHz CPU-Takt kann man einen Bitstrom mit 
einer Taktfolge von bis zu 5 MHz abtasten und fortlaufend ins SRAM 
schreiben. Das haben wir hier im Forum vor ca. einem halben Jahr mal 
entwickelt:
Beitrag "Lange Bitcodes speichern und ausgeben"

Sollen nun nur 9 Bits gelesen werden, kann man das relativ einfach hart 
codieren und schafft wahrscheinlich sogar eine höhere Abtastrate als 5 
MHz.

>> AT91SAM9RL64
> Der kann bis 190 MHz, ist somit schnell genug das in Software zu
> erledigen. Schau Dir mal Software UART Implementationen an, die
> funktionieren meist mit Timer Match und Capture Pins. Müsste man nur auf
> die 49 Bits anpassen.

Meiner Meinung nach wäre das überdimensioniert. Grad diese einfache 
Aufgabe lässt sich als Direkt-I/O in Assembler am leichtesten 
programmieren. Aber um das wirklich sicher sagen zu können, fehlen noch 
die Antworten auf meine beiden Fragen. Deswegen bin ich besser erstmal 
ganz leise. :-)

von Jens S. (herrjenso)


Lesenswert?

Erstmal vielen Dank :)

@Markus
Markus Weber schrieb:
> Sind es immer die gleichen 49 Bits, die gesendet werden? Falls nicht,
> nach welchen Kriterien werden sie verändert und wie sollen diese
> Veränderungen dem Mikrocontroller mitgeteilt werden?

In den 49 Bit sind 16 Audiobits mit drin und 25 Steuerbits. Die 
Audiobits für ein paar Sekunden würde ich im Speicher hinterlegen. Die 
gewollten Veränderungen der Steuerbits würde ich dem Controller gerne 
per mechanischen Schaltern an mehreren Inputpins mitteilen.

> 9 Bits zu empfangen lässt sich per Software problemlos erledigen. Auch
> dekodieren ist sicher kein Thema. Aber was soll danach mit den 9 Bits
> passieren?

Die neun Bits (bis auf Start- und Stopbits) müssen ausgelesen und deren 
Status soll über Output Pins und LEDs angezeigt werden.

von Electronics'nStuff (Gast)


Lesenswert?

Jens Steckel schrieb:
> Die Audiobits für ein paar Sekunden würde ich im Speicher hinterlegen.

Hm bei 2MBit/s wovon ca. 1/3 Audiobits sind sind "ein paar Sekunden" 
doch schon relativ viel. 3 Sekunden benötigen also schon 2 MBit! Da ist 
im Speicher schon einiges an Platz.

von Ersi (cell85)


Lesenswert?

2 Stück STM32 Discovery F1 oder F4 ... komplette Boards mit UART mit bis 
zu 21,xx Mbit für je unter 20Euro.

Die Software ist auch sehr einfach zu schreiben. Beide Uarts anwerfen. 
ein Array oder Struct für deine Bits & Bytes.

Und Interrupt bei Datenempfang.

Einfacher gehts garnicht. Da sind sogar hunderte Beispiele dabei.

von Jens S. (herrjenso)


Lesenswert?

Electronics'nStuff schrieb:
> Hm bei 2MBit/s wovon ca. 1/3 Audiobits sind sind "ein paar Sekunden"
> doch schon relativ viel. 3 Sekunden benötigen also schon 2 MBit! Da ist
> im Speicher schon einiges an Platz.

Naja, muss nicht wirklich gut klingen und ich dachte, man könnte ein 
paar Werte für einen Sinus ablegen und in einer Schleife ausgeben.

von Ersi (cell85)


Lesenswert?

Ich mach das gleiche mit dem F4 für I/O Expander.
Gerät A <-> USART <-> Manchaster Codierung + CRC32 <-> RS485 <-> 
Decodierung <-> USART <-> Gerät B

---

Kannst auch die Bits eines Sinus oder Audiodatei senden und über I2S 
abspielen :D

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Erstmal danke für die genauere Erklärung. Trotzdem noch zwei Fragen. :-)

Jens Steckel schrieb:
> Electronics'nStuff schrieb:
>> Hm bei 2MBit/s wovon ca. 1/3 Audiobits sind sind "ein paar Sekunden"
>> doch schon relativ viel. 3 Sekunden benötigen also schon 2 MBit! Da ist
>> im Speicher schon einiges an Platz.
>
> Naja, muss nicht wirklich gut klingen und ich dachte, man könnte ein
> paar Werte für einen Sinus ablegen und in einer Schleife ausgeben.

Das heißt, die 49 Bits werden regelmäßig gesendet? In welchem zeitlichen 
Abstand?

Wenn man es primitiv machen will, reicht da auch ein Rechteck-Signal.

Kommen die 9 Bits immer als Quittung auf jedes gesendete 49-Bit-Paket?

von Jens S. (herrjenso)


Lesenswert?

Markus Weber schrieb:
> Das heißt, die 49 Bits werden regelmäßig gesendet? In welchem zeitlichen
> Abstand?
ja, die Daten werden regelmäßig gesendet
-> "Kommando" 49 Bit senden (mit 2 Mbit/s), dann 2 Mikrosekunden Pause
<- Antwort 9 Bit (mit 2 Mbit/s), dann 2 Mikrosekunden Pause

> Wenn man es primitiv machen will, reicht da auch ein Rechteck-Signal.
ja, wirkt sich nur auf die Dauer nachteilig auf die Lebenszeit des 
Lautsprecher aus :)

> Kommen die 9 Bits immer als Quittung auf jedes gesendete 49-Bit-Paket?
ja

von Der (Gast)


Lesenswert?

Sven S. schrieb:
> 2 Stück STM32 Discovery F1 oder F4 ... komplette Boards mit UART mit bis
> zu 21,xx Mbit für je unter 20Euro.

Lassen die sich auf 49 Bits umschalten? Ansonsten stören wahrscheinlich 
die Start und Stoppbits.

Andere Idee:
9 Bit empfangen: UART
49 Bits senden: SPI als Master verwenden, CLK und MISO unbeschaltet 
lassen. MOSI mit 2 MHz schaffen fast alle Controller.

von Jens S. (herrjenso)


Lesenswert?

Der schrieb:
> 9 Bit empfangen: UART

Die 9 Bit werden ja auch mit 2 MBit/s zurückgesendet; aber das könnte 
dann ja ein STM32 Discovery erledigen ...

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Jens Steckel schrieb:
> -> "Kommando" 49 Bit senden (mit 2 Mbit/s), dann 2 Mikrosekunden Pause
> <- Antwort 9 Bit (mit 2 Mbit/s), dann 2 Mikrosekunden Pause

OK, hört sich wirklich unspektakulär an. :-)

Ich nehm an, neben der Leitung mit dem Code steht auch eine Leitung mit 
dem Takt zur Verfügung, oder? Dann kann man beide 4-Mbps-Signale 
XOR-verknüpfen und erhält ein mehr oder weniger normales serielles 
Signal mit 2 Mbps. Um das zu verarbeiten, reicht ein 
Wald-und-Wiesen-Mikrocontroller für 1 oder 2 Euro.

von Gregor B. (Gast)


Lesenswert?

Dem QUICC oder PowerQUICC von Freescale kann man die unmöglichsten 
Protokolle beibringen, die SCCs (Serial Communication Controller) 
unterstützen von Haus aus Manchester Encoding und lassen sich mittels 
Microcode programmieren.
Ich habe zwar schon damit gearbeitet, weiß jetzt aber nicht, ob das, was 
Du vorhast, mit diesen Teilen funktioniert.
Du könntest ja mal beim Freescale Support fragen.

von Jens S. (herrjenso)


Lesenswert?

Markus Weber schrieb:
> Ich nehm an, neben der Leitung mit dem Code steht auch eine Leitung mit
> dem Takt zur Verfügung, oder?

Übertragen wird mithilfe von zwei Leitungen nur das manchester-codierte 
Signal.

von Jens S. (herrjenso)


Lesenswert?

Vielen Dank erstmal für eure Hilfe.
Hab leider immer noch ein paar Fragen :(

- Kann man einen UART so einstellen, dass er 49 Bit mit 2 Start- und 
einem Stopbit sendet (z.B. beim STM32 Discovery oder AT91SAM9RL64)?

- Ich würde gerne wegen der Manchester Codierung den AT91SAM9RL64 
benutzen. Kennt den jemand? Kann man den SPI über die Manchester Codier 
Einheit des Controllers "laufen lassen" oder ist die Codierung nur eine 
Option für die UART Schnittstelle?

Alles Gute,
Jens

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.