Свежие обсуждения
Микроконтроллеры

Помогите разобратся с терморегулятором на ds18b20.

1 2

А может просто сделать обе переменные беззнаковыми и работать с неизмененными значениям, полученными с датчика, а уже для вывода на экран приводить к необходимому виду? тогда проблемы точно не будет

 

Ну я заменил код:
temperature=4096-temperature;
temperature=-temperature;
на:
temperature=temperature-4096;
Всё работает нормально, но сравнение так как не работало, так и не работает.

 

Сергей К можете описать по подробние что там у меня надо поменять, а то это моя вторая программа. За ранние пасибо.

 

Krik99: Ну я заменил код:
это совсем из другой оперы и проблему не решит

а что по поводу этого? не помогает?
unalex: можно попробовать искусственно в теле функции сравнения снова привести переменные к типу signed

if((signed)temperature>max) //сравнение

или записать так(хотя по сути это то же самое что и в исходном коде), но мало ли, вдруг поможет
if((temperature-max)>0)

 

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

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

148480.c

 

или так получше

148482.c

 

Ой, вру, моя доработка неправильная, там же "отрицательные" температуры больше получаются чем положительные, сравнение будет некорректным

тогда сравнение нужно сделать так
if (temperature < 1000 && max < 1000)
{
if(temperature > max) //сравнение
PORTB.0=0;
else
PORTB.0=1;
}
else
{
if(temperature < max) //сравнение
PORTB.0=0;
else
PORTB.0=1;
}

 

Krik99: Сергей К можете описать по подробние что там у меня надо поменять
посмотрите тут - http://pro-radio.ru/controllers/3396-30/#2008/02/22/11-49-01 (22 февраля, 11:49)

 

Krik99: Сравнение должно работать так, если измеряемая температура больше чем заданная, то должен загорется светодиод, а если менше чем заданная, то светодиод должен погаснуть. Так вот при плюсовой всё нормально, а если там минусовая ,а там плюсовая, или наоборот, или там минусовая и там минусовая то сравнение не работает.

Нормальное сравнение, должно работать.
А куда светодиод подключен? А то судя по

PORTB=digits[digit_out[cur_dig]];
cur_dig++;
if (cur_dig==3) cur_dig=0;
if(temperature>max){ PORTB.0=0; }else{ //сравнение
PORTB.0=1;
};

,он перекрывается с индикатором. Может, сравнение-то работает, просто не туда выводится результат?

 

Что то "хозяин топика" затих, интересно что у него там вышло

 
1 2