2016-10-06 3 views
1

Ich hoffe, das ist keine dumme Frage, aber ich bin nicht in der Lage, die Antwort auf mein Problem selbst zu finden.Microcontroller empfängt den Wert "255ld" kontinuierlich über virtuelle serielle Schnittstelle

Ich arbeite an einem Atmega32U4-Mikrocontroller-Gerät, das eine Reihe von Bytes empfangen und speichern soll. Mein Code basiert auf einer CDC Virtual Serial Treiber Vorlage aus der LUFA-Library 151115. Um meinen Code zu testen, benutze ich das sehr nützliche Tool ScriptCommunicator 04.11. Die Mikrocontroller-Einheit (MCU) ist über USB mit dem PC verbunden und wird vom PC-Host als serielles Kommunikationsgerät behandelt. Mein Betriebssystem ist Windows 7 64 Bit.

Derzeit schreibe ich eine Funktion, in der sechs Werte empfangen und gespeichert werden sollen. Dafür habe ich den folgenden Code:

int16_t Register_1 = 0;  
int16_t Register_2 = 0;  
int16_t Register_3 = 0;  

int16_t Register_4 = 0; 
int16_t Register_5 = 0; 
int16_t Register_6 = 0;  

int16_t serial_byte = 0; 
int8_t loop = 1; 

do 
{ 
    serial_byte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); 

    serial_byte &= 0x00FF; 

    switch (loop) 
    { 
     case 1:  Register_1 = ad7194_byte;  break; 
     case 2:  Register_2 = ad7194_byte;  break; 
     case 3:  Register_3 = ad7194_byte;  break; 
     case 4:  Register_4 = ad7194_byte;  break; 
     case 5:  Register_5 = ad7194_byte;  break; 
     case 6:  Register_6 = ad7194_byte;  break; 
    } 


    CDC_Device_USBTask(&VirtualSerial_CDC_Interface); 

    USB_USBTask(); 

    loop ++ ; 

    printf("%i" PRId32 "\n", serial_byte) ; 

    _delay_ms(1000); 

} while (loop < 7); 

Ich habe bisher verwendeten einen ähnlichen Code-Schnipsel und alles schien in Ordnung zu arbeiten. Jetzt habe ich folgendes Problem festgestellt: Das Gerät erhält fortlaufend den Wert "255ld". Wenn ich den obigen Code mit dem ScriptCommunicator teste, erhalte ich diesen Wert sechs Mal (deshalb ist die printf-Anweisung im obigen Code enthalten).

Ich habe den Verdacht, dass dies passiert, weil Windows die MCU als ein übliches USB-Gerät, z. eine Maus? Könnte das der Fall sein?

Oder was könnte der Grund dafür sein?

Wie kann ich mein Problem umgehen?

Vielen Dank im Voraus für Hinweise und Antworten!

+0

Keine Initialisierung der Geräte erforderlich? –

+0

'" 255ld "' ist 5 Werte, nicht eins. – Olaf

Antwort

1

Falsche Verwendung des Formats.

int16_t serial_byte = 0; 
//   v (remove i) 
// printf("%i" PRId32 "\n", serial_byte) ; 
//    16 not 32 
printf("%" PRId16 "\n", serial_byte) ; 
0

Danke für die Antwort, die mein Problem nicht direkt gelöst hat, aber irgendwie brachte mich auf die Lösung.

Lösung: Ich erhielt die 255 Werte, obwohl ich nichts zur MCU schickte. Aber: Wenn kein Byte empfangen wird, gibt die LUFA CDC_Device_ReceiveByte-Funktion -1 zurück. Ich habe vergessen, diesen Wert zu prüfen, bevor das serial_byte & = 0x00FF; Erklärung. Der -1-Wert wurde dann durcheinander gebracht und der 255-Wert wurde ausgegeben. Wieder ein dummer Fehler, der mich wieder viel Zeit gekostet hat.

Verwandte Themen