Teplotní čidlo Dallas umožňuje jednovodičové ( GND, Data) nebo vícevodičové (GND, Ucc, Data) připojení. Jedná se o čidlo s digitálním výstupem. Dowland datasheet: datasheets.maxim-ic.com/en/ds/DS18B20.pdf
Hlavičkový a zdrojový soubor pro komunikaci s čidlem: DS18B20.h (1,6 kB) DS18B20.c (2,5 kB)
Nově v prodejičidla Dallas v kovovém pouzdře s kabelem: www.vselektro.eu/1-wire-sbernice.html
Příklad použití:
(zobrazení teploty na LCD, ATmega 32, vývojový kit EvB 4.3, třívodičové připojení)
/*
** ===================================================================
** Describe: : Source file for basic measure and view temperature
** : with Dallas DS18B20 and evaluation kit EvB 4.3 (ATmega)
** :
** Author: : Unknown,
** : remade Vít Svadbík, 2012
** ===================================================================
*/
#define F_CPU 16000000UL
#include
#include "lcd_h.h"
#include "DS18B20.h"
char buffer[16];
void read_temperature(char *buffer);
int main( void ){
lcd_init();
lcd_clrscr();
for (;;) {
read_temperature(buffer);
_delay_ms(5000); //updating ever 5 second
}
}
void read_temperature(char *buffer){
uint8_t temperature[2];
//**Reset, skip ROM and start temperature conversion
therm_reset();
therm_write_byte(SKIP_ROM);
therm_write_byte(CONVERT_T);
//**Wait until conversion is complete
while(!therm_read_bit()); //DS18B20 send 1 for conversion is done
//**Reset, skip ROM and send command to read Scratchpad
therm_reset();
therm_write_byte(SKIP_ROM);
therm_write_byte(READ_SCRAT);
//**Read Scratchpad (only 2 first bytes)
temperature[0]=therm_read_byte(); //low byte
temperature[1]=therm_read_byte(); //high byte
therm_reset();
//**conversion 2 byte to digit and decimal
uint8_t digit;
uint16_t decimal;
digit = (temperature[1]<<4)&0xf0; //form 2 bytes to byte for conversion
digit |= (temperature[0]&0xf0)>>4;
decimal = (temperature[0]&0xf)*625; //625 create whole number (over 8b therefore uint16_t)
decimal/=100; //only 2 decimal place (1000 - one decimal place)
//**display
lcd_clrscr();
lcd_gotoxy(0,0);
lcd_puts("Teplota:");
if (digit>=127){
lcd_gotoxy(0,1);
lcd_putc('-');
}
lcd_gotoxy(1,1);
sprintf(buffer, "%2d.", digit);
lcd_puts(buffer);
sprintf(buffer, "%d", decimal);
lcd_puts(buffer);
}
projekt AVR studio 4 :DS18B20.zip (54,2 kB)