Может ли кто нибудь написать пример функции которая будет возвращать значение температуры... очень прошу....
Инициализация не важна - важен сам способ(пример) как это сделать...
Заранее благодарю... просто спасете=)
Код: Выделить всё
//=============================
//=================== Процедура конвертации температуры ===========
//=============================
void DeviceQ_CONVERT_TEMPERATURE_COMMAND(void){
if (_1_WIRE_ERROR == 0x01){
if (_deviceQ_power_supply == 1){
DeviceQ_write_byte(CONVERT_T); // посылаю команду запуска конвертации
DeviceQ_Pullup(1);
_delay_us(200); // гарантированое время на окончание вычислений 750 ms
DeviceQ_Pullup(0);
}else{
DeviceQ_write_byte(CONVERT_T); // посылаю команду запуска конвертации
until_bit_is_set(DeviceQ_PIN); // ОПАСНО!!!! МОЖЕТ НЕ ВЫЙТИ!!! Проверка на окончание конвертации теппературы
}
}
}
//=============================
//==============Получение температуры с устройства на шине=========
//=============================
void DeviceQ_Read_Temperature(unsigned char Num_QDevice){ //по результату выдает результат вычисления температуры
unsigned char ID = 0, TH = 0, TL = 0;
if (_deviceQ_temperature_flag == false){ //запрос температуры в первый раз после запуска устройства (холостой пересчет)
if(DeviceQ_SKIP_ROM_COMMAND() == true) /*=======>>>>>>>>>>*/ DeviceQ_CONVERT_TEMPERATURE_COMMAND();
if(DeviceQ_SKIP_ROM_COMMAND() == true) DeviceQ_READ_SCARTCHPAD_COMMAND(_deviceQ_ScratchPad);
}
if (_deviceQ_find_count != 0){
if (_deviceQ_find_count == 1){
if(DeviceQ_SKIP_ROM_COMMAND() == true) DeviceQ_CONVERT_TEMPERATURE_COMMAND();
if(DeviceQ_SKIP_ROM_COMMAND() == true) DeviceQ_READ_SCARTCHPAD_COMMAND(_deviceQ_ScratchPad);
}else{
for (int i = 8; i >= 0; i--)
_deviceQ_rom_array[i] = _deviceQ_all_rom[Num_QDevice][i]; //перекидываю адрес устройства (64bit) во временную переменную
if(DeviceQ_MATCH_ROM_COMMAND(_deviceQ_rom_array) == true) DeviceQ_CONVERT_TEMPERATURE_COMMAND();
if(DeviceQ_MATCH_ROM_COMMAND(_deviceQ_rom_array) == true) DeviceQ_READ_SCARTCHPAD_COMMAND(_deviceQ_ScratchPad);
}
ID = _deviceQ_rom_array[0];
TH = _deviceQ_ScratchPad[1];
TL = _deviceQ_ScratchPad[0];
if (ID == DS18S20_FAMILY_CODE) // 0 бит = 0x10 означает что датчик или 1820 или 18s20
Calc_Temp_ds18S20(TH, TL);
if (ID == DS18B20_FAMILY_CODE) // 0 бит = 0x10 означает что датчик или 1820 или 18s20
Calc_Temp_ds18B20(TH, TL);
}
_deviceQ_temperature_flag = true;
}
//=============================
//=================== Считаю температуру для 1820(+S) =============
//=============================
void Calc_Temp_ds18S20(char MSByte, char LSByte){
int _temp = 1;
if (MSByte != 0x00){
LSByte = 0xFF - LSByte + 1;
_temp = -1;
}
Temperature = (int)LSByte*10/2;
TemperH = _temp*Temperature/10;
TemperL = Temperature%10;
}
//=============================
//=================== Считаю температуру для 18b20 ================
//=============================
void Calc_Temp_ds18B20(char MSByte, char LSByte){
int temp = 0x0000;
temp = (MSByte<<4)|(LSByte);
if (MSByte <= 0xF0) Temperature = (int)temp /16;
else Temperature = (int)((0xFFFF-temp)>>8);
}
Код: Выделить всё
while(devices==2)Код: Выделить всё
while(devices>0)