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

 
 
> 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 7 2009, 13:43
Сообщение #2


Местный
***

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



такс.... переделал я вашу либу, вот что получилось:
CODE
static unsigned char OWByte(unsigned char b )
{
unsigned char i=8;
//UBRR0=10; //115200
UBRRH = 0;
UBRRL = 12;
UCSRA |= (1<<U2X);

do
{
unsigned char d=0x00;
if (b&1) d=0xFF;
cli();
UDR=d;
UCSRA=(1<<TXC);
sei();
//while(!UCSRA_TXC);
while(!(UCSRA&(1<<TXC)));
b>>=1;
if (UDR>0xFE) b|=128;
}
while(--i);
return b&255;
}

static unsigned char OWReset(void)
{
unsigned char c;
UCSRB=(1<<RXEN)|(1<<TXEN);
//UBRR0=129; //9600
UBRRH = 0;
UBRRL = 77;
UCSRA &= ~(1<<U2X);

//while(UCSRA_RXC) UDR; //Зачистка буферов
while(UCSRA&(1<<RXC)) UDR; //Зачистка буферов
cli();
UDR=0xF0;
UCSRA=(1<<TXC);
sei();
//while(!UCSRA_TXC);
while(!(UCSRA&(1<<TXC)));
c=UDR;
if (c!=0xF0) return 1;
return 0;
}

void StartMeasureTemp(void)
{
if (!OWReset()) return;
OWByte(0xCC); //Skip ROM
OWByte(0x44); //Convert Temperature
}

int ExtractMeasureTemp_one(void)
{
if (!OWReset()) return -273*16;
OWByte(0xCC); //Skip ROM
OWByte(0xBE); //Read scratchpad
int v=OWByte(0xFF);
v|=OWByte(0xFF)<<8;
return v;
}


насколько я понял, вы писали в IAR, я переделал на ВинАВР но не понял что означает строка while(UCSRA_RXC) UDR;, для чего тут UDR?
Причина редактирования: Уменьшение видимого размера цитаты исходника.
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, 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
- - Br.Misha   Rst7, всё работает правильно!!! Extrac...   Nov 15 2009, 11:32
- - microsin   Один умный человек как-то скрестил V-USB с протоко...   Mar 2 2010, 14:45


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:43
Рейтинг@Mail.ru


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