Авторизация


...

Кто на сайте?

Сейчас 75 гостей и ни одного зарегистрированного пользователя на сайте

Статистика

-Посетители : 27319
-Материалы : 210

Пользователь сайта продает...

  Плата питания

Пользователь сайта покупает...

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

Автор: Alex Просмотров: 8274

 

 

"Сердцем" устройства является микроконтроллер 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 датчика, вывод температуры

 


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

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

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

Случайные статьи....

Prev Next

Быстрые регистры стека.

31-05-2011 Super User

 При рассмотрении прерываний в микроконтроллерах 18 серии мы упоминали о  том, что при помощи команды RETFIE FAST можно восстановить  значения регистров  W, STATUS и BSR . Делается это при помощи быстрых регистров стека, в которые записываются значение регистров при выходе...

Простая программа для разводки печатных плат Sprint-Layout с дружестве…

04-08-2012 Игорь Безверхний

Простая программа для разводки печатных плат Sprint-Layout с дружественным интерфейсом (часть 2)

 В радиолюбительской практике, а иногда и в профессиональной работе, мы  сталкиваемся с необходимостью изготовления печатных плат. Помочь в этом может программа Sprint-Layout, которая представляет собой специализированный графический редактор для ручной разводки печатных плат. Статья предназначена, в первую очередь, читателям, которые...

Табло валют.

12-01-2012 Sergey Roslik

Табло валют.

 Времена, когда курсы обмена валют записывались на доске мелом, давно прошли. Современное электронное табло котировки валют стало действительно удобным современным инструментом бизнеса, позволяющим ярко информировать человека о текущих котировках валюты. Табло валют предназначаются для использования в обменных пунктах валют и...

Подключаем LCD SSD1963 к STM32 по FSMC_16bit +Touch

23-05-2016 Александр Беглецов

Подключаем LCD SSD1963  к STM32 по FSMC_16bit +Touch

 В данной статье автор реализовал подключение TFT дисплея диагональю  7” дюймов  на контроллере SSD1963 к микроконтроллеру STM32F407VGT посредством FSMC шириной 16 бит. Скорость заливки экрана одним цветом у автора получилось приблизительно  60 кадров/сек (1000 кадров за 16,518 секунд) при тактовой...


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

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