Многоканално USB-Термометър (актуализирано) - kibermaster

Имало едно време написах статия за това как да се направи USB термометър и да го поставя на две места. Устройството е много проста, но след няколко дни, огромен брой мнения падна на моя имейл с най-различни въпроси и предложения. От момента на писане, това е било около 2 години, а аз все още има най-малко веднъж седмично дума за подобно писмо, но отдавна съм престанал да отговори на тях, тъй като въпросите са твърде примитивни времена. Но това е около 70% от хората се интересуват от два въпроса: Възможно ли е да се свърже втори сензор, както и дали е възможно да се направи във функцията термометър термостат. Сега имах малко свободно време и реших да създам термометър с тези функции.

В сензори - DS18B20 - е три-терминал (или 8, ако SO). Са свързани паралелно. Микроконтролера - ATmega8. работещ на 16MHz честота.

Обикновено, DS18B20, както и друг един цокъл устройството е свързано с единия крак на Комитета за наблюдение, която е едновременно входа и на изхода, но има очевидни недостатъци - краката MK ток е много малък, така че много от сензори на това не увисна се случи, така че за по- надеждност, MK крак е свързан чрез един транзистор. Но има и друг проблем: 1-тел интерфейс изисква много точни закъснения, и ние трябва да работим паралелно с мек USB, при което закъснението не трябва да бъде по-малко от точна. Интернет е виждал веригата, където компютърът даде екипа MC за измерване на температурата, аз чаках за известно време, докато 1-тел е освободен, а след това исканите данни. Тази версия е бъги и спирачките. За щастие, подражава операцията на 1-тел е възможно чрез UARTa, което и направих. В схема TXD крак свързан транзистори, изходът от които е свързан към шина 1-жица (OW_DQ). вместо транзистори могат просто да се свърже TXD и OW_DQ през резистор 2-3kOm.

Буутлоудъра скачач активира вградената буутлоудъра фърмуерно не е била необходима на програмиста. USB_RQ светодиод мига, когато MK otvichaet на искания от компютър.

Съединителят за щифт 5:

  1. GND.
  2. канал 1
  3. канал 2
  4. 1-жица. Тук ние се свърже сигнална линия DS18B20.
  5. +5V.

Многоканално USB-Термометър (актуализирано) - kibermaster

Сега ние трябва да напишете фърмуер за микроконтролер и компютъра.

Микроконтролер.

Съветвам ви да прочетете статията за електрическо управление чрез USB. Само в това устройство вече ще трябва водачи. Повечето от всички процеси, които съм направил в отделните функции, кодът да бъде по-видима.

Съдържанието на основната функция. до безкраен цикъл:

DDRB = 0b00000110; PORTB = 0b00111000; DDRC = 0b00000001; PORTC = 0b11111110; DDRD = 0b00000010; PORTD = 0b11100010; TCCR0 = (1<

DS18x20_StartMeasure () започва трансформация на всички сензори, след като се започне да се изчака най-малко 750 милисекунди (докато температурата се измерва) и след това четене на данни.

Сега помислете как микроконтролера дръжки искания от компютър. На компютъра ние може да премине параметър микроконтролер 3 (bRequest. Windex и wValue), както и буфер за данни. След искането се извиква тук е функцията:

За да промените състоянието на канала, за да се предава на компютър, като параметър bRequest = USBRQ_HID_SET_REPORT. Windex = номера на канала (1 или 2), wValue = стойност (0 или 1).

Искането да има данни, трябва да подадете параметър bRequest USBRQ_HID_SET_REPORT, Уиндекс = име за това, което искате да получите (погледнете в кода, че всичко е ясно). Програмата за микроконтролер, за да инсталирате usbMsgPtr указател към началото на буфера трябва да бъде предадена, и да се върне (връщане) на буфера.

За да не се налага постоянно да страдат с външен програмист, за да заредите буутлоудъра Atmegu8. Свържете микроконтролер за програмист, задайте Fyuz подобно на изображението по-долу:

Многоканално USB-Термометър (актуализирано) - kibermaster

В прикачения файл, папка MCU. е bootloader.hex файл. го напълни с МС. Инсталирайте джъмпер буутлоудъра на устройството и се свържете с компютър, ако компютърът е намерил нов HID устройство. буутлоудъра светна успешно, вече не е необходим външен програмист. В MCU папка \ подразбиране \ boot.bat започва да мига микроконтролер фърмуер USB термометър, премахване на скок след успешна фърмуера. PC ще открие ново устройство, когато искане на водача, укажете папка Soft \ Windows-шофьор \. След успешна инсталация на новото устройство ще се появи в мениджъра.

Софтуер за PC.

Шофьор на базата на LibUSB-Win32 библиотека. погледнете в кода, можем да разберем как функцията на изключване на устройството, но за сметка на малко по-сложно поискване.

За всяко искане, ще трябва да използвате функцията usb_control_msg

usb_control_msg (дръжка, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, QueryType, wValue, Уиндекс, буфер, дължина буфер, 5000)

  • QueryType - USBRQ_HID_GET_REPORT или USBRQ_HID_SET_REPORT.
  • буфер - масивът да бъде записана информация при поискване.
  • wValue, Уиндекс и продължителност на буфер Мисля, че няма нужда да се обясни))))

