Esempio n. 1
0
int DS18B20_Start_Converts(void)
{
    if(OK_Flag == 1) {// если датчик не ответил
		return 1;
    }

	DS18B20_init();        // инициализация DS18B20

	write_18b20(0xCC);     // проверка кода датчика
	write_18b20(0x44);     // запуск температурного преобразования

	return 0;
}
Esempio n. 2
0
void TnC_read_temperature(unsigned char * tp_data) {
	DS18B20_init();
	DS18B20_write_byte(0xCC);
	DS18B20_write_byte(0x44);

	/** Looks like we don't need following wait code **/
	// This is the official way, but big delay
	while(!DS18B20_read_bit());
	// or ???
	//while(!DS18B20_IN & DS18B20_PIN);

	// This is the easy way, but only delay enough time for temperature convertion
	//delay_ms(750);
	// No delay here, we will read temperature every 1 second using Timer Interrupt.

	DS18B20_init();
	DS18B20_write_byte(0xCC);
	DS18B20_write_byte(0xBE);

	// Now the temperature
	*tp_data = DS18B20_read_byte(); // The low part of temperature register
	*(tp_data + 1) = DS18B20_read_byte(); // The high part of temperature register
}
Esempio n. 3
0
int DS18B20_Temperature(char *ptrTemperature)
{
	uint8_t tempint = 0,tempint1,tempint2,tempint3; // переменные для целого значения температуры
	uint16_t temppoint = 0,temppoint1; // переменные для дробного значения температуры

	DS18B20_init();        // инициализация DS18B20

	write_18b20(0xCC);     // проверка кода датчика
	write_18b20(0xBE);     // считываем содержимое ОЗУ

	Temp_L = read_18b20(); // читаем первые 2 байта блокнота
	Temp_H = read_18b20();

	temp_flag = 1;         // флаг знака температуры равен 1(плюс)

	if(Temp_H &(1 << 3))   // проверяем бит знака температуры на равенство единице 
	{			
		signed int tmp;
		temp_flag = 0;      // флаг знака равен 0(минус)
		tmp = (Temp_H << 8) | Temp_L;
		tmp = -tmp;
		Temp_L = tmp;
		Temp_H = tmp >> 8; 
	}