Многоканальный USB-Термометр (Обновленно)

Когда то давно я написал статью о том, как сделать USB Термометр и разместил ее на двух сайтах. Девайс очень простой, но спустя пару дней, на мой имейл повалилось огромное количество сообщений с разнообразными вопросами и предложениями. С момента написания прошло уже около 2 лет, а мне все еще как минимум, раз в неделю приходит подобное письмо, но я уже давно перестал на них отвечать, так как вопросы порой слишком примитивны. Но вот примерно 70% народа интересуются двумя вопросами: можно ли подключить второй датчик и можно ли сделать в термометре функцию термостата. Сейчас у меня появилось немного свободного времени и я решил создать термометр с этими функциями.

Добавлено 31.10.2011: В устройство добавил новые полезные функции, подробности ЗДЕСЬ.

Характеристики такие:

  • Максимальное количество датчиков - 32, один датчик установлен прямо на устройстве, все остальные подключаются к отдельному разъему.

  • Пределы измерения от -55С до +125°C, точность при 85°C и ниже не менее 0,5°C.

  • 2 канала управления внешними нагрузками. Возможно ручное и автоматическое (для термостата) управление.

  • Работа на операционных системах Windows 2000 и выше (включая Vista и 7).

  • Сохранение настроек программы в реестре.

  • Возможность задавать отображаемое имя датчика.

  • Мини-окно с возможностью установки размера и отображения поверх всех окон. NEW!

  • Отображение программы в трее. NEW!

  • Запуск программы вместе с Windows. NEW!

  • Перепрошивка через USB без использования внешнего программатора.



В качестве датчиков - DS18B20 - это трехвыводные (или 8 если в SO). Подключаются параллельно. Микроконтроллер - ATmega8, работающий на частоте 16МГц.

Схема:

Обычно, DS18B20, как и остальные однопроводные устройства, подключается к одной ножке МК, которая является как входом, так и выходом, но тут есть явные недостатки - ток ножки МК очень маленький, поэтому много датчиков на него навешать не получиться, поэтому, для большей надежности, ножку МК подключают через транзистор. Но есть еще одна проблема: интерфейс 1-wire требует очень точных задержек, а у нас параллельно работает софтовый USB, для которого задержки должны быть не менее точными. В  инете видел схемы где комп давал МК команду Измерить температуру, ждал некоторое время, пока 1-wire освободится, и потом запрашивал данные. Это вариант глючный и тормознутый. К счастью, эмулировать работу 1-wire можно с помощью UARTa, что я и сделал. На схеме ножка TXD подключена к транзисторам, выход с которых подключен к шине 1-wire (OW_DQ), вместо транзисторов можно просто соединить TXD и OW_DQ через резистор 2-3кОм.

Перемычка BOOTLOADER активирует встроенный загрузчик, чтобы для перепрошивки не нужен был программатор. Светодиод USB_RQ мигает, когда МК отвичает на запросы с компа.

Распиновка 5 контактного разъема:



  1. GND.

  2. Канал 1

  3. Канал 2

  4. 1-Wire. Сюда подключаем сигнальную линию DS18B20.

  5. +5V.



Печатная плата:


Готовое устройство:

Теперь нам нужно написать прошивку для микроконтроллера и компа.

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


Очень советую прочитать статью Управление электрическими цепями через USB, только в этом устройстве уже нужны будут драйверы. Большинство всех процессов я сделал в отдельных функциях, чтобы код был более наглядным.

Содержимое функции main, до бесконечного цикла:
DDRB = 0b00000110; PORTB = 0b00111000;
DDRC = 0b00000001; PORTC = 0b11111110;
DDRD = 0b00000010; PORTD = 0b11100010;

TCCR0 = (1<<CS02) | (1<<CS00); // prescaler = 1024
TCNT0 = 0;

usbInit();
usbDeviceDisconnect();
timerDelayMs(250);
usbDeviceConnect();

sei();

nSensors = search_sensors(); // ищем датчики

