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
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.