Wie funktioniert die Kommunikation?

Hier ein Ausschnitt aus dem C++ Programm im PC

Sehen wir uns zum Beispiel die Funktion USB_Echo an:

Diese sendet die Zahl 123 an den AVR , erhält das Gleiche wieder zurück und zeigt es an.

 Hier die funktion1 in der gleichnamigen Datei funktion1.h

Hier nur die wichtigsten Zeilen

Und unten der Code an der Gegenstelle

 

Der PC wird zuerst aktiv und sendet über USB_ReceiveBuffer die 1 und die Variable Wert ( die ersten beiden Parameter)

Im AVR wird immer wenn ein Zeichen über USB empfangen wurde die Funktion uchar usbFunctionSetup(uchar data[8]) { aufgerufen.
data[8] wird der Funktion übergeben. Wichtig ist das Char data[1] und data[2]

In data[1] steckt unsere 1 in data[2] der wert (also 123)

Durch die 1 wird case 1 ausgeführt. Wir hatten ja im PC die funktion1 aufgerufen. Die Zahlen sind also entsprechend gewählt.

Der replyBuffer[0] wird nun mit OK gefüllt. In replayBuffer[1] stecken wir das eben empfangene Zeichen - die 123

Mit len = 2 teilen wir dem USB-Treiber im AVR mit, daß 2 Byte zurückgesendet werden sollen.

Empfangen werden diese beiden Bytes vom PC als data[0] mit dem OK und als data[1] mit der 123

sizeof(data)) > 1 prüft nun ob mindestens 2 Zeichen empfangen wurden - wenn nicht Fehler!

Wenn in data[0] nicht OK steht gibt es ebenfalls eine Fehlermeldung.

Und die 123 in data[1] können wir in eine Integer-Zahl wandeln und anzeigen lassen.

Ganz simpel :-)