Функцията връща размера на буфера изпратено от МС (който се връща функция usbFunctionSetup).

Работа с устройството.

В резултат на това кратко мъчения, аз написах programku, която той нарича USB термометър.

Многоканално USB-Термометър (актуализирано) - kibermaster

За по-голяма яснота, всеки сензор може да има име за това, кликнете върху "името" на колоната до желаното сензора, изскача прозорец като този тук:

Многоканално USB-Термометър (актуализирано) - kibermaster
Попълнете новото име и натиснете OK.
Многоканално USB-Термометър (актуализирано) - kibermaster

Сега нека да се справят с по контролния канал.

Ако индикаторът за червена светлина, каналът е изключен, зелено - е включена. Можете ръчно или автоматично може да ги контролира. Изберете Control "Ръчно" и кликнете "Промяна" - индикаторът ще светне в зелено.

Многоканално USB-Термометър (актуализирано) - kibermaster
Сега изберете метод за управление на "автоматично":
Многоканално USB-Термометър (актуализирано) - kibermaster

Задайте броя на сензора, което ще бъде в сравнение с температурата. След това, поставете точката на изключване (само цели числа, без запетая) и състояние на контрол, има само 4:

  1. Включването на по-висока температура граница.
  2. Включете по-ниска температура граница.
  3. Включи когато температурата е равна на границата.
  4. Включи когато температурата не е равно на границата.

Натиснете бутона "Install", ще се запазят в системния регистър.

Ако, например, сте избрали първия сензор 30 и състояние граница температура "Включително по-висока температурна граница", каналът ще бъде включен, когато първият сензор 30. Температурата ще бъде по-висока след понижаване отново изключете.

Както може да бъде полезен и в реалния живот? Например, имате ли нагревател без термостат. Свържете канала към нагревателя (естествено не пряко, а чрез превключвател например) места, където температурата на сензора за близост до нагревателя. Задайте изключване при 25, състоянието на "Активиране на по-ниска температура граница" кликнете "Install" бутон. Сега, нагревателя ще се включи, когато температурата падне под 25 градуса, а се изключва, когато тя достига 25.

Двата канала работят независимо.

Допълнение към новата версия.

Когато стартирате програмата, веднага сведени до минимум, тава:

Щракнете върху иконата, за да отворите основния прозорец. Когато минимизиране на програмата е сведена до минимум към табла.

Сега, температурата може да се показва за постоянно на монитора си като малък прозрачен прозорец. Кликнете на "Мини екран", това е, което ще видите:

Многоканално USB-Термометър (актуализирано) - kibermaster

Това е един малък прозорец, който можете да поставите монитора на всяко място, просто като го плъзнете с мишката. Топ показва името на избрания сензор, по средата - текущата температура, долу вляво - минимума, вдясно - на максимум. За да промените сензора дисплей, навивам на колелцето на мишката или надолу (следващата / предишната). Размерът на прозореца може да бъде променена. Кликнете върху "Настройки":

Многоканално USB-Термометър (актуализирано) - kibermaster

При минимален размер на прозореца ще бъде като този:

Дори и баба ще видим)))).

Също така, на прозореца може да се направи на върха на други стъкла (тази опция).

Ако прозорецът, където е загубен (например, е на втория монитор и сте изключили монитора), а след това натиснете бутона "Задаване на оригиналната позиция" - се появява на малкия прозорец в горния ляв ъгъл на монитора.

Друга програма добавена Стартиране заедно с Windows.

Между другото, в мини прозореца, шрифта, използван за яснота terminator_cyr_v4. тя е в архива с програмата.

Готови ли сте да си купите устройството тук.

това е нещо, което аз разбирам за формата и т.н.
Проблемът е, че по някаква причина показанията винаги се получават по-малко от 0.1
Проверих в Протей на изходния код от следващата тема за 1-тел, мисля, че нещо не е наред в тази умножен по 5 - Не мога да разбера какво е

