Многоканальный USB-Термометр (Обновленно)
Когда то давно я написал статью о том, как сделать USB Термометр и разместил ее на двух сайтах. Девайс очень простой, но спустя пару дней, на мой имейл повалилось огромное количество сообщений с разнообразными вопросами и предложениями. С момента написания прошло уже около 2 лет, а мне все еще как минимум, раз в неделю приходит подобное письмо, но я уже давно перестал на них отвечать, так как вопросы порой слишком примитивны. Но вот примерно 70% народа интересуются двумя вопросами: можно ли подключить второй датчик и можно ли сделать в термометре функцию термостата. Сейчас у меня появилось немного свободного времени и я решил создать термометр с этими функциями.
Добавлено 31.10.2011: В устройство добавил новые полезные функции, подробности ЗДЕСЬ.
Характеристики такие:
Очень советую прочитать статью Управление электрическими цепями через USB, только в этом устройстве уже нужны будут драйверы. Большинство всех процессов я сделал в отдельных функциях, чтобы код был более наглядным.
Содержимое функции main, до бесконечного цикла:
Все задержки я делаю на таймере, так можно немного повысить эффективность так как во время задержки выполняется какой то код. Функция search_sensors() выполняет поиск датчиков, их адреса записывает в массивы, возвращает количество датчиков.
Бесконечный цикл:
DS18x20_StartMeasure() запускает преобразование на всех датчиках, после запуска нужно подождать минимум 750 мс(пока измеряется температура), и только потом считывать данные.
Теперь разберем, как микроконтроллер обрабатывает запросы с компа. С ПК мы можем передать микроконтроллеру 3 параметр (bRequest, wIndex и wValue), а также, буфер с данными. После запроса вызывается вот эта функция:
Чтобы изменить состояние канала, нужно передать с ПК в качестве параметра 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
Функция возвращает размер буффера, переданного с МК (то, что возвращает функция usbFunctionSetup).
Работа с устройством.
В результате недолгих мучений, я написал програмку, которую назвал USB Thermometer.
При запуске программа запрашивает количество термодатчиков и их адреса, затем, каждые 500мс запрашивает температуру и состояние каналов. если прокрутить табличку вправо, то можно увидеть максимальную и минимальную температуру для каждого датчика с момента запуска программы, а также дату и время, когда они зафиксированны.
Для наглядности, каждому датчику можно назначить имя, для этого, кликните по колонке "Название", напротив нужного датчика, выскочит вот такое окошко:Введите сюда новое название и нажмите ОК.
Название поменяется, а настройки сохранятся в реестре, при следующем запуске название останется такое же. Название назначается не по номеру, а по адресу.
Теперь разберемся с управлением каналами.
Если индикатор красного света, то канал выключен, зеленого - включен. Управлять ими можно вручную или автоматически. Выберите метод управления "Вручную" и нажмите "Изменить" - индикатор засветится зеленым цветом.Теперь выберите метод управления "Автоматически":
Установите номер датчика, с которым будет сравниваться температура. Далее установите граничную температуру(только целые значения, без запятой) и условие управления, их всего 4:
Нажмите кнопку "Установить", настройки сохранятся в реестре.
Если, к примеру, вы выбрали первый датчик, граничная температура 30 и условие "Включать выше граничной температуры", то канал будет включаться когда температура на первом датчике будет выше 30 , после понижения опять отключиться.
Как это может пригодиться в реальной жизни? к примеру, есть у вас обогреватель без термостата. Подключите канал к обогревателю (естественно не на прямую, а через реле например) разместите термодатчик где то рядом с обогревателем. Установите граничную температуру 25, условие "Включать ниже граничной температуры" нажмите кнопку "Установить". Теперь обогреватель будет включаться, когда температура упадет ниже 25 градусов и выключаться, когда достигнет 25.
Оба каналы работают независимо.
При запуске программа сразу сворачивается в трей:
Нажмите по значку чтобы открылось главное окно. При сворачивании программа сворачивается в трей.
Теперь температура может отображаться постоянно у вас на мониторе в виде небольшого прозрачного окошка. Нажмите на кнопку "Мини-окно", вот что вы увидите:
Это небольшое окошко, которое можно разместить на мониторе в любом месте, просто перетянув его мышкой. Сверху отображается название выбранного датчика, посередине - текущая температура, снизу слева - минимальная, справа - максимальная. Чтобы изменить отображаемый датчик, покрутите колесико мыши вверх или вниз (следующий/предыдущий). Размер окна можно изменять. Нажмите "Настройки":
При минимальном размере, окно будет вот таким:
При максимальном:
Даже бабушка увидит)))).
Также, окно можно сделать поверх всех окон (соответствующая опция).
Если окно где то потерялось (например, было на втором мониторе и вы этот монитор отключили), нажмите кнопку "Установить первоначальное положение" - мини-окно появится в левом верхнем углу монитора.
Еще в программу добавил Запуск вместе в Windows.
Кстати, в мини окно, для наглядности применен шрифт terminator_cyr_v4, он находится в архиве с программой.
Добавлено 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 контактного разъема:
- GND.
- Канал 1
- Канал 2
- 1-Wire. Сюда подключаем сигнальную линию DS18B20.
- +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 параметр (bRequest, wIndex и 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:
- Включать выше граничной температуры.
- Включать ниже граничной температуры.
- Включать когда температура равна граничной.
- Включать когда температура не равна граничной.
Нажмите кнопку "Установить", настройки сохранятся в реестре.
Если, к примеру, вы выбрали первый датчик, граничная температура 30 и условие "Включать выше граничной температуры", то канал будет включаться когда температура на первом датчике будет выше 30 , после понижения опять отключиться.
Как это может пригодиться в реальной жизни? к примеру, есть у вас обогреватель без термостата. Подключите канал к обогревателю (естественно не на прямую, а через реле например) разместите термодатчик где то рядом с обогревателем. Установите граничную температуру 25, условие "Включать ниже граничной температуры" нажмите кнопку "Установить". Теперь обогреватель будет включаться, когда температура упадет ниже 25 градусов и выключаться, когда достигнет 25.
Оба каналы работают независимо.
Дополнение в новой версии.
При запуске программа сразу сворачивается в трей:
Нажмите по значку чтобы открылось главное окно. При сворачивании программа сворачивается в трей.
Теперь температура может отображаться постоянно у вас на мониторе в виде небольшого прозрачного окошка. Нажмите на кнопку "Мини-окно", вот что вы увидите:
Это небольшое окошко, которое можно разместить на мониторе в любом месте, просто перетянув его мышкой. Сверху отображается название выбранного датчика, посередине - текущая температура, снизу слева - минимальная, справа - максимальная. Чтобы изменить отображаемый датчик, покрутите колесико мыши вверх или вниз (следующий/предыдущий). Размер окна можно изменять. Нажмите "Настройки":
При минимальном размере, окно будет вот таким:
При максимальном:
Даже бабушка увидит)))).
Также, окно можно сделать поверх всех окон (соответствующая опция).
Если окно где то потерялось (например, было на втором мониторе и вы этот монитор отключили), нажмите кнопку "Установить первоначальное положение" - мини-окно появится в левом верхнем углу монитора.
Еще в программу добавил Запуск вместе в Windows.
Кстати, в мини окно, для наглядности применен шрифт terminator_cyr_v4, он находится в архиве с программой.
Ты на писал что один датчик есть прямо на устройстве! Но я его не вижу.
ОтветитьУдалитьПосмотри на фото готового устройства. Там сверху почти в правом углу стоит трехногий DS18B20 (возле кондера).
ОтветитьУдалитьа почему ни на печатной плате, ни на готовом устройстве нету ни резистора, ни диода, ни транзистора? ведь на схеме их достаточно
ОтветитьУдалитьОни все в SMD корпусах, которые размещены внизу платы. На скрине печатной платы это хорошо заметно.
ОтветитьУдалитьа фьюзы нужны именно для бутлоадера? а если прошивать не через бутлоадер, то будет работать? нужны ли в таком случае фьюзы? и через какую вообще программу фьюзы ставить?
ОтветитьУдалитьБез бутладера будет работать, но фьюзы всеравно надо ставить (кроме BOOTEN). Фьюзы ставьте через ту же программу, через которую прошиваете МК
ОтветитьУдалитькак быть владельцам win7 64 bit ??? все собрал. дрова не ставятся (((
ОтветитьУдалитьК сожалению, драйвер работает только под 32-битными системами, возможно, вскоре сделаю и под 64, но пока что у меня времени нет.
ОтветитьУдалитьпод Х64 запустилось и работает, правда только первая версия программы
ОтветитьУдалитьВторая версия программы и не должна работать с этой прошивкой
ОтветитьУдалитькакова точность покзаний?? с простым термометром на 2-3 разница. причем больше показывает в компутере ))
ОтветитьУдалитьот чего вернее точность зависит? от какого компонента в устройстве, помимо датчика
ОтветитьУдалитьЕсли у Вас DS18B20, то у него точность, заявлена производителем в пределах -10...+85 будет 0,5С. Я вот сейчас поставил на улице ртутный термометр и DS18b20, там расхождения почти 1С, но где больше я хз так как у ртутного панель с делениями шатается.
ОтветитьУдалитьПрошивка второй версии стала общедоступной!
ОтветитьУдалитьа можно ли вместо софтового обмена по usb поставить какую-нибудь микросхемку-преобразователь?
ОтветитьУдалитьА зачем? этот способ более надежный чем всякие UART-USB преобразователи
ОтветитьУдалитьмне все-таки хотелось бы аппаратно чтоб не зависеть от драйверов
ОтветитьУдалитья так понял раз uart тут занят, преобразователь никак уже не поставить?
или можно модифицировать это дело для мк с аппаратным usb?
Переделать конечно можно. Можно просто переписать программу, чтобы обмен был через HID, ему драйвера не нужны
ОтветитьУдалитьбыло бы замечательно еслиб на HID сделали, очень нужно
ОтветитьУдалитьнапишите мне на имейл
ОтветитьУдалитьпомогите разобраться с прогой для компа, не пойму как дробная часть переводится
ОтветитьУдалитьв 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);
может кто пояснить?
для чего умножается на 5 и потом делится на 100 или 1000?
ОтветитьУдалитьDS18B20 возвращает 2 байта со значением температуры, их надо перевести в понятный вид. О том, как это сделать, написано в DataSheet на странице 5.
ОтветитьУдалитьэто то я понял насчет формата итд
ОтветитьУдалитьпроблема в том что почему то показания всегда на 0,1 меньше получаются
проверял в протеусе на исходниках из соседней темы про 1-wire, по-моему что-то не так именно в этом умножении на 5 - не понимаю для чего оно
если честно, я сам не помню для чего оно:) Я года три назад с какого то примера взял функцию для перевода в температуру и досихпор ею пользуюсь.
ОтветитьУдалитьПриветствую. Можно версию usb термометра под hid устройство. Я так понимаю будет только другая прошивка? Собрал устройство с подключением по версии 2 (4.7к на ноги 2 и 3 мк), остальные не захотели работать. Тоже самое и с прошивками. Устройство определяется, программа работает только на включение\выключение каналов. Самих датчиков не видно. Почему так может быть?
ОтветитьУдалитьДля HID еще не делал. Если делаете без усилительного каскада, соединив резистором 2 и 3 ногу, то лучше поставьте резистор 2,2К. В этом случае, средняя нога датчиков должна подключаться к 2 ноге МК.
ОтветитьУдалитьЕсли все работает нормально, но датчиков не видно, то у Вас явно 1-wire не коректно работает.
Ок. У меня резюк на 4.7к соединяет ноги мк (видел в других схемах 4.7к на +5). Попробую на 2.2к. Буду ждать версию HID (хочу софт под delphi сделать). Спасибо!
ОтветитьУдалитьДа кстати светодиод при опросах еле горит а не мигает в обоих версиях прошивки почему то...
ОтветитьУдалитьсделайте уже лучше на двух транзисторах, если 2N7002 нет, то поставьте BC547, только на базу каждого по 10ком.
ОтветитьУдалитьBC337 пойдёт? (остальных нет в наличии)
ОтветитьУдалитьдумаю, да. Подключать вот так http://www.gaw.ru/im/_app/Atmel/avr318/5.gif
ОтветитьУдалитьА как быть со светодиодом при опросе датчиков?
ОтветитьУдалитьможет вы его куда то не туда прицепили? он полюбом должен мигать. Если светодиод рабочий, то может у вас ножка МК выгорела.
ОтветитьУдалить23мк-резистор-диод-земля
ОтветитьУдалитьА другой мк пробовали?
ОтветитьУдалитьэта схема у меня не заработала.
ОтветитьУдалитьвсе ОК!(был бракованный транзюк).
ОтветитьУдалитьСобрал устройство с подключением по версии 2. Устройство определяется, программа работает только на включение\выключение каналов. Самих датчиков не видно. Светодиод горит постоянно. В чем может быть причина?
ОтветитьУдалитьЕсли убрать DS18B20 светодиод начинает мигать.
ОтветитьУдалитьЗачетный проект, почти как мастеркитовский MP707, но есть небольшие недоработки в логике термостата, видно человек не сталкивался с системами регулирования.
ОтветитьУдалитьЕсли есть возможность обязательно добавьте гистерезис для управления температурой.
Ваша схема будет работать хорошо при большой инерционности процесса регулирования, как например водяной многолитровый бойлер или электробогреватель помещения.
Но если процесс быстрый, то нужна обязательно настройка предела включения температуры и выключения. Попробуйте этим устройством управлять холодильником, он будет включаться и выключаться каждую минуту, что приведет к сгоранию компрессора, штатный механический термостат холодильника имеет разницу (гистерезис)между включением и выключением до 5-7 градусов.
Для примера подсмотрите как это реализовано в том же мастеркитовском MP707.
http://s2.ipicture.ru/uploads/20120509/B4wA3U35.jpg
Наверное, стоило разобраться, прежде, чем копировать что-то, откуда-то ;-)
ОтветитьУдалитьДробная часть переводится не верно, убедится в этом очень просто - запустите программу и медленно нагрейте или остудите датчик на 1-2 градуса. Температура будет изменяться с шагом 0.05, однако при достижения значения, допустим 22.75 следующим значением будет уже 23.00 (при повышении температуры), при понижении же, после 23.00 будет следовать 22.75.
Шаг показаний температуры DS18B20 в 12-битном режиме (по-умолчанию) составляет 0.0625, а не 0.05, отсюда и расхождение. Так же, некорректно дробная часть будет отображаться и при отрицательных значениях температуры. Проще говоря, алгоритм примененный в прошивке микроконтроллера к датчику DS18B20 не подходит.
На мой взгляд в преобразовании значения температуры с помощью контроллера (в функции therm_read_temperature) нет никакого смысла. Такое преобразование имело бы смысл при наличии у устройства индикатора, однако в данном устройстве индикатор не предусмотрен, и преобразование вполне может выполнить программа на компьютере.
Тем не менее автору спасибо за его труды!
Здравствуйте, Кибермастер. Мы хотим подключить устройство к дисплею, а напряжение подавать с блока питания (самодельного), на какую силу тока необходимо расчитать этот блок? И обязательно ли нужен стабилизатор напряжения на нём(без него вроде греться не будет)?
ОтветитьУдалитьмаксимум 0,5А.
ОтветитьУдалитьстабилизатор не нужен, если напряжение блока питания 4,5-5,5В, если лучше, то поставьте стабилизатора. Чтобы не грелся, используйте импульсный, вместо линейного
А сильно нужно изменить схему, чтоб прошивать через ISP, без бутлоадера, и при этом весь функционал сохранился? Достаточно ли просто выкинуть ту часть, где 5-контактный разъём и перемычка, и к лапам MOSI, MISO, SCK, RESET, GND, Vcc подключить ISP?
ОтветитьУдалитьизменять ничего не надо, просто подключите программатор к этим лапам и прошивайте, перемычка мешать не будет
ОтветитьУдалитьЗдравствуй! Хочу спросить, а какой ток и напряжение должны быть на DQ выводе термодатчика? И на какую мощность должен быть резистор 4.7КОм?
ОтветитьУдалитьнапряжение наверно вольта 4, ток не знаю, не считал. Резистора в корпусе 1206 хватит
ОтветитьУдалитьА с чем может быть связано, что нпряжение на DQ всего 0,14 Вольт?
ОтветитьУдалитьнапряжение можно увидеть только осциллографом, это же линия данных
ОтветитьУдалитьЭто относительно GND
ОтветитьУдалитьМультиметром никак не проверить?
ОтветитьУдалитьотсоедини провод от третей ноги атмеги, потом подсоедини к +5, на DQ должно быть 4-5 вольт, потом подсоедини к земле, на DQ должно быть 0. А может наоборот, не помню точно. Если напряжение вообще не меняется(или меняется не значительно), то проблема где то в транзюках.
ОтветитьУдалитьPS: убежал, вернусь часа через 2
скажите пожалуйста как подключать дополнительные датчики.
ОтветитьУдалитьЧерез штыревые соединители параллельно датчику, устновленному на плате
ОтветитьУдалитьизвяните за глупые вопросы, но я совсем новичек в этом. каким образом возможно подключить 32 датчика к этому разьёму?
ОтветитьУдалитьскажите пажалуйста в какой версии c++ builder вы делали программу, пробовал в XE вылазием моря ошибок.
ОтветитьУдалитьЧерез штыревые соединители, параллельно датчику, установленному на плате
ОтветитьУдалитьc++ builder 2010
ОтветитьУдалитьизвените за настойчивость, судя по схеме 6 штырьков 1 из них земля. для подключения дополнительного датчика достаточно подключить к одному из 5 dq(date) а другие 2 ножки датчика к земле. всё верно?
ОтветитьУдалитьНад картинкой же написано:
ОтветитьУдалитьGND.
Канал 1
Канал 2
1-Wire. Сюда подключаем сигнальную линию DS18B20.
+5V.
Штырей там 5 а не 6.
Пишите через Reply, иначе Ваши комменты буду удалять
да действительно перепутал версии устройства. все что я писал выше относилось к Многоканальный USB-термометр (Продвинутая версия).
ОтветитьУдалитьна продвинутой датчик и контактные выходы подключается к клемникам (там, где в этой версии штыри), а на штырях размещены контактные входы
ОтветитьУдалитьЗдравствуйте, я уже и не знаю что делать. Проверял все. Но все равно вылазит неопознаное усб устройство. Я уже просто на прямую контролер цеплял без навески, все равно ничего не работает. Грешу на программатор, usbasp программировал через sinaprog, прошиваю с начала основную программу потом фьюзи, вроде все ок, но потом ничего не работает. Забыл написать что светодиод вообще не светиться, даже не мигает. В чем может быть проблема?
ОтветитьУдалитьпрошивать надо бутлоадер и фьюзы. Покажите скрин фьюзов
ОтветитьУдалитьСобрал , работает на ура,запустился сразу,все красиво. Доволен. Недостатки есть, постоянно на граничной температуре щелкают релюшки в режиме термостата,(программный баг)Без компа не работает ,(комп пинает контролер)те нет автомата как у MP707. Автору спасибо большое!Недостатки будем допиливать самостоятельно.
ОтветитьУдалитьДобрый день, Собрал схему все работает хорошо, а подскажите пожалуйста на Delphi реально написать софт для этого устройства?
ОтветитьУдалитьреально
ОтветитьУдалитьПомогите пожалуйста, если писалась данная программа на Delphi или подскажите в какую сторону копать, с HID устройством было бы все понятно, но тут увы, я как то затрудняюсь((, Спасибо
ОтветитьУдалитьнаберите в гугле "delphi hid" и посмотрите 3-5 первых ссылок
ОтветитьУдалитьДело в том, что это не HID устройство, поэтому я и не могу разобраться как считать данные, и как опросить датчик! уже неделю бьюсь над этой темой )))
ОтветитьУдалитьhttp://www.delphisources.ru/forum/showthread.php?t=13350
ОтветитьУдалитьВидел я этот код, много кто еще задавался таким же вопросом! ответов не нашел ) Думаю просто надо перейти на USB HID термометр )) спасибо за терпение...
ОтветитьУдалитьДобрый день. Подскажите пожалуйста, запустил проект в 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'
Как можно решить данную проблему. Заранее благодарен
получается, что среда разработки не та. Используйте C++ builder 2010
ОтветитьУдалитьC++Builder 2010 это название программы скопированное с ярлыка.
ОтветитьУдалитьEmbarcadero® C++Builder® 2010 Version 14.0.3513.24210
Copyright © Embarcadero Technologies, Inc. All Rights Reserved
Это копия из окна About.
а как вы проект открываете?
ОтветитьУдалитьРешил проблему, в проекте не хватало компонента.
ОтветитьУдалитьв мейк файле желательно включить оптимизацию по коду
ОтветитьУдалитьCFLAGS += -Wall -gdwarf-2 -std=gnu99 -DF_CPU=12000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
иначе при использовании временных задержек не хватает памяти. столкнулся при переделке схемы без использования аппаратного UART
P.S.
ОтветитьУдалить-DF_CPU=16000000UL - должно быть так. но при замене кварца на 12МГц схема тоже корректно работает
вопрос к автору. без подключения к компьютеру схема будет работать в режиме термостата? или условия срабатывания термостата прописаны в программе для ПК
ОтветитьУдалить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
без компа термостат не работает.
ОтветитьУдалитьпри одном подключенном датчике устройство работает нормально. а вот если подключить два датчика, то адреса датчиков определяются не правильно. а если подключить три датчика то изменяются адреса и первых двух датчиков.
ОтветитьУдалитьв чем может быть проблема?
P.S.
датчики подключены к плате без длинных проводов
схема включения не использует USART для эмуляции 1-wire
Потому что там тупо при подключении происходит поиск термодатчиков, если подключить новые, список меняется в зависимости от ID датчиков.
ОтветитьУдалитьэто понятно. но при подключении новых датчиков адреса старых искажаются. вот в чем проблема.
ОтветитьУдалитьа если адрес считан не правильно, то при обращении к этому датчику контроллер не сможет получить данные температуры
А почему эт он может адрес считать не правильно?
ОтветитьУдалитьне знаю. датчики распаяны на плате рядом. без дополнительных проводов.
ОтветитьУдалитькстати у меня кварц на 12МГц но в конфигах вроди все переправил да и USB-шная часть программы работает исключительно. по каким причинам Вы отказались от кварца на 12МГц?
у меня 16 самые ходовые))) Чтобы не путать, вобщем.
ОтветитьУдалитьтак где ж собака зарыта? а схему без транзисторов Вы проверяли на 20 метрах в реальных условиях или только в протеусе?
ОтветитьУдалитьда, и даже больше. На нескольких промышленных котлах работает даже при сильных наводках
ОтветитьУдалитьздравствуйте. подскажите пожалуйста, мне нужно немного модернизировать эту схему, термометр должен иметь возможность самокалибровки, как это возможно осуществить?.
ОтветитьУдалитьDS18B20 калибровать смысла нет. Если хотите большую точность, нужно ставить платиновый.
ОтветитьУдалитьможете пожалуйста обьяснить. я не понял куда или что подключается в 5-и контактный разьем. зачем там 1 и 2 каналы? заранее спасибо
ОтветитьУдалитьC помощью них можно управлять двумя нагрузками. К примеру, можете подключить к ним реле (через транзистор) и управлять светом.
ОтветитьУдалитьеще один вопрос. сброс микроконтролера подключен к питанию через резистор, он ведь будет вечно скидывать?
ОтветитьУдалитьнет
ОтветитьУдалитьДобрый день! Будет ли работать в режиме автоматического управления каналами без компа, если запитаь лишь?
ОтветитьУдалитьДобрый день! Не будет.
ОтветитьУдалитьДобрый день! А прошивка с гистерезисом есть?
ОтветитьУдалитьнеа
ОтветитьУдалитьUSB-Термометр, просьба к автору, необходимо второе мини-окно для датчика, можно организовать? Заранее спасибо, Ispolnitel_Group@mail.ru
ОтветитьУдалитьК сожалению, нет.
ОтветитьУдалитьможет нужны вложения?
ОтветитьУдалитьза отдельную плату, конечно, могу сделать, но стоить будет 50-100$
ОтветитьУдалитьСпасибо за ответ.Мой бюджет 20$
ОтветитьУдалитьДобрый ден!
ОтветитьУдалитьСобрал плату, контроллер прошил по инструкции, драйвер установил. Датчик не определяется. Монтаж проверил.
что делать дальше, чтобы термометр заработал. Индикатор светит постоянно. Ручноц авто режим переключаются.
Может сам датчик не работает?
ОтветитьУдалить