Hallo habe folgendes Problem. Und zwar haben wir grad ein Projekt für die Kommunikation zwischen PC und MC am laufen. Der ganz grobe Ablauf sieht so aus: PC schickt Daten an uC mit denen er mitteilt welcher Kanal gewandelt werden soll und in welchen Zeitabständen und ob Einzelwandlung oder kontinuierliche Wandlung. Die Auswahl geschieht über Radiobuttons in einem eigens Dafür geschriebenen Programm.Der uC wandelt, speichert die Messwerte gegebenenfalls und schickt alles zusammen wieder zum PC. Meine Frage ist wie ich es realisieren kann mehrere Werte vom PC aus zu empfangen und mit dem uC darauf zu reagieren. Meinetwegen, dass der uC bei "101" Poti in 50ms Zeitabständen kontinuielich wandelt oder bei "060" Temperatur in 100ms Zeitabständen einmalig wandelt. Habe es bis jetzt nur so hingekriegt einen Char zu verschicken und darauf zu reagieren. Das andere wären ja Strings die man nacheinander empfangen müsste, zwischenspeichern müsste und danach auslesen und darauf reagieren. Oder seh ich das falsch? Wäre über jede Hilfe dankbar mfg Markus
Hmm, ich würde es so machen: $101* Als kleines Protokoll. MC wartet, bis er ein Dollar empfängt. Dann beginnt er die Werte in ein kleines Array zu schreiben, bis der Stern kommt. Hat er den Stern empfangen, kann er schauen, was im Array liegt und es auswerten/reagieren. Ist aber nur eine Idee, falls der PC kontinuierlich den Befehl sendet. Ansonsten könnte man das rudimentäre Protokoll sogar weglassen. Alex
Um Missverständnissen vorzubeugen: Das Posting von 'Alex' stammt nicht von mir. Gibt ja noch mehrere Leute mit dem Namen ... aber wenn jemand so etwas unqualifiziertes schreibt und nur seinen (fiktiven ?) Vornamen schreibt möchte ich mich davon distanzieren. @markus: Das siehst du richtig. Schließlich kannst du ja nur Byte für Byte emfpangen. Du musst die Werte zwischenspeichern und danach sowas wie einen 'Select ... case ...' (in C) machen. Grüße, Alex
Ein Vorschlag für ein einfaches Protokoll: Der PC sendet: SOH // StartOfHeader = 0x01 A // ASCII "A....X" für irgendeinen Befehl für den MC 1 // zweite Befehlsnummer ( wenn viele verschieden Befehle = // Trenner für folgenden Parameter 1 // es folgen beliebige Anzahl von Werten. hier die Zahl 123. 2 3 ; // Befehlstrenner B 1 = ; ; usw ETX // EndOfText 0x03 BCC // eventuell noch die Checksumme (1 Char) von SOH bis ETX // Die Auswertung im MC: In der Empfangsroutine auf SOH warten. Wenn diese kommt, alle folgenden Daten bis ETX bzw. BCC in einen Buffer laden. Auswerteroutine: Der 1.Befehl steht im Buffer immer an [1]. uchar *data = &buffer[0]; do repeat = 0; switch (*data++) // sprung zu und increment pointer { case "A" hier nocheinmal ein switch, wenn es einen 2.Befehlskennung gibt ansonsten: if (*data++ == "=" ) // trenner vorahnden? { // hier den folgenden string "123" auswerten. // wenn der Trenner ";" erreicht ist kannst Du über eine // Do..While -Schleife in dem der switch (*data++) eingebettet ist // einfach alle empfangenen Befehle bzw. Daten interpretieren. // Danach !! entweder ein SOH ACK / NAK an den PC oder angeforderte // Daten zurück senden. // Zum Daten zurücksenden, würde ich das gleich Protokoll benutzen. if (*data != "EOT") repeat = 1; //Next break; } case "B" case // und so weiter..... }//switch while (repeat); Wenn Du BCC mit übergeben hast solltest du die Cheksumme vor eintritt in die do - switch - while Schleife prüfen. Wenn falsch ein SOH NAK an den PS zurück... Gruß Rainer
Uhhhps.... ein Fehler.. uchar *data = &buffer[0] muss sein: uchar *data = &buffer[1];
"unqualifiziertes schreibt" Haben dir deine Eltern zu wenig Aufmerksamkeit gewidmet oder hast du einfach nur nen schlechten Tag? Das von ihm beschriebene deckt sich mit dem von Rainer, nur das es nicht so ausformuliert ist. Gruß, Mike
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.