За да бъда честен, аз не си спомням какво е :) Имам преди около три години с примера на функцията се да прехвърли на температура и dosihpor го използвате.

Вероятно трябва да разберете, преди да копирате нещо от някъде 😉
Дробна част на превода не е правилна, се уверете, че това е много проста - да стартирате програмата и бавно се загрява или охлажда до 1-2 ° C сензор. Температурата се променя на стъпки от 0.05, обаче, когато стойността на, да кажем 22,75 да чете стойност е вече 23.00 (при по-високи температури) се понижава, след 23.00 22.75 ще последва.

Етап температура DS18B20 четене в 12-битов режим (по подразбиране) е 0.0625 вместо 0.05, следователно несъответствието. Просто неправилно дробна част ще се появи и при отрицателни температури. Казано по-просто, алгоритъмът се прилага в фърмуера на микроконтролера да DS18B20 сензори не са подходящи.

По мое мнение в стойност на температурата на трансформация от контролера (в therm_read_temperature функция) няма смисъл. Такава трансформация би имало смисъл, ако има индикатор на устройството, но това устройство не е предвидено за показателя, както и преобразуването може да се стартира програмата на вашия компютър.

Поздрави. Възможен вариант на термометъра под USB скри устройство. Аз разбирам, ще бъде просто още един фърмуер? Събраните свързани устройства на версия 2 (4.7k на крака 2 и 3 микрона), а останалите не искат да работят. Същото нещо с фърмуера. Устройството се определя, програмата работи само за включване \ деактивиране на канали. самите сензори не са видими. Защо това може да бъде?

За HID все още не е направено. Ако не спечелят етап, като се свържете резистор 2 и 3 крака, най-добре е да се сложи резистор 2,2K. В този случай, средните сензорите краката трябва да бъдат свързани към два крака MC.
Ако всичко работи добре, но сензорът не се вижда, то вие очевидно не са 1-тел korektno работи.

Прибл. I rezyuk в 4.7k свързва микрона крака (наблюдавани при други схеми 4.7k до + 5V). Ще се опитам да 2.2K. Ще те чакам HID версия (софтуер под Delphi искам да правя). Благодарим Ви!

Между другото на изборите LED едва осветена и не мига и в двете версии на фърмуера по някаква причина ...

Добре дошли Kibermaster. Искаме да свържете устройството с дисплея, а напрежението се подава към електрическата мрежа (самостоятелно направени), на която настоящата сила, необходима за изчисляване на блок? И бъдете сигурни, имам нужда от регулатор на напрежението върху него (като няма да се нагрява, без него)?

Максималната 0.5A.
Стабилизатор не е необходимо, ако захранващо напрежение 4,5-5,5V, ако по-добре, сложи стабилизатора. За да не се нагрява, като се използва импулс, вместо линейна

А силна нужда да се промени схемата да шият през ISP, без буутлоудъра, и с цялата функционалност се запазва? Дали е достатъчно просто да се изхвърлят на участъка, където 5-пинов конектор и джъмпер и лапи MOSI, Мишо, SCK, RESET, GND, Vcc свържете ISP?

че не е необходимо да се промени нищо, просто се свържете програмист с тези лапи и шият, скок няма да се намесва

Здравейте! Искам да попитам и какво тока и напрежението трябва да бъде най DQ изход температурен сензор? И колко енергия трябва да бъде резистор 4.7KOm?

вероятно волта напрежение 4, токът не знае, не се смята. Resistor в корпус 1206 достатъчно

Съжалявам за настояването, според схемата 6 пинове 1 от земята си. достатъчно, за да се свърже допълнителен сензор, свързан към един от 5 DQ (датата), а другите две краката на сензора към земята. Добре?

Да наистина объркана версия на устройството. Всичко, което съм написал по-горе се отнася за Multi-канален USB-термометъра (усъвършенствана версия).

напреднал контактен датчик и изходи свързани към клеморед (където в тази версия щифтове) и контактните щифтове са поставени на входовете

Здравейте, аз не знам какво да правя. Сканирайте всички. Но все пак се изкачва непризната USB устройство. Бях само на контролера на линия невеста без благополучно, тя все още не работи. Грехът на програмиста, usbasp програмира sinaprog, ушит от началото на основната програма след Fyuz, всичко изглежда добре, но след това нищо не работи. Забравих да напиша, че индикаторът не свети, дори не мигна. Какво може да е проблема?

че е необходимо да мига буутлоудъра и Fyuz. Fyuz на екрана на дисплея

Добър ден, всички се събраха схема работи добре, и моля да ми кажете за Delphi всъщност пишат софтуер за това устройство?