wdt_enable(WDTO_2S);

Все задержки я делаю на таймере, так можно немного повысить эффективность так как во время задержки выполняется какой то код. Функция search_sensors() выполняет поиск датчиков, их адреса записывает в массивы, возвращает количество датчиков.

Бесконечный цикл:
while(1)
{
RunTasks(0xFF);

DS18x20_StartMeasure(); // запускаем преобразование на всех датчиках

timerDelayMs(800); // ждем минимум 750 мс.

cbi(LED_PORT, LED_USB); // тушим USB светодиод

for(unsigned char i=0; i<nSensors; i++) { // считаваем результаты с каждого датчика
RunTasks(0xFF);
DS18x20_ReadData(gSensorIDs[i], gSensorData[i]);
}

}

DS18x20_StartMeasure() запускает преобразование на всех датчиках, после запуска нужно подождать минимум 750 мс(пока измеряется температура), и только потом считывать данные.

Теперь разберем, как микроконтроллер обрабатывает запросы с компа. С ПК мы можем передать микроконтроллеру 3 параметр  (bRequestwIndex и wValue), а также, буфер с данными.  После запроса вызывается вот эта функция:
usbMsgLen_t usbFunctionSetup(uchar data[8])
{
usbRequest_t *rq = (void *)data;
static uchar dataBuffer[4];

unsigned char wIndex = rq->wIndex.bytes[0];
unsigned char wValue = rq->wValue.bytes[0];

switch(rq->bRequest)
{
case USBRQ_HID_SET_REPORT:
//wIndex - номер канала (1 или 2), wValue - новое состояние (0 или 1)
if (wValue) sbi(PORTB, wIndex);
else cbi(PORTB, wIndex);
return 0;

case USBRQ_HID_GET_REPORT:
switch(wIndex)
{
case USB_GET_nSensors: usbMsgPtr = &nSensors; return 1;
case USB_GET_gSensorIDs: usbMsgPtr = gSensorIDs[0]; return (nSensors*8);
case USB_GET_gSensorData: usbMsgPtr = gSensorData[0]; return (nSensors*2);
case USB_GET_Chanels: usbMsgPtr = &channels_port; return 1;
}

return 0;
}

Чтобы изменить состояние канала, нужно передать с ПК в качестве параметра bRequest = USBRQ_HID_SET_REPORT, wIndex = номер канала (1 или 2), wValue = значение (0 или 1).

А чтобы запросить какие то данные, нужно в качестве параметра bRequest  передать USBRQ_HID_SET_REPORT, wIndex = название того, что мы хотим получить (гляньте на код, та все понятно). В программе микроконтроллера нужно установить указатель usbMsgPtr на начало буффера, который нужно передать, и вернуть (return) размер буффера.

Чтобы не приходилось постоянно мучаться с внешним программатором, загрузим в Атмегу8 бутлоадер. Подключите микроконтроллер к программатору, установите фьюзы как на скрине:

В прикрепленном архиве, в папке MCU, лежит файл bootloader.hex, залейте его в МК. Установите на устройстве перемычку BOOTLOADER и подключите к ПК, если комп нашел новое HID устройство, то бутлоадер прошит успешно, внешний программатор больше не нужен. В папке MCU\default\ запустите boot.bat чтобы прошить микроконтроллер прошивкой USB Термометра, после успешной прошивки уберите перемычку. Комп найдет новое устройство, когда запросит драйверы, укажите папку Soft\windows-driver\, после успешной установки в диспетчере появится новое устройство.

Софт для ПК.


Я не буду подробно описывать, как работает программа, хотя бы потому что код небольшой и с комментариями. Я расскажу как запрашивать данные с МК и как работать с программой.

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

Для любого запроса, нужно воспользоваться функцией usb_control_msg
usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE |USB_ENDPOINT_IN,
тип_запроса, wValue, wIndex, буффер, длина буффера, 5000)


  • тип_запроса - USBRQ_HID_GET_REPORT или USBRQ_HID_SET_REPORT.

  • буффер - массив, в который будут записаные данные при запросе.

  • wValue, wIndex и длина буффера думаю объяснять не надо))))


