Exemplo n.º 1
0
/*****************************************************************************
*   Function name : DS18B20_ReadDevice
*   Returns :       коды - READ_CRC_ERROR, если считанные данные не прошли проверку
*                          READ_SUCCESSFUL, если данные прошли проверку
*   Parameters :    bus - вывод микроконтроллера, который выполн¤ет роль 1WIRE шины
*                   *id - им¤ массива из 8-ми элементов, в котором хранитс¤
*                         адрес датчика DS18B20
*                   *temperature - указатель на шестнадцати разр¤дную переменную
*                                в которой будет сохранено считанного зн. температуры
*   Purpose :      ћетод только считывает значение ”∆≈ »«ћ≈–≈ЌЌќ… температуры из scratchpad,
*				   Ќ≈ ¬џѕќЋЌя≈“ »«ћ≈–≈Ќ»≈
*				   јдресует датчик DS18B20, считывает его пам¤ть - scratchpad, провер¤ет CRC,
*                  сохран¤ет значение температуры в переменной, возвращает код ошибки
*****************************************************************************/
unsigned char DS18B20_ReadDevice(unsigned char bus, unsigned char* id, signed int* temperature){
	
	unsigned char scratchpad[9];
	
	OWI_DetectPresence(bus);
	OWI_MatchRom(id, bus);
	OWI_SendByte(DS18B20_READ_SCRATCHPAD, bus);
	for (unsigned char i = 0; i <= 8; i++){
		scratchpad[i] = OWI_ReceiveByte(bus);
	}
	
	if(OWI_CheckScratchPadCRC(scratchpad) != OWI_CRC_OK){
		return READ_CRC_ERROR;
	}
	
	*temperature = (unsigned int)scratchpad[0];
	*temperature |= ((unsigned int)scratchpad[1] << 8);
	
	if ((*temperature & 0x8000) != 0){
		*temperature = -(~(*temperature) + 1);
	}
	
	//*temperature *= 0.625f;
	
	*temperature *= 5;	//0.625 = 5/8
	*temperature /= 8;
	
	return READ_SUCCESSFUL;
}
Exemplo n.º 2
0
/*****************************************************************************
*   Function name :   DS18B20_ReadTemperature
*   Returns :       коды - READ_CRC_ERROR, если считанные данные не прошли проверку
*                          READ_SUCCESSFUL, если данные прошли проверку
*   Parameters :    bus - вывод микроконтроллера, который выполняет роль 1WIRE шины
*                   *id - имя массива из 8-ми элементов, в котором хранится
*                         адрес датчика DS18B20
*                   *ds18b20_temperature - указатель на шестнадцати разрядную переменную
*                                в которой будет сохранено считанного зн. температуры
*   Purpose :      Адресует датчик DS18B20, дает команду на преобразование температуры
*                  ждет, считывает его память - scratchpad, проверяет CRC,
*                  сохраняет значение температуры в переменной, возвращает код ошибки
*****************************************************************************/
BYTE DS18B20_ReadTemperature(BYTE bus, BYTE * id, WORD* ds18b20_temperature)
{
    unsigned char scratchpad[9];
    unsigned char i;

    /*подаем сигнал сброса
    команду для адресации устройства на шине
    подаем команду - запук преобразования */
    OWI_DetectPresence(bus);
    OWI_MatchRom(id, bus);
    OWI_SendByte(DS18B20_CONVERT_T ,bus);

    /*ждем, когда датчик завершит преобразование*/
    while (!OWI_ReadBit(bus));

    /*подаем сигнал сброса
    команду для адресации устройства на шине
    команду - чтение внутренней памяти
    затем считываем внутреннюю память датчика в массив
    */
    OWI_DetectPresence(bus);
    OWI_MatchRom(id, bus);
    OWI_SendByte(DS18B20_READ_SCRATCHPAD, bus);
    for (i = 0; i<=8; i++){
      scratchpad[i] = OWI_ReceiveByte(bus);
    }

    if(OWI_CheckScratchPadCRC(scratchpad) != OWI_CRC_OK){
      return READ_CRC_ERROR;
    }


    *ds18b20_temperature = MAKEWORD(scratchpad[0], scratchpad[1]);


    return READ_SUCCESSFUL;
}