Модераторы: PILOT, ManiaK, Mazzi

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> USB HID термометр Delphi 
:(
    Опции темы
maloicds
Дата 18.1.2012, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 20.10.2009
Где: Москва

Репутация: нет
Всего: нет



Собрал устройство 
user posted image
Сама статья.
Возникли проблемы с отрицательными температурами. Ни одна из найденных программ не смогла корректно отобразить эти значения. Решил написать свою на Delphi с использованием JvHidDeviceController. 
Вот код программы

Код

procedure TForm1.JvHidDeviceController1Arrival(HidDev: TJvHidDevice);
begin
 If not Assigned(WorkDev) then JvHidDeviceController1.Enumerate;
end;

function TForm1.JvHidDeviceController1Enumerate(HidDev: TJvHidDevice;
  const Idx: Integer): Boolean;
begin
 Result:= True;                      // продолжать поиск
 If (Trim(HidDev.ProductName) = ProductName)
    then  If  (HidDev.Attributes.VendorID  = VID) and
              (HidDev.Attributes.ProductID = PID)
            then
                   begin
                    Result:= False;   // поиск закончен
                    JvHidDeviceController1.CheckOutByIndex(WorkDev, Idx);
                    Label1.Caption:= 'подключено';
                    end;
end;

procedure TForm1.JvHidDeviceController1Removal(HidDev: TJvHidDevice);
begin
begin
  If HidDev = WorkDev then
    begin
      WorkDev:= nil;
      Label1.Caption:= ' отключено'
    end
end;
end;

procedure TForm1.JvHidDeviceController1DeviceData(HidDev: TJvHidDevice;
  ReportID: Byte; const Data: Pointer; Size: Word);
var i: integer;
    s: string;
begin
 for i:= 0 to Size - 1 do
  s:= s + Format('%.2x ', [Cardinal(PChar(Data)[i])]);
 caption:= s;
end;

Как получить значение температуры из JvHidDeviceController1DeviceData?? Переменной s присваивается значение типа A1 FF FE FE. Что делать дальше с ним я не знаю
PM MAIL   Вверх
Romikgy
Дата 22.1.2012, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



а что в меге происходит ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
maloicds
Дата 22.1.2012, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 20.10.2009
Где: Москва

Репутация: нет
Всего: нет



Судя повсему мега нормально работает, нашел прогу на pure basic, она показывает с минусом.
PM MAIL   Вверх
Romikgy
Дата 22.1.2012, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



что показывает ?
какой формат выдачи данных из меги ?



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
maloicds
Дата 22.1.2012, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 20.10.2009
Где: Москва

Репутация: нет
Всего: нет



Программа, написанная кем то под эту прошивку показывает нормальную температуру (датчик за окном, зима...). С меги я данные получаю через JvHidDeviceController1DeviceData, на выходе что то типа A1 FF FE FE, а вот формат выдачи с меги я не знаю, скорее всего стандартный.
PM MAIL   Вверх
Romikgy
Дата 22.1.2012, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



это обмен с DS18S20 а мега может отдавать все что угодно .....

если посмотреть в исходники .... то 

Код

 caption:= Format('%.1f C', [PByte(Data)[0]/16.0+PByte(Data)[1]*16.0]);

попробуй так 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
maloicds
Дата 22.1.2012, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 20.10.2009
Где: Москва

Репутация: нет
Всего: нет



ругается, array type required.
PM MAIL   Вверх
Romikgy
Дата 22.1.2012, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Код

Caption:= Format('%0.1f', [PSmallInt(Data)^/16.0]);



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
maloicds
Дата 22.1.2012, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 20.10.2009
Где: Москва

Репутация: нет
Всего: нет



Работает. Спасибо!! А каким образом можно узнать код датчика? (для работы с несколькими датчиками).
PM MAIL   Вверх
maloicds
Дата 22.1.2012, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 20.10.2009
Где: Москва

Репутация: нет
Всего: нет



Подпаял второй термометр параллельно первому, показания идут с уличного (на длинном проводе). Показания со второго проскочили один раз и всё. Судя по приёму данных, каждую секунду мега снимает данные с термометров. Попутно с показаниями температуры приходит значение -0.1 градус (FF FF 6A 01, FF FF FF FF, FF FF 67 01). Как быть?
PM MAIL   Вверх
Romikgy
Дата 22.1.2012, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



смотреть исходники меги 
там есть алгоритм работы с несколькими датчиками .... 
возможно данные идуть поочереди 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
maloicds
Дата 22.1.2012, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 20.10.2009
Где: Москва

Репутация: нет
Всего: нет



Судя по исходнику есть работа с 2мя датчиками, запрос их номеров. А вот про мегу ничего не могу сказать, не разбираюсь.

Добавлено через 14 минут и 59 секунд
Нашел вот такое
Код

'опрос 1 датчика
       If W_1wire >= 1 Then
          1wverify Dsid1(1)
          1wwrite &HBE
          1wire_array(1) = 1wread()
          1wire_array(2) = 1wread()
       Else
          1wire_array(1) = 254
          1wire_array(2) = 254
       End If
       'опрос 2 датчика
       If W_1wire >= 2 Then
          1wverify Dsid2(1)
          1wwrite &HBE
          1wire_array(3) = 1wread()
          1wire_array(4) = 1wread()
       Else
          1wire_array(3) = 254
          1wire_array(4) = 254
       End If

       1wreset                                              ' reset the bus
       1wwrite &HCC                                         ' skip rom


Я так понимаю что данная прошивка расчитана на 2 датчика не более, если нужно больше, необходимо править прошивку заранее под определённое кол-во датчиков. Насколько я знаю 1-wire позволяет работать с большим количеством устройст. Послали запрос, получили номера устройств, послали запрос конкретному ус-ву на измерение температуры, получили ответ. Планирую данную схему к использованию в квартире. Температура пола, в комнате, отопление, балкон, улица.... Каждый раз при добавлении нового датчика править прошивку????
PM MAIL   Вверх
Romikgy
Дата 22.1.2012, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



если самому написать прогу к меге ... то можно сделать и опрос любого числа датчиков


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
maloicds
Дата 22.1.2012, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 20.10.2009
Где: Москва

Репутация: нет
Всего: нет



В общем хочу сделать что то подобное и вот. Но вот прошивку сделать не смогу. Может пойдёт такой вариант: USB UART на ATTINY45 или ATMEGA2313, соединяю TxD, RxD резисторами (видел схему) и на линию сажаю датчики подключённые по схеме с паразитным питанием. С COM портом попроще будет работать то smile Где то попадалась схема на мега45 с исходником на delphi. Поищу ссылку.

Добавлено через 4 минуты и 30 секунд
Вот нашел
PM MAIL   Вверх
maloicds
Дата 22.1.2012, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 20.10.2009
Где: Москва

Репутация: нет
Всего: нет



А случайно вторые два числа это не вторая ли температура? Потому что значение FF FF это как раз та ошибка измерений -0.1 градус.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0889 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.