PIC 18F4550 и 18F2550 — мощные микроконтроллеры с высокоскоростным интерфейсом USB 2.0. С их помощью любители помастерить смогут с легкостью собрать любое устройство USB всего из нескольких компонентов. В этой статье я расскажу о том, как пользоваться встроенным программным обеспечением CDC от Microchip, которое позволяет эмулировать последовательный порт на компьютере с операционной системой Windows или Linux. К тому же, с его помощью легко собирать устройства HID.
Фото экспериментальной платы.
Приведенная ниже схема автономного устройства USB очень проста, для ее реализации потребуется лишь несколько деталей. Имейте в виду: я использую микро-ПЗУ Olimex ICSD. Если хотите воспользоваться другим ПЗУ PIC ICSP, уберите компоненты D1 и D2 и замените коннектор.
Нажмите на изображение для просмотра схемы с высоким разрешением
Это устройство совместимо с микросхемным загрузчиком USB.
Обратите внимание: емкость компонента C5 составляет 470 нанофарад (в таблице рекомендуется 220 нанофарад, но чем больше, тем лучше), и он должен отличаться низким эффективным последовательным сопротивлением (например, за счет многослойной керамической изоляции). И не забудьте развязывающие конденсаторы емкостью 100 нанофарад.
Вот один из вариантов реализации этой схемы.
Стоит обратить внимание на цвет проводов USB-кабеля: черный — заземление, красный — +5 В, зеленый — Data+, белый — Data-.
01.04.2007 ВАЖНОЕ ИСПРАВЛЕНИЕ: На этой схеме есть небольшая ошибка: к компоненту R5 следует подсоединять провод +5 В, а не заземление, иначе устройство не будет работать.
Нажмите на изображении для просмотра схемы с разрешением 300 точек на дюйм.
Программное обеспечение
Файл MCHPFSUSB_Setup можно загрузить с сайта Microchip. К сожалению, это исполняемый файл .exe для Windows. В моем примере используется встроенное ПО, написанное на языке C (компилятор C18 от Microchip). Этот код абсолютно бесплатен, но не является открытым, так что распространять его модифицированную версию запрещается.
В архиве содержатся следующие файлы:
- Загрузчик USB и его исходный код на C18.
- Утилита Windows для загрузчика.
- Исходный код встроенного ПО CDC (эмуляция последовательного порта) на C18. Его можно без изменений использовать с загрузчиком USB.
- Встроенное ПО для устройства HID.
- Драйвер Windows для CDC (в Linux устройства CDC-ACM поддерживаются по умолчанию).
Советы по сборке экспериментальных устройств
Исходный код находится в каталоге «fw/cdc/MCHPUSB.mcw».
Для автономного устройства USB в файле usbcfg.h следует закомментировать следующие строки:
#define USE_SELF_POWER_SENSE_IO #define USE_USB_BUS_SENSE_IO
На моей схеме светодиодные индикаторы подключены к порту B, поэтому необходимо изменить файл io_cfg.h:
#define mLED_1 LATBbits.LATB0 #define mLED_2 LATBbits.LATB1 #define mLED_3 LATBbits.LATB2 #define mLED_4 LATBbits.LATB3
В файл user.c вы можете включить свой собственный код. Например, воспользуйтесь кодом Exercise_Example() в user.c.
Полезные функции предлагают команды getsUSBUSART() (получение данных) и putrsUSBUSART() (передача данных по другому последовательному порту).
Не забудьте выполнить проверку mUSBUSARTIsTxTrfReady() перед отправкой данных.
В каталоге «exercise» можно найти некоторые образцы команд. Например, если включить в файл user.c следующий код, при нажатии в терминале клавиши [1] будет загораться индикатор №4:
void Exercise_03(void){ if(getsUSBUSART(input_buffer,1)) { if(input_buffer[0] == '1') mLED_4_Toggle(); }
В Windows для работы устройства необходимо установить включенный в архив драйвер. Можно также воспользоваться утилитой Hyperterminal (19200 бод, кристалл 20 МГц). В Linux следует проверить модуль cdc-acm — должно появиться новое устройство с адресом «/dev/ttyACM0».
Если не хотите использовать загрузчик, удалите раздел «vector remapping» в файле main.c и измените сценарий компоновщика (см. файл important.readme.txt в каталоге исходников).