Forum: Mikrocontroller und Digitale Elektronik RS232 Kommunikation - Protokoll


von Andreas R. (blackpuma)


Lesenswert?

Schönen Abend!

Ich möchte vom PC aus mit meinem uC sprechen. Ich weiß aber nicht wie 
ich das am besten anstelle. Soll ich am PC ein Frame zusammenstellen aus 
ein paar Bytes und das an den uC schicken? Oder soll ich alles einzeln 
schicken? Also ich meine das so: Ich habe ein Visual C# Programm wo ich 
z.B. 5 Relais schalte. Soll ich nun pro Relais einen Datensatz schicken 
oder den Status aller Relais immer schicken auch wenn sich nur der eines 
verändert?

Soll ich am uC die Empfangenen Daten sofort Auswerten, also jedes 
einzelne Byte, oder den ganzen Datensatz empfangen und dann erst 
Auswerten? Hat jemand von euch ein Codebeispiel dazu?

Wie löst man das?

BG
Andreas

von Peter (Gast)


Lesenswert?

wenn es wirklich nur 5 Relays sein sollen kannst du dir es ganz einfach 
machen. Sende einfach ein byte( also 8bit). Jedes Relay ordnest du ein 
bit zu und schon geht es. Das hat den Vorteil das es erstmal recht 
schnell umzusetzen ist und du dabei bestimmt auch etwas erfahrung 
sammelst. Wenn du später mehr machen willst, kann man immer noch auf ein 
etwas kompizierteres Protokoll wechseln.

von holger (Gast)


Lesenswert?

Meine Fresse, das kannst du halten wie ein Dachdecker.
Hauptsache der uC versteht es. Denk dir ein Protokoll
aus und arbeite damit. Wenn du mit einem Byte auskommst
dann schick nur ein Byte. Wenn du mehr brauchst dann schick
mehr.

von O. D. (odbs)


Lesenswert?

Ich bastele mir gerne "menschenlesbare" ASCII-Protokolle. Das Zeichen 
zum Abschluß eines Kommandos oder einer Abfrage wäre dann natürlich 
CR/LF. So bleibt es flexibel, du kannst verschiedene Kommandos 
definieren, die unterschiedlich lang sein dürfen und beliebige Mengen 
von Parametern haben können. Außerdem ist ein ASCII-Protokoll praktisch 
zum Debuggen.

Das Schema ist immer wie folgt:

Die Interrupt-Routine für den Empfang auf der seriellen Schnittstelle 
sammelt alle Zeichen in einen globalen Puffer. Wird CR oder LF 
empfangen, wird dieser Puffer in einen zweiten "Parser"-Puffer kopiert 
und das Parser-Flag gesetzt.

In der Hauptschleife werte ich das Flag aus. Ist es gesetzt, rufe ich 
den Parser auf.

Im Parser untersuche ich den Puffer, separiere Kommando und dazugehörige 
Daten, konvertiere Strings in Integer, rufe die entsprechenden 
Funktionen auf oder setze entsprechende Flags und globale Variablen, die 
im Hauptprogramm bearbeitet werden. Zum Schluß lösche ich das 
Parser-Flag.

Dieses Schema ist intuitiv zu verstehen, der Code ist einfach und lässt 
sich gut lesen.

von Giuseppe G. (Firma: ACS) (gcrax)


Lesenswert?

Hallo Andreas,
schau mal schnell hier, ist genau das was du machst nur mit 6 statt 5 
Ports.
Steht auch drin, wie ich es gelöst hab, auch wenns deutlich einfacher 
geht...

Beitrag "verkaufe mein CDC Gerät"

LG Giuseppe

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.