Понедельник, 08 апреля 2013 05:17

Переходник USB - 1Wire на микроконтроллере PIC18F2550 Featured

Written by Alex
Rate this item
(0 votes)

 Описание: Описание: C:Documents and SettingsAlexРабочий стол1Wire-USB1-wire.jpg

 Ниже представлена схема простого переходника с USB на 1-Wire, на микроконтроллере PIC18F2550.
Устройство, в первую очередь, разработано для тех, кто не "дружит" с электроникой и программированием микроконтроллеров, и кому очень хочется подключить к своему ПК устройства, управляемые по интерфейсу 1-Wire, но умеющим хоть как-нибудь писать софт под ПК.

 

 

 

 

"Сердцем" устройства является микроконтроллер PIC18F2550 фирмы Microchip, в который зашивается прошивка, лежащая ниже в архиве. Питание берётся с гнезда USB и вполне достаточно для нормальной работы устройства. Светодиод сигнализирует об обмене информации по USB. Когда идёт передача/приём данных, он мигает.
 



Работа с устройством осуществляется через библиотеку mpusbapi.dll и, специально мной написанные файлы USB.cpp и USB.h, которые необходимо добавить в проект с программой. Файлы писались и тестировались в среде C++Builder 6.


Функции для работы с устройством :

void USB_Dev_Init(void)

Инициализирует работу с устройством.
Вызывается в начале программы, перед работой с устройством.

 

unsigned int USB_Get_Device_Count(void)

Возвращает количество подключенных устройств.
Используется для обнаружения подключенного устройства к USB-порту.
1 - устройство подключено. 0 - устройство не подключено.

 

DWORD SendReceivePacket(BYTE *SendData, DWORD SendLength, BYTE *ReceiveData,
DWORD *ReceiveLength, UINT SendDelay, UINT ReceiveDelay);

Передаёт в устройство данные и ждёт от него ответа.

 

SendData Указатель на буфер передаваемых данных
SendLength Длина передаваемых данных в байтах
ReceiveData Указатель на буфер
ReceiveLength Указатель на DWORD-переменную, в которой вернётся длина принятых данных в байтах.
SendDelay Задержка таймаута передачи данных в USB
ReceiveDelay Задержка таймаута приёма данных из USB


Управление линией 1-Wire производится с помощью команд. Команда в пакете всегда идёт первым байтом, затем, если необходимо, идут данные, связанные с этой командой.

Команды для работы с линией 1-Wire :

USB_CMD_RESET (0x01)

Длина пакета = 1 байт.

Посылает на линию импульс сброса и возвращает факт присутствия сенсоров на линии
Возвращаемые значения, 1 байт :
1 - устройства на линии присутствуют.
0 - устройства на линии отсутствуют.

 

USB_CMD_SEND_BYTE (0x02)

Длина пакета = 2 байта.

Посылает в линию байт данных.
Передаваемые значения :
Байт №2 - байт данных, передаваемый в линию.
Возвращаемые значения, 1 байт :
1 - всегда.

 

USB_CMD_GET_BYTE (0x03)

Длина пакета = 1 байт.

Читает байт данных из устройства на линии.
Возвращаемые значения, 1 байт :
Байт №1 - байт, прочитанный с линии.

 

USB_CMD_FIRST_SEARCH (0x04)

Длина пакета = 1 байт.

Начало поиска устройств на линии.
Возвращаемые значения, 9 байт :
Байт №1 - 1, если устройство найдено; 0 - не найдено ни одного устройства
Байты №2...9 - ROM-код найденного устройства.

 

USB_CMD_NEXT_SEARCH (0x05)

Длина пакета = 1 байт.

Продолжение поиска устройств на линии. Использовать только если первый поиск был удачным.
Возвращаемые значения, 9 байт :
Байт №1 - 1, если устройство найдено; 0 - не найдено ни одного устройства
Байты №2...9 - ROM-код найденного устройства.

 



С печатной платой я особо париться не стал и взял готовую в тритоне - TRT-USB. Она идеально подошла под эту задачу.
Вот, собссно, фотки собранного переходника на этой плате:



Установка драйвера устройства :

Установка данного устройства не сложней установки любого простого USB-устройства.
Вставляем устройство в USB. Вылезет мастер нового оборудования. Указываем папку с драйвером и устройство готово к работе.
В диспетчере устройств должно появится следующее:


Если оно появилось - поздравляю Вас - вы стали счастливым обладателем супер-мега-переходника USB - 1-Wire :)



Демо программка :

 Ну и, естественно, я не оставил читателей без "десерта" :)
Подключил к плате датчик температуры DS18B20 и написал небольшу демо-программку, читающую ID датчика и, каждые 1.5 секунды, температуру. Программа с исходниками лежит ниже в архиве.
Скриншоты программы :

 

Устройство не подключено к USB

Устройство подключено, но датчик не обнаружен

Устройство подключено, показан ID датчика, вывод температуры

 


И на последок, фото термометра с этой платкой :

Файлы проекта :

Ссылка для скачивания доступна только авторизованным пользователям сайта !

Read 5655 times Last modified on Пятница, 03 апреля 2015 19:42

Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru