USB TINYДля микроконтроллеров AVR существует множество различных программаторов. USBtiny здесь упоминается, в частности, потому, что содержит программную реализацию USB, аналогичную V — USB. Схема этого программатора проста: версия 2 содержит две микросхемы, а первая версия —лишь одну (собственно чип ATtiny2313). Благодаря подробному описанию на сайте и простым комплектующим устройство легко сделать даже начинающему. USBtiny совместим с популярной программой avrdude, используемой для программирования микроконтроллеров AVR.

Единственная проблема заключается в заливке прошивки в чип программатора —для этого нужен.,, программатор. Если есть компьютер с LPT — портом, то можно сделать один из вариантов FBPRG ака «пять проводков», который железно работает с программой AVReAI.

РАЗНООБРАЗНЫЕ ГАДЖЕТЫ

У тебя есть идея какого-нибудь устройства? Не спеши паять и кодить, а поищи, возможно, кто-то подобное уже делал. Если не получится воспользоваться готовыми схемами и исходниками, то хотя бы не придется начинать все с нуля.

Например, проект V — USB благодаря лицензионной политике накопил приличную базу готовых (в том числе и свободно распространяемых) решений. Здесь можно найти различные реализации клавиатур, USB — адаптеров для джойстиков, геймпадов (в том числе и раритетных, например SNES/NES, Nintendo 64, ZX Spectrum джойстик, Sony PlayStation 1/2) и тому подобное. Адаптеры DMX, виртуальные порты СОМ и UART, i2c, Servo, беспроводные интерфейсы DCF77, IR —все, что поможет подключить к ПК больше новых устройств. Логгеры, платформы для датчиков и сенсоров, адаптеры для LCD — дисплеев, программаторы и загрузчики также могут оказаться полезными в хозяйстве.

Как видно из листинга, самый простой способ отправить данные компьютеру — установить в usbFunctionSetup значение указателя usbMsgPtr на буфер ОЗУ (replyBuf), где находятся данные, а затем вернуть его длину. Размер буфера не должен превышать 254 байта. Для ATtiny2313 с его 128 байтами ОЗУ этого достаточно. Для более функциональных устройств есть второй способ — переопределение функции usbFunctionRead.

Чтобы получить данные, во-первых, нужно в функции usbFunctionSetup извлечь длину сообщения из поля wLength запроса и сохранить ее в глобальной переменной dataLength. Во-вторых, в main.с требуется переопределить функцию usbFunctionWrite, предназначенную для обработки получаемых данных и вызываемую автоматически (и очевидно, несколько раз), если usbFunctionSetup возвращает значение USB__NO_ MSG (255):

USB_PUBLIC uchar.usbFunctipnWrite(uchar data, uchar len) ( uchar i;

…..// Сохранить полученную порцию данных в буфер

…..for(i = 0; dataReceived < dataLength && i.<

len; i++j dataReceived++)…..

replyBuf[dataReceived] = data[i]j

return (dataReceived == dataLength);

Собственно, функция usbFunctionWrite занимается тем, что заполняет буфер replyBuf полученными данными.

Кстати, чтобы этот метод работал, нужно внести изменения в usbconfig.h:

define USB CFG IMPLEMENT FN WRITE…..1…..

Ну и последняя функция прошивки —main:

lnt main() (……_____………………_______……

usblnit(); // Инициализировать USB…..

usbDeviceConnect(); // Подключить устройство Sej — Qi // Разрешить прерывания

//В бесконечном цикле ждать управляющие…..________

II сообщения………….__________………____________………__________________

while(l) usbPoll();

return 9|__________

)……..-………….-……..