cmicrocontrolleratmegavirtual-serial-port

Microcontroller receives the value "255ld" continuously via virtual serial port


I hope this is not a silly question, but I'm not able to find the answer to my problem myself.

I'm working on an Atmega32U4 microcontroller device, which is supposed to receive a series of bytes and store them. My code is based on a CDC Virtual Serial driver template from the LUFA-Library 151115. In order to test my code, I use the very useful tool ScriptCommunicator 04.11. The microcontroller unit (MCU) is connected via USB to the PC and is treated as a serial com port device by the PC host. My OS is Windows 7 64 bit.

Currently, I'm writing a function in which six values shall be received and stored. For that I use the following 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);

I have previously used a similar code snippet and everything seemed to be working fine. Now I identified the following problem: The device is continuously reveiving the value "255ld". For when I test the above code with the ScriptCommunicator, I receive this value six times(which is why the printf-statement is included in the above code).

I have the suspicion that this happens because Windows is treating the MCU as a common USB device, e.g. a mouse? Could that be the case?

Or what could else be the reason for this?

How can I work around my problem?

Thanks in advance for any hints and answers!


Solution

  • Wrong use of format.

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