Ср янв 11, 2017 22:05:18
в свойствах датчика протеуса можно настроить дискретность уставки его температурыZhuk72 писал(а):При 9-битной конфигурации младшие 3 бита всегда в нуле.
Ср янв 11, 2017 22:24:51
ARV писал(а):в свойствах датчика протеуса можно настроить дискретность уставки его температуры
Zhuk72 писал(а):Я уже проверил в Протеусе при шаге датчика 0.0625*С.
Ср янв 11, 2017 22:57:58
Zhuk72 писал(а):Я уже проверил в Протеусе при шаге датчика 0.0625*С.
При 9-битной конфигурации младшие 3 бита всегда в нуле.
Выход изменяется (начиная с бита 3), когда прирост достигает 0.5*С, т.е. через каждые 8 шагов.
Вт янв 24, 2017 20:12:27
data[0] = w1_read();//читаем два байта с температурой
data[1] = w1_read();
//загоняем в двух байтную переменную
temp = data[1];
temp = temp<<8;
temp |= data[0]; /// далее идет преобразование в переменную инт без точки
d1=temp>>1; //сдвиг вправо 1 части
d2=temp>>3; //сдвиг другой
d3=d1+d2; // сложение за результатом без точки
Возращаю функцией значение d3 и записываю его в инт.
z=temp_18b20(); // зэт интовая переменная в которой храню преобразование температуры
p=z>>15 ;//двигаю чтобы проверить знак температуры)
if (p!=0)
{
z=z&(~((1<<11)|(1<<12)|(1<<13)|(1<<14)|(1<<15)));/а здесь попытался инвертировать биты знака чтобы потом работать с чистым числом но не выходит ) не могу понять почему)
}
Вт янв 24, 2017 20:21:04
прочтите здесь: viewtopic.php?p=2971952#p2971952 и делайте правильноTenken писал(а):Подскажите пожалуйста с преобразованием температуры
Вс янв 29, 2017 16:00:05
uint8_t
_crc_ibutton_update(uint8_t crc, uint8_t data)
{
uint8_t i;
crc = crc ^ data;
for (i = 0; i < 8; i++)
{
if (crc & 0x01)
crc = (crc >> 1) ^ 0x8C;
else
crc >>= 1;
}
return crc;
}
Вс янв 29, 2017 18:39:03
не надо сравнивать, надо "зацикливать" ВСЕ данные - если все верно, то в итоге будет НОЛЬ.Tenken писал(а):и потом сравнивать с последним?
Вс янв 29, 2017 19:43:44
#define dlinaBit 64
#define defPolinomObr ((uint8_t)0b10001100)
//функция подсчета CRC8 для DS18B20
//*****************************************************************
uint8_t get_CRC8(uint8_t * pAddrr){
uint8_t CRC8=0;
//----------
uint8_t NumerBit=0; //номер текущего бита
while ( NumerBit<(dlinaBit+8) ){
uint8_t BitRead,BitHi;
if ( //прочитаем значение бита
(pAddrr[NumerBit>>3]) & (0x01<<(NumerBit&0x07)) ) BitRead=0x80; else BitRead=0;
if (!(NumerBit<dlinaBit)) BitRead=0;
//---------
if (CRC8&0x01) BitHi=1;else BitHi=0; //выдвигаемый бит
CRC8>>=1;
CRC8+=BitRead;
if (BitHi) CRC8=CRC8 ^ (uint8_t)defPolinomObr;;
//---------
NumerBit++;
} //while
return CRC8;
}
А вот периодической хрени быть не должно, у меня есть устройство с DS, кабель метров 15 был (сейчас укоротил), никаких проблем не было. Контрольная сумма "на всякий случай", но не для борьбы с помехами. Если у Вас постоянные ошибки, надо что-то пересмотреть.Tenken писал(а): Ибо переодически в индикации вылазиет какая-то хрень
Вс янв 29, 2017 20:16:39
Чт мар 30, 2017 09:08:08
Чт мар 30, 2017 09:40:50
Чт мар 30, 2017 14:45:57
Чт мар 30, 2017 14:53:34
Чт мар 30, 2017 20:54:16
Чт мар 30, 2017 22:02:57
Чт мар 30, 2017 22:41:45
Пт мар 31, 2017 04:49:53
Пт мар 31, 2017 07:46:37
Пт мар 31, 2017 08:26:50
именно такое решение есть среди показанных мной ссылок: http://radiokot.ru/circuit/digital/home/61/ - кстати, это моя разработка (основа), там и ссылка на мой вариант есть.acckyiboxxx писал(а):я полагаю человеку надо такое решение
Пт мар 31, 2017 08:43:17