Функция возвращает размер буффера, переданного с МК (то, что возвращает функция usbFunctionSetup).

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

В результате недолгих мучений, я написал програмку, которую назвал USB Thermometer.

При запуске программа запрашивает количество термодатчиков и их адреса, затем, каждые 500мс запрашивает температуру и состояние каналов. если прокрутить табличку вправо, то можно увидеть максимальную и минимальную температуру для каждого датчика с момента запуска программы, а также дату и время, когда они зафиксированны. 

Для наглядности, каждому датчику можно назначить имя, для этого, кликните по колонке "Название", напротив нужного датчика, выскочит вот такое окошко:Введите сюда новое название и нажмите ОК.

Название поменяется, а настройки сохранятся в реестре, при следующем запуске название останется такое же. Название назначается не по номеру, а по адресу.

Теперь разберемся с управлением каналами.

Если индикатор красного света, то канал выключен, зеленого - включен. Управлять ими можно вручную или автоматически. Выберите метод управления "Вручную" и нажмите "Изменить" - индикатор засветится зеленым цветом.Теперь выберите метод управления "Автоматически":

Установите номер датчика, с которым будет сравниваться температура. Далее установите граничную температуру(только целые значения, без запятой) и условие управления, их всего 4:


  1. Включать выше граничной температуры.

  2. Включать ниже граничной температуры.

  3. Включать когда температура равна граничной.

  4. Включать когда температура не равна граничной.


Нажмите кнопку "Установить", настройки сохранятся в реестре.

Если, к примеру, вы выбрали первый датчик, граничная температура 30 и условие "Включать выше граничной температуры", то канал будет включаться когда температура на первом датчике будет выше 30 , после понижения опять отключиться.

Как это может пригодиться в реальной жизни? к примеру, есть у вас обогреватель без термостата. Подключите канал к обогревателю (естественно не на прямую, а через реле например) разместите термодатчик где то рядом с обогревателем. Установите граничную температуру 25, условие "Включать ниже граничной температуры" нажмите кнопку "Установить". Теперь обогреватель будет включаться, когда температура упадет ниже 25 градусов и выключаться, когда достигнет 25.

Оба каналы работают независимо.

Дополнение в новой версии.


При запуске программа сразу сворачивается в трей:

Нажмите по значку чтобы открылось главное окно. При сворачивании программа сворачивается в трей.

Теперь температура может отображаться постоянно у вас на мониторе в виде небольшого прозрачного окошка. Нажмите на кнопку "Мини-окно", вот что вы увидите:

Это небольшое окошко, которое можно разместить на мониторе в любом месте, просто перетянув его мышкой. Сверху отображается название выбранного датчика, посередине - текущая температура, снизу слева - минимальная, справа - максимальная. Чтобы изменить отображаемый датчик, покрутите колесико мыши вверх или вниз (следующий/предыдущий). Размер окна можно изменять. Нажмите "Настройки":

При минимальном размере, окно будет вот таким:

При максимальном:

Даже бабушка увидит)))).

Также, окно можно сделать поверх всех окон (соответствующая опция).

Если окно где то потерялось (например, было на втором мониторе и вы этот монитор отключили), нажмите кнопку "Установить первоначальное положение" - мини-окно появится в левом верхнем углу монитора.

Еще в программу добавил Запуск вместе в Windows.

Кстати, в мини окно, для наглядности применен шрифт terminator_cyr_v4, он находится в архиве с программой.

Приобрести готовое устройство можно здесь.


Скачать файлы статьи (1,62 Mb).


