www.mikrocontroller.net

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


Autor: achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.