Разделы

В сети

Пользователей: 167
Из них просматривают:
Аналоги: 56. Даташиты: 53. Инструкции: 1. Новости: 19. Остальное: 2. Программы: 3. Производители: 1. Теги: 1. Форум: 31.
Участников: 2
Гостей: 165

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

Партнёры


Партнёры

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

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

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

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

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

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

его мегаомность сравнима с током утечки защитных и коммутационных цепей на выводе межки
он ничего не делает
 USB HID термометр на ATmega8
Модератор
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3913
не в сети
ну не очень она и сравнима, но номинал должен быть в 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
Откуда: Тирасполь
Сообщений: 3913
не в сети
*.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
не в сети
На выходе чего?

Разное

Интересно

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

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