hallo, mein µC besitzt eine serielle Schnittstelle wie z.B. I²C oder TWI, über die kontinuierlich daten gestreamt werden; zwischendurch möchte ich gern noch andere daten rüberschicken, die ich aber speziell weiterverarbeiten muss. Wie kann ich diese Bits dem zweiten µC kenntlich machen, damit er weiß, dass er diese beiden Bits z.B. woanders abspeichern muss? Hans
mit einem Protokoll ist dies zB (einfach) zu realisieren. Du gibts dem 2. µC Befehle und Daten
hallo wulf, kannst du mir ein kleines example geben, damit ich mir mehr darunter vorstellen kann. z.B. eine Bitfolge die sonst nicht vorkommt? ist in diesem fall sehr schwierig, weil die daten alle kombinationen enthalten können.
Wenn du einen Pin erübrigen kannst dann kannst du den als R/W Leitung programmieren oder aber du sendest z.B für normale daten immer 0x01 und dann das datenbyte und für befehle/sonderdaten 0x02 und das byte. Gruß Andreas
genau das meinte ich, was Andreas Kramer geschrieben hat. Du schickst dem Controller zuerst einen Befehl und darauf folgend dann die Daten. Der zweite muss nur wissen, was ein Befehl ist; d.h. sie müssten entweder Synchron starten oder du baust Start-Sequenzen o.ä. ein. Damit weis dann der zweite µC, dass jetzt ein Befehl kommt und gleich nach diesem Befehl dann ein/mehrere Bytes an Daten.
Ich habe das so gelöst und kann unendlich viele Geräte damit betreiben. Eine Befehlsübermittlung sende ich nach diesem Chema: #(00-FFh)(00-FFh)(00-FFh)usw ...........$ Startzeichen einer Befehlsübermittlung beginnt mit dem Zeichen # danach folgen xbeliebige Kombinationen von Daten. Die Länge des Datenpaketes ist egal, nur muss zwingend ein normiertes Endezeichen die Übertragung beenden, in diesem Fall $. Was die einzelnen Daten in dem Paket bedeuten, kommt immer auf den Anwendungsfall drauf an. Meine grösste Anwendung waren einmal 255 Stück 4stellige Anzeigegeräte, die von Sensoren Messwerte anzeigen sollten und über drei Verbindungsleitungen alle parallel geschaltet waren. Der Sender war natürlich für die vielen Eingänge ausgelegt. Im Moment habe ich sowas mit einer bidirektionalen Funkübertragung in der Entwicklung, klappt hervorragend in beiden Richtungen.
Eine schöne Lösung die du hast. Ich glaub das war der letzte Teil der mir für meine Paketformatierung fehlte ^^ auf was man manchmal nicht kommt obwohl es naheliegend ist. Allerdings hab ich eine frage was machst du sollte ausnahmsweise ein Datenpaket ein $# enthalten ? Gruß Andreas
es ist zwar sehr viel Verschwendung, aber möglich wäre es die 00-FF wirklich als "00" und "FF" zu senden und nicht 0-255. Weil sonst wirds wahrscheinlich sehr schwer das Ende vom Datenbyte "$" zu unterscheiden. Deshalb hatte ich gemeint eine Sequenz; ist zwar auch nicht 100% sicher, aber schonmal ein erster Schritt (Ende ist dann zB "$ende$")
Hi! Ich sende die Daten im ASCII-Format, dann habe ich die Zahlen ab 128 aufwärts für Befehle und Steuerzeichen frei. In Anlehnung an Modembefehle.
@ Andreas Kramer, auch das kann man elegant lösen wenn die Steuerzeichen im Sendepaket vorkommen. Es gibt ja immer die Möglichkeit nach dem Startzeichen als nächstes die gesamte Datenlänge anzugeben, dann entfällt halt das Endezeichen oder es bleibt trotzdem zur Sicherheit bestehen. Lösungen gibt es immer ............... Startzeichen, Datenlänge, Empfängeradresse, Datenpaket, Endezeichen Gruss Gerd
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.