Forum: Mikrocontroller und Digitale Elektronik PC Kommunikation mit uC


von markus (Gast)


Lesenswert?

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

von Alex (Gast)


Lesenswert?

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

von Alexander Nießen (Gast)


Lesenswert?

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

von Rainer (Gast)


Lesenswert?

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

von Rainer (Gast)


Lesenswert?

Uhhhps.... ein Fehler..
uchar *data = &buffer[0]

muss sein:  uchar *data = &buffer[1];

von Mike (Gast)


Lesenswert?

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