Forum: Mikrocontroller und Digitale Elektronik 20 Bit Datenpakete per seriellem Interface?


von Krrkx (Gast)


Lesenswert?

Hi,

ich möchte Datenpakete mit 20 Bit Länge seriell ausgeben. Dabei findet 
jeweils am Beginn so eines Paketes eine Synchronisierung über einen 
Sync-Impuls auf einer zweiten Leitung statt.

Im Prinzip also eine serielle Datenübertragung, nur dass sie 20 Bit lang 
ist und keinerlei Start-/Stopp-/Paritätsbits von der Hardware gesetzt 
werden sollen, sprich ich will das gesamte Paket selbst "in der Hand" 
haben.

Meine Frage dazu: geht das mit irgend einem existierenden 
Standardinterface? Oder muss ich mir zwei nackte Digitalausgänge selber 
so programmieren, dass die das können?

Danke!

von Peter II (Gast)


Lesenswert?

Krrkx schrieb:
> Meine Frage dazu: geht das mit irgend einem existierenden
> Standardinterface? Oder muss ich mir zwei nackte Digitalausgänge selber
> so programmieren, dass die das können?

wenn man wissen würde auf welcher CPU oder µC das laufen soll, könnte 
man eventuell weiter helfen.

von Falk B. (falk)


Lesenswert?

@ Krrkx (Gast)

>ich möchte Datenpakete mit 20 Bit Länge seriell ausgeben. Dabei findet
>jeweils am Beginn so eines Paketes eine Synchronisierung über einen
>Sync-Impuls auf einer zweiten Leitung statt.

>Im Prinzip also eine serielle Datenübertragung, nur dass sie 20 Bit lang
>ist und keinerlei Start-/Stopp-/Paritätsbits von der Hardware gesetzt
>werden sollen, sprich ich will das gesamte Paket selbst "in der Hand"
>haben.

>Meine Frage dazu: geht das mit irgend einem existierenden
>Standardinterface?

SPI, USI beim AVR.

von Krrkx (Gast)


Lesenswert?

Peter II schrieb:
> wenn man wissen würde auf welcher CPU oder µC das laufen soll, könnte
> man eventuell weiter helfen.

Board/CPU würde ich mir in Abhängigkeit von der Antwort aussuchen, es 
müssten dann halt nur drei Interfaces dieses Typs drauf sein.

von Reinhard Kern (Gast)


Lesenswert?

Krrkx schrieb:
> ich möchte Datenpakete mit 20 Bit Länge seriell ausgeben. Dabei findet
> jeweils am Beginn so eines Paketes eine Synchronisierung über einen
> Sync-Impuls auf einer zweiten Leitung statt.

Warum musst du denn abseits aller Normen arbeiten? Ist das Protokoll so 
vorgegeben?

Im Prinzip ist das eine synchrone Übertragung mit externer 
Synchronisation, aber auch das passt nicht 100%ig. Ein USART im 
Synchronmodus verlangt ein SYNC-Signal während der ganzen Übertragung, 
und vor allem einen externen Takt. Asynchrone Übertragungen dagegen sind 
auf etwa 10bit beschränkt, weil sie ohne übertragenen Takt arbeiten und 
daher die Synchronisation bei längeren Worten wegläuft.

Gruss Reinhard

von Peter D. (peda)


Lesenswert?

Krrkx schrieb:
> ich möchte Datenpakete mit 20 Bit Länge seriell ausgeben.

Bevor man sich irgendein kurioses Protokoll selber ausdenkt, sollte man 
erstmal prüfen, ob die konventionellen nicht ausreichen würden.

von Krrkx (Gast)


Lesenswert?

Ich habe mir kein "kurioses Protokoll" selber ausgedacht, das ist 
vorgegeben und Quasi-Standard: 
http://www.newson.be/Files/TD_XY2-100_R0703.pdf

von Reinhard Kern (Gast)


Lesenswert?

Krrkx schrieb:
> Dabei findet
> jeweils am Beginn so eines Paketes eine Synchronisierung über einen
> Sync-Impuls auf einer zweiten Leitung statt.

Falsch. Laut den Unterlagen brauchst du 3 Leitungen (Daten, Takt, Sync), 
nicht 2.

Gruss Reinhard

von Lupo (Gast)


Lesenswert?

Krrkx schrieb:
> ich möchte Datenpakete mit 20 Bit Länge seriell ausgeben. Dabei findet
> jeweils am Beginn so eines Paketes eine Synchronisierung über einen
> Sync-Impuls auf einer zweiten Leitung statt.

Das liest sich so, als gäbe es das vielleicht schon. IR-Fernbedienungen 
arbeiten nach diesem Prinzip, z.B. hat das NEC-Protokoll nur 4 Byte im 
Paket. Man müßte nur suchen, ob es andere Protokolle mit 5 Byte gibt.

von Lupo (Gast)


Lesenswert?

Lupo schrieb:
> Man müßte nur suchen, ob es andere Protokolle mit 5 Byte gibt.

Quatsch. Ich konnte gerade nicht rechnen - 4*8=32 :-)

von Falk B. (falk)


Lesenswert?

@ Reinhard Kern (Firma: RK elektronik GmbH) (rk-elektronik)

>und vor allem einen externen Takt. Asynchrone Übertragungen dagegen sind
>auf etwa 10bit beschränkt, weil sie ohne übertragenen Takt arbeiten und
>daher die Synchronisation bei längeren Worten wegläuft.

Sag das mal den Millionen von Ethernetknoten, SDH Strecken und sonstigen 
Protokollen ;-)

von Peter D. (peda)


Lesenswert?

Krrkx schrieb:
> http://www.newson.be/Files/TD_XY2-100_R0703.pdf

Wär ja auch Quatsch gewesen, das gleich zu sagen.
Laß die Leute ruhig erstmal rumraten.

Ist aber trotzdem sehr exotisch.
Welches Gerät benutzt sowas?

Da der 2MHz Takt ständig laufen soll, geht nur ein CPLD oder FPGA.

von Reinhard Kern (Gast)


Lesenswert?

Falk Brunner schrieb:
> Sag das mal den Millionen von Ethernetknoten, SDH Strecken und sonstigen
> Protokollen ;-)

Du weisst natürlich wie immer alles besser, und dass alles überflüssig 
ist was du nicht kennst - aber trotzdem ist hier ein Takt vorgesehen. 
Natürlich völlig unsinnigerweise. Aber nach einem von dir definierten 
Protokoll war nicht gefragt.

Gruss Reinhard

von Schlumpf (Gast)


Lesenswert?

Das "Sync"-Signal ist hier wohl eher als eine Start-Stop-Kennung zu 
interpretieren und nicht zur eigentlichen Synchronisierung auf 
Bit-Ebene.
Diese erfolgt hier durch die synchrone Übertragung.
Daher kann hier das Datentelegramm beliebig lange sein.

Auf wieviel Bit eine asynchrone Übertragung beschränkt ist, hängt vom 
Gangunterschied der Taktquellen von Sender und Empfänger zusammen.
Ist dieser gering, können auch mehr als 10 Bit vollkommen asynchron 
übertragen werden.

Ethernet und co. sind nicht wirklich asynchron, da der Datenframe durch 
seine Codierung eine Taktrückgewinnung im Empfänger ermöglicht. Daher 
würde ich hier nicht von einer asynchronen Übertragung reden, auch wenn 
keine explizite Taktleitung vorhanden ist.

Zum Thema des TO:
So wie ich das einschätze, handelt es sich um ein verkapptes 
SPI-Protokoll.
Die Setup und Hold-Zeiten sind mit Mindestwerten versehen, was den 
Schluss zulässt, dass man auch beliebig langsam werden kann. Daten 
werden mit der Steigenden Flanke geschrieben und der fallenden gelesen. 
Klingt alles nach SPI. Versuche doch einfach mal am uC per Bit-Banging 
dieses Protokoll nachzubilden (wenn du der Master bist)

von Reinhard Kern (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Da der 2MHz Takt ständig laufen soll, geht nur ein CPLD oder FPGA.

Das ist kein hinreichender Grund, USARTs die den Takt ausgeben gibt es 
schon viele Jahrzehnte, z.B. den guten alten Z8530 SCC.

Es ginge aber auch mit einem kleinen, einfachen, aber schnellen 
Microcontroller, der nix anderes tun muss.

Gruss Reinhard

von Falk B. (falk)


Lesenswert?

@ Schlumpf (Gast)

>Das "Sync"-Signal ist hier wohl eher als eine Start-Stop-Kennung zu
>interpretieren und nicht zur eigentlichen Synchronisierung auf
>Bit-Ebene.

Synchronisierung auf Telegrammebene.

>Auf wieviel Bit eine asynchrone Übertragung beschränkt ist, hängt vom
>Gangunterschied der Taktquellen von Sender und Empfänger zusammen.
>Ist dieser gering, können auch mehr als 10 Bit vollkommen asynchron
>übertragen werden.

Eben.


>Ethernet und co. sind nicht wirklich asynchron,

Doch, denn es gibt KEINE zusätzliche Taktleitung.

>da der Datenframe durch
>seine Codierung eine Taktrückgewinnung im Empfänger ermöglicht.

Das muss JEDE Kodierung, so man sie irgendwann mal wieder empfangen 
will.

> Daher
>würde ich hier nicht von einer asynchronen Übertragung reden, auch wenn
>keine explizite Taktleitung vorhanden ist.

Doch. Es ist asynchron.

>Zum Thema des TO:
>So wie ich das einschätze, handelt es sich um ein verkapptes
>SPI-Protokoll.

Es ist eines ser vielen selbstgestrickten Industrieprotokolle.

>Die Setup und Hold-Zeiten sind mit Mindestwerten versehen, was den
>Schluss zulässt, dass man auch beliebig langsam werden kann.

Nö, dort steht was von kontinuierlich 100 ks/s

>Klingt alles nach SPI. Versuche doch einfach mal am uC per Bit-Banging
>dieses Protokoll nachzubilden (wenn du der Master bist)

Kann man machen. Wenn man einen Mikrocontroller/AVR als Sender "opfert", 
kann der das ewig und drei Tage tun, einfach ne kleine Endlosschleife 
durchrattern. Ich würde lieber nen CPLD nehmen.

von Krrkx (Gast)


Lesenswert?

Falk Brunner schrieb:
> Kann man machen. Wenn man einen Mikrocontroller/AVR als Sender "opfert",
> kann der das ewig und drei Tage tun, einfach ne kleine Endlosschleife
> durchrattern. Ich würde lieber nen CPLD nehmen.

Nö, leider nicht, da ich drei von diesen Signalen haben möchte - also 
würde es schon ein etwas leistungskräftigeres Board benötigen.

Schön übrigens, dass meine Frage ein Grund für einen Kleinkrieg ist 
:-(((

von c-hater (Gast)


Lesenswert?

Peter Dannegger schrieb:

> Da der 2MHz Takt ständig laufen soll, geht nur ein CPLD oder FPGA.

UART im SPI-Mode erlaubt es problemlos, einen kontinuierlichen 2MHz-Takt 
auszugeben (bei z.B. 16MHz Systemtakt). Timer im Fast-PWM-Mode erlaubt 
es problemlos, den dazu passenden Sync alle 20 Bit taktsynchron zur UART 
auszugeben.

Bleibt das Einlesen des Statusbits: Pin-Change, auslesen und Reset in 
Timer-ISR.

Die Grundlast des Systems ist natürlich recht hoch, aber noch längst 
nicht in einem Bereich, wo's wirklich kritisch wird.

Keine Ahnung, wozu da ein FPGA nötig sein sollte.

von Klaus (Gast)


Lesenswert?

Falk Brunner schrieb:
> Doch, denn es gibt KEINE zusätzliche Taktleitung.

Die ist dann nicht nötig, wenn sich der Takt aus dem übertragenen Signal 
zurückgewinnen läßt. Z.B:

> Der Manchester-Code ist ein Leitungscode, der bei der Kodierung das
> Taktsignal erhält.

Damit ist einen Übertragung synchron ohne zusätzliche Taktleitung.

Falk Brunner schrieb:
> Das muss JEDE Kodierung, so man sie irgendwann mal wieder empfangen
> will.

Das ist ein Framesync, und hat mit dem Takt nichts zu tun. Es wird 
sowohl bei synchroner als auch bei asynchroner Übertragung benötigt.

MfG Klaus

von Maxx (Gast)


Lesenswert?

Klaus schrieb:
>> Der Manchester-Code ist ein Leitungscode, der bei der Kodierung das
>> Taktsignal erhält.
>
> Damit ist einen Übertragung synchron ohne zusätzliche Taktleitung.

Noe.

Synchron heisst Gleichlauf. Das ist bei Manchestercodierung nicht 
gegeben.
Der aus dem kodierten Signal zurückgewonenen Takt ist nicht 
gleichläufig mit dem Takt des Generators. Im Gegenteil! Manchester als 
PSK basiert gerade darauf, dass der vermutete Takt nicht mit dem 
tatsächlichen übereinstimmt.

Auch wenn sich der Takt am Start und Ende einer Übertragung gewinnen und 
alle 2 Takte resynchronisieren lässt, ist dieser dazwischen nicht 
synchron. Die Bitgrenzen müssen nicht durch eine Flanke gekennzeichnet 
sein, sondern werden aus dem vermuteten Takt abgeleitet.

Klar ist es durch die ständige Resyncronisation alle 2 Takte deutlcih 
unempfindlicher gegen Taktjitter. Er ist aber nicht synchron.

von Falk B. (falk)


Lesenswert?

@ Klaus (Gast)

>> Doch, denn es gibt KEINE zusätzliche Taktleitung.

>Die ist dann nicht nötig, wenn sich der Takt aus dem übertragenen Signal
>zurückgewinnen läßt. Z.B:

Eben, darum ist es ASYMCHRON!

>> Der Manchester-Code ist ein Leitungscode, der bei der Kodierung das
>> Taktsignal erhält.

>Damit ist einen Übertragung synchron ohne zusätzliche Taktleitung.

Nix da, es ist ASYNCHRON! Was wäre denn deine Definition von ASYNCHRON? 
Wenn man die Daten nicht wieder rückgewinnen kann?

>> Das muss JEDE Kodierung, so man sie irgendwann mal wieder empfangen
>> will.

>Das ist ein Framesync, und hat mit dem Takt nichts zu tun. Es wird
>sowohl bei synchroner als auch bei asynchroner Übertragung benötigt.

Sicher, aber bei SYNCHRONER Übertragung wird auf Bitebene ein Takt 
verwendet, auf Frame Ebene meist ein zusätzliches Framesignal. Bei 
ASYNCHRONEN Übertragungen gibt es NUR das Datensignal, daraus muss, mit 
mehr Aufwand als im synchronen Fall, Takt und Frame zurückgewonnen 
werden. AKA CDR (clock & data recovery, in Kuba hat das noch ne andere 
Bedeutung, Viva Fidel! ;-))

http://de.wikipedia.org/wiki/13._August#1901.E2.80.931950

von Martin (Gast)


Lesenswert?

Es gibt bei den neueren NXP uC (schau mal bei LPC4357 oder
LPC1857, oder auch LPC812) Features, die sich SGPIO bzw. SCT nennen.
Damit kann man an einen GPIO eine Art interne State-Maschine hängen.
Vielleicht kannst du es damit umsetzen?

Andere Möglichkeit: Es gab früher Bausteine, mit den man Bits
aus Zeitschlitzen raus holen konnte, ebenfalls mit einen Sync Signal.
Google doch mal nach (Siemens,Infineon) ESCC2/ESCC8.
Dort konnte man konfigurieren, dass man Bit 0 bis 19
(nach dem Sync Impuls) herausholt und in einen FIFO schiebt.
(z.B. die einzelnen Kanäle eines ISDN-Busses)
Ich weiß aber nicht, ob es diese Bausteine heute noch gibt.

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.