Summary of Communication between a USB/serial device and an AVR (atmega/Arduino) microcontroller
The user wants to interface an ATmega microcontroller with a USB device recognized as a "CP2103 USB to UART Bridge Controller," which communicates over serial at 38400 bps. The user attempted to convert USB signals to RS232 using the AVR-CDC project (a CDC-232 device built with an ATmega328 at 16 MHz instead of 12 MHz) and then convert RS232 to TTL. However, data fails to pass beyond the CDC-232 microcontroller, indicating no USB output signals on expected pins. The user questions if their approach—USB to RS232 to TTL—is correct and whether to continue debugging the CDC-232 or consider other issues.h3 style="margin-top:20px;">Parts used in the USB to UART Bridge communication project:
- Device with CP2103 USB to UART Bridge
- ATmega328 microcontroller (used in CDC-232)
- 16 MHz crystal oscillator (for ATmega328)
- CDC-232 circuit (USB to RS232 converter)
- RS232 to TTL converter circuit
- Oscilloscope (for signal monitoring)
I have a device which provides a USB port. If I attach it to a Windows PC it is recognized as a “CP2103 USB to UART Bridge Controller”. According to the device documentation, it should communicate in serial format at 38400bps.I have to talk to this device with a atmega microcontroller.
Since the USB pinout is different from the serial UART of the uC, firstly I thought I would need a circuit to convert the signals. I found the AVR-CDC project and put on a CDC-232 in order to convert USB (
GND
, D+
, D-
, VCC
) to RS232 (TX
, RX
, GND
):
To make it I used another atmega328 as uC, flashed with the specific hex, with a 16Mhz crystal instead of the 12Mhz one specified into the diagram.
Then I built another piece of circuit to convert the RS232 signal to TTL:
So the signal conversion should be USB -> RS232 -> TTL.I programmed my uC to send some data to the device and I can follow the signal with the oscilloscope until it enter into the CDC-232, then I lose it. I have no output on pins 4 and 5 of the CDC-232 uC, where I should have a USB signal.
Is my overall approach right? Sould I go on debugging the CDC-232 part or there is something wrong elsewhere?
For more detail: Communication between a USB/serial device and an AVR (atmega/Arduino) microcontroller