Beispiel #1
0
static void ds18x20GetAllTemps()
{
	uint8_t i, j;
	uint8_t crc;
	static uint8_t arr[DS18X20_SCRATCH_LEN];

	for (i = 0; i < devCount; i++) {
		if (ds18x20IsOnBus()) {
			ds18x20Select(&devs[i]);
			ds18x20SendByte(DS18X20_CMD_READ_SCRATCH);

			// Control scratchpad checksum
			crc = 0;
			for (j = 0; j < DS18X20_SCRATCH_LEN; j++) {
				arr[j] = ds18x20GetByte();
				crc = _crc_ibutton_update(crc, arr[j]);
			}

			if (crc == 0) {
				// Save first 2 bytes (temperature) of scratchpad
				for (j = 0; j < DS18X20_SCRATCH_TEMP_LEN; j++)
					devs[i].sp[j] = arr[j];
			}
		}
	}

	return;
}
Beispiel #2
0
uint8_t ds18x20Process(void)
{
	ds18x20GetAllTemps();

	// Convert temperature
	if (ds18x20IsOnBus())
		ds18x20ConvertTemp();

	return devCount;
}
Beispiel #3
0
void ds18x20Process(void)
{
	if (getTempTimer() == 0) {

		/* Convert temperature */
		if (ds18x20IsOnBus())
			convertTemp();
	}

	return;
}
Beispiel #4
0
void ds18x20ConvertTemp(void)
{
	if (ds18x20IsOnBus()) {
		ds18x20SendByte(DS18X20_CMD_SKIP_ROM);
		ds18x20SendByte(DS18X20_CMD_CONVERT);

#ifdef DS18X20_PARASITE_POWER
	/* Set active 1 on port for at least 750ms as parasitic power */
		PORT(ONE_WIRE) |= ONE_WIRE_LINE;
		DDR(ONE_WIRE) |= ONE_WIRE_LINE;
#endif
	}

	return;
}
Beispiel #5
0
void ds18x20SearchDevices(void)
{
	uint8_t i, j;
	uint8_t *newID;
	uint8_t *currentID;
	uint8_t lastDeviation;
	uint8_t count = 0;

	// Reset addresses
	for (i = 0; i < DS18X20_MAX_DEV; i++)
		for (j = 0; j < DS18X20_ID_LEN; j++)
			devs[i].id[j] = 0x00;

	// Search all sensors
	newID = devs[0].id;
	lastDeviation = 0;
	currentID = newID;

	do {
		for (j = 0; j < DS18X20_ID_LEN; j++)
			newID[j] = currentID[j];

		if (!ds18x20IsOnBus()) {
			devCount = 0;

			return;
		}

		lastDeviation = ds18x20SearchRom(newID, lastDeviation);

		currentID = newID;
		count++;
		newID=devs[count].id;

	} while (lastDeviation != 0);

	devCount = count;

	return;
}
Beispiel #6
0
void ds18x20GetAllTemps()
{
	uint8_t i, j;

	uint8_t arr[9];

	for (i = 0; i < devCount; i++) {
		if (ds18x20IsOnBus()) {
			ds18x20Select(&devs[i]);
			ds18x20SendByte(DS18X20_CMD_READ_SCRATCH);

			for (j = 0; j < 9; j++)
				arr[j] = ds18x20GetByte();

			if (!calcCRC8(arr, sizeof(arr))) {
				for (j = 0; j < 9; j++)
					devs[i].sp[j] = arr[j];
			}
		}
	}

	return;
}