من دستگاهی دارم که پورت USB را ارائه می دهد. اگر آن را به رایانه شخصی ویندوز وصل کنم، به عنوان "CP2103 USB to UART Bridge Controller" شناخته می شود. طبق مستندات دستگاه باید با فرمت سریال با سرعت 38400bps ارتباط برقرار کند. باید با میکروکنترلر atmega با این دستگاه صحبت کنم.
از آنجایی که پین اوت USB با UART سریال uC متفاوت است، ابتدا فکر کردم برای تبدیل سیگنال ها به مدار نیاز دارم. من پروژه AVR-CDC را پیدا کردم و یک CDC-232 گذاشتم تا USB ( GND
, D+
, D-
, VCC
) را به RS232 ( TX
, RX
, , GND
) تبدیل کنم:
برای ساخت آن از یک atmega328 دیگر به عنوان uC استفاده کردم که با هگز خاص فلش شد، با یک کریستال 16 مگاهرتزی به جای 12 مگاهرتز مشخص شده در نمودار.
سپس یک قطعه مدار دیگر برای تبدیل سیگنال RS232 به TTL ساختم:
بنابراین تبدیل سیگنال باید USB -> RS232 -> TTL باشد.
من uC خود را طوری برنامه ریزی کردم که مقداری داده به دستگاه ارسال کند و می توانم سیگنال را با اسیلوسکوپ دنبال کنم تا زمانی که وارد CDC-232 شود، سپس آن را گم می کنم. من هیچ خروجی روی پایه های 4 و 5 CDC-232 uC ندارم، جایی که باید سیگنال USB داشته باشم.
آیا رویکرد کلی من درست است؟ آیا باید قسمت CDC-232 را دیباگ کنم یا جای دیگری مشکل دارد؟
برای جزئیات بیشتر: ارتباط بین یک دستگاه USB/سریال و یک میکروکنترلر AVR (atmega/Arduino)
در ادامه، متن انگلیسی این مطلب را میتوانید مشاهده نمایید:
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: