/* * DS18B20.c * * Created: 27.07.2021 21:12:53 * Author: User */ #include #include "../header/DS18B20.h" #include void ds_masterreset(){ DS_OUT; _delay_us(DS_MASTERRESET_US); DS_IN; _delay_us(DS_WAIT_US); } void ds_command(uint8_t command){ int i; for (i = 0; i < 8; i++){ if (command & 1) { ds_writeone(); } else { ds_writezero(); } command = command >> 1; } } void ds_writezero(){ DS_OUT; _delay_us(DS_WRITEZERO_US); DS_IN; } void ds_writeone(){ DS_OUT; DS_IN; _delay_us(DS_WRITEONE_US); } void ds_readscratch(){ ds_masterreset(); ds_command(DS_SKIPROMCOMMAND); ds_command(DS_READSCRATCH); for(int i = 0; i < 9; i++){ scratch[i] = ds_readbyte(); } } void ds_converttemp(){ ds_masterreset(); ds_command(DS_SKIPROMCOMMAND); ds_command(DS_CONVERTTEMP); _delay_ms(DS_WAIT_MS); } void ds_readrom(){ ds_masterreset(); ds_command(DS_READROMCOMMAND); for(int i = 0; i < 7; i++){ rom[i] = ds_readbyte(); } } int ds_readbit(){ DS_OUT; _delay_us(1); DS_IN; _delay_us(14); if (PINC & (1 << DS_PIN)){ _delay_us(45); return 1; } _delay_us(45); return 0; } uint8_t ds_readbyte(){ uint8_t i_byte = 0; for (int i = 0; i < 8; i++){ i_byte = i_byte >> 1; i_byte |= (ds_readbit() << 7); } return i_byte; }