Комментарии

  1. Ты на писал что один датчик есть прямо на устройстве! Но я его не вижу.

    ОтветитьУдалить
  2. Посмотри на фото готового устройства. Там сверху почти в правом углу стоит трехногий DS18B20 (возле кондера).

    ОтветитьУдалить
  3. а почему ни на печатной плате, ни на готовом устройстве нету ни резистора, ни диода, ни транзистора? ведь на схеме их достаточно

    ОтветитьУдалить
  4. Они все в SMD корпусах, которые размещены внизу платы. На скрине печатной платы это хорошо заметно.

    ОтветитьУдалить
  5. а фьюзы нужны именно для бутлоадера? а если прошивать не через бутлоадер, то будет работать? нужны ли в таком случае фьюзы? и через какую вообще программу фьюзы ставить?

    ОтветитьУдалить
  6. Без бутладера будет работать, но фьюзы всеравно надо ставить (кроме BOOTEN). Фьюзы ставьте через ту же программу, через которую прошиваете МК

    ОтветитьУдалить
  7. как быть владельцам win7 64 bit ??? все собрал. дрова не ставятся (((

    ОтветитьУдалить
  8. К сожалению, драйвер работает только под 32-битными системами, возможно, вскоре сделаю и под 64, но пока что у меня времени нет.

    ОтветитьУдалить
  9. под Х64 запустилось и работает, правда только первая версия программы

    ОтветитьУдалить
  10. Вторая версия программы и не должна работать с этой прошивкой

    ОтветитьУдалить
  11. какова точность покзаний?? с простым термометром на 2-3 разница. причем больше показывает в компутере ))

    ОтветитьУдалить
  12. от чего вернее точность зависит? от какого компонента в устройстве, помимо датчика

    ОтветитьУдалить
  13. Если у Вас DS18B20, то у него точность, заявлена производителем в пределах -10...+85 будет 0,5С. Я вот сейчас поставил на улице ртутный термометр и DS18b20, там расхождения почти 1С, но где больше я хз так как у ртутного панель с делениями шатается.

    ОтветитьУдалить
  14. Прошивка второй версии стала общедоступной!

    ОтветитьУдалить
  15. а можно ли вместо софтового обмена по usb поставить какую-нибудь микросхемку-преобразователь?

    ОтветитьУдалить
  16. А зачем? этот способ более надежный чем всякие UART-USB преобразователи

    ОтветитьУдалить
  17. мне все-таки хотелось бы аппаратно чтоб не зависеть от драйверов
    я так понял раз uart тут занят, преобразователь никак уже не поставить?
    или можно модифицировать это дело для мк с аппаратным usb?

    ОтветитьУдалить
  18. Переделать конечно можно. Можно просто переписать программу, чтобы обмен был через HID, ему драйвера не нужны

    ОтветитьУдалить
  19. было бы замечательно еслиб на HID сделали, очень нужно

    ОтветитьУдалить
  20. напишите мне на имейл

    ОтветитьУдалить
  21. помогите разобраться с прогой для компа, не пойму как дробная часть переводится
    в Themperature.cpp:
    //Store decimal digits
    decimal = TL & 0xF; - это понятно, старший байт обнуляется и остается только дробная часть (4 младших бита), а что дальше происходит не совсем понимаю
    decimal *= 5;

    if (decimal<100) Temperature = digit + ((double)decimal/100);
    else Temperature = digit + ((double)decimal/1000);
    может кто пояснить?

    ОтветитьУдалить
  22. для чего умножается на 5 и потом делится на 100 или 1000?

    ОтветитьУдалить
  23. DS18B20 возвращает 2 байта со значением температуры, их надо перевести в понятный вид. О том, как это сделать, написано в DataSheet на странице 5.

    ОтветитьУдалить
  24. это то я понял насчет формата итд
    проблема в том что почему то показания всегда на 0,1 меньше получаются
    проверял в протеусе на исходниках из соседней темы про 1-wire, по-моему что-то не так именно в этом умножении на 5 - не понимаю для чего оно

    ОтветитьУдалить
  25. если честно, я сам не помню для чего оно:) Я года три назад с какого то примера взял функцию для перевода в температуру и досихпор ею пользуюсь.

    ОтветитьУдалить
  26. Приветствую. Можно версию usb термометра под hid устройство. Я так понимаю будет только другая прошивка? Собрал устройство с подключением по версии 2 (4.7к на ноги 2 и 3 мк), остальные не захотели работать. Тоже самое и с прошивками. Устройство определяется, программа работает только на включение\выключение каналов. Самих датчиков не видно. Почему так может быть?

    ОтветитьУдалить
  27. Для HID еще не делал. Если делаете без усилительного каскада, соединив резистором 2 и 3 ногу, то лучше поставьте резистор 2,2К. В этом случае, средняя нога датчиков должна подключаться к 2 ноге МК.
    Если все работает нормально, но датчиков не видно, то у Вас явно 1-wire не коректно работает.

    ОтветитьУдалить
  28. Ок. У меня резюк на 4.7к соединяет ноги мк (видел в других схемах 4.7к на +5). Попробую на 2.2к. Буду ждать версию HID (хочу софт под delphi сделать). Спасибо!

    ОтветитьУдалить
  29. Да кстати светодиод при опросах еле горит а не мигает в обоих версиях прошивки почему то...

    ОтветитьУдалить
  30. сделайте уже лучше на двух транзисторах, если 2N7002 нет, то поставьте BC547, только на базу каждого по 10ком.

    ОтветитьУдалить
  31. BC337 пойдёт? (остальных нет в наличии)

    ОтветитьУдалить
  32. думаю, да. Подключать вот так http://www.gaw.ru/im/_app/Atmel/avr318/5.gif

    ОтветитьУдалить
  33. А как быть со светодиодом при опросе датчиков?

    ОтветитьУдалить
  34. может вы его куда то не туда прицепили? он полюбом должен мигать. Если светодиод рабочий, то может у вас ножка МК выгорела.

    ОтветитьУдалить
  35. 23мк-резистор-диод-земля

    ОтветитьУдалить
  36. А другой мк пробовали?

    ОтветитьУдалить
  37. эта схема у меня не заработала.

    ОтветитьУдалить
  38. все ОК!(был бракованный транзюк).

    ОтветитьУдалить
  39. Собрал устройство с подключением по версии 2. Устройство определяется, программа работает только на включение\выключение каналов. Самих датчиков не видно. Светодиод горит постоянно. В чем может быть причина?

    ОтветитьУдалить
  40. Если убрать DS18B20 светодиод начинает мигать.

    ОтветитьУдалить
  41. Зачетный проект, почти как мастеркитовский MP707, но есть небольшие недоработки в логике термостата, видно человек не сталкивался с системами регулирования.
    Если есть возможность обязательно добавьте гистерезис для управления температурой.
    Ваша схема будет работать хорошо при большой инерционности процесса регулирования, как например водяной многолитровый бойлер или электробогреватель помещения.
    Но если процесс быстрый, то нужна обязательно настройка предела включения температуры и выключения. Попробуйте этим устройством управлять холодильником, он будет включаться и выключаться каждую минуту, что приведет к сгоранию компрессора, штатный механический термостат холодильника имеет разницу (гистерезис)между включением и выключением до 5-7 градусов.
    Для примера подсмотрите как это реализовано в том же мастеркитовском MP707.
    http://s2.ipicture.ru/uploads/20120509/B4wA3U35.jpg

    ОтветитьУдалить
  42. Наверное, стоило разобраться, прежде, чем копировать что-то, откуда-то ;-)
    Дробная часть переводится не верно, убедится в этом очень просто - запустите программу и медленно нагрейте или остудите датчик на 1-2 градуса. Температура будет изменяться с шагом 0.05, однако при достижения значения, допустим 22.75 следующим значением будет уже 23.00 (при повышении температуры), при понижении же, после 23.00 будет следовать 22.75.

    Шаг показаний температуры DS18B20 в 12-битном режиме (по-умолчанию) составляет 0.0625, а не 0.05, отсюда и расхождение. Так же, некорректно дробная часть будет отображаться и при отрицательных значениях температуры. Проще говоря, алгоритм примененный в прошивке микроконтроллера к датчику DS18B20 не подходит.

    На мой взгляд в преобразовании значения температуры с помощью контроллера (в функции therm_read_temperature) нет никакого смысла. Такое преобразование имело бы смысл при наличии у устройства индикатора, однако в данном устройстве индикатор не предусмотрен, и преобразование вполне может выполнить программа на компьютере.

    Тем не менее автору спасибо за его труды!

    ОтветитьУдалить
  43. Здравствуйте, Кибермастер. Мы хотим подключить устройство к дисплею, а напряжение подавать с блока питания (самодельного), на какую силу тока необходимо расчитать этот блок? И обязательно ли нужен стабилизатор напряжения на нём(без него вроде греться не будет)?

    ОтветитьУдалить
  44. максимум 0,5А.
    стабилизатор не нужен, если напряжение блока питания 4,5-5,5В, если лучше, то поставьте стабилизатора. Чтобы не грелся, используйте импульсный, вместо линейного

    ОтветитьУдалить
  45. А сильно нужно изменить схему, чтоб прошивать через ISP, без бутлоадера, и при этом весь функционал сохранился? Достаточно ли просто выкинуть ту часть, где 5-контактный разъём и перемычка, и к лапам MOSI, MISO, SCK, RESET, GND, Vcc подключить ISP?

    ОтветитьУдалить
  46. изменять ничего не надо, просто подключите программатор к этим лапам и прошивайте, перемычка мешать не будет

    ОтветитьУдалить
  47. Здравствуй! Хочу спросить, а какой ток и напряжение должны быть на DQ выводе термодатчика? И на какую мощность должен быть резистор 4.7КОм?

    ОтветитьУдалить
  48. напряжение наверно вольта 4, ток не знаю, не считал. Резистора в корпусе 1206 хватит

    ОтветитьУдалить
  49. А с чем может быть связано, что нпряжение на DQ всего 0,14 Вольт?

    ОтветитьУдалить
  50. напряжение можно увидеть только осциллографом, это же линия данных

    ОтветитьУдалить
  51. Мультиметром никак не проверить?

    ОтветитьУдалить
  52. отсоедини провод от третей ноги атмеги, потом подсоедини к +5, на DQ должно быть 4-5 вольт, потом подсоедини к земле, на DQ должно быть 0. А может наоборот, не помню точно. Если напряжение вообще не меняется(или меняется не значительно), то проблема где то в транзюках.
    PS: убежал, вернусь часа через 2

    ОтветитьУдалить
  53. скажите пожалуйста как подключать дополнительные датчики.

    ОтветитьУдалить
  54. Через штыревые соединители параллельно датчику, устновленному на плате

    ОтветитьУдалить
  55. извяните за глупые вопросы, но я совсем новичек в этом. каким образом возможно подключить 32 датчика к этому разьёму?

    ОтветитьУдалить
  56. скажите пажалуйста в какой версии c++ builder вы делали программу, пробовал в XE вылазием моря ошибок.

    ОтветитьУдалить
  57. Через штыревые соединители, параллельно датчику, установленному на плате

    ОтветитьУдалить
  58. извените за настойчивость, судя по схеме 6 штырьков 1 из них земля. для подключения дополнительного датчика достаточно подключить к одному из 5 dq(date) а другие 2 ножки датчика к земле. всё верно?

    ОтветитьУдалить
  59. Над картинкой же написано:
    GND.
    Канал 1
    Канал 2
    1-Wire. Сюда подключаем сигнальную линию DS18B20.
    +5V.
    Штырей там 5 а не 6.
    Пишите через Reply, иначе Ваши комменты буду удалять

    ОтветитьУдалить
  60. да действительно перепутал версии устройства. все что я писал выше относилось к Многоканальный USB-термометр (Продвинутая версия).

    ОтветитьУдалить
  61. на продвинутой датчик и контактные выходы подключается к клемникам (там, где в этой версии штыри), а на штырях размещены контактные входы

    ОтветитьУдалить
  62. Здравствуйте, я уже и не знаю что делать. Проверял все. Но все равно вылазит неопознаное усб устройство. Я уже просто на прямую контролер цеплял без навески, все равно ничего не работает. Грешу на программатор, usbasp программировал через sinaprog, прошиваю с начала основную программу потом фьюзи, вроде все ок, но потом ничего не работает. Забыл написать что светодиод вообще не светиться, даже не мигает. В чем может быть проблема?

    ОтветитьУдалить
  63. прошивать надо бутлоадер и фьюзы. Покажите скрин фьюзов

    ОтветитьУдалить
  64. Собрал , работает на ура,запустился сразу,все красиво. Доволен. Недостатки есть, постоянно на граничной температуре щелкают релюшки в режиме термостата,(программный баг)Без компа не работает ,(комп пинает контролер)те нет автомата как у MP707. Автору спасибо большое!Недостатки будем допиливать самостоятельно.

    ОтветитьУдалить
  65. Добрый день, Собрал схему все работает хорошо, а подскажите пожалуйста на Delphi реально написать софт для этого устройства?

    ОтветитьУдалить
  66. Помогите пожалуйста, если писалась данная программа на Delphi или подскажите в какую сторону копать, с HID устройством было бы все понятно, но тут увы, я как то затрудняюсь((, Спасибо

    ОтветитьУдалить
  67. наберите в гугле "delphi hid" и посмотрите 3-5 первых ссылок

    ОтветитьУдалить
  68. Дело в том, что это не HID устройство, поэтому я и не могу разобраться как считать данные, и как опросить датчик! уже неделю бьюсь над этой темой )))

    ОтветитьУдалить
  69. http://www.delphisources.ru/forum/showthread.php?t=13350

    ОтветитьУдалить
  70. Видел я этот код, много кто еще задавался таким же вопросом! ответов не нашел ) Думаю просто надо перейти на USB HID термометр )) спасибо за терпение...

    ОтветитьУдалить
  71. Добрый день. Подскажите пожалуйста, запустил проект в borland builder 2010, и при компиляции выдает сообщение:

    [BCC32 Error] main.cpp(84): E2316 'SpinEdit_sensorNumber' is not a member of 'TForm_main'
    [BCC32 Error] main.cpp(343): E2451 Undefined symbol 'SpinEdit_sensorNumber'
    [BCC32 Error] main.cpp(366): E2451 Undefined symbol 'SpinEdit_sensorNumber'

    Как можно решить данную проблему. Заранее благодарен

    ОтветитьУдалить
  72. получается, что среда разработки не та. Используйте C++ builder 2010

    ОтветитьУдалить
  73. C++Builder 2010 это название программы скопированное с ярлыка.

    Embarcadero® C++Builder® 2010 Version 14.0.3513.24210
    Copyright © Embarcadero Technologies, Inc. All Rights Reserved

    Это копия из окна About.

    ОтветитьУдалить
  74. а как вы проект открываете?

    ОтветитьУдалить
  75. Решил проблему, в проекте не хватало компонента.

    ОтветитьУдалить
  76. в мейк файле желательно включить оптимизацию по коду
    CFLAGS += -Wall -gdwarf-2 -std=gnu99 -DF_CPU=12000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
    иначе при использовании временных задержек не хватает памяти. столкнулся при переделке схемы без использования аппаратного UART

    ОтветитьУдалить
  77. P.S.
    -DF_CPU=16000000UL - должно быть так. но при замене кварца на 12МГц схема тоже корректно работает

    ОтветитьУдалить
  78. вопрос к автору. без подключения к компьютеру схема будет работать в режиме термостата? или условия срабатывания термостата прописаны в программе для ПК

    ОтветитьУдалить
  79. http://www.sense-life.com/hands/termometr_na_komp.php
    http://habrahabr.ru/post/55780/
    http://meandr.org/archives/4022
    http://cxem.net/house/1-304.php

    ОтветитьУдалить
  80. без компа термостат не работает.

    ОтветитьУдалить
  81. при одном подключенном датчике устройство работает нормально. а вот если подключить два датчика, то адреса датчиков определяются не правильно. а если подключить три датчика то изменяются адреса и первых двух датчиков.
    в чем может быть проблема?

    P.S.
    датчики подключены к плате без длинных проводов
    схема включения не использует USART для эмуляции 1-wire

    ОтветитьУдалить
  82. Потому что там тупо при подключении происходит поиск термодатчиков, если подключить новые, список меняется в зависимости от ID датчиков.

    ОтветитьУдалить
  83. это понятно. но при подключении новых датчиков адреса старых искажаются. вот в чем проблема.
    а если адрес считан не правильно, то при обращении к этому датчику контроллер не сможет получить данные температуры

    ОтветитьУдалить
  84. А почему эт он может адрес считать не правильно?

    ОтветитьУдалить
  85. не знаю. датчики распаяны на плате рядом. без дополнительных проводов.
    кстати у меня кварц на 12МГц но в конфигах вроди все переправил да и USB-шная часть программы работает исключительно. по каким причинам Вы отказались от кварца на 12МГц?

    ОтветитьУдалить
  86. у меня 16 самые ходовые))) Чтобы не путать, вобщем.

    ОтветитьУдалить
  87. так где ж собака зарыта? а схему без транзисторов Вы проверяли на 20 метрах в реальных условиях или только в протеусе?

    ОтветитьУдалить
  88. да, и даже больше. На нескольких промышленных котлах работает даже при сильных наводках

    ОтветитьУдалить
  89. здравствуйте. подскажите пожалуйста, мне нужно немного модернизировать эту схему, термометр должен иметь возможность самокалибровки, как это возможно осуществить?.

    ОтветитьУдалить
  90. DS18B20 калибровать смысла нет. Если хотите большую точность, нужно ставить платиновый.

    ОтветитьУдалить
  91. можете пожалуйста обьяснить. я не понял куда или что подключается в 5-и контактный разьем. зачем там 1 и 2 каналы? заранее спасибо

    ОтветитьУдалить
  92. C помощью них можно управлять двумя нагрузками. К примеру, можете подключить к ним реле (через транзистор) и управлять светом.

    ОтветитьУдалить
  93. еще один вопрос. сброс микроконтролера подключен к питанию через резистор, он ведь будет вечно скидывать?

    ОтветитьУдалить
  94. Добрый день! Будет ли работать в режиме автоматического управления каналами без компа, если запитаь лишь?

    ОтветитьУдалить
  95. Добрый день! Не будет.

    ОтветитьУдалить
  96. Добрый день! А прошивка с гистерезисом есть?

    ОтветитьУдалить
  97. USB-Термометр, просьба к автору, необходимо второе мини-окно для датчика, можно организовать? Заранее спасибо, Ispolnitel_Group@mail.ru

    ОтветитьУдалить
  98. может нужны вложения?

    ОтветитьУдалить
  99. за отдельную плату, конечно, могу сделать, но стоить будет 50-100$

    ОтветитьУдалить
  100. Спасибо за ответ.Мой бюджет 20$

    ОтветитьУдалить
  101. Добрый ден!
    Собрал плату, контроллер прошил по инструкции, драйвер установил. Датчик не определяется. Монтаж проверил.
    что делать дальше, чтобы термометр заработал. Индикатор светит постоянно. Ручноц авто режим переключаются.

    ОтветитьУдалить
  102. Может сам датчик не работает?

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Прием команд с пульта дистанционного управления

STM32F4. Обновление прошивки с карты памяти (Bootloader SD)

Работа с шиной 1-wire. Подключение термодатчика DS18B20 к AVR