včera mi přišel kouzelný obvod DS3232. Jedná se o RTC. Vše se mi pěkně daří, hodiny, datum,..... mám už vyčtené. Ale nedaří se mi vyčíst teplotu. Vytvořil jsem si funkci pro vyčtení celé a desetinné části zvlášť, ale nechce to fungovat:
Kód: Vybrať všetko
// cteni teploty a konverze na int
int8_t DS3232_get_temp(uint8_t poradi, int8_t teplota)
{
uint8_t i, cele, data,frac;
// pomocna promenna
i=0;
// Cteni prvni casti teploty
DS3232_read(0x11, &data); //Prvne MSB
cele = data;
// Cteni druhe casti tepltoy
DS3232_read(0x12, &data); //Podruhe LSB
frac = data>>6;
if(cele & (1<<7))
{
// xor with 0b11111111 to k domplneni a potom pridat 1
cele ^= 0xFF;
cele ++;
// nastaveni promenne, jeli teplota zaporna
i=1;
}
// Make negative if needed
if(i==1) cele *=-1;
if (poradi == 1){
teplota = cele;
return teplota;
}
if (poradi == 2){
teplota = frac;
return teplota;
}
}
Kód: Vybrať všetko
tepl_bez = DS3232_get_temp(1, &stupne);
stupne = bcd2dec(tepl_bez);
tepl_bez = DS3232_get_temp(2, &stupne);
des_stupne = bcd2dec(tepl_bez);