Effizientes serielles Protokoll für Arduino?

Jan 22, 2017 22 Replies

Hallo,


genutzt. Ich habe also keine "Magic-Values" die ich zum Synchronisieren


Die Werte kommen nicht immer in der selben Reihenfolge.



Es kommt auf Geschwindigkeit an. Es handelt sich um einen Datenstrom der



keinen Platz die Werte erst aufwendig in ein XML oder wasauchimmer zu basteln.



Mein aktueller Plan:



Ich splitte ein Byte auf 2*4 Bit:


8765 4321 ^ ^ | '- Nutzdaten '------ Adresse


Werte aber in beliebiger Reihenfolge vom PC zum Arduino senden. Am



der zweite Teil kommt kann kombiniert und verarbeitet werden.



Geht es eleganter/schneller?



Danke im Voraus


Manuel


dann doch lieber: ID(8bit) Nutzbyte(8bit). Welchen Sinn hat es, die zwei

beschreibst?

Christian

Christian Zietz - CHZ-Soft - czietz (at) gmx.net WWW: http://www.chzsoft.de/ PGP/GnuPG-Key-ID: 0x52CB97F66DA025CA / 0x6DA025CA

"Manuel Reimer" schrieb im Newsbeitrag news:o6233i$h5i$ snipped-for-privacy@dont-email.me...

Mit Sicherheit.

deren Wertabfole (z.B. zeitliche Erhebung) wird

MaWin, Manfred Winterhoff, mawin at gmx dot net Homepage http://www.oocities.org/mwinterhoff/ dse-FAQ: http://dse-faq.elektronik-kompendium.de/

Synchronisation. Wenn Du bei Deinem Verfahren einmal ein Byte verlierst, hast Du keine Chance mehr, zu erkennen, was ID und was Daten sind.

cu Michael

Verwende Firmata.

formatting link

formatting link

echtzeitoptimiert.

aber ich denke wenn irgendwie geht, sollte man Firmata verwenden.

Michael Schwingen schrieb:

Christian

Christian Zietz - CHZ-Soft - czietz (at) gmx.net WWW: http://www.chzsoft.de/ PGP/GnuPG-Key-ID: 0x52CB97F66DA025CA / 0x6DA025CA

Was ist daran so wahnsinnig kritisch?

Warum so kompliziert?

mit je einem Byte Dateninhalt.

ohne.

Das sind Standard-Prozeduren, die so ziemlich jedes Modem-Protokoll schon beherrscht.

Martin

Am 22.01.2017 um 11:57 schrieb Manuel Reimer:

dann mit einem byte mit dem Wert 0x0F starten und mit xor jedes nibble draufrechnen. (parity)

( Dort die gleiche Rechnung und mit dem 4. byte dann vergleichen.)

Mir die Fehlerrate merken. Ist sie sehr klein, kann man das mit mehr bytes machen oder es lassen. Soweit ich mich erinnere, wird, je nach Einstellung,

kann man den fehlenden Adressbereich zweckentfremden.

(ca Bitrate /10)

Bisher habe ich noch keinen Arduino im Betrieb gehabt.

Beim Arduino gibt es Serial*.read() und Serial*.write(byte); wobei * nichts 1,2, oder 3 ist (1 2 3 bei Arduino2560 ..)

Was mir noch fehlt ist das (Linux) PC (und raspberry pi) wenn ich ohne sketch

und sie von meinen eigenen C oder Python3 Programme (ohne sudo..) auf gleiche Art aufrufen will.

Hermann der die Kombination raspberry pi aktiver USB-Hub

Und er leicht erreichbares Ferro-RAM vermisst.

http://www.hermann-riemann.de

Am 22.01.2017 um 12:29 schrieb Michael Schwingen:

  1. Mit einem timer eine Ruhepause einlegen und danach wieder Sendebeginn.
  2. Die ID belegt nicht alle Werte im Bereich 0:255. Bei einem nicht durch ID belegten Inhalt sollte es ich um ein Datenbyte handeln.

Hermann der allerdings bei jedem Verfahren das Risiko fehlerhafte Daten sieht, und Daten kein IoT-Vertrauen entgegen bringen mag.

http://www.hermann-riemann.de

Hermann Riemann schrieb:

  1. Man kann die sonst ungenutzten 6 Bits der ID auch eine Checksumme
.

machen, wer sagt denn, dass bei Manuels Schnittstelle nicht auch die Synchronsation auf Bytegrenzen verloren gehen kann?

Christian

Christian Zietz - CHZ-Soft - czietz (at) gmx.net WWW: http://www.chzsoft.de/ PGP/GnuPG-Key-ID: 0x52CB97F66DA025CA / 0x6DA025CA

Am 22.01.2017 um 15:00 schrieb Christian Zietz:

Da gibt es start- und stop-bit

formatting link

Oder ungerades paritybit. Wenn das die Synchronisation nicht stimmt, gibt es bemerkbare

Hermann

bei parity-Verfahren nicht bemerkt.

http://www.hermann-riemann.de

Am 22.01.2017 um 12:32 schrieb Ralph Aichinger:

Da steht: commands bytes are 8 bits and data bytes are 7 bits

Sowas werde ich mir vermutlich nicht antun.

(sofern vorhanden) wie damit umgehen. Beispiele

- ignorieren. (vereinzelte Synchronisation oder Hallo noch da? byte.

- ein lokaler Befehl (pseudocode)

(Sicherheitschecks, Chaos Schutzschirm)

Hermann

http://www.hermann-riemann.de

Am 22.01.2017 um 11:57 schrieb Manuel Reimer:

.

Bytes wird

r o

zwei ASCII-Zeichen zu verwandeln, um sie auf dem Arduino dann wieder ins

Holger

"Arduino-Standard-Serieller-Port".

Manuel

USB2Serial-Wandler am Atmel (Standard "Arduino-Verschaltung").

auseinandergehalten. Deshalb ja auch meine Idee die Bytes nochmal zu

Manuel

"Manuel Reimer" schrieb im Newsbeitrag news:o62l8n$t0j$ snipped-for-privacy@dont-email.me...

Du verstehst nicht, wo das Problem liegt.

Sondern weill man wissen will, ob etwas eleganter geht, muss man alle Rahmenbedingungen kennen.

eleganteste.

MaWin, Manfred Winterhoff, mawin at gmx dot net Homepage http://www.oocities.org/mwinterhoff/ dse-FAQ: http://dse-faq.elektronik-kompendium.de/

Das ist auf einem Multitasking-PC mit FIFO-UART u.U. schwierig hinzubekommen.

Byte eindeutig ansehen kann, ob es ID oder Daten sind, und hat nicht das

- da reicht es, das PC-Programm abzuschiessen und neu zu starten, damit sollte das Verfahren sauber klarkommen.

cu Michael

Hm - keine Ahnung, wo mein text hin verschwunden ist ...

Auf Multitasking-PC mit FIFO-Uart (gar per USB) u.U. schwierig umzusetzen.

Das ist aber nur gut geraten und nicht wirklich sicher.

Was meinst Du mit "Synchronsation auf Bytegrenzen"?

aber auf jeden Fall gehen.

Byte 0: 1iixxxxd Byte 1: 0ddddddd

ii = ID, dddddddd = Daten.

cu Michael

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required