Serielle 9600 Baud Verständnisfrage

Gast #1235319
Lesenswert?

Hallo

ich habe da ein Verständnisfrage bzgl serieller Datenübertragung. Für 
manche sicher trivial aber ich blick da nicht ganz hinter.

Ich verwende unter Simulink einen Block um serielle Daten zu empfangen.
Mir ist es möglich z.B. 9600 Baud auszuwählen und Startbit, Stopbit, 8 
Datenbits und eventuell ein Paritätsbit.
Die Zykluszeit des Simulinkmodels beträgt 1ms und ist fest. Das heisst 
wenn ich mit 9600 Baud arbeiten würde und 10 bit Framelänge, würde ich 
gerade noch so auskommen.

1/9600Baud * 10 Bit = 1,04 ms / Byte

Nun kommt mein eigentliches Problem. Was mach ich wenn das Paritätsbit 
hinzukommt? Ich hätte dann somit 11 Bit und würde somit mit 9600 Baud 
nicht auskommen. Denn

1/9600Baud * 11 Bit = 1,15 ms / Byte

überschreitet die Zykluszeit uns es kommt zu Überschneidungen. Bzw 
Datenverlust.

Kannich denn einfach die Baudrate in Simulink auf 19200 umstellen? Dann 
käme ich auch mit der Zeit klar. allerdings weiss ich nicht ob man das 
einfach so machen kann?

Vielen dank für eure antworten

gruss
Holger
#1235676
Lesenswert?

Holger Mertens wrote:
> Ich verwende unter Simulink einen Block um serielle Daten zu empfangen.
> Mir ist es möglich z.B. 9600 Baud auszuwählen und Startbit, Stopbit, 8
> Datenbits und eventuell ein Paritätsbit.
> Die Zykluszeit des Simulinkmodels beträgt 1ms und ist fest.

Was bedeutet Zykluszeit?
Was hat die Zykluszeit mit der UART zu tun?
Machst Du das Bit-Timing der UART etwa in Software?

Erklär mal Dein Problem so, daß man es versteht, ohne das man Simulink 
kennen muß.


Peter
(Firma: ACC) #1235786
Lesenswert?

Hallo Peter,

ich versuchs mal:
Es geht um folgendes. Ich verwende Simulink, um serielle Daten zu 
empfangen. Ich benutze eine externe Rs232-Karte (FPGA ähnlich). Diese 
Karte hat bereits Simulink Blöcke, um die seriellen Daten im Simulink 
weiterzuverarbeiten. Dort kann ich die üblichen Einstellungen 
(Startbit,stopbit, datenbits, baudrate und parität) einstellen.

Nun verwende ich diesen Block, um serielle Daten zu empfangen. Um diese 
Daten weiterzuverarbeiten bzw. in einem Array zu puffern verwende ich 
eine einfache Logik in Simulink:

Immer wenn ein Byte vorhanden ist im FIFO, schreibe es in den Puffer.


Die Zykluszeit des Models beträgt 1ms. d.h. dass jede Milisekunde ein 
Byte im Puffer geschrieben werden kann.
Da aber das Gerät, dass die Daten liefert und sie an die Karte 
weitergibt, mit 11 Bit und und einer Baudrate von 9600 arbeitet, kommt 
es zu konflikten.
denn nach 1ms wäre ja die Message ja noch nicht fertig.

gruß
#1235790
Lesenswert?

Ich verstehe immer noch nicht ganz, was mit den empfangenen Daten 
gemacht werden soll. Üblicherweise muss man, wenn eine Datenquelle Daten 
mit einer gegebenen Geschwindigkeit zur Verfügung stellt und die Daten 
im Empfangsgerät für irgendetwas zwingend benötigt werden, so lange 
warten, bis die Daten auch da sind. Da die Übertragungsgeschwindigkeit 
ja offensichtlich vorgegeben ist, musst Du wohl die Zykluszeit 
entsprechend anpassen...
#1235885
Lesenswert?

Hans Ganz wrote:
> Die Zykluszeit des Models beträgt 1ms. d.h. dass jede Milisekunde ein
> Byte im Puffer geschrieben werden kann.

"Kann" heißt doch nicht "Muß".


> Da aber das Gerät, dass die Daten liefert und sie an die Karte
> weitergibt, mit 11 Bit und und einer Baudrate von 9600 arbeitet, kommt
> es zu konflikten.
> denn nach 1ms wäre ja die Message ja noch nicht fertig.

Dann machste eben diese 1ms lang nichts.
Wenn die Daten langsamer ankommen, als sie verarbeitet werden können, 
ist das sicher, d.h. so ist es üblich.
Nur wenn die Daten zu schnell kommen, krachts.


Peter

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