us_uart1«Создайте пожалуйста урок или хоть какое-то объяснение как программировать под usb на примере at90usb162. Как создать хотя бы самое элементарное USB устройство на аппаратном usb и чтобы оно распознавалось в компьютере.» — Сергей

В качестве конечной задачи, организуем мост USB-UART: со стороны мк данные будут отсылаться по USB, а со стороны ПК мы будет принимать данные с виртуального Com порта. Таким образом останется совместимость с программами работающими с обычным Com портом, т.е. можно заменить связку AVR+FTDI одной AT90. Нам понадобится AT90USB162-16AU, огрызок текстолита, 2 резистора по 22Ом, штырьки, разъем USB type B, кварц на 16МГц, 2 конденсатора по 12-22пФ, 1 конденсатор на 1мкФ, по питанию конденсатор на 0.1мкФ и желательно еще один на 10мкФ.

Собираем все по схеме, длина D+, D- одинаковая и минимально возможная и как можно ближе друг к другу. Номиналы строго указанные выше.
cdc_sch

Разводим, травим, получаем такую штукенцию
at90usb162_board2

Паечный скилл потихоньку растет, хоть и далек от идеала.
at90usb162_board

Если с ходу засунуть в USB то определится в системе так:
at90usb162

Таким образом у нас сразу есть готовое устройство, в чем его плюс? В том что если скачать атмеловскую софтину, то можно шить этот камень без всяких программаторов. Но наша задача получить устройство к которому можно подключаться как COM порту. У атмела на сайте можно найти аппнот «AVR272: USB CDC Demonstration: UART to USB Bridge, on megaAVR with USB». В принципе вариант нормальный, качаете готовый пример, правите под себя и юзаете, подробное описание прилагается. А мы пойдем на север 🙂

Я решил идти другим путем — для ленивых. Запускаем CAVR, настраиваем как CDC
cdc_setup

Чуток правим исходник и теперь мы можем кидать байты на комп, как мы это делали бы при помощи юарта, для примера будем кидать Hello раз в секунду.

#include <90usb162.h>
#include <delay.h>
 
// USB Device functions
#include <usb_device.h>
 
// USB CDC Virtual Serial Port functions
#include <usb_cdc.h>
 
// USB initialization
#include "usb_init.h"
#include <stdio.h>
 
// Use the USB Virtual Serial Port as printf output
#define _ALTERNATE_PUTCHAR_
void putchar(char c)
{
usb_serial_putchar(c);
}
 
void main(void)
{
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
 
// USB Controller initialization in device mode
// Note: This function also initializes the PLL
usb_init_device(&usb_config);
 
#asm("sei")
 
// Wait for the USB device to be enumerated by the host
while (!usb_enumerated);
 
// Wait 1.5 seconds for the operating system to
// load any drivers needed by the USB device
delay_ms(1500);
 
// Wait for the USB host to be ready to receive serial data by
// setting the CDC Virtual Serial Port's RS-232 DTR signal high
while (usb_cdc_serial.control.dtr==0);
 
while (1)
      {
       printf("hello");
       delay_ms(1000);
      }
}

После прошивки, венда потребует от нас свежий драйвер, выкладывать его не буду, находится в папке примеров CAVR. Но это еще не все, так как он не имеет подписи, то владельцам Win 8 предстоят пляски с бубном — нужно перезагрузить комп с отключением проверки цифровой подписи и только тогда он установится.
cdc_cavr

В итоге в диспетчере устройств появится заветный компорт.
cdc_virtualCom

И в терминалке будут видны приходящие байты. Скорость передачи настраивается в свойствах COM порта в диспетчере устройств. Проверено и на 9600 работает, и на 115200 работает. Так что развлекаемся 🙂
terminal_cdc

Собственно поставленная задача решена, про теорию не было сказано ни слова, но явление временное.

Прошивка, разводка, исходники

25 комментариев: AT90USB162 CDC USB-UART

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика