Я уже проверил в Протеусе при шаге датчика 0.0625*С. При 9-битной конфигурации младшие 3 бита всегда в нуле. Выход изменяется (начиная с бита 3), когда прирост достигает 0.5*С, т.е. через каждые 8 шагов.
Здраствуйте. Подскажите пожалуйста с преобразованием температуры)
Код:
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)));/а здесь попытался инвертировать биты знака чтобы потом работать с чистым числом но не выходит ) не могу понять почему) }
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
crc = crc ^ data; for (i = 0; i < 8; i++) { if (crc & 0x01) crc = (crc >> 1) ^ 0x8C; else crc >>= 1; }
return crc; }
написано код рабочий только вот тут нихрена не понял.Я так понял это функцию тоже надо зацикливать на кол-во байт в дс 18б20 и потом сравнивать с последним?
не надо сравнивать, надо "зацикливать" ВСЕ данные - если все верно, то в итоге будет НОЛЬ. но вот код показанной вами функции не проверял я, поэтому не гарантирую его корректность. лучше всего взять гарантированно верный код - из avr-libc (входит в комплект avr-gcc модуль util/crc16.h) или реализовать алгоритм самостоятельно по апноуту производителя.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Я вот такую функцию делал. Не хочу сказать что именно так и надо делать и что она оптимальна, но проблем не было. Сначала хотел на асме сделать, но решил что сделаю "потом". Спойлер
//функция подсчета 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;
}
Tenken писал(а):
Ибо переодически в индикации вылазиет какая-то хрень
А вот периодической хрени быть не должно, у меня есть устройство с DS, кабель метров 15 был (сейчас укоротил), никаких проблем не было. Контрольная сумма "на всякий случай", но не для борьбы с помехами. Если у Вас постоянные ошибки, надо что-то пересмотреть.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
И это только на этом сайте, да и то мне уже влом стало копипастить ссылки... Вам не стыдно?
Добавлено after 1 minute 23 seconds: Re: Нужна прошивка для подключения датчиков температуры ds18b20 Я правда в списке ссылок с разбегу залимонил несколько проектов на PIC... они вам не подойдут... но еще есть минимум 50 (!!!) проектов термометров на Радиокоте - дерзайте!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Не судите строго, я только учусь... С LCD без проблем подключил, ножками на вход/выход научился управлять. Сделал часики. С прерываниями разобрался. С шаговиками разобрался. А вот датчик температуры меня в ступор ввел. Мучаюсь и не пойму ничего вроде должно работать а не хочет... Толи код кривой, то ли я как-то не так... Купил для пробы датчик вот тут http://jewelfox.ru/lot.php?id=8439. Может что не так подключаю (тоже в интернете смотрел)... диод при подключение питания должен же гореть, а у меня не горит...
Заголовок сообщения: Re: Нужна прошивка для подключения датчиков температуры ds18
Добавлено: Пт мар 31, 2017 07:46:37
Сверлит текстолит когтями
Карма: 15
Рейтинг сообщений: 210
Зарегистрирован: Вт мар 31, 2015 22:56:07 Сообщений: 1272 Откуда: Мы люди простые, живем в лесу, на пенек молимся
Рейтинг сообщения:0
именно такое решение есть среди показанных мной ссылок: http://radiokot.ru/circuit/digital/home/61/ - кстати, это моя разработка (основа), там и ссылка на мой вариант есть.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Ну и я свои "пять копеек" вставлю. Вот сайтик с довольно разжеванным обучением. А вот статья про сам датчик, а здесь и термометр, как раз по всем вашим требованиям)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения