DS18B20 হল একটি ডিজিটাল তাপমাত্রা সেন্সর যা হোস্টের সাথে যোগাযোগ করতে একটি বাসের সময় ব্যবহার করে. শুধুমাত্র 1 তাপমাত্রা ডেটা রিডিং সম্পূর্ণ করার জন্য তারের প্রয়োজন;
সহজ শনাক্তকরণের জন্য DS18B20-এর একটি অন্তর্নির্মিত 64-বিট পণ্য সিরিয়াল নম্বর রয়েছে. একাধিক DS18B20 সেন্সর সংযুক্ত করা যেতে পারে 1 তার, এবং 64-বিট পরিচয় প্রমাণীকরণের মাধ্যমে, বিভিন্ন সেন্সর থেকে সংগৃহীত তাপমাত্রার তথ্য আলাদাভাবে পড়া যায়.
DS18B20 এর পরিচিতি
2.1 DS18B20 এর প্রধান বৈশিষ্ট্য
1. সম্পূর্ণ ডিজিটাল তাপমাত্রা রূপান্তর এবং আউটপুট.
2. উন্নত একক বাস ডেটা যোগাযোগ.
3. 12-বিট পর্যন্ত রেজোলিউশন, ±0.5 ডিগ্রি সেলসিয়াস পর্যন্ত নির্ভুলতার সাথে.
4. 12-বিট রেজোলিউশনে সর্বাধিক কাজের চক্র 750 মিলিসেকেন্ড.
5. পরজীবী কাজ মোড নির্বাচন করা যেতে পারে.
6. সনাক্তকরণের তাপমাত্রা পরিসীমা হল –55°C ~+125°C (–67° F ~+257° F).
7. অন্তর্নির্মিত EEPROM, তাপমাত্রা সীমা অ্যালার্ম ফাংশন.
8. 64-বিট ফটোলিথোগ্রাফি রম, অন্তর্নির্মিত পণ্য সিরিয়াল নম্বর, মাল্টি-মেশিন সংযোগের জন্য সুবিধাজনক.
9. বিভিন্ন প্যাকেজিং ফর্ম, বিভিন্ন হার্ডওয়্যার সিস্টেমের সাথে মানিয়ে নেওয়া.
2.2 DS18B20 পিন ফাংশন
GND ভোল্টেজ গ্রাউন্ড;
DQ একক ডেটা বাস;
ভিডিডি পাওয়ার সাপ্লাই ভোল্টেজ;
NC খালি পিন;
2.3 DS18B20 কাজের নীতি এবং প্রয়োগ
DS18B20 তাপমাত্রা সনাক্তকরণ এবং ডিজিটাল ডেটা আউটপুট সম্পূর্ণরূপে এক চিপে একত্রিত, তাই এটি শক্তিশালী বিরোধী হস্তক্ষেপ ক্ষমতা আছে. এর এক কর্মচক্রকে দুই ভাগে ভাগ করা যায়, যথা তাপমাত্রা সনাক্তকরণ এবং ডেটা প্রক্রিয়াকরণ.
18B20 এর মেমরি সম্পদের তিনটি রূপ রয়েছে. তারা: ROM রিড-ওনলি মেমরি, DS18B20ID কোড সংরক্ষণ করতে ব্যবহৃত হয়; প্রথম 8 বিট একক লাইন সিরিজ কোড (DS18B20 কোড হল 19H), নিম্নলিখিত 48 বিট হল চিপের অনন্য সিরিয়াল নম্বর; শেষ 8 বিট হল CRC কোড (রিডানডেন্সি চেক) উপরের 56 বিট. ডেটা উৎপাদনে সেট করা হয় এবং ব্যবহারকারী দ্বারা পরিবর্তন করা যায় না. DS18B20 এর মোট আছে 64 রমের বিট.
RAM ডাটা রেজিস্টার, অভ্যন্তরীণ গণনা এবং ডেটা অ্যাক্সেসের জন্য ব্যবহৃত হয়, পাওয়ার ব্যর্থতার পরে ডেটা হারিয়ে যায়, DS18B20 এর মোট আছে 9 RAM এর বাইট, প্রতিটি বাইট হয় 8 বিট. প্রথম এবং দ্বিতীয় বাইট হল তাপমাত্রা রূপান্তরের পরে ডেটা মান তথ্য; তৃতীয় এবং চতুর্থ বাইট হল ব্যবহারকারীর EEPROM এর মিরর ইমেজ (সাধারণত তাপমাত্রা বিপদাশঙ্কা মান স্টোরেজ জন্য ব্যবহৃত). পাওয়ার রিসেট হলে এর মান রিফ্রেশ হবে. পঞ্চম বাইট হল ব্যবহারকারীর তৃতীয় EEPROM-এর মিরর ইমেজ. ৬ষ্ঠ, 7ম, এবং 8 ম বাইট গণনা রেজিস্টার, যা ব্যবহারকারীদের উচ্চ তাপমাত্রার রেজোলিউশন প্রাপ্ত করার অনুমতি দেওয়ার জন্য ডিজাইন করা হয়েছে. এগুলি অভ্যন্তরীণ তাপমাত্রা রূপান্তর এবং গণনার জন্য অস্থায়ী স্টোরেজ ইউনিট. 9ম বাইট হল প্রথমটির CRC কোড 8 বাইট. EEPROM হল একটি অ-উদ্বায়ী মেমরি যা ডেটা সংরক্ষণ করতে ব্যবহৃত হয় যা দীর্ঘ সময়ের জন্য সংরক্ষণ করা প্রয়োজন, উপরের এবং নিম্ন তাপমাত্রার অ্যালার্ম মান, এবং যাচাইকরণ ডেটা. DS18B20 এর মোট আছে 3 EEPROM এর বিট, এবং ব্যবহারকারীর অপারেশনের সুবিধার্থে র্যামে মিরর ইমেজ রয়েছে.
DS18B20 ডিফল্টরূপে 12-বিট রেজোলিউশন মোডে কাজ করে. রূপান্তরের পরে প্রাপ্ত 12-বিট ডেটা DS18B20 এর দুটি 8-বিট র্যামে সংরক্ষণ করা হয় (প্রথম দুটি বাইট). প্রথম 5 বাইনারি বিট সাইন বিট হয়. পরিমাপ করা তাপমাত্রার চেয়ে বেশি হলে 0, এই 5 বিট হয় 0. শুধু দ্বারা পরিমাপ করা মান গুণ করুন 0.0625 প্রকৃত তাপমাত্রা পেতে. তাপমাত্রা কম হলে 0, এই 5 বিট হয় 1. পরিমাপ করা মান উল্টানো প্রয়োজন, দ্বারা যোগ করা হয়েছে 1, এবং তারপর দ্বারা গুণিত 0.0625 প্রকৃত তাপমাত্রা পেতে. অথবা তাপমাত্রা বের করতে বিট অপারেশন ব্যবহার করুন: দশমিক স্থান নিম্ন দখল 4 বিট, এবং উপরের বিটগুলি হল পূর্ণসংখ্যা বিট (নেতিবাচক সংখ্যা বিবেচনা করা হয় না).
2.4 DS18B20 চিপ রম নির্দেশনা টেবিল
1. ROM পড়ুন [33এইচ] (হেক্সাডেসিমেল কমান্ড শব্দটি বর্গাকার বন্ধনীতে রয়েছে).
এই কমান্ডটি বাস কন্ট্রোলারকে DS18B20 এর 64-বিট রম পড়তে দেয়. এই নির্দেশটি শুধুমাত্র তখনই ব্যবহার করা যেতে পারে যখন বাসে শুধুমাত্র একটি DS18B20 থাকে. একাধিক সংযুক্ত থাকলে, তথ্য দ্বন্দ্ব যোগাযোগের সময় ঘটবে.
2. Atch ROM [55এইচ]
এই নির্দেশনাটি কন্ট্রোলার দ্বারা জারি করা একটি 64-বিট সিরিয়াল নম্বর দ্বারা অনুসরণ করা হয়. যখন বাসে একাধিক DS18B20 থাকে, শুধুমাত্র কন্ট্রোলার দ্বারা জারি করা একই ক্রমিক নম্বর সহ চিপ প্রতিক্রিয়া জানাতে পারে, এবং অন্যান্য চিপগুলি পরবর্তী রিসেটের জন্য অপেক্ষা করবে. এই নির্দেশটি একক-চিপ এবং মাল্টি-চিপ সংযোগের জন্য উপযুক্ত.
3. রম এড়িয়ে যান [CCH]
এই নির্দেশের ফলে চিপ রম কোডে সাড়া দেয় না. একক বাসের ক্ষেত্রে, এই নির্দেশ সময় বাঁচাতে ব্যবহার করা যেতে পারে. একাধিক চিপ সংযুক্ত করার সময় এই নির্দেশটি ব্যবহার করা হলে, তথ্য সংঘাত ঘটবে, ত্রুটির ফলে.
4. রম অনুসন্ধান করুন [F0H]
চিপ শুরু করার পর, অনুসন্ধান নির্দেশনা বাসের সাথে একাধিক চিপ সংযুক্ত করা হলে সমস্ত ডিভাইসের 64-বিট রমকে নির্মূলের মাধ্যমে চিহ্নিত করার অনুমতি দেয়.
5. অ্যালার্ম অনুসন্ধান [প্রতিটি]
একাধিক চিপসের ক্ষেত্রে, অ্যালার্ম চিপ অনুসন্ধান নির্দেশনা শুধুমাত্র এমন চিপগুলিতে সাড়া দেয় যা TH-এর চেয়ে বেশি বা TL-এর চেয়ে কম তাপমাত্রার অ্যালার্ম শর্ত পূরণ করে. যতক্ষণ চিপ বন্ধ না হয়, তাপমাত্রা আবার পরিমাপ করা না হওয়া পর্যন্ত অ্যালার্ম অবস্থা বজায় রাখা হবে এবং অ্যালার্ম অবস্থা পৌঁছানো না.
6. স্ক্র্যাচপ্যাড লিখুন [4ই.এইচ]
এটি RAM এ ডেটা লেখার নির্দেশনা. পরবর্তীতে লেখা দুটি বাইট ডেটা ঠিকানায় সংরক্ষণ করা হবে 2 (অ্যালার্ম RAM এর TH) এবং ঠিকানা 3 (অ্যালার্ম RAM এর TL). রিসেট সংকেত দ্বারা লেখার প্রক্রিয়াটি বন্ধ করা যেতে পারে.
7. স্ক্র্যাচপ্যাড পড়ুন (RAM থেকে ডেটা পড়ুন) [বিইএইচ]
এই নির্দেশটি RAM থেকে ডেটা পড়বে, ঠিকানা থেকে শুরু 0 এবং ঠিকানা পর্যন্ত 9, সম্পূর্ণ RAM ডেটা পড়া সম্পূর্ণ করা. চিপ রিসেট সিগন্যালকে রিডিং প্রক্রিয়াটি বন্ধ করার অনুমতি দেয়, যে, পড়ার সময় কমাতে পরবর্তী অপ্রয়োজনীয় বাইট উপেক্ষা করা যেতে পারে.
8. স্ক্র্যাচপ্যাড কপি করুন (EEPROM-এ RAM ডেটা কপি করুন) [48এইচ]
এই নির্দেশটি র্যামের ডেটা EEPROM-এ সঞ্চয় করে যাতে পাওয়ার বন্ধ থাকা অবস্থায় ডেটা হারিয়ে না যায়।. যেহেতু চিপটি EEPROM স্টোরেজ প্রক্রিয়াকরণে ব্যস্ত, যখন কন্ট্রোলার একটি পড়ার সময় স্লট পাঠায়, বাস আউটপুট “0”, এবং যখন স্টোরেজ কাজ শেষ হয়, বাস আউটপুট হবে “1”.
পরজীবী কাজ মোডে, এই নির্দেশ জারি হওয়ার পর অবিলম্বে একটি শক্তিশালী পুল-আপ ব্যবহার করতে হবে এবং চিপ অপারেশন বজায় রাখার জন্য কমপক্ষে 10MS রক্ষণাবেক্ষণ করতে হবে.
9. T রূপান্তর করুন (তাপমাত্রা রূপান্তর) [44এইচ]
এই নির্দেশ পাওয়ার পর ড, চিপ একটি তাপমাত্রা রূপান্তর করবে এবং রূপান্তরিত তাপমাত্রার মান RAM এর 1ম এবং 2য় ঠিকানায় সংরক্ষণ করবে. যেহেতু চিপটি তাপমাত্রা রূপান্তর প্রক্রিয়াকরণে ব্যস্ত, যখন কন্ট্রোলার একটি পড়ার সময় স্লট পাঠায়, বাস আউটপুট “0”, এবং যখন স্টোরেজ কাজ শেষ হয়, বাস আউটপুট হবে “1”. পরজীবী কাজ মোডে, এই নির্দেশ জারি হওয়ার পর অবিলম্বে একটি শক্তিশালী পুল-আপ ব্যবহার করতে হবে এবং চিপ অপারেশন বজায় রাখার জন্য কমপক্ষে 500MS বজায় রাখতে হবে.
10. EEPROM স্মরণ করুন (EEPROM-এ অ্যালার্ম মান RAM-তে কপি করুন) [B8H]
এই নির্দেশটি EEPROM-এর অ্যালার্ম মানকে RAM-তে 3য় এবং 4র্থ বাইটে কপি করে. যেহেতু চিপটি কপি প্রসেসিং নিয়ে ব্যস্ত, যখন কন্ট্রোলার একটি পড়ার সময় স্লট পাঠায়, বাস আউটপুট “0”, এবং যখন স্টোরেজ কাজ শেষ হয়, বাস আউটপুট “1”. উপরন্তু, এই নির্দেশ স্বয়ংক্রিয়ভাবে কার্যকর করা হবে যখন চিপ চালিত এবং পুনরায় সেট করা হয়. এই ভাবে, র্যামের দুটি অ্যালার্ম বাইট বিট সর্বদা EEPROM-এ ডেটার মিরর ইমেজ হবে.
11. পাওয়ার সাপ্লাই পড়ুন (ওয়ার্কিং মোড সুইচ) [B4H]
এরপর এ নির্দেশনা জারি করা হয়, একটি পড়ার সময় ব্যবধান জারি করা হয়, এবং চিপ তার পাওয়ার স্ট্যাটাস শব্দটি ফিরিয়ে দেবে. “0” পরজীবী শক্তি রাষ্ট্র এবং “1” বহিরাগত শক্তি রাষ্ট্র হয়.
2.5 DS18B20 টাইমিং ডায়াগ্রাম
2.5.1 DS18B20 রিসেট এবং রেসপন্স রিলেশনশিপ ডায়াগ্রাম
প্রতিটি যোগাযোগের আগে একটি রিসেট করতে হবে. রিসেট সময়, অপেক্ষার সময়, এবং প্রতিক্রিয়া সময় কঠোরভাবে সময় অনুযায়ী প্রোগ্রাম করা উচিত.
DS18B20 পড়া এবং লেখার সময় ব্যবধান: DS18B20 ডেটা রিডিং এবং রাইটিং টাইম গ্যাপ প্রসেসিং বিট এবং তথ্য আদান-প্রদানের কমান্ড ওয়ার্ড দ্বারা নিশ্চিত করা হয়.
2.5.2 ডেটা লিখুন 0 এবং ডেটা 1 DS18B20 থেকে
ডাটা টাইম গ্যাপ লেখার প্রথম 15uS এ, বাসটিকে নিয়ন্ত্রক দ্বারা নিচু করতে হবে, এবং তারপর এটি বাস ডেটার জন্য চিপ স্যাম্পলিং সময় হবে. নমুনার সময় হল 15 ~ 60uS. নমুনা নেওয়ার সময় যদি কন্ট্রোলার বাসটিকে উঁচু করে টানে, এর অর্থ লেখা “1”, এবং যদি কন্ট্রোলার বাসটিকে কম টানে, এর অর্থ লেখা “0”.
ট্রান্সমিশনের প্রতিটি বিটের নিম্ন-স্তরের স্টার্ট বিট কমপক্ষে 15uS হওয়া উচিত, এবং পরবর্তী তথ্য “0” বা “1” 45uS এর মধ্যে সম্পন্ন করা উচিত.
সম্পূর্ণ বিটের ট্রান্সমিশন সময় 60 ~ 120uS এ রাখা উচিত, অন্যথায় স্বাভাবিক যোগাযোগ নিশ্চিত করা যাবে না.
দ্রষ্টব্য: DS18B20 লো বিট থেকে ডেটা পড়ে এবং লেখে.
2.5.3 ডেটা পড়া 0 এবং ডেটা 1 DS18B20 থেকে
পড়ার সময় ব্যবধানের সময় নিয়ন্ত্রণের নমুনা সময় আরও সঠিক হওয়া উচিত. পড়ার সময় ব্যবধান, হোস্টকে অবশ্যই পড়ার সময় শুরু করার জন্য কমপক্ষে 1uS-এর একটি নিম্ন স্তর তৈরি করতে হবে. তারপর, বাস ছাড়ার পরে 15uS-এ, DS18B20 অভ্যন্তরীণ ডেটা বিট পাঠাবে. এই সময়ে, যদি নিয়ন্ত্রণ দেখতে পায় যে বাসটি বেশি, এর মানে পড়া “1”, এবং বাস কম হলে, এর মানে ডেটা পড়া “0”. প্রতিটি বিট পড়ার আগে, নিয়ামক একটি স্টার্ট সংকেত যোগ করে.
দ্রষ্টব্য: সঠিক যোগাযোগ নিশ্চিত করতে রিড গ্যাপ শুরু হওয়ার 15uS সময়ের মধ্যে ডেটা বিট পড়তে হবে.
যোগাযোগের সময়, 8 এর বিট “0” বা “1” বাইট হিসেবে ব্যবহার করা হয়, এবং বাইটের রিডিং বা রাইটিং লো বিট থেকে শুরু হয়.
2.5.4 একবার পড়ার তাপমাত্রার ক্রম (বাসে শুধুমাত্র একটি DS18B20)
1. রিসেট সংকেত পাঠান
2. প্রতিক্রিয়া সংকেত সনাক্ত করুন
3. 0xCC পাঠান
4. 0x44 পাঠান
5. রিসেট সংকেত পাঠান
6. প্রতিক্রিয়া সংকেত সনাক্ত করুন
7. 0xcc লিখুন
8. 0xbe লিখুন
9. লুপ 8 তাপমাত্রার কম বাইট পড়ার সময়
10. লুপ 8 তাপমাত্রার উচ্চ বাইট পড়ার সময়
11. 16-বিট তাপমাত্রা ডেটা এবং প্রক্রিয়া সংশ্লেষণ করুন
3. ড্রাইভার কোড
3.1 DS18B20.c
#অন্তর্ভুক্ত “ds18b20.h”
/*
ফাংশন: DS18B20 আরম্ভ
হার্ডওয়্যার সংযোগ: PB15
*/
void DS18B20_Init(অকার্যকর)
{
আরসিসি->APB2ENR|=1<<3; //পিবি
GPIOB->সিআরএইচ&=0x0FFFFFFF;
GPIOB->সিআরএইচ|=0x30000000;
GPIOB->ওডিআর|=1<<15; //টান আপ
}
/*
ফাংশন: DS18B20 ডিভাইসটি বিদ্যমান কিনা তা পরীক্ষা করুন
রিটার্ন মান: 1 মানে ডিভাইসটি নেই 0 মানে ডিভাইসটি স্বাভাবিক
*/
u8 DS18B20_CheckDevice(অকার্যকর) //রিসেট পালস রয়েছে, সনাক্তকরণ পালস
{
DS18B20_OUTPUT_MODE();//আউটপুট মোডে আরম্ভ করুন
DS18B20_OUT=0; //রিসেট পালস জেনারেট করুন
বিলম্ব(750); //750us নিম্ন স্তর তৈরি করুন
DS18B20_OUT=1; //বাস ছেড়ে দিন
বিলম্ব(15); //DS18B20 প্রতিক্রিয়ার জন্য অপেক্ষা করুন
যদি(DS18B20_CleckAck())//অস্তিত্ব নাড়ি সনাক্ত
{
ফিরে 1;
}
ফিরে 0;
}
/*
ফাংশন: DS18B20 ডিভাইসের অস্তিত্ব পালস সনাক্ত করুন
রিটার্ন মান: 1 ত্রুটি নির্দেশ করে 0 স্বাভাবিক নির্দেশ করে
*/
u8 DS18B20_CleckAck(অকার্যকর)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//ইনপুট মোডে আরম্ভ করুন
যখন(DS18B20_IN&&cnt<200) //DS18B20 প্রতিক্রিয়া অস্তিত্ব পালস জন্য অপেক্ষা করুন
{
বিলম্ব(1);
cnt++;
}
যদি(cnt>=200)ফিরে 1; //ত্রুটি
cnt=0;
যখন((!DS18B20_IN)&&cnt<240) //DS18B20 বাস ছাড়ার জন্য অপেক্ষা করুন
{
বিলম্ব(1);
cnt++;
}
যদি(cnt>=240)ফিরে 1; //ত্রুটি
ফিরে 0;
}
/*
ফাংশন: একটি বাইট লিখুন
প্রথমে একটু লিখতে শিখুন.
*/
void DS18B20_WriteByte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //আউটপুট মোডে আরম্ভ করুন
জন্য(i=0;i<8;i++)
{
DS18B20_OUT=0; //লেখার সময় ব্যবধান তৈরি করুন (শুরু লিখুন)
বিলম্ব(2);
DS18B20_OUT=cmd&0x01; //প্রকৃত তথ্য বিট পাঠান
বিলম্ব(60); //লেখা শেষ হওয়ার জন্য অপেক্ষা করুন
DS18B20_OUT=1; //বাসটি ছেড়ে দিন এবং পরবর্তী ট্রান্সমিশনের জন্য প্রস্তুত হন
cmd>>=1; //পরবর্তী বিট ডেটা পাঠানো চালিয়ে যান
}
}
/*
ফাংশন: একটি বাইট পড়ুন
প্রথমে একটু পড়তে শিখুন.
*/
u8 DS18B20_ReadByte(অকার্যকর)
{
u8 i,ডেটা=0;
জন্য(i=0;i<8;i++)
{
DS18B20_OUTPUT_MODE(); //আউটপুট মোডে আরম্ভ করুন
DS18B20_OUT=0; //পড়ার সময় ব্যবধান তৈরি করুন (পড়া শুরু)
বিলম্ব(2);
DS18B20_OUT=1; //বাস ছেড়ে দিন
DS18B20_INPUT_MODE(); //ইনপুট মোডে আরম্ভ করুন
বিলম্ব(8); //DS18B20 ডেটা আউটপুটের জন্য অপেক্ষা করুন
তথ্য>>=1; //সঙ্গে উচ্চ বিট পূরণ করুন 0, ডিফল্ট হয় 0
যদি(DS18B20_IN) তথ্য|=0x80;
বিলম্ব(60);
DS18B20_OUT=1; //বাস ছেড়ে দিন, পরবর্তী তথ্য পড়ার জন্য অপেক্ষা করুন
}
তথ্য ফেরত;
}
/*
ফাংশন: DS18B20 এর তাপমাত্রার ডেটা একবার পড়ুন
রিটার্ন মান: তাপমাত্রা তথ্য পড়া
বিবেচিত পরিস্থিতি: বাসের সাথে শুধুমাত্র একটি DS18B20 সংযুক্ত আছে
*/
u16 DS18B20_ReadTemp(অকার্যকর)
{
u16 temp=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //রিসেট পালস পাঠান, পালস সনাক্ত করা
DS18B20_WriteByte(0xCC); //রম সিকোয়েন্স সনাক্তকরণ এড়িয়ে যান
DS18B20_WriteByte(0x44); //একটি তাপমাত্রা রূপান্তর শুরু করুন
//তাপমাত্রা রূপান্তর সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন
যখন(DS18B20_ReadByte()!=0xFF){}
DS18B20_CheckDevice(); //রিসেট পালস পাঠান, পালস সনাক্ত করা
DS18B20_WriteByte(0xCC); //রম সিকোয়েন্স সনাক্তকরণ এড়িয়ে যান
DS18B20_WriteByte(0xBE); //তাপমাত্রা পড়ুন
temp_L=DS18B20_ReadByte(); //নিম্ন তাপমাত্রার ডেটা পড়ুন
temp_H=DS18B20_ReadByte(); //উচ্চ তাপমাত্রার ডেটা পড়ুন
temp=temp_L|(temp_H<<8); //সংশ্লেষিত তাপমাত্রা
তাপমাত্রা ফেরত;
}
3.2 DS18B20.h
#ifndef DS18B20_H
#DS18B20_H সংজ্ঞায়িত করুন
#অন্তর্ভুক্ত “stm32f10x.h”
#অন্তর্ভুক্ত “sys.h”
#অন্তর্ভুক্ত “বিলম্ব”
#অন্তর্ভুক্ত “ds18b20.h”
#অন্তর্ভুক্ত “usart.h”
/*প্যাকেজ ইন্টারফেস*/
//ইনপুট মোডে DS18B20 আরম্ভ করুন
#DS18B20_INPUT_MODE সংজ্ঞায়িত করুন() {GPIOB->সিআরএইচ&=0x0FFFFFFF;GPIOB->সিআরএইচ|=0x80000000;}
//আউটপুট মোডে DS18B20 আরম্ভ করুন
#DS18B20_OUTPUT_MODE সংজ্ঞায়িত করুন(){GPIOB->সিআরএইচ&=0x0FFFFFFF;GPIOB->সিআরএইচ|=0x30000000;}
//DS18B20 IO পোর্ট আউটপুট
#DS18B20_OUT PBout সংজ্ঞায়িত করুন(15)
//DS18B20 IO পোর্ট ইনপুট
#DS18B20_IN PBin সংজ্ঞায়িত করুন(15)
//ফাংশন ঘোষণা
u8 DS18B20_CleckAck(অকার্যকর);
u8 DS18B20_CheckDevice(অকার্যকর);
void DS18B20_Init(অকার্যকর);
u16 DS18B20_ReadTemp(অকার্যকর);
u8 DS18B20_ReadByte(অকার্যকর);
void DS18B20_WriteByte(u8 cmd);
#endif
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 বিলম্ব ফাংশন
/*
ফাংশন: আমাদের মধ্যে বিলম্ব
*/
অকার্যকর বিলম্ব(আমাদের মধ্যে)
{
#ifdef _SYSTICK_IRQ_
int i,j;
জন্য(i=0;iVAL=0; //CNT পাল্টা মান
সিসটিক->LOAD=9*us; //9 মানে 1us
সিসটিক->সিটিআরএল|=1<<0; //টাইমার শুরু করুন
করতে
{
tmp=SysTick->সিটিআরএল; //স্ট্যাটাস পড়ুন
}যখন((!(tmp&1<<16))&&(tmp&1<<0));
সিসটিক->VAL=0; //CNT পাল্টা মান
সিসটিক->সিটিআরএল&=~(1<<0); //টাইমার বন্ধ করুন
#endif
};i++)>
3.4 main.c তাপমাত্রা পড়তে এবং সিরিয়াল পোর্টে প্রিন্ট করতে DS18B20 এ কল করুন
#অন্তর্ভুক্ত “stm32f10x.h”
#অন্তর্ভুক্ত “ds18b20.h”
u8 DS18B20_ROM[8]; //DS18B20 এর 64-বিট রম কোড সংরক্ষণ করুন
int প্রধান(অকার্যকর)
{
u16 তাপমাত্রা;
USARTx_তাপ(USART1,72,115200);//সিরিয়াল পোর্টের সূচনা 1
DS18B20_তাপ(); //DS18B20 আরম্ভ
/*1. DS18B20 এর 64-বিট রম কোড পড়ুন*/
//রিসেট পালস পাঠান, অস্তিত্ব পালস সনাক্ত
যখন(DS18B20_CheckDevice())
{
printf(“DS18B20 ডিভাইসটি বিদ্যমান নেই!\n”);
বিলম্ব(500);
}
//64-বিট রম কোড পড়ার জন্য কমান্ডটি পাঠান
DS18B20_WriteByte(0x33);
//লুপ রিড 64-বিট রম কোড
জন্য(i=0;i<8;i++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%d]=0x%Xn”,i,DS18B20_ROM[i]);
}
যখন(1)
{
/*2. তাপমাত্রা রূপান্তর করা শুরু করতে বাসে একই সাথে সমস্ত DS18B20 পরিচালনা করুন*/
DS18B20_CheckDevice(); //রিসেট পালস পাঠান, পালস সনাক্ত করা
DS18B20_WriteByte(0xCC); //রম সিকোয়েন্স সনাক্তকরণ এড়িয়ে যান
DS18B20_WriteByte(0x44); //একটি তাপমাত্রা রূপান্তর শুরু করুন (বাসের সমস্ত DS18B20 তাপমাত্রা রূপান্তর করতে দিন)
বিলম্ব(500); //লাইনে সমস্ত DS18B20 তাপমাত্রা রূপান্তর সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন
/*3. প্রতিটি DS18B20 এর তাপমাত্রার একক লক্ষ্যযুক্ত রিডিং*/
DS18B20_CheckDevice(); //রিসেট পালস পাঠান, পালস সনাক্ত করা
DS18B20_WriteByte(0x55); //রম মেলে কমান্ড পাঠান
জন্য(i=0;i<8;i++) //64-বিট কোড পাঠান
{
DS18B20_WriteByte(DS18B20_ROM[i]);
}
DS18B20_WriteByte(0xBE); //তাপমাত্রা পড়ুন
temp=DS18B20_ReadByte(); //নিম্ন-অর্ডার তাপমাত্রা ডেটা পড়ুন
তাপমাত্রা|=DS18B20_ReadByte()<<8; //উচ্চ-অর্ডার তাপমাত্রা ডেটা পড়ুন
printf(“temp1=%d.%dn”,তাপমাত্রা>>4,তাপমাত্রা&0xF);
printf(“temp2=%fn”,তাপমাত্রা*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







