Разделы

В сети

Пользователей: 114
Из них просматривают:
Аналоги: 45. Даташиты: 17. Инструкции: 7. Новости: 19. Остальное: 5. Ошибки: 1. Программы: 1. Теги: 1. Торрент: 1. Форум: 14. Чат: 3.
Участников: 6
Гостей: 108

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

Партнёры


Партнёры

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

Программирование

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

Написал proger в 05.06.2010 13:50:00 (28520 прочтений)

Этот термометр выполнен на основе микроконтроллера 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<150 And 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

 

Библиотека HID_Lib

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

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

10
 
Теги: USB   Термометр   ATMega8  
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити
bunua
Отправлено: 05.06.2010 15:36  Обновлено: 05.06.2010 15:36
Сотрудник
Дата регистрации: 17.11.2009
Откуда: Тирасполь
Сообщений: 37
 USB HID термометр на ATmega8
А почему Атмега8? поменьше ничем нельзя заменить?
классик или тини.
Geniuzz
Отправлено: 05.06.2010 16:13  Обновлено: 05.06.2010 16:13
Технолог
Дата регистрации: 02.12.2008
Откуда: живу под Бруклинским мостом
Сообщений: 214
 USB HID термометр на ATmega8
хотелось бы выяснить у

автора

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

просветите чайника )
evildesign
Отправлено: 05.06.2010 16:51  Обновлено: 05.06.2010 16:51
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3376
 USB HID термометр на ATmega8
это не зависит от хорошести тона- это говорит хосту полноскоростное или низкоскоростное устройство к нему подключилось.
Geniuzz
Отправлено: 05.06.2010 17:25  Обновлено: 05.06.2010 17:25
Технолог
Дата регистрации: 02.12.2008
Откуда: живу под Бруклинским мостом
Сообщений: 214
 USB HID термометр на ATmega8
можно с этого места поподробнее
evildesign
Отправлено: 05.06.2010 23:18  Обновлено: 05.06.2010 23:18
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3376
 USB HID термометр на ATmega8
тут лучше тебе стандарт покурить. В зависимости от подтянутости линии определяется 2.0 или 1.1, а дальше идет обмен любезностями. Можешь ради эксперимента просто пустой разъем повставлять с резюком- оно будет обнаруживать неизвестные устройства.
Geniuzz
Отправлено: 06.06.2010 0:37  Обновлено: 06.06.2010 0:37
Технолог
Дата регистрации: 02.12.2008
Откуда: живу под Бруклинским мостом
Сообщений: 214
 USB HID термометр на ATmega8
уже попробовал

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

его мегаомность сравнима с током утечки защитных и коммутационных цепей на выводе межки
он ничего не делает
evildesign
Отправлено: 06.06.2010 10:11  Обновлено: 06.06.2010 10:11
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3376
 USB HID термометр на ATmega8
ну не очень она и сравнима, но номинал должен быть в 2 -3 раза меньше. Его функции- корректно определять состояние входа мк когда обе стороны слушают.
YK-155
Отправлено: 06.06.2010 14:55  Обновлено: 06.06.2010 14:55
Студент
Дата регистрации: 20.01.2010
Откуда: Киев
Сообщений: 4
 USB HID термометр на ATmega8
Мнэээ... А где "программа для контроллера"?
proger
Отправлено: 06.06.2010 16:23  Обновлено: 06.06.2010 16:23
Старший сотрудник
Дата регистрации: 07.01.2010
Откуда:
Сообщений: 93
 USB HID термометр на ATmega8
bunua, что нашёл в Окталене, то и использовал.
Можно применить другой МК, семейства AVR, перекомпилировав прошивку.

YK-155, я прикреплял к статье архив с файлами, но он куда-то пропал.
Залил временно на дипозит http://depositfiles.com/files/t8r3170vn
an
Отправлено: 07.06.2010 0:17  Обновлено: 07.06.2010 0:17
Администратор
Дата регистрации: 07.08.2008
Откуда: Рыбница
Сообщений: 2505
Пользователь активен!
 USB HID термометр на ATmega8
Закинул архив на сервер...
YiPi
Отправлено: 18.06.2010 10:59  Обновлено: 18.06.2010 11:54
Абитуриент
Дата регистрации: 18.06.2010
Откуда: Москва
Сообщений: 2
 USB HID термометр на ATmega8
Круто=))
Вот только один маленький вопрос...
После компиляции проекта для Микроконтроллера в BASCOM *.hex файл имеет размер 10Kb, а в datasheete рамер Flash памяти микрухи atmega8-16Pi всего 8Kb отсюда появляется вопрос, а где взять ещё 2Kb??? или я в чём то ошибаюсь...
Заранее спасибо!!!=)
evildesign
Отправлено: 18.06.2010 18:20  Обновлено: 18.06.2010 18:20
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3376
 USB HID термометр на ATmega8
*.hex -это текстовый вариант записи двоичного файла, придуманный Intel. Его размер может сильно отличаться от размера представляемых им данных.
YiPi
Отправлено: 19.06.2010 10:00  Обновлено: 19.06.2010 10:00
Абитуриент
Дата регистрации: 18.06.2010
Откуда: Москва
Сообщений: 2
 USB HID термометр на ATmega8
Спасибо, буду знать :roll:
macarena
Отправлено: 20.06.2010 23:50  Обновлено: 20.06.2010 23:50
Главный Технолог
Дата регистрации: 20.02.2010
Откуда: тирасполь
Сообщений: 275
 USB HID термометр на ATmega8
прогер, а как написал прогу для компа.у универе такому учат ?
an
Отправлено: 21.06.2010 13:16  Обновлено: 21.06.2010 13:16
Администратор
Дата регистрации: 07.08.2008
Откуда: Рыбница
Сообщений: 2505
Пользователь активен!
 USB HID термометр на ATmega8
Не знаю кого не учат, но нас этому учат...
proger
Отправлено: 21.06.2010 13:22  Обновлено: 21.06.2010 13:22
Старший сотрудник
Дата регистрации: 07.01.2010
Откуда:
Сообщений: 93
 USB HID термометр на ATmega8
Программировать сам научился без универа.
Это не Си, бейсик самому легко освоить!
volodymyr
Отправлено: 27.07.2010 20:08  Обновлено: 27.07.2010 20:08
Школьник
Дата регистрации: 27.07.2010
Откуда:
Сообщений: 1
 USB HID термометр на ATmega8
вывод такой
резистор R2 не нужен

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



резистор определяет потенциал на выводе - по этому он необходимю В случае отсутствия будет случайное состояние на выводе или плавающий потенциал
KT315
Отправлено: 21.09.2012 20:13  Обновлено: 21.09.2012 20:13
V.I.P.
Дата регистрации: 24.06.2011
Откуда: Мухосранск
Сообщений: 2028
 USB HID термометр на ATmega8
На выходе чего?

Разное

Для выпаивания микросхем в DIP корпусе пользуюсь проверенной технологией . Которая дает неплохие результаты , сохраняя при этом как микросхему так и дорожки печатной платы .

Интересно

Если "ревёт" один из дросселей резонансного стабилизатора, забейте деревянный клин между его катушками.

Похожие новости