Разделы

В сети

Пользователей: 235
Из них просматривают:
Аналоги: 85. Видео: 1. Галерея: 1. Даташиты: 99. Новости: 11. Остальное: 3. Программы: 1. Производители: 1. Профиль пользователя: 8. Расчёты: 1. Теги: 1. Форум: 23.
Участников: 2
Гостей: 233

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

Партнёры


Партнёры

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

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

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

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

Этот термометр выполнен на основе микроконтроллера 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 proger 06.06.2010 17:23
    USB HID термометр на ATmega8 an 07.06.2010 1:17

 USB HID термометр на ATmega8
Технолог
Технолог
Дата регистрации: 02.12.2008
Откуда: живу под Бруклинским мостом
Сообщений: 213
не в сети
хотелось бы выяснить у

автора

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

просветите чайника )
Отправитель Нити

Ответы Отправитель Отправлено
 USB HID термометр на ATmega8 evildesign 05.06.2010 17:51
    USB HID термометр на ATmega8 Geniuzz 05.06.2010 18:25
      USB HID термометр на ATmega8 evildesign 06.06.2010 0:18
        USB HID термометр на ATmega8 Geniuzz 06.06.2010 1:37
          USB HID термометр на ATmega8 evildesign 06.06.2010 11:11
          USB HID термометр на ATmega8 volodymyr 27.07.2010 21:08

 USB HID термометр на ATmega8
Студент
Студент
Дата регистрации: 20.01.2010
Откуда: Киев
Сообщений: 4
не в сети
Мнэээ... А где "программа для контроллера"?
Отправитель Нити

 USB HID термометр на ATmega8
Абитуриент
Абитуриент
Дата регистрации: 18.06.2010
Откуда: Москва
Сообщений: 2
не в сети
Круто=))
Вот только один маленький вопрос...
После компиляции проекта для Микроконтроллера в BASCOM *.hex файл имеет размер 10Kb, а в datasheete рамер Flash памяти микрухи atmega8-16Pi всего 8Kb отсюда появляется вопрос, а где взять ещё 2Kb??? или я в чём то ошибаюсь...
Заранее спасибо!!!=)
Отправитель Нити

Ответы Отправитель Отправлено
 USB HID термометр на ATmega8 evildesign 18.06.2010 19:20

 USB HID термометр на ATmega8
Абитуриент
Абитуриент
Дата регистрации: 18.06.2010
Откуда: Москва
Сообщений: 2
не в сети
Спасибо, буду знать :roll:
Отправитель Нити

Ответы Отправитель Отправлено
 USB HID термометр на ATmega8 macarena 21.06.2010 0:50
    USB HID термометр на ATmega8 an 21.06.2010 14:16
    USB HID термометр на ATmega8 proger 21.06.2010 14:22

 USB HID термометр на ATmega8
Технический Директор
Технический Директор
Дата регистрации: 24.06.2011
Откуда: Мухосранск
Сообщений: 2677
не в сети
На выходе чего?
Отправитель Нити

Разное

Интересно

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

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