include 18f2455 -- библиотека для используемого МК
--
enable_digital_io () -- переключение всех входов на цифровой режим
--
alias Button is pin_B7 -- раз уж у нас подключена кнопка, объявим ее
pin_B7_direction = input -- кнопка у нас работает на вход
--
-- одна строчка - и у нас есть все необходимое для работы с USB CDC
include usb_serial -- бибилотека для работы с usb
--
usb_serial_init () -- --инициализируем USB CDC
forever loop -- основной цикл, выполняется постоянно
usb_serial_flush () -- обновление usb. Данная процедура выполняет все необходимые
-- действия для поддержания соединения с ПК
end loop
Скомпилировав данный код, записав полученный HEX файл в МК при помощи бутлоадера и запустив устройство можно будет наблюдать как в системе опрделится новое устройство: Виртуальный сom-порт.
Теперь, когда устройство уже работает, научим его общаться.
Для чтения принятого байта существует функция usb_serial_read(byte) :boolean. При наличии полученного байта она заносит его в указанную переменную и возвращает true , иначе возвращает false .
Для отправки байта существует процедура usb_serial_data . Она замаскирована под переменную, потому для отправки байта достаточно присвоить ей значение отправляемого байта.
Объявим переменную размером в байт до основного цикла, в основном цикле будем проверять наличие полученных байт, и при их наличии отправлять их обратно.
include 18f2455
--
enable_digital_io ()
--
alias Button is pin_B7
pin_B7_direction = input
--
--
include usb_serial
--
usb_serial_init ()
var byte ch -- объявляем переменную
forever loop -- основной цикл
usb_serial_flush ()
if (usb_serial_read (ch )) then -- если байт получен, он будет записан в ch
usb_serial_data = ch -- отправляем полученный байт обратно
end if
end loop
Компилируем, зажимаем кнопку, передергиваем питание, запуская бутлоадер, меняем прошивку, запускаем.
Устройство снова определилось в системе, теперь нам нужен софт, дабы протестировать работу устройства.
Пока у нас нет своего, используем готовый терминал: я использовал программу RealTerm.
Открываем порт с нужным номером и отправляем данные.
И нам в ответ приходит то, что мы отправили. Значит, все работает как надо.
Создаем новый проект, раскидываем по форме необходимые компоненты:
SpinEdit1 - для указания номера порта
Button1 - для установки соединения
Button2 - для разрыва соединения
SpinEdit2 - для ввода байта в десятичном виде
Button3 - для отправки байта
Memo1 - для вывода принятой информации.
Как уже было сказано выше, с com-портом нужно работать так же, как и с обычным текстовым файлом: используя функции CreateFile, WriteFile и ReadFile.
Дабы не вдаваться в подробности, возьмем готовую библиотеку для работы с com-портом: ComPort.
Вешаем на каждую кнопку необходимую задачу и получаем конечный код:
unit Unit1;interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics , Controls, Forms,
Dialogs, StdCtrls, Spin,ComPort;Type
TForm1 = class (TForm)
SpinEdit1: TSpinEdit;
Button1: TButton;
Button2: TButton;
SpinEdit2: TSpinEdit;
Button3: TButton;
Memo1: TMemo;
procedure OnRead(Sender: TObject; ReadBytes: array of Byte );
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
Port: TComPort;
public
{ Public declarations }
end;var
Form1: TForm1;
num: integer;
implementationProcedure TForm1.Button1Click(Sender: TObject);
begin
Port:= TComPort.Create(SpinEdit1.Value, br115200); //создаем соединение
Port.OnRead:= OnRead; //создаем поток чтения принятых данных
Button2.Enabled:= true ; //активируем кнопку закрытия соединения
end;Procedure TForm1.Button2Click(Sender: TObject);
begin
Port.Free; //закрываем соединение
Button2.Enabled:= false ; //отключаем кнопку
end;Procedure TForm1.Button3Click(Sender: TObject);
begin
if Button2.Enabled then Port.Write();
end;Procedure TForm1.FormDestroy(Sender: TObject);
begin
if Button2.Enabled then
Port.Free;
end;Procedure TForm1.OnRead(Sender: TObject; ReadBytes: array of Byte );
var
i:integer;
begin
for i:= Low(ReadBytes) to High(ReadBytes) do //проходим по массиву принятых байт
begin
Memo1.Text:= Memo1.Text + "." +InttoHex(ReadBytes[i],2); //добавляем его HEX значение в окно
inc(num); //считаем колв-о принятых байт
end;
if num > 10 then begin
Memo1.Lines.Add("" ); //переносим строку
num:= 0;
end;
end;
Запускаем, устанавливаем соединение, отправляем байты:
Вот и готов наш самый простой терминал для работы с самым простым usb-устройством.
Как видно, чтение и запись происходит динамическими массивами байт.
Обрабатывая получаемую информацию можно составить необходимый протокол обмена, подходящий для текущей задачи.
include 18f2455
--
enable_digital_io ()
--
alias Button is pin_B7
pin_B7_direction = input
--
--
include usb_serial
--
usb_serial_init ()
var byte ch
var byte i -- объявляем вторую переменную
forever loop -- основной цикл
usb_serial_flush ()
if (usb_serial_read (ch )) then -- если байт получен выполняем необходимые действия
case ch of -- перебираем номер байта
0 : usb_serial_data = 0xff
1 : usb_serial_data = Button -- отправка состояния кнопки
OTHERWISE block -- если получено что-то иное
for 16 using i loop -- отправляем 10 байт с данными
usb_serial_data = ch +i -- от ch до ch+15
end loop
end block
end case
end if
end loop
>include print
...
var dword data
print_dword_hex (usb_serial_data , data )
Название всех команд можно посмотреть в файле библиотеки.
while (usb_cdc_line_status () == 0x00 ) loop
end loop
const byte USB_STRING3 =
{
24 , -- длина массива
0x03 , -- bDescriptorType
"0" , 0x00 ,
"1" , 0x00 ,
"2" , 0x00 ,
"3" , 0x00 ,
"4" , 0x00 ,
"5" , 0x00 ,
"6" , 0x00 ,
"7" , 0x00 ,
"8" , 0x00 ,
"9" , 0x00 ,
"X" , 0x00
}
const byte USB_STRING2 =
{
28 , --
0x03 , -- bDescriptorType
"D" , 0x00 ,
"e" , 0x00 ,
"m" , 0x00 ,
"o" , 0x00 ,
" " , 0x00 ,
"B" , 0x00 ,
"o" , 0x00 ,
"a" , 0x00 ,
"r" , 0x00 ,
"d" , 0x00 ,
" " , 0x00 ,
"=" , 0x00 ,
")" , 0x00
}
Но увы, после установки драйверов устройство поменяет имя на указанное в.inf файле, потому поменяем имя и там
DESCRIPTION=«Demo CDC»
Прежде всего необходимо присвоить своему устройству уникальное значение производителя и продукта, дабы легко определять его среди сотен других стандартных CDC-прошивок.
VID и PID выдаются за денюжку, потому пойдем по пуути китайцев: втихую возьмем себе заведомо свободные значения.
Прошивка:
В прошивке необходимо объявить две переменные до подключения библиотеки USB
const word USB_SERIAL_PRODUCT_ID = 0xFF10
const word USB_SERIAL_VENDOR_ID = 0xFF10
Драйвера:
Так как драйвера не предназначены для нашей комбинации VID и PID, допишем наши значения в.inf файл вручную:
%DESCRIPTION%=DriverInstall, USB\VID_FF10&PID_FF10
%DESCRIPTION%=DriverInstall, USB\VID_FF10&PID_FF10
Софт:
Для отлова событий подключения\отключения устройства подключим библиотеку ComponentUSB. Не считаю нужным пояснять каждую строчку: все изменения можно увидеть в прилагаемом проекте.
Как видно, организовать обмен данными между МК и ПК через USB - не самое сложное занятие. Полученное соединение можно использовать не только для конечынх целей: оно так же подходит для отладки программы. Ведь отправить на компьютер результаты расчетов, текущие состояния регистров и переменных куда нагляднее, чем моргать парой светодиодов азбукой морзе.
И напоследок: советую заглянуть в исходный код лампы настроения. Там можно найти довольно-таки хороший вариант обработки принимаемых данных для организации удобного протокола обмена.
USB флешка - распространённое устройство, которое наверняка имеет каждый, у кого дома имеется свой персональный компьютер. На сегодняшний день существует большое разнообразие флеш-накопителей. Как правило, они имеют пластиковый или металлический корпус, хотя встречаются и более оригинальные варианты. Но что делать, если корпус Вашей флешки повредился или по каким-то причинам перестал Вас устраивать, а покупать новую Вы не хотите? В этой статье мы расскажем, как заменить старый пластиковый или металлический корпус Вашей флешки на новый деревянный.
Для того чтобы сделать деревянный корпус для флешки нам понадобятся следующие инструменты:
USB флешка без корпуса.
Кусок древесины.
Дрель или другое сверлильное устройство.
Наждачная бумага.
Силикон.
Зажимы, 2 шт.
Карандаш.
Приступим к изготовлению!
1. Сначала определите нужный Вам размер корпуса и с помощью пилы по намеченным отметкам из куска дерева вырежьте прямоугольник соответствующего размера.
3. С помощью сверлильного устройства вырежьте не сквозные отверстия в большом и среднем кусках древесины и сквозное отверстие в самом маленьком куске. Отверстия должны быть такого размера, чтобы в них легко поместился и хорошо удерживался USB-накопитель. В средней части, которая будет служить крышкой, внутри отверстия следует сделать небольшие зазоры, для того чтобы крышка могла плотно закрываться и легко открываться.
4. Воткните USB-накопитель в сквозное отверстие маленького куска так, чтобы разъём выступал с одной стороны, а вся остальная часть флешки находилась с другой. Если флешка сидит в отверстии не плотно, зафиксируйте её с помощью силикона.
5. Теперь воткните выступающую длинную часть флешки в отверстие самого большого куска, предварительно нанеся на обе части горячий клей и с помощью пресса склейте их в один корпус. Использовать пресс нужно для того, чтобы обе части плотно скрепились между собой, и после шлифовки между ними не было видно никаких зазоров.
6. Теперь тщательно прошлифуйте весь корпус наждачной бумагой, чтобы придать ему более аккуратный и гладкий вид. Также можно покрыть корпус краской или лаком.Наша оригинальная флешка из дерева готова!
Не все старые планшеты поддерживают функцию подключения флешки или модема, а я Вам расскажу как их перехитрить и подключить к ним флешку, модем и даже жесткий диск.
Сегодня хочу представить вашему вниманию OTG – переходник.
Для начала хочу рассказать Вам что такое OTG? Это способ подключения к вашему планшету или телефону который поддерживает функцию OTG, принтер, флешку и даже жесткий диск. Еще это подключение называют - USB-host.
Также можно подключить клавиатуру или мышь к Вашему гаджету, если гаджет такую функцию поддерживает.
И так, для создания этого чудо кабеля, нам понадобится:
Старый удлинитель USB
Micro USB разъем (достать можно из обычного USB кабеля для вашего девайса)
Паяльник и паяльные принадлежности
И так, поехали, чтобы нам сделать такой кабель, нам будет необходимо соединить 4й контакт с 5м контактом разъема micro USB
Мы должны добраться до четвёртого контакта и соединить его перемычкой с проводом GND так как показано на картинке
Но это еще не всё, чтобы подключить к телефону или планшету жесткий диск, этого переходника нам будет недостаточно. Для подключения устройств у которых потребление больше чем 100мА, а именно 100мА может выдать порт вашего устройства, нам потребуется подключить к нашему OTG-кабелю дополнительное питания которого должно быть достаточно чтобы ваш жесткий диск заработал.
Вот схема такого переходника
Теперь пора приступить к сбору
Берем старый удлинитель USB и разрезаем его не сильно далеко от разъема 2.0, так как ток всего лишь 100мА, чтобы избежать больших потерь. Отрезаем приблизительно в том месте как показано на фото
После зачищаем наш провод
Я соединил каплей припоя 4 и 5 контакты.
Ну и вот весь наш кабель в сборе
Осталось только проверить работоспособность, берем планшет, вставляем «переходник» и вставляем в него флешку, все работает о чем нам говорит мигающий светодиод на флешке и планшет определяющий флешку.
Ограничения:
Старые мобильники этого делать не умеют.
Флешка должна быть отформатирована в FAT32.
Максимальная ёмкость подключаемой флешки ограничена аппаратными возможностями телефона или планшета.
Спасибо за Ваше внимание!
Магнитолой в автомобиле сейчас уже никого не удивить, сложно увидеть авто без неё. Экран последней выводит не только данные о звуке. В некоторых версиях на него выводится скорость, данные о внешних световых огнях и многое другое. Вот только в наш цифровой век далеко не каждая из них способна поддерживать прослушивание музыки с USB. Хорошо, что ко многим автомагнитолам можно подключить этот тип входа.
Музыка в автомобилях появилась ещё в 70 годах прошлого века. Сначала это были простые радиоприёмники с небольшим диапазоном принимаемых волн, и ставились они только на представительские «Волги». Владельцу средних «Жигулей» такая роскошь долгое время была недоступна. С развитием промышленности к радиоприёмнику добавили кассетный магнитофон, который впоследствии заменили на поддержку дисков, Впоследствии появился даже CD-ченджер. Самые новые автомобили имеют магнитолы с возможностью прослушивания музыки c USB.
Но что делать владельцу автомобиля, выпущенного 5–10, а то и более лет назад?
Покупать новую магнитолу?
Нет - модернизировать старую.
Но прежде чем говорить о такой модернизации, давайте разберёмся.
Такой вход на ней, как и на любой другой бытовой аудиовидеотехнике позволяет подключать обычные флешки по стандарту 2.0. Но этого явно мало. Магнитола должна определить флешку, понять формат того, что на ней записано, и воспроизвести это. Никто не спорит, если на магнитоле есть аудиовход - можно подключить выход со смартфона и загружать музыку на него.
Но что случается, когда вам звонят? В большинстве случаев выдёргивают провод от наушников и говорят без них. На то, чтобы произвести эту простую операцию, требуются обе руки, и отвлечение внимания на несколько секунд. Если же это происходит в быстро движущемся автомобиле… Ситуация на дороге меняется быстро, вы отвлеклись… и попали в ДТП .
Решений этой ситуации существует несколько:
Гнездо на задней стороне может быть у большинства заводских магнитол. Вся работа сводится к нескольким действиям:
Протоколы управления у разных автомобилей различны, поэтому при смене авто, скорее всего, придётся менять и адаптер. Но при покупке новой машины этот вопрос не так уж и важен.
FM-модулятор - девайс, умеющий передавать сигнал с флешки (а также карты памяти) по радиоканалу. В общем случае он втыкается в гнездо прикуривателя, настраивается на определённую частоту. Эта же частота настраивается на приёмнике магнитолы. Вы (и сосед поблизости) можете слушать музыку с флешки. Но для крупного города, где радиодиапазон забит под завязку, можно поступить иначе: установить модулятор прямо в магнитофон. Как это сделать?
Преобразователь питания в модуляторе свой, в плеере зависит от его марки.
Экранированным проводом соединяют аудиовыход модулятора и вход магнитолы.
На древних кассетниках такого входа нет. В этом случае сигнал придётся подать напрямую на вход предварительного усилителя. Найти его просто - именно к нему идёт экранированный провод от головки.
Распайку микросхемы усилителя можно найти в интернете.
Например, вот так выглядит схема усилителя на базе TDA2005.
Так как в новом варианте остаётся только блок радиоприёмника, модулятор можно расположить в корпусе. Если все контакты соединены верно, то включение «AUX» или «Tape» переадресуется модулятору.
Как сделать поддержку USB и при этом оставить старый (рабочий) плеер
На пайке удлинителя специально останавливаться не надо. В приложенном видео достаточно подробно с названием всех деталей показано, как такой кабель припаивается к магнитоле в Wv.
Иногда электроника старого кассетника настраивается так, что играть он может, только когда кассета вставлена. В случае модернизации играть будет нечему. Решением будет найти в сети схему своего кассетника и выяснить, какая перемычка зажимается вставленной кассетой. Закрывают перемычку, и магнитола будет «уверена», что кассета находится на месте.
Древняя автомагнитола, лежащая на полке в кладовке, прослужит ещё не один год. Вместо покупки новой - добавьте старой поддержку USB.