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