Forum: Mikrocontroller und Digitale Elektronik serielle Schnittstelle


von Hans (Gast)


Lesenswert?

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

von wulf (Gast)


Lesenswert?

mit einem Protokoll ist dies zB (einfach) zu realisieren.
Du gibts dem 2. µC Befehle und Daten

von Hans (Gast)


Lesenswert?

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.

von Andreas Kramer (Gast)


Lesenswert?

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

von wulf (Gast)


Lesenswert?

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.

von Gerd V. (gerald)


Lesenswert?

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.

von Andreas Kramer (Gast)


Lesenswert?

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

von wulf (Gast)


Lesenswert?

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$")

von Hans (Gast)


Lesenswert?

@Gerd Vg

vielen dank für den tipp!

von Power (Gast)


Lesenswert?

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.

von Gerd V. (gerald)


Lesenswert?

@ 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
Noch kein Account? Hier anmelden.