реклама на сайте
подробности

 
 
> DS18b20 неправильно показывает температуру, Когда работает софтовый USB(от obdev)
Br.Misha
сообщение Nov 5 2009, 14:02
Сообщение #1


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



Здраствуйте!
Вобщем хочу я сделать USB термомерт используя мегу8 и DS18b20. Вобщем написал програмку, а когда запустил то по USB(CDC) начали приходить неверные данные с термометра, сначала грешил на DS18b20 но когда подключил его к другому девайсу то он там работал нормально. Потом я отключил USB (в самом коде) и отправлял даные с датчика на UART, на компе было видно реальную температуру. Дальше я написал программу так, чтобы юсб был включен но даные передавались на ЮАРТ и тут ошибка повториласьsad.gif
Вобщем насколько я понял, то комп постоянно отправляет даные на мегу8 и очень часто вызываеться прерывание по INT0 даже тогда, когда меряеться температура а так как задержки между отправкой и приемом команд к DS маленькие, несколько микросекунд(хотя задержка для измерения температуры датчиком минимум 750мс) то или при отправке комманды долго передается бит и DS перезагружаеться, или когда принимаються то МК невовремя реагирует на комманды и получает неправильные данные. Пробовал отключать глобольно прерывания(cli) перед измерением температуры и включать(sei) после измерения но тогда МК вообще не шлет даные по ЮСБ и не отвечает на комманды с ЮСБ(например когда отправляю "1" то он должен прислать "one", 2 - "two") . Ещё пробовал делать так:
------- отключил прерывания перед отправкой комманд к DS чтобы он измерил температуру.
------- включил после этих комманд потому что далее должна быть задержка 800мс.
------- спустя 800 мс отключал, отправлял комманду чтения температуры, когда он присылал даные опять включал
------- эфект тот же!

Кароче мне нада сделать так,чтобы как то отключать ЮСБ на время измерения температуры ну или ещё что нибутьsmile.gif.

Частота 12Мгц, питание от ЮСБ. Вот клавный файл и библиотека для измерения температуры которую я скачал с инета, немного переделал после чего она работает отлично, правда тока на 1 датчик http://upwap.ru/619341 .

Заранее спасиба!!!!!!!

вот кстате те самые даные с термометра:

+031.1
+125.7
+127.5
+031.3
+023.7
-000.7
+127.1
+021.3
+031.1
-000.7
-000.7
-000.7
-000.7
-000.7
+125.7
-000.7
-000.7
+119.7
+063.7
-000.7
-000.7
+125.6
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Br.Misha
сообщение Nov 15 2009, 11:32
Сообщение #2


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



Rst7, всё работает правильно!!! ExtractMeasureTemp_one возвращает правильные значения 16 битного температурного регистра.
Волько вот никак не пойму почему не получаеться конвертировать в нормальную температуру, делал всё как и в библиотеке с первого поста. сделал ф-цию showTemperature:
CODE
void showTemperature(char *ds_buffer)
{
unsigned char ds_temp[2]; // массив для хранения возвращаемой температуры
unsigned char ds_digit; // целое значение
unsigned char ds_decimal; //десятичное значение
unsigned int ds_data = ExtractMeasureTemp_one();// считавыем значение температуры и записываем в переменную
ds_temp[0]=(ds_data>>8);// старший байт
ds_temp[1]=(ds_data<<8);// младший байт
ds_digit=ds_temp[0]>>4;// сюда пишем старшие 4 бита старшего байта
ds_digit|=(ds_temp[1]&0x07)<<4;// сюда пишем младшие 4 бита младшего байта
ds_decimal=ds_temp[0]&0xf;//
ds_decimal*=5; // десятичное значение
if (ds_temp[1]>0xFB) // еси датчик показывает меньше -55С
{
ds_digit = 127-ds_digit; //
ds_buffer[0] = '-'; // ставим минус
} else ds_buffer[0] = '+'; // в противоположном случает - плюс
ds_buffer[1] = to_ascii(ds_digit/100); //
ds_buffer[2] = to_ascii((ds_digit%100)/10); //
ds_buffer[3] = to_ascii(ds_digit%10); //
ds_buffer[4] = '.'; //
ds_buffer[5] = to_ascii((ds_decimal%100)/10);//
}


в бесконечном цикле сначала вызываю StartMeasureTemp и спустя 750мс эту функцию.

проблема в том, что по ЮСБ мне приходит температура 000.0С а еси напишу
ds_temp[1]=(ds_data>>8);// старший байт
ds_temp[0]=(ds_data<<8);// младший байт
тогда приходит +016.0С.
в чем тут может быть проблема? я же все вроде правильно сделал.

Кстате, забыл написать.
Когда я просто отсылаю с МК на комп значение возвращаемое ExtractMeasureTemp_one() то при смене температуры меняеться значение этой переменной, показывая реальную температуру но с ф-цией showTemperature приходит постоянно одинаковое значениеsad.gif я даже представить не могу в чем косяк.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Br.Misha   DS18b20 неправильно показывает температуру   Nov 5 2009, 14:02
- - Андрей Лютько   Во время чтения/записи данных по шине 1-Wire yужно...   Nov 5 2009, 14:43
- - _Pasha   Цитата(Br.Misha @ Nov 5 2009, 18:02) Ещё ...   Nov 5 2009, 14:44
- - Br.Misha   вобщем сделал на "молекулярном уровне": ...   Nov 5 2009, 15:56
|- - _Pasha   Цитата(Br.Misha @ Nov 5 2009, 19:56) вобщ...   Nov 5 2009, 21:10
- - Br.Misha   Мужики, ну помогите, мож тут ещё че не так? Я уже ...   Nov 5 2009, 19:06
|- - xemul   Цитата(Br.Misha @ Nov 5 2009, 22:06) мож ...   Nov 5 2009, 21:00
- - Андрей Лютько   C OBDEV не использовал. В файле usbdrvasm есть ст...   Nov 5 2009, 20:57
- - Br.Misha   фух блин...... переделал код но опять не работает....   Nov 6 2009, 01:02
|- - xemul   Цитата(Br.Misha @ Nov 6 2009, 04:02) Обья...   Nov 6 2009, 07:43
- - Br.Misha   но почему когда выполняеться _delay_us он не може...   Nov 6 2009, 09:03
|- - xemul   Цитата(Br.Misha @ Nov 6 2009, 12:03) но п...   Nov 6 2009, 09:45
- - _Pasha   Раз Вы таки не поняли, показываю. Измените эти две...   Nov 6 2009, 10:38
- - Rst7   Господа, о чем вы? Понятное дело, что единственный...   Nov 6 2009, 11:33
- - Br.Misha   _Pasha, я понял и делал так уже, юсб не отвечал по...   Nov 6 2009, 13:36
|- - xemul   Цитата(Br.Misha @ Nov 6 2009, 16:36) Rst7...   Nov 6 2009, 13:44
- - Rst7   Цитатано я не совсем понял что вы написали. Разъя...   Nov 6 2009, 13:41
- - Br.Misha   Блин..... у меня почему то так и не получилось ре...   Nov 7 2009, 10:30
- - Rst7   ЦитатаRst7, а у вас есть рабочая либа для работы с...   Nov 7 2009, 11:11
- - Br.Misha   гы....странно. какой та код маленький......   Nov 7 2009, 11:17
- - Br.Misha   такс.... переделал я вашу либу, вот что получилось...   Nov 7 2009, 13:43
|- - Андрей Лютько   Цитата(Br.Misha @ Nov 7 2009, 17:43) но н...   Nov 7 2009, 22:27
|- - demiurg_spb   Цитата(Br.Misha @ Nov 7 2009, 16:43) ... ...   Nov 8 2009, 12:34
- - Br.Misha   блин, я пару часов назад написал тут сообщение. ку...   Nov 8 2009, 17:35
- - Rst7   Цитатакуда оно пропало? Не знаю. Мне уведомление ...   Nov 8 2009, 18:38
|- - zltigo   Цитата(Rst7 @ Nov 8 2009, 21:38) так что ...   Nov 8 2009, 22:37
- - Rst7   ЦитатаНикаких глюков. Понятно. 2 Br.Misha: Посм...   Nov 9 2009, 06:41
- - microsin   Один умный человек как-то скрестил V-USB с протоко...   Mar 2 2010, 14:45


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 22:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016