ds18b20 код на си

Урок 15. Работа с датчиком температуры DS18B20 в BASCOM-AVR

Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Для начала работы с DS18B20 нужно сконфигурировать порт микроконтроллера к которому подключён датчик, для этого есть команда: Config 1wire = Порт, пример: Config 1wire = Portb.1. Потом нужно послать датчику команду сброса 1wreset после чего прочитать полученный байт в регистре Err, если значение в нём равно единице (If Err = 1 Then) значит DS18B20 не подключён \ неисправен или нет подтягивающего сопритивления на линии (оно должно быть около 4,7кОм). Все остальные значения регистра Err указавают на правильную работу датчика. Теперь (в случае если Err <> 1 (-: ) нужно послать DS18B20 команду чтения 1wwrite &HCC и 1wwrite &H44 потом подождать примерно 800 миллисекунд и заново пошлём команду сброса 1wreset, после чего нужно применить следующие команды 1wwrite &HCC и 1wwrite &HBE. Всё, можно считывать байты температуры с датчика, для этого воспользуемся командой 1wread() и с её помощью считаем данные в переменные A и B (их надо заранее сконфигурировать, тип Byte), вот так: A = 1wread() и B = 1wread(). Теперь осталось обработать полученные данные и вывести их например на ЖК индикатор. Я специально не провожу здесь команды обработки и вывода данных с датчика чтобы не усложнять урок, их вы можете наглядно посмотреть в исходном коде практической программы. Уверяю вас там всё очень просто, только надо учить алгебру!

Практическая работа

Давайте теперь попробуем поработать с датчиком температуры DS18B20 на практике, а именно соберём простой термометр. Для этого будем использовать микроконтроллер Attiny2313, ЖК индикатор на контроллере HD44780 с разрешением 16*2 или 16*4 и сам датчик DS18B20. Соберём из этого простую схему:

ds18b20 код на си. mc181 1. ds18b20 код на си фото. ds18b20 код на си-mc181 1. картинка ds18b20 код на си. картинка mc181 1. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Вот, на всякий случай распиновка датчика DS18B20:

ds18b20 код на си. mc181 2. ds18b20 код на си фото. ds18b20 код на си-mc181 2. картинка ds18b20 код на си. картинка mc181 2. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Напишем и откомпилируем следующую практическую программу:

Прошьём её в микроконтроллер и выставим следующие фьюз биты (для программы SinaProg):

ds18b20 код на си. mc181 3. ds18b20 код на си фото. ds18b20 код на си-mc181 3. картинка ds18b20 код на си. картинка mc181 3. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

После сборки схемы и прошивки микроконтроллера запускайте устройство (напряжение питания 5 вольт можно взять от USB), на ЖКИ должна отобразиться текущая температура. Если датчик неисправен или подключён неправильно тогда на ЖКИ отобразиться надпись «Err». Контрастность ЖКИ можно устанавливать изменяя сопротивление R1, его даже лучше заменить на переменное. Я собрал устройство на макетной плате с механическими контактами, вот фото:

ds18b20 код на си. mc181 4. ds18b20 код на си фото. ds18b20 код на си-mc181 4. картинка ds18b20 код на си. картинка mc181 4. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Ну и собственно видео как всё это работает:

На этом всё! Складывайте вопросы в комментариях, постараюсь своевременно на них ответить.

Источник

AVR Урок 20. Подключаем датчик температуры DS18B20. Часть 2

Урок 20

Подключаем датчик температуры DS18B20

В предыдущей части нашего занятия мы кратко изучили датчик DS18B20, который является датчиком температуры. Также мы уже создали проект и начали писать в него некоторый код и остановились на функции определения наличия датчика на шине. В данной функции мы запретили прерывания, сохранив до этого стек.

Продолжим работать с ней далее.

Добавим ещё одну переменную в теле данной функции для возврата результата функции

cli (); //запрещаем прерывание

char dt ;

Теперь для удобства работы с ножками порта давайте напишем некоторые дефайновые замены в заголовочном файле DS18B20.h

#define PORTTEMP PORTD

#define DDRTEMP DDRD

#define PINTEMP PIND

#define BITTEMP 1

Также здесь давайте сделаем ещё некоторые макроподставновки

#define NOID 0xCC //Пропустить идентификацию

#define T_CONVERT 0x44 //Код измерения температуры

#define READ_DATA 0xBE //Передача байтов ведущему

Здесь мы присваиваем удобные имена командам датчикам.

Ну давайте их посмотрим.

Первая команда 0xCC

ds18b20 код на си. Image03 9. ds18b20 код на си фото. ds18b20 код на си-Image03 9. картинка ds18b20 код на си. картинка Image03 9. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Она заставляет датчик отойти от стандартной процедуры инициализации и позволяет пропутсить считыванеие ROM для определения идентификатора. Нам идентификатор не нужен, так как датчик данный на шине у нас присутствует в единственном экземпляре.

Следующая команда 0x44

ds18b20 код на си. Image04 12. ds18b20 код на си фото. ds18b20 код на си-Image04 12. картинка ds18b20 код на си. картинка Image04 12. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Данная команда инициализирует начало конвертирования данных в цифровой код.

Следующая команда 0xBE

ds18b20 код на си. Image05 11. ds18b20 код на си фото. ds18b20 код на си-Image05 11. картинка ds18b20 код на си. картинка Image05 11. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Данная команда читает регистры датчика. Вот эти регистры

ds18b20 код на си. Image06 10. ds18b20 код на си фото. ds18b20 код на си-Image06 10. картинка ds18b20 код на си. картинка Image06 10. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Вот так вооще организована вся память в датчике измеерния температуры, и как мы видим, самые младшие два регистра в данной памяти и представляют собой два байта показаний температуры.

Посмотрим теперь все тайминги инициализации датчика

ds18b20 код на си. Image07 9. ds18b20 код на си фото. ds18b20 код на си-Image07 9. картинка ds18b20 код на си. картинка Image07 9. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Здесь видно что мы здесь притягиваем шину, дежим её в таком состоянии как минимум 480 микросекунд, затем отпускаем её, ждём максимум 60 мкс (мы подождём побольше – 65 мкс) ответа датчика, датчик должен нам ответить таким же притягиванием шины к земле за данное время. Если обнаружится ноль, то значит устройство на шине есть, а если шина так и останется висеть в воздухе, то данного датчика на шине нет.

Ну. и на остове вышепрочитанного продолжим нашу функцию определения наличия датчика на шине

DDRTEMP |= 1 BITTEMP ; //притягиваем шину

_delay_us (485); //задержка как минимум на 480 микросекунд

(1 BITTEMP ); //отпускаем шину

_delay_us (65); //задержка как минимум на 60 микросекунд

if (( PINTEMP & (1 BITTEMP ))==0) //проверяем, ответит ли устройство

dt =1; //устройство есть

else dt =0; //устройства нет

В условии у нас идёт проверка, опустилась ли шина.

Затем мы стеку вернём его первоначальное состояние

else dt =0; //устройства нет

SREG = stektemp ; // вернем значение стека

Отдельной командой после этого разрешать прерывания не требуется, так как все эти команды как раз и управляют определёнными битами регистра SREG. Если прерывания были разрешены до сохранения стека, то они, ясное дело, опять разрешатся, так как все биты регистра мы возвращаем в прежнее положение.

Дальше. судя по диаграмме, которая у нас находится выше, мы должны выдержать время максимум 480 микросекунд, но так как после последней задержки у нас уже прошло некоторое количество времени, то хватит и 420, тем более задержка эта не фиксированная, а максимальная. Ну, и добавим эту задержку в тело функции далее, и в оконцовке вернём результат функции.

SREG = stektemp ; // вернем значение стека

_delay_us (420); //задержка как минимум на 480 микросекунд, но хватит и 420, тк это с учетом времени прошедших команд

return dt ; //вернем результат

Теперь по окончании написания кода данной функции, мы можем продолжить начатую в предыдущей части урока функцию преобразования. Но, всё-таки, чтобы её продолжить, нам нужна будет ещё одна немаловажная, а может и вообще самая важная функция в нашем проекте – функция считывания байта с датчика температуры. Создадим данную функцию, а также в её теле сразу объявим две локальные переменные

//функция чтения байта с устройства

unsigned char dt_readbyte ( void )

char c =0;

char i ;

Прежде чем писать дальше тело данной функции, мы должны вспомнить что каждый байт у нас состоит из восьми бит, поэтому целесообразно для того, чтобы не нагромождать много кода в одну функцию, создать ещё одну выше для чтения отдельного бита с датчика температуры. Создадим пока каркас данной функции с комментарием, объясняющем назначение этой функции

//функция чтения бита с устройства

char dt_readbit ( void )

В данной функции мы также сохраним регистр статусов микроконтроллера, запретим прерывания и создадим переменную для дальнейшего возврата результата. Результат у нас будет в виде обычной знаковой 8-битной величины, по большому счёту мы в ней будем использовать только младший бит

//функция чтения бита с устройства

char dt_readbit ( void )

char stektemp =SREG; // сохраним значение стека

cli (); //запрещаем прерывание

char bt ; //переменная хранения бита

Для написания дальнейшего кода посмотрим временную диаграмму, как вообще читать бит с данного датчика. Данная диаграмма в технической документации универсальна и для чтения и для записи бита в устройство

ds18b20 код на си. Image08 10. ds18b20 код на си фото. ds18b20 код на си-Image08 10. картинка ds18b20 код на си. картинка Image08 10. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Мы здесь видим, что после притягивания шины к земле мы ждём минимум одну микросекунду, ну, подождём две микросекунды на всякий случай, перед этим притянув шину к земле

char bt ; //переменная хранения бита

DDRTEMP |= 1 BITTEMP ; //притягиваем шину

_delay_us (2); //задержка как минимум на 2 микросекунды

Смотрим дальше. Мы должны шину отпустить от земли, а затем задержка для считывания результата. Здесь стоит общая задержка 15 микросекунд, так как мы уже две подождали, осталось нам 13

_delay_us (2); //задержка как минимум на 2 микросекунды

(1 BITTEMP ); //отпускаем шину

_delay_us (13);

После данной задержки результат уже на шине должен быть. Считаем его аналогично, как в предыдущей функции мы узнавали присутствие усройства на шине

bt = ( PINTEMP & (1 BITTEMP ))>> BITTEMP ; //читаем бит

До считывания следующего байта, судя по диаграмме мы ждём 45 микросекунд, затем возвращаем значение стека в стек и возвращаем результат функции считывания бита на шине

bt = ( PINTEMP & (1 BITTEMP ))>> BITTEMP ; //читаем бит

_delay_us (45);

SREG = stektemp ; // вернем значение стека

return bt ; //вернем результат

Теперь, используя данную функцию, допишем тело функции считывания с датчика целого байта, последовательно занося байты в переменную c, применяя битовый сдвиг, а затем ещё же и возвращая.

char i ;

for ( i =0; i i ++)

c |= dt_readbit () i ; //читаем бит

return c ;

Ну вот. Самая, можно сказать, важная функция написана.

Продолжим функцию конвертирования считанных байтов

unsigned int tt =0;

if ( dt_testdevice ()==1) //если устройство нашлось

return tt ;

В теле условия по определению присутствия датчика на шине, прежде чем что-то считать с нашего датчика, мы должны ему будем передать команды. А чтобы их передать, мы должны будем написать также функцию отправки байта в устройство. Но так как мы и так уже много чего в данной части написали, то сделаем это в следующей части урока.

Программатор, датчик температуры DS18B20 на плате и дисплей можно приобрести здесь:

Смотреть ВИДЕОУРОК (нажмите на картинку)

Источник

AVR Урок 20. Подключаем датчик температуры DS18B20. Часть 1

Урок 20

Подключаем датчик температуры DS18B20

ds18b20 код на си. Image00 9. ds18b20 код на си фото. ds18b20 код на си-Image00 9. картинка ds18b20 код на си. картинка Image00 9. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.Продолжаем изучать датчики компании DALLAS.

И сегодняшним представителем будет DS18B20, который является датчиком температуры.

Измеряет температуру данный датчик в градусах по цельсию. Измерения могут быть как 9-битной дискретности, так и 12-битной.

Распределяются данные биты следующим образом.

Мы будем измерять температуру в 12-битном виде и самые младшие 4 бита будут хранить показания долей градуса, а остальные старшие 8 – сами градусы.

Подключается данный датчик по однопроводной технологии (1-wire).

Погрешность данного датчика – 0,5 градуса, поэтому нам нет смысла использовать все младшие биты и мы их будем просто отсекать.

Режим 1-wire у нас не организован аппаратно в контроллере, поэтому мы будем весь протокол программировать.

Чем удобен для нас данный датчик? Удобен он тем, что мы можем его в часовой модуль, использованный на прошлых занятиях просто впаять и использовать. Для этого на модуле выведен отдельный контакт. У датчика всего 3 ножки. 2 из них ножки питания и одна – ножка данных.

Данный датчик существует в двух видах корпуса – Dip и TO-92. Мы будем использовать второй тип.

В связи с этим у каждого датчика есть уникальный 64-битный код, записанный в его ROM, записанного постредством лазерных технологий.

Но, так как мы будем использовать только один датчик, то мы будем к нему обращаться другим способом, не используя ROM.

Мы подаём на датчик команду 44h последовательным кодом, тем самым заставляя датчик конвертировать температуру.

Посмотрим регистры, в которых хранится значение температуры после преобразования

ds18b20 код на си. Image01 10. ds18b20 код на си фото. ds18b20 код на си-Image01 10. картинка ds18b20 код на си. картинка Image01 10. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

В четырех младших битах младшего регистра хранятся доли градусов, в четырех старших, а также в трех младших битах старшего регистра – целые значения градусов.

В остальных битах – знак. Если 0, то плюс, если 1 – то минус.

Также в технической документации написано, что нужно обязательно подтянуть резистор на информационную ножку датчика к питанию.

Также написан ряд временных и других характеристик, которые мы уже будем рассматривать по мере того, как будем писать код.

Проект был создан новый и назван My1820LCD, все файлы проекта прошлого занятия MyClock1307LCD были вставлены в проект, а код главного модуля также был скопирован в главный модуль нового проекта. Всё это сделано потому, что мы работаем с тем же модулем, просто мы также впаяли туда датчик температуры, а время мы считывать не перестанем, пусть часы также ходят.

Добавим ещё файлы DS18B20.c и DS18B20.h для созадния библиотеки работы именно с датчиком температуры и заголовочный файл также подключим в main.h по нашему обыкновению, ну и его же подключим в одноименный c-файл.

Сначала создадим функцию конвертирования температуры в файле DS18B20.c. Надобность данной функции обусловлена тем, что датчик нам передаёт показания в двух байтах в определённом виде, рассмотренном нами выше, который без преобразования будет непонятен

//функция преобразования показаний датчика в температуру

int dt_check ( void )

Создадим две переменных, которые нам пригодятся в дальнейшем в теле нашей функции

int dt_check ( void )

unsigned char bt ; //переменная для считывания байта

unsigned int tt =0;

Сразу сделаем прототип нашей функции в заголовочном файле

int dt_check ( void ); //функция преобразования показаний датчика в температуру

Чтобы нам дальше писать тело функции, нам будет нужна ещё функция. Напишем её выше, чтобы не создавать прототип. Данная функция будет узнавать, есть ли датчик на шине

//функция определения датчика на шине

char dt_testdevice ( void ) //dt – digital termomether | определим, есть ли устройство на шине

Теперь, прежде чем писать тело данной функции, самое время посмотреть схему подключения датчика к контроллера. Посмотрим опять же упрощённый вариант в протеусе (нажмите на картинку для увеличения изображения)

ds18b20 код на си. Image02 500. ds18b20 код на си фото. ds18b20 код на си-Image02 500. картинка ds18b20 код на си. картинка Image02 500. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Мы видим, что датчик своим информационным портом подключен к ножке порта МК PD1, также мы видим подтягивающее сопротивление на 4,7 килоом с данного провода на шину питания.

И вот теперь на данной ножке мы должны как-то иммитировать определённые имплуьсы. То есть мы как-то должны инициализировать то ноль, то единицу. Делать мы это сможем благодаря тому, что у нас есть подтягивающий резистор. Мы будем её то отпускать от общей шины, то притягивать к ней. Соответственно, когда мы её отпустим, то через резистор на ней окажется высокий уровень, а когда подтянем к земле, то низкий.

Теперь вопрос, как это всё сделать. А сделать это можно вполне с помощью определённого бита регистра DDRB, который отвечает, как мы знаем, за направление работы определённых ножек порта. Но мы воспользуемся тем, что когда мы объявляем ножку на выход, она у нас притягивается к земле, понятно что при условии, что соответствующий бит регистра PORTD будет также нулём. А если мы уже в соответствующий бит регистра DDRB записываем значение, при котором соответствующая этому биту ножка объявится на вход, то, соответственно, от общей шины она. ясное дело отпустится, иначе как контроллер определит её состояние. Ну и, как и было написано выше, на этой ножке засчет подтягивающего резистора установится высокий логический уровень.

Также, начиная процесс обмена с датчиком, мы должны запретить прерывания, чтобы не получить искаженных данных. Также, прежде чем запретить прерывания, нам необходимо сохранить регистр статуса контроллера, или стек. Это регистр SREG. Поэтому в самом начале тела нашей функции проверки присутствии датчика на шине мы это и сделаем, сохранив его в определённую переменную, ну и затем уже запретим прерывания

char dt_testdevice ( void ) //dt – digital termomether | определим, есть ли устройство на шине

char stektemp =SREG; // сохраним значение стека

cli (); //запрещаем прерывания

Дальнейшую работу с датчиком мы продолжим в следующей части нашего занятия.

Программатор, датчик температуры DS18B20 на плате и дисплей можно приобрести здесь:

Смотреть ВИДЕОУРОК (нажмите на картинку)

Источник

Изучаем DS1820/DS18B20. Делаем простой термометр

ds18b20 код на си. rating star. ds18b20 код на си фото. ds18b20 код на си-rating star. картинка ds18b20 код на си. картинка rating star. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.ds18b20 код на си. rating star. ds18b20 код на си фото. ds18b20 код на си-rating star. картинка ds18b20 код на си. картинка rating star. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.ds18b20 код на си. rating star. ds18b20 код на си фото. ds18b20 код на си-rating star. картинка ds18b20 код на си. картинка rating star. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.ds18b20 код на си. rating star. ds18b20 код на си фото. ds18b20 код на си-rating star. картинка ds18b20 код на си. картинка rating star. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.ds18b20 код на си. rating star. ds18b20 код на си фото. ds18b20 код на си-rating star. картинка ds18b20 код на си. картинка rating star. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

В этой статье займемся изучением практического применения цифровых датчиков температуры DS18B20. Сделаем простой термометр на семисегментных индикаторах, который будет показывать положительную и отрицательную температуру с разрешением 0,1 градус Цельсия. Для этой цели используем микроконтроллер Atmega8, который работает от внутреннего генератора частотой 8 МГц, семисегментный индикатор с общим анодом(четырехразрядный) и датчик температуры DS18B20. Схема устройства показана на рисунке 1. Шину данных датчика подключаем к порту PC0, а также подключаем к плюсу питания через резистор R1 номиналом 4,7 кОм, поскольку выходной транзистор датчика имеет открытый сток. При питании датчика от шины данных(паразитное питание) вывод 3 датчика остается свободным.

Как уже известно последовательность действий при работе с одним датчиком будет такая:

1) послать сигнал обнуления линии (480. 960 мкc);
2) принять импульс присутствия или заполнить время паузой (60. 240 мкc);
3) послать команду пропуска идентификации 0xCC;
4) послать команду начала преобразования 0x44;
5) пауза не менее 500 мкc для завершения процесса преобразования;
6) обнулить линию;
7) послать команду пропуска идентификации 0xCC;
8) послать команду считывания блокнота 0xBE;
9) принять 12 байт(по умолчанию);
10) выделить и проанализировать бит десятых долей градуса с установленной точностью, в нашем примере это 0,0625;
11) проанализировать бит знака;
12) если знак отрицательный, то перевести значение температуры в дополнительный код;
13) делаем преобразование целой и дробной части значения температуры и выводим на дисплей.

ds18b20 код на си. 378 01. ds18b20 код на си фото. ds18b20 код на си-378 01. картинка ds18b20 код на си. картинка 378 01. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Рисунок 1.

Реализация динамической индикации описана на одном из прошлых занятий, подпрограмма была немного упрощена но сути не изменила. Также используется прерывание по переполнению таймера 2.

Для общения микроконтроллера с датчиком понадобятся три функции:

Источник

Микроконтроллер AVR и датчик DS18B20

Сегодня, в заключительной статье о датчиках температуры DS18B20, мы полностью рассмотрим и проанализируем работу программы общения DS18B20 с микроконтроллерами AVR (или наоборот). И хотя программа будет в Algorithm Builder (графический ассемблер), главное понять алгоритм общения датчика DS18B20 с микроконтроллером, а перевести ее потом в «классический ассемблер» большого труда не составит.

ds18b20 код на си. Programma obshheniya DS18B20 s mikrokontrollerom. ds18b20 код на си фото. ds18b20 код на си-Programma obshheniya DS18B20 s mikrokontrollerom. картинка ds18b20 код на си. картинка Programma obshheniya DS18B20 s mikrokontrollerom. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Последовательность операций для работы с датчиком DS18B20

При работе с датчиком DS18B20 очень важно выполнять последовательность выполнения операций:
1. Инициализация
2. Команда ROM
3. Функциональная команда
Если не следовать этой последовательности (что-то пропустить, или поменять местами), то датчик DS18B20 откажется общаться с микроконтроллером

Инициализация датчика DS18B20

В прошлой статье мы рассматривали этот вопрос (инициализация датчика DS18B20), но повторимся, что бы не прыгать по страницам сайта.

1. Микроконтроллер передает в линию импульс сброса (длительность 480 микросекунд):
— переводит шину DQ в состояние логического нуля (вывод микроконтроллера переводится на вывод информации и в него записывается логический ноль) на время не менее 480 микросекунд (я обычно округляю длительность импульса до 500 микросекунд)
— через 480 микросекунд (или 500) микроконтроллер переводит шину DQ на ввод информации, в результате чего за счет подтягивающего резистора на шине восстанавливается логическая единица
— микроконтроллер ждет импульс присутствия от датчика DS18B20

ds18b20 код на си. Vremennoy grafik initsializatsii DS18B20. ds18b20 код на си фото. ds18b20 код на си-Vremennoy grafik initsializatsii DS18B20. картинка ds18b20 код на си. картинка Vremennoy grafik initsializatsii DS18B20. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

В ходе процесса инициализации могут возникнуть три ошибки, которые мы разберем непосредственно в программе:

ds18b20 код на си. Sostoyanie razryada shinyi DQ DS18B20. ds18b20 код на си фото. ds18b20 код на си-Sostoyanie razryada shinyi DQ DS18B20. картинка ds18b20 код на си. картинка Sostoyanie razryada shinyi DQ DS18B20. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Ну а теперь рассмотрим подробно саму подпрограмму «Инициализация датчика DS18B20» :

ds18b20 код на си. Initsializatsiya datchika DS18B20. ds18b20 код на си фото. ds18b20 код на си-Initsializatsiya datchika DS18B20. картинка ds18b20 код на си. картинка Initsializatsiya datchika DS18B20. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Команда ROM DS18B20

Давайте посмотрим на временной график записи данных в датчик и на его основе составим подпрограмму записи данных в DS18B20:

ds18b20 код на си. Peredacha nulya i edinitsyi v S18B20. ds18b20 код на си фото. ds18b20 код на си-Peredacha nulya i edinitsyi v S18B20. картинка ds18b20 код на си. картинка Peredacha nulya i edinitsyi v S18B20. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.Теперь давайте посмотрим как передать байт информации датчику (все команды для датчика однобайтовые).
Запись байта информации в датчик также оформлена в виде подпрограммы:

Функциональные команды DS18B20

Как и команды ROM, функциональные команды однобайтовые и процесс их передачи датчику аналогичен процессу передачи команды ROM.
В основном используются две функциональные команды:
— «Конвертировать температуру», по этой команде датчик «измеряет температуру»
— «Чтение памяти», по этой команде датчик передает МК результаты конвертирования температуры

Конвертировать температуру (измерить температуру) DS18B20

Посмотрим на примере алгоритм подачи команды на конвертирование температуры:

Чтение памяти DS18B20

Рассмотрим как происходит чтение информации от датчика.
Временной график слотов времени передачи битов данных от датчика:

Считанные байты мы записываем в назначенные переменные.
Хочу обратить ваше внимание на то, что в первом байте результатов конвертирования температуры, в первых четырех битах записаны «Десятые градуса» в виде какого-то числа. К примеру, при 12-битной разрешающей способности датчика, это число может быть от 0 до 14, поэтому десятые градуса рассчитываются самостоятельно. Старшие 4 бита 1-го байта и младшие четыре байта 2 байта содержат информацию о целых градусах именно в градусах.
Это не очень удобно для работы, и поэтому сначала надо выделить «десятые» в отдельный байт путем записи первых 4-х битов 1-го байта в отдельную переменную. Старшие 4 бита 1-го байта записываем в младшие 4 бита другой переменной, и в эту же переменную, в старшие 4 бита, записываем младшие 4 бита 2-го байта. К примеру так (заодно и определяем знак температуры):

ds18b20 код на си. Razdelenie tselyih i desyatyih gradusa DS18B20. ds18b20 код на си фото. ds18b20 код на си-Razdelenie tselyih i desyatyih gradusa DS18B20. картинка ds18b20 код на си. картинка Razdelenie tselyih i desyatyih gradusa DS18B20. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.

Предыдущие статьи:

ds18b20 код на си. rating on. ds18b20 код на си фото. ds18b20 код на си-rating on. картинка ds18b20 код на си. картинка rating on. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.ds18b20 код на си. rating on. ds18b20 код на си фото. ds18b20 код на си-rating on. картинка ds18b20 код на си. картинка rating on. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.ds18b20 код на си. rating on. ds18b20 код на си фото. ds18b20 код на си-rating on. картинка ds18b20 код на си. картинка rating on. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.ds18b20 код на си. rating on. ds18b20 код на си фото. ds18b20 код на си-rating on. картинка ds18b20 код на си. картинка rating on. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR. ds18b20 код на си. rating half. ds18b20 код на си фото. ds18b20 код на си-rating half. картинка ds18b20 код на си. картинка rating half. Сегодня мы научимся считывать данные температуры с одного DS18B20 в BASCOM-AVR.(18 голосов, оценка: 4,83 из 5)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *