Ср дек 13, 2017 20:58:00
Чт дек 14, 2017 05:43:25
Чт дек 14, 2017 14:00:57
Чт дек 14, 2017 15:25:40
Чт дек 14, 2017 15:44:32
по-моему, настало время изучить документацию как следует. там все написано - и что считывать, и куда, и как CRC считать. и на сайте полно статей, и даже моя есть среди них. И даже с примерами...ROMan2947 писал(а):Настало время CRC
Чт дек 14, 2017 15:52:00
по-моему, настало время изучить документацию как следует
Чт дек 14, 2017 16:50:24
Starichok51 писал(а):нет ни умножения, ни деления
Starichok51 писал(а): умножаю на 10 сдвигами и сложением
Чт дек 14, 2017 20:41:03
Пт дек 15, 2017 07:01:11
Пн янв 01, 2018 22:20:23
int read_bit(void)
{
int bit=0x00;
BUS_LOW;
_delay_us(3);
BUS_HIGT;
_delay_us(20);
if(ds18b20_PIN&(1<<DQ))
{
bit=0x01;
}
else
{
bit=0x00;
}
_delay_us(60);
return bit;
}
void registr(void)
{
int DATA_REGISTR = 0x00;
int j = 0x00;
while (j<=(SIZE))
{
if (DATA_REGISTR&0x80) // 0x80==1<<7
{
DATA_REGISTR = DATA_REGISTR << 1;
DATA_REGISTR |= read_bit(); // enter_bit(&i);
//DATA_REGISTR ^= 0x131;
}
else
{
DATA_REGISTR = DATA_REGISTR << 1;
DATA_REGISTR |= read_bit(); //enter_bit(&i);
}
j++;
}
}
void read_ID (void)
{
ds18b20_init();
write_ds18b20(READ1_ROM);
registr();
}
Пн янв 01, 2018 22:34:11
Пн янв 01, 2018 22:52:24
#define SIZE 8 // количество считываемых бит
20мкс пауза при чтении бита - как по мне, многовато.
Вт янв 02, 2018 11:31:05
Ср фев 07, 2018 15:47:40
Пн май 21, 2018 11:22:44
А как с округлением? Лично я десятые от этой 18х20 делал по таблице в 16 байт. Четыре младших бита кода температуры - вход в таблицу, на выходе - десятичная цифра, которую следует светить после точки. Можно прямо в ASCII, если надо.Starichok51 писал(а):потом дробную часть умножаю на 10 сдвигами и сложением, и сразу получаю цифру десятых.
"0112334456678899"
Пн май 21, 2018 11:37:49
Пн май 21, 2018 13:48:42
после умножения на 10 получаем целое число (от 0 до 9), потом смотрим старший бит остатка в дробной части. если есть старший бит, то делаем инкремент получившейся цифры десятых.afz писал(а):А как с округлением? Лично я десятые от этой 18х20 делал по таблице в 16 байт.
Пн май 21, 2018 22:18:16
Пт май 25, 2018 06:38:00
Программируя на Си, лучше всего умножить код числа на 100, прибавить к нему 5 и преобразовать в строку, после чего отбросить последнюю цифру, предпоследняя будет десятыми, остальные - целой частью. Да, перед этим надо учесть минус.Starichok51 писал(а):после умножения на 10 получаем целое число (от 0 до 9), потом смотрим старший бит остатка в дробной части. если есть старший бит, то делаем инкремент получившейся цифры десятых.
а можно и по таблице. с таблицей, пожалуй, будет быстрее, чем умножать и потом анализировать округление.
Пт май 25, 2018 08:52:53