Авторизация


...

Кто на сайте?

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

Статистика

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

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

  Стенд для освоения программирования МК AVR

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

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

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

 

 

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

Об особенностях работы по интерфейсу RS485

15-11-2012 Бутывский Игорь

Об особенностях работы по интерфейсу RS485

  Долго искал в Интернете схему, связи компьютера с микроконтроллёром, работающую в двунаправленном режиме по интерфейсу RS485. Ссылок много, но на них крутятся 3 – 4 одинаковые схемы, по тем или иным причинам меня не устраивающие. Тимофей Носов, на форуме предложил схему...

ПП подключения графического индикатора к одному порту.

07-06-2012 Super User

Очень часто возникает ситуация, когда не хватает линий портов для подключения в своих конструкциях графических индикаторов. В этой подпрограмме показан способ подключения к микроконтроллеру  графического индикатора на основе контроллера KS0108 на один порт. Как видно из схемы, экономия линий происходит за...

Программные таймеры

23-09-2011 Alex

Программные таймеры

  Программные таймеры. Что это, и с чем их "едят" Что такое программный таймер? Это таймер-счётчик, основой которого является системный таймер. Т.е., другими словами, это обычная переменная, считающая переполнения системного таймера. Программному таймеру, как минимум, нужен ещё один бит-флаг, управляющий(указывающий) состоянием(на состояние)...

ПП бегущей строки для LCD (ЖК) индикатора.

03-06-2012 Super User

  Ниже предоставлен один из способов вывода информации  на LCD (ЖКИ) индикатор  в виде бегущей строки. Коды (0-255) таблицы знакогенератора, прошитые в индикатор,  обычно совпадают с  кодами  ASCII.   По этому достаточно прописать необходимую текстовую информацию как показано в примере (в...


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

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