Forum: PC-Programmierung Daten und Kommandos über serielle Schnittstelle senden


von achim (Gast)


Lesenswert?

Hallo,

ich habe ein C# Programm geschrieben, mit dem ich vom Benutzer 
eingegebene Daten an den MC schicken kann. Die Daten stellen jeweils 
Bytes dar.
Die Funktion von Peter Fleury uart_getc() nutzt ein oberes Byte zur 
Statusmeldung.

Ich will nun neben den Datenpaketen auch Kommandos schicken.

Hier ein Beispiel:

Es sollen Lampen über 8-bit PWM zeitgesteuert gedimmt  werden. Dazu 
schicke ich also Uhrzeiten und dementsprechend stellt sich die PWM ein.
Nur soo auch die Möglichkeit bestehen, über einen Schieberegler das OWM 
Verhältnis "life" einzustellen. In diesem Modus stellen die gesendeten 
Bytes NUR das PWM dar. Im anderen Modus werden seriell die Uhrzeiten 
übermittelt.
Wie könnte ich das nun umsetzen, dass ich eine Art 
Entscheidungskriterium schicke, welches im MC so verarbeitet werden 
kann, dass der eben beschriebene Empfangsmodus ausgeführt werden kann ?

Grüße

von Karl H. (kbuchegg)


Lesenswert?

achim wrote:
> Hallo,
>
> ich habe ein C# Programm geschrieben, mit dem ich vom Benutzer
> eingegebene Daten an den MC schicken kann. Die Daten stellen jeweils
> Bytes dar.

OK.
Werden potentiell alle 256 möglichen Byte Werte benutzt?

> Die Funktion von Peter Fleury uart_getc() nutzt ein oberes Byte zur
> Statusmeldung.

Uninteressant. Dieses Statusbyte existiert nicht auf der tatsächlichen 
Übertragung vom PC zum µC. Mit diesem oberen Byte teilt dir die Fleury 
Lib ihren internen Zustand mit.

> Ich will nun neben den Datenpaketen auch Kommandos schicken.

Ja, dann mach das.
Eines deiner Kommandos wird dann sein: 'Jetzt kommt ein Datenpaket'

> Wie könnte ich das nun umsetzen, dass ich eine Art
> Entscheidungskriterium schicke, welches im MC so verarbeitet werden
> kann, dass der eben beschriebene Empfangsmodus ausgeführt werden kann ?

Du musst dir ein Protokoll ausdenken.
Stell dir einfach mal vor, du bist der PC und dein Freund ist der µC. 
Was rufst du deinem Freund zu, damit der bestimmte Aktionen macht? Das 
nennt man Protokoll.
Jetzt liegt es an dir, dir so eines auszudenken.
zb. könntest du sagen: ich schick immer zuerst ein Commandobyte, das dem 
Empfänger sagt was zu tun ist und dann, abhängig vom Kommando die 
zugehörigen Daten.
Wie man das genau macht, hängt dann auch davon ab, wie die Daten 
aussehen. Ideal ist es immer, wenn die Commandobytes wertemässig in den 
Daten nicht vorkommen, denn dann kann im Fehlerfall der Empfänger aus 
dem empfangenen Byte eindeutig erkennen, was das sein soll und 
Datenbytes, die zu keinem Kommando gehören ignorieren, bis er das 
nächste Kommando wieder einwandfrei erkennen kann.

von achim (Gast)


Lesenswert?

Ich würde schon gerne dei zahlen 0...255 benutzen, muss aber nicht 
unbedingt sein.

Hatte mir schon überlegt, ob ich sicherstelle, dass die 0 und 1 nie 
geschickt werden und frage diese dann am MC ab.
Oder ich verzichte auf das oberste bit, kann dann also werte von 0 bis 
127 übermitteln. Das solle für meine anlässe absolut reichen.

Ist eigentlich das UART Datenregister nur wegen dem MC (mega168) auf 8 
mit begrenzt oder ist das generell so festgelegt.

von achim (Gast)


Lesenswert?

Achja und noch eine Frage:

Die Schaltung arbeitet ja autonom ohne PC. Dieser soll nur zur 
Parameterübergabe, also zur einmaligen Einstellung verwendet werden.

Wie könne ich denn im MC automatisch detektieren, dass das Serielle 
Kabel angeschlossen wird ?

von rene (Gast)


Lesenswert?

Was wuerde eine solche Detektion denn bringen ? Ein Controller laesst 
das UART eh einfach mitlaufen. Was du brauchst ist ein Protokol. Ein 
Beispiel :
http://www.ibrtses.com/embedded/shortmsgprotocol.html

von Severino R. (severino)


Lesenswert?

achim wrote:

> Ist eigentlich das UART Datenregister nur wegen dem MC (mega168) auf 8
> mit begrenzt oder ist das generell so festgelegt.

Nein, die asynchron-serielle Schnittstelle verwendet normalerweise 7 
oder 8 Bit, wodurch das 8 Bit Register ausreicht.
Auch ein 64bit-Prozessor sendet mit 7 oder 8 Datenbits.

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.