ДС18Б20 је дигитални температурни сензор који користи једну магистралу времена за комуникацију са домаћином. Само 1 Жица је потребна да се заврши очитавање података о температури;
ДС18Б20 има уграђени 64-битни серијски број производа за лаку идентификацију. Може се повезати више сензора ДС18Б20 1 Жица, и кроз 64-битну аутентификацију идентитета, информације о температури прикупљене од различитих сензора могу се читати одвојено.
Увод у ДС18Б20
2.1 Главне карактеристике ДС18Б20
1. Потпуно дигитална конверзија и излаз температуре.
2. Напредна комуникација података са једном магистралом.
3. До 12-битне резолуције, са тачношћу до ±0,5 степени Целзијуса.
4. Максимални радни циклус при 12-битној резолуцији је 750 милисекунди.
5. Паразитски режим рада се може изабрати.
6. Опсег температуре детекције је –55° Ц ~+125° Ц (–67° Ф ~+257° Ф).
7. Уграђени ЕЕПРОМ, функција аларма ограничења температуре.
8. 64-бит фотолитографија РОМ, уграђени серијски број производа, погодан за повезивање са више машина.
9. Различити облици паковања, прилагођавају се различитим хардверским системима.
2.2 ДС18Б20 функција пина
ГНД напон уземљења;
ДК једна магистрала података;
ВДД напон напајања;
НЦ празан пин;
2.3 ДС18Б20 принцип рада и примена
ДС18Б20 детекција температуре и дигитални излаз података су потпуно интегрисани на једном чипу, тако да има јачу способност против сметњи. Његов један радни циклус може се поделити на два дела, и то детекцију температуре и обраду података.
18Б20 има три облика меморијских ресурса. јесу: РОМ меморија само за читање, користи се за чување ДС18Б20ИД кода; први 8 битови су једноредни серијски код (ДС18Б20 код је 19Х), следеће 48 битови су јединствени серијски број чипа; последњи 8 битови су ЦРЦ код (провера редунданције) од наведених 56 битс. Подаци се постављају у производњи и корисник их не може мењати. ДС18Б20 има укупно 64 битови РОМ-а.
РАМ регистар података, користи се за интерно израчунавање и приступ подацима, подаци се губе након нестанка струје, ДС18Б20 има укупно 9 бајтова РАМ-а, сваки бајт је 8 битс. Први и други бајт су информације о вредности података након конверзије температуре; трећи и четврти бајт су одраз корисничког ЕЕПРОМ-а (обично се користи за складиштење вредности аларма температуре). Његова вредност ће бити освежена када се напајање ресетује. Пети бајт је одраз трећег ЕЕПРОМ-а корисника. 6, 7тх, а 8. бајтови су регистри бројања, који су дизајнирани да омогуће корисницима да добију вишу температурну резолуцију. Они су такође привремене јединице за складиштење за унутрашњу конверзију и израчунавање температуре. 9. бајт је ЦРЦ код првог 8 бајтова. ЕЕПРОМ је непроменљива меморија која се користи за складиштење података које треба дуго чувати, горње и доње алармне вредности температуре, и подаци о верификацији. ДС18Б20 има укупно 3 битови ЕЕПРОМ-а, а у РАМ-у се налазе слике у огледалу како би се олакшао рад корисника.
ДС18Б20 подразумевано ради у режиму резолуције 12 бита. 12-битни подаци добијени након конверзије чувају се у два 8-битна РАМ-а ДС18Б20 (прва два бајта). Први 5 битови у бинарном систему су знаковни битови. Ако је измерена температура већа од 0, ове 5 битови су 0. Само помножите измерену вредност са 0.0625 да бисте добили стварну температуру. Ако је температура мања од 0, ове 5 битови су 1. Измерену вредност треба инвертовати, додао је 1, а затим помножено са 0.0625 да бисте добили стварну температуру. Или користите битну операцију за издвајање температуре: децимална места заузимају ниже 4 битс, а горњи битови су целобројни битови (негативни бројеви се не узимају у обзир).
2.4 Табела са упутствима за РОМ чип ДС18Б20
1. Прочитајте РОМ [33Х] (хексадецимална командна реч је у угластим заградама).
Ова команда омогућава контролеру магистрале да чита 64-битни РОМ ДС18Б20. Ово упутство се може користити само када постоји само један ДС18Б20 на магистрали. Ако је повезано више њих, током комуникације ће доћи до сукоба података.
2. атцх РОМ [55Х]
Ово упутство прати 64-битни серијски број који издаје контролер. Када постоји више ДС18Б20 у магистрали, само чип са истим серијским бројем као онај који је издао контролер може да одговори, а остали чипови ће чекати следеће ресетовање. Ово упутство је погодно за повезивање са једним и више чипова.
3. Прескочи РОМ [ЦЦХ]
Ова инструкција чини да чип не реагује на РОМ код. У случају једног аутобуса, ово упутство се може користити за уштеду времена. Ако се ово упутство користи када је повезано више чипова, доћи ће до сукоба података, што резултира грешкама.
4. Претражи РОМ [Ф0Х]
Након што се чип иницијализује, инструкција за претрагу омогућава да се 64-битни РОМ свих уређаја идентификује елиминацијом када је више чипова повезано на магистралу.
5. Претрага аларма [СВАКИ]
У случају више чипова, инструкција за претрагу алармног чипа одговара само на чипове који испуњавају алармни услов температуре веће од ТХ или мање од ТЛ. Све док чип није искључен, стање аларма ће се одржавати све док се температура поново не измери и не достигне стање аларма.
6. Врите Сцратцхпад [4ЕХ]
Ово је упутство за писање података у РАМ. Два бајта података који су накнадно написани биће ускладиштени на адреси 2 (ТХ алармне меморије) и адреса 3 (ТЛ алармне меморије). Процес писања може бити прекинут сигналом за ресетовање.
7. Прочитајте Сцратцхпад (читање података из РАМ-а) [БЕХ]
Ова инструкција ће читати податке из РАМ-а, почев од адресе 0 и до адресе 9, довршавање читања целокупних РАМ података. Чип омогућава да сигнал за ресетовање прекине процес читања, то је, накнадни непотребни бајтови се могу занемарити да би се смањило време читања.
8. Копирај Сцратцхпад (копирајте РАМ податке у ЕЕПРОМ) [48Х]
Ово упутство чува податке у РАМ-у у ЕЕПРОМ тако да подаци неће бити изгубљени када се напајање искључи. Пошто је чип заузет обрадом ЕЕПРОМ меморије, када контролер пошаље очитани временски слот, излази са магистрале “0”, а када се заврши складиштење, аутобус ће изаћи “1”.
У паразитском режиму рада, снажно повлачење се мора користити одмах након издавања ове инструкције и одржавати најмање 10 МС да би се одржао рад чипа.
9. Претвори Т (конверзија температуре) [44Х]
Након добијања овог упутства, чип ће извршити конверзију температуре и сачувати конвертовану вредност температуре у 1. и 2. адреси РАМ-а. Пошто је чип заузет обрадом конверзије температуре, када контролер пошаље очитани временски слот, излази са магистрале “0”, а када се заврши складиштење, аутобус ће изаћи “1”. У паразитском режиму рада, снажно повлачење се мора користити одмах након издавања ове инструкције и одржавати најмање 500 МС да би се одржао рад чипа.
10. Позовите ЕЕПРОМ (Копирајте вредност аларма из ЕЕПРОМ-а у РАМ) [Б8Х]
Ова инструкција копира вредност аларма у ЕЕПРОМ-у у 3. и 4. бајт у РАМ-у. Пошто је чип заузет обрадом копирања, када контролер пошаље очитани временски слот, излази са магистрале “0”, а када се заврши складиштење, излази са магистрале “1”. Додатно, ова инструкција ће се аутоматски извршити када се чип укључи и ресетује. На овај начин, два бита алармног бајта у РАМ-у ће увек бити зрцална слика података у ЕЕПРОМ-у.
11. Прочитајте напајање (Прекидач радног режима) [Б4Х]
Након што се изда ово упутство, издаје се временски размак за читање, а чип ће вратити своју реч статуса напајања. “0” је паразитско стање моћи и “1” је спољно стање моћи.
2.5 ДС18Б20 Временски дијаграм
2.5.1 ДС18Б20 Ресетовање и дијаграм односа одговора
Ресетовање се мора извршити пре сваке комуникације. Време ресетовања, време чекања, а време одзива треба стриктно програмирати према тајмингу.
ДС18Б20 временски размак за читање и писање: Читање и писање података ДС18Б20 потврђено је битом за обраду временског размака и командном речју за размену информација.
2.5.2 Напишите податке 0 и података 1 до ДС18Б20
У првих 15уС временског размака за уписивање података, аутобус треба да се повуче ниско од контролора, а онда ће то бити време узорковања чипа за податке са магистрале. Време узорковања је 15~60уС. Ако контролер повуче сабирницу високо током времена узорковања, значи писање “1”, а ако контролор повуче сабирницу ниско, значи писање “0”.
Сваки бит преноса треба да има почетни бит ниског нивоа од најмање 15уС, и накнадних података “0” или “1” треба да се заврши у року од 45уС.
Време преноса целог бита треба да буде на 60~120уС, иначе се не може гарантовати нормална комуникација.
Напомена: ДС18Б20 чита и уписује податке из ниског бита.
2.5.3 Читање података 0 и података 1 од ДС18Б20
Време узорковања контроле током временског размака очитавања требало би да буде тачније. Током временског размака за читање, домаћин такође мора да генерише низак ниво од најмање 1уС да би означио почетак времена читања. Онда, за 15уС након пуштања сабирнице, ДС18Б20 ће послати интерни бит података. У овом тренутку, ако контрола утврди да је сабирница високо, значи читање “1”, а ако је аутобус низак, значи читање података “0”. Пре читања сваког бита, контролер додаје стартни сигнал.
Напомена: Бит података мора бити прочитан унутар 15уС од почетка размака читања да би се осигурала исправна комуникација.
Током комуникације, 8 битс оф “0” или “1” се користе као бајт, а читање или писање бајта почиње од нижег бита.
2.5.4 Редослед очитавања температуре једном (само један ДС18Б20 у аутобусу)
1. Пошаљите сигнал за ресетовање
2. Откријте сигнал одговора
3. Пошаљи 0кЦЦ
4. Пошаљи 0к44
5. Пошаљите сигнал за ресетовање
6. Откријте сигнал одговора
7. Напишите 0кцц
8. Напишите 0кбе
9. Лооп 8 пута за очитавање ниског бајта температуре
10. Лооп 8 пута за читање високог бајта температуре
11. Синтетизујте 16-битне податке о температури и обрадите их
3. Код возача
3.1 ДС18Б20.ц
#укључити “дс18б20.х”
/*
Функција: Иницијализација ДС18Б20
Хардверска веза: ПБ15
*/
воид ДС18Б20_Инит(воид)
{
РЦЦ->АПБ2ЕНР|=1<<3; //ПБ
ГПИОБ->ЦРХ&=0к0ФФФФФФФ;
ГПИОБ->ЦРХ|=0к30000000;
ГПИОБ->ОДР|=1<<15; //Пулл-уп
}
/*
Функција: Проверите да ли ДС18Б20 уређај постоји
Повратна вредност: 1 значи да уређај не постоји 0 значи да је уређај нормалан
*/
у8 ДС18Б20_ЦхецкДевице(воид) //Садржи ресет пулс, пулс детекције
{
ДС18Б20_ОУТПУТ_МОДЕ();//Иницијализујте у излазни режим
ДС18Б20_ОУТ=0; //Генеришите пулс за ресетовање
ДелаиУс(750); //Генеришите низак ниво од 750ус
ДС18Б20_ОУТ=1; //Пуштање аутобуса
ДелаиУс(15); //Сачекајте одговор ДС18Б20
ако(ДС18Б20_ЦлецкАцк())//Откривање пулса постојања
{
повратак 1;
}
повратак 0;
}
/*
Функција: Откривање пулса постојања ДС18Б20 уређаја
Повратна вредност: 1 указује на грешку 0 указује на нормално
*/
у8 ДС18Б20_ЦлецкАцк(воид)
{
у8 цнт=0;
ДС18Б20_ИНПУТ_МОДЕ();//Иницијализујте у режим уноса
док(ДС18Б20_ИН&&цнт<200) //Сачекајте импулс постојања одговора ДС18Б20
{
ДелаиУс(1);
цнт++;
}
ако(цнт>=200)повратак 1; //грешка
цнт=0;
док((!ДС18Б20_ИН)&&цнт<240) //сачекајте да ДС18Б20 пусти сабирницу
{
ДелаиУс(1);
цнт++;
}
ако(цнт>=240)повратак 1; //грешка
повратак 0;
}
/*
Функција: Напишите бајт
Прво научи мало да пишеш.
*/
воид ДС18Б20_ВритеБите(у8 цмд)
{
у8 и;
ДС18Б20_ОУТПУТ_МОДЕ(); //Иницијализујте у излазни режим
за(и=0;и<8;и++)
{
ДС18Б20_ОУТ=0; //Генеришите временску празнину писања (почетак писања)
ДелаиУс(2);
ДС18Б20_ОУТ=цмд&0к01; //Пошаљите стварни бит података
ДелаиУс(60); //Сачекајте да се писање заврши
ДС18Б20_ОУТ=1; //Пустите аутобус и припремите се за следећи пренос
цмд>>=1; //Наставите да шаљете следећи бит података
}
}
/*
Функција: Прочитај бајт
Прво научи мало да читаш.
*/
у8 ДС18Б20_РеадБите(воид)
{
у8 и,дата=0;
за(и=0;и<8;и++)
{
ДС18Б20_ОУТПУТ_МОДЕ(); //Иницијализујте у излазни режим
ДС18Б20_ОУТ=0; //Генеришите временску празнину за читање (прочитај почетак)
ДелаиУс(2);
ДС18Б20_ОУТ=1; //Пуштање аутобуса
ДС18Б20_ИНПУТ_МОДЕ(); //Иницијализујте у режим уноса
ДелаиУс(8); //Сачекајте излаз података ДС18Б20
података>>=1; //Попуните високи део са 0, подразумевано је 0
ако(ДС18Б20_ИН) података|=0к80;
ДелаиУс(60);
ДС18Б20_ОУТ=1; //Пуштање аутобуса, сачекајте читање следећег бита података
}
врати податке;
}
/*
Функција: Једном прочитајте податке о температури ДС18Б20
Повратна вредност: очитани подаци о температури
Размотрена ситуација: Постоји само један ДС18Б20 повезан са магистралом
*/
у16 ДС18Б20_РеадТемп(воид)
{
у16 темп=0;
у8 темп_Х,темп_Л;
ДС18Б20_ЦхецкДевице(); //Пошаљите пулс за ресетовање, детектовати пулс
ДС18Б20_ВритеБите(0кЦЦ); //Прескочи детекцију РОМ секвенце
ДС18Б20_ВритеБите(0к44); //Покрените конверзију температуре
//Сачекајте да се конверзија температуре заврши
док(ДС18Б20_РеадБите()!=0кФФ){}
ДС18Б20_ЦхецкДевице(); //Пошаљите пулс за ресетовање, детектовати пулс
ДС18Б20_ВритеБите(0кЦЦ); //Прескочи детекцију РОМ секвенце
ДС18Б20_ВритеБите(0кБЕ); //Очитајте температуру
темп_Л=ДС18Б20_РеадБите(); //Прочитајте податке о ниским температурама
темп_Х=ДС18Б20_РеадБите(); //Прочитајте податке о високој температури
темп=темп_Л|(темп_Х<<8); //Синтетизована температура
повратна темп;
}
3.2 ДС18Б20.х
#ифндеф ДС18Б20_Х
#дефинише ДС18Б20_Х
#укључити “стм32ф10к.х”
#укључити “сис.х”
#укључити “кашњење.х”
#укључити “дс18б20.х”
#укључити “усарт.х”
/*Интерфејс пакета*/
//Иницијализујте ДС18Б20 у режим уноса
#дефинише ДС18Б20_ИНПУТ_МОДЕ() {ГПИОБ->ЦРХ&=0к0ФФФФФФФ;ГПИОБ->ЦРХ|=0к80000000;}
//Иницијализујте ДС18Б20 у излазни режим
#дефинишете ДС18Б20_ОУТПУТ_МОДЕ(){ГПИОБ->ЦРХ&=0к0ФФФФФФФ;ГПИОБ->ЦРХ|=0к30000000;}
//Излаз ИО порта ДС18Б20
#дефинише ДС18Б20_ОУТ ПБоут(15)
//ДС18Б20 ИО порт улаз
#дефинише ДС18Б20_ИН ПБин(15)
//Декларација функције
у8 ДС18Б20_ЦлецкАцк(воид);
у8 ДС18Б20_ЦхецкДевице(воид);
воид ДС18Б20_Инит(воид);
у16 ДС18Б20_РеадТемп(воид);
у8 ДС18Б20_РеадБите(воид);
воид ДС18Б20_ВритеБите(у8 цмд);
#ендиф
поИБАГДИдКСЦАВкКМААААК8РНс4с030.пнг
3.3 Функција одлагања
/*
Функција: Кашњење у нама
*/
воид ДелаиУс(инт ус)
{
#ифдеф _СИСТИЦК_ИРК_
инт и,ј;
за(и=0;иВАЛ=0; //Вредност ЦНТ бројача
СисТицк->ЛОАД=9*ус; //9 значи 1ус
СисТицк->ЦТРЛ|=1<<0; //Покрени тајмер
учинити
{
тмп=СисТицк->ЦТРЛ; //Прочитај статус
}док((!(тмп&1<<16))&&(тмп&1<<0));
СисТицк->ВАЛ=0; //Вредност ЦНТ бројача
СисТицк->ЦТРЛ&=~(1<<0); //Искључите тајмер
#ендиф
};и++)>
3.4 маин.ц Позовите ДС18Б20 да прочитате температуру и одштампате је на серијски порт
#укључити “стм32ф10к.х”
#укључити “дс18б20.х”
у8 ДС18Б20_РОМ[8]; //Сачувајте 64-битни РОМ код ДС18Б20
инт маин(воид)
{
у16 темп;
УСАРТк_Хеат(УСАРТ1,72,115200);//Иницијализација серијског порта 1
ДС18Б20_Хеат(); //Иницијализација ДС18Б20
/*1. Прочитајте 64-битни РОМ код ДС18Б20*/
//Пошаљите пулс за ресетовање, детектовати пулс постојања
док(ДС18Б20_ЦхецкДевице())
{
принтф(“ДС18Б20 уређај не постоји!\н”);
ДелаиМс(500);
}
//Пошаљите команду за читање 64-битног РОМ кода
ДС18Б20_ВритеБите(0к33);
//Петља чита 64-битни РОМ код
за(и=0;и<8;и++)
{
ДС18Б20_РОМ[и]= ДС18Б20_РеадБите();
принтф(“ДС18Б20_РОМ[%д]=0к%Ксн”,и,ДС18Б20_РОМ[и]);
}
док(1)
{
/*2. Истовремено управљајте свим ДС18Б20 на сабирници да бисте започели претварање температуре*/
ДС18Б20_ЦхецкДевице(); //Пошаљите пулс за ресетовање, детектовати пулс
ДС18Б20_ВритеБите(0кЦЦ); //Прескочи детекцију РОМ секвенце
ДС18Б20_ВритеБите(0к44); //Покрените конверзију температуре (нека сви ДС18Б20 на сабирници конвертују температуру)
ДелаиМс(500); //Сачекајте да се заврше све конверзије температуре ДС18Б20 на линији
/*3. Једноструко циљано очитавање температуре сваког ДС18Б20*/
ДС18Б20_ЦхецкДевице(); //Пошаљите пулс за ресетовање, детектовати пулс
ДС18Б20_ВритеБите(0к55); //Пошаљите команду која одговара РОМ-у
за(и=0;и<8;и++) //Пошаљи 64-битни код
{
ДС18Б20_ВритеБите(ДС18Б20_РОМ[и]);
}
ДС18Б20_ВритеБите(0кБЕ); //Очитајте температуру
темп=ДС18Б20_РеадБите(); //Прочитајте податке о температури нижег реда
темп|=ДС18Б20_РеадБите()<<8; //Прочитајте податке о температури високог реда
принтф(“темп1=%д.%дн”,темп>>4,темп&0кФ);
принтф(“темп2=%фн”,темп*0,0625);
ДелаиМс(500);
}
}
English
Afrikaans
العربية
বাংলা
bosanski jezik
Български
Català
粤语
中文(简体)
中文(漢字)
Hrvatski
Čeština
Nederlands
Eesti keel
Suomi
Français
Deutsch
Ελληνικά
हिन्दी; हिंदी
Magyar
Bahasa Indonesia
Italiano
日本語
한국어
Latviešu valoda
Lietuvių kalba
македонски јазик
Bahasa Melayu
Norsk
پارسی
Polski
Português
Română
Русский
Cрпски језик
Slovenčina
Slovenščina
Español
Svenska
ภาษาไทย
Türkçe
Українська
اردو
Tiếng Việt







