Разделы

В сети

Пользователей: 238
Из них просматривают:
Аналоги: 91. Даташиты: 94. Инструкции: 12. Новости: 10. Остальное: 4. Программы: 1. Профиль пользователя: 2. Расчёты: 1. Теги: 1. Форум: 22.
Участников: 2
Гостей: 236

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.

USB HID термометр на ATmega8

Написал proger 05.06.2010 14:50:00 (Просмотров: 34033)

Этот термометр выполнен на основе микроконтроллера ATmega8

и датчика температуры DS18B20



 

Схема USB HID

Программа для контроллера была написанна и отладена в среде Bascom-AVR 1.11.9.8 с использованием USB драйвера swusb.LBX Программа для компьютера была разработана и отладена в среде PureBasic с использованием библиотеки HID_Lib.  Для установки библиотеки, нужно извлечь содержимое архива  в папку со средой PureBasic.

 

Код программы для компьютера

 

#USB_PID=$EF04 : #USB_VID=$AAAA
#NO_Device="Нет связи с термометром"
LoadFont(2,"Arial",22,#PB_Font_Bold)
 
Procedure FindDevice_Timer() ; Периодическая (каждые 400 мс.) проверка доступности термометра
Shared DeviceHandle
Static Old_Test
Test=HID_Lib_DeviceTest(#USB_PID, #USB_VID) ; Есть ли требуемое USB HID устройство?
 If Test<>Old_Test
  Old_Test=Test
  If Test
     HID_Lib_CloseDevice(DeviceHandle)
     DeviceHandle=HID_Lib_OpenDevice(#USB_PID, #USB_VID) ; Подключение к USB HID устройству
     SetGadgetText(0,"Термометр подключён")
  Else
     HID_Lib_CloseDevice(DeviceHandle)                   ; Разрыв связи с USB HID устройством
     DeviceHandle=0
     SetGadgetText(0,#NO_Device)
     SetGadgetText(1,"OFF")
  EndIf
 EndIf
EndProcedure
 
Procedure Thread(*x) ; Эта процедура работает в отдельном потоке
 Shared DeviceHandle
 Repeat
   If DeviceHandle   ; Установлена ли связь с USB термометром?
     In.l=0
     HID_Lib_ReadDevice(DeviceHandle, @In, 3) ; Чтение данных из USB термометра
       In=In>>8                               ; Сдвиг вправо на 8 позиций
       Result.f=In/16
       If Result-50           ; Отсеиваем возможные глюки!
         SetGadgetText(1,StrF(Result,1)+" °C")      ; Отображение температуры в окне
       EndIf
   EndIf
   Delay(100)
 ForEver
EndProcedure
 
; Открываем окно
OpenWindow(0,0,0,170,70,"USB_Termo", #PB_Window_MinimizeGadget|#PB_Window_Invisible|#PB_Window_ScreenCentered)
 StickyWindow(0,1)
 TextGadget(0,4,4,162,16,#NO_Device,#PB_Text_Center)
 StringGadget(1,16,24,140,40,"OFF",#PB_Text_Center|#PB_String_ReadOnly)
   SetGadgetFont(1,FontID(2))
   SetGadgetColor(1,#PB_Gadget_FrontColor,$DF0000)
FindDevice_Timer()
HideWindow(0,0)
 
AddWindowTimer(0,1,400)    ; Запуск таймера
CreateThread(@Thread(),0)  ; Создание отдельного потока из процедуры Thread()
 
Repeat ; Главный цикл проги Repeat - Until
   Event=WaitWindowEvent() ; Идентификатор события
   If  Event=#PB_Event_Timer
     If EventTimer()=1
       FindDevice_Timer()  ; Вызов процедуры по таймеру, каждые 400 мс.
     EndIf
   EndIf
Until Event=#PB_Event_CloseWindow ; Прерывание главного цикла при закрытии окна

 

 

Скриншот скомпилированой программы

скриншот

 

Для компиляции, требуется версия 4.40 или 4.41 компилятора PureBasic.

Скачать бесплатную демоверсию PureBasic441

 

В папке "Examples", вы найдёте примеры устройств на PIC и AVR контролерах.

Скачать программы с их исходными текстами

10
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
 USB HID термометр на ATmega8
Сотрудник
Сотрудник
Дата регистрации: 17.11.2009
Откуда: Тирасполь
Сообщений: 35
не в сети
А почему Атмега8? поменьше ничем нельзя заменить?
классик или тини.
 USB HID термометр на ATmega8
Технолог
Технолог
Дата регистрации: 02.12.2008
Откуда: живу под Бруклинским мостом
Сообщений: 213
не в сети
хотелось бы выяснить у

автора

чем мотивировалось решение подвесить шину D- к питанию , а шину D+ прижать к земле
а не к примеру наоборот , как это считается хорошим тоном у других схемотехников

просветите чайника )
 USB HID термометр на ATmega8
Модератор
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3926
не в сети
это не зависит от хорошести тона- это говорит хосту полноскоростное или низкоскоростное устройство к нему подключилось.
 USB HID термометр на ATmega8
Технолог
Технолог
Дата регистрации: 02.12.2008
Откуда: живу под Бруклинским мостом
Сообщений: 213
не в сети
можно с этого места поподробнее
 USB HID термометр на ATmega8
Модератор
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3926
не в сети
тут лучше тебе стандарт покурить. В зависимости от подтянутости линии определяется 2.0 или 1.1, а дальше идет обмен любезностями. Можешь ради эксперимента просто пустой разъем повставлять с резюком- оно будет обнаруживать неизвестные устройства.
 USB HID термометр на ATmega8
Технолог
Технолог
Дата регистрации: 02.12.2008
Откуда: живу под Бруклинским мостом
Сообщений: 213
не в сети
уже попробовал

вывод такой
резистор R2 не нужен

его мегаомность сравнима с током утечки защитных и коммутационных цепей на выводе межки
он ничего не делает
 USB HID термометр на ATmega8
Модератор
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3926
не в сети
ну не очень она и сравнима, но номинал должен быть в 2 -3 раза меньше. Его функции- корректно определять состояние входа мк когда обе стороны слушают.
 USB HID термометр на ATmega8
Студент
Студент
Дата регистрации: 20.01.2010
Откуда: Киев
Сообщений: 4
не в сети
Мнэээ... А где "программа для контроллера"?
 USB HID термометр на ATmega8
Старший сотрудник
Старший сотрудник
Дата регистрации: 07.01.2010
Откуда:
Сообщений: 124
не в сети
bunua, что нашёл в Окталене, то и использовал.
Можно применить другой МК, семейства AVR, перекомпилировав прошивку.

YK-155, я прикреплял к статье архив с файлами, но он куда-то пропал.
Залил временно на дипозит http://depositfiles.com/files/t8r3170vn
 USB HID термометр на ATmega8
Администратор
Администратор
Дата регистрации: 07.08.2008
Откуда: Рыбница
Сообщений: 2502
не в сети
Закинул архив на сервер...
 USB HID термометр на ATmega8
Абитуриент
Абитуриент
Дата регистрации: 18.06.2010
Откуда: Москва
Сообщений: 2
не в сети
Круто=))
Вот только один маленький вопрос...
После компиляции проекта для Микроконтроллера в BASCOM *.hex файл имеет размер 10Kb, а в datasheete рамер Flash памяти микрухи atmega8-16Pi всего 8Kb отсюда появляется вопрос, а где взять ещё 2Kb??? или я в чём то ошибаюсь...
Заранее спасибо!!!=)
 USB HID термометр на ATmega8
Модератор
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3926
не в сети
*.hex -это текстовый вариант записи двоичного файла, придуманный Intel. Его размер может сильно отличаться от размера представляемых им данных.
 USB HID термометр на ATmega8
Абитуриент
Абитуриент
Дата регистрации: 18.06.2010
Откуда: Москва
Сообщений: 2
не в сети
Спасибо, буду знать :roll:
 USB HID термометр на ATmega8
Главный Технолог
Главный Технолог
Дата регистрации: 20.02.2010
Откуда: тирасполь
Сообщений: 283
не в сети
прогер, а как написал прогу для компа.у универе такому учат ?
 USB HID термометр на ATmega8
Администратор
Администратор
Дата регистрации: 07.08.2008
Откуда: Рыбница
Сообщений: 2502
не в сети
Не знаю кого не учат, но нас этому учат...
 USB HID термометр на ATmega8
Старший сотрудник
Старший сотрудник
Дата регистрации: 07.01.2010
Откуда:
Сообщений: 124
не в сети
Программировать сам научился без универа.
Это не Си, бейсик самому легко освоить!
 USB HID термометр на ATmega8
Школьник
Школьник
Дата регистрации: 27.07.2010
Откуда:
Сообщений: 1
не в сети
вывод такой
резистор R2 не нужен

его мегаомность сравнима с током утечки защитных и коммутационных цепей на выводе межки
он ничего не делает



резистор определяет потенциал на выводе - по этому он необходимю В случае отсутствия будет случайное состояние на выводе или плавающий потенциал
 USB HID термометр на ATmega8
Технический Директор
Технический Директор
Дата регистрации: 24.06.2011
Откуда: Мухосранск
Сообщений: 2676
не в сети
На выходе чего?

Разное

Интересно

Полихлорвиниловые трубки легче натянуть на изолируемые предметы (отвертки, пинцеты, радиодетали), если на 15-20 мин поместить их в ацетон.

Похожие статьи