ٻڏڻ / اوپن ڊرين آئوٽ - نيڪال؛ آمد و رفت جو ذريعو؛ ٻاھر فعال حالت ۾ زمين سان ڳنڍيل آھي - LEDs ڊرائيور سان ڪيٿوڊس سان ڳنڍيل آھن. برقي طور تي، اهو، يقينا، "اوپن ڊرين" نه آهي (کليل پاڻي)، پر ڊيٽ شيٽ ۾ پنن لاءِ هي نالو ڊرين موڊ ۾ اڪثر ملي ٿو.
ريسٽ ۽ GND جي وچ ۾ بيروني رزسٽرز آئوٽ پٽ جي موجوده قيمت کي سيٽ ڪرڻ لاء
REXT پن ۽ زمين جي وچ ۾ هڪ ريفرنس رزسٽر نصب ٿيل آهي، جيڪو آئوٽ پُٽ جي اندروني مزاحمت کي ڪنٽرول ڪري ٿو، ڊيٽ شيٽ جي صفحي 9 تي گراف ڏسو. DM634 ۾، هي مزاحمت پڻ سافٽ ويئر جي ذريعي ڪنٽرول ڪري سگهجي ٿو، مجموعي روشني کي ترتيب ڏيڻ (عالمي روشني؛ مان هن آرٽيڪل ۾ تفصيل ۾ نه ويندس، مان هتي صرف هڪ 2.2 - 3 kOhm ريزسٽر وجهي ڇڏيندس.
سمجھڻ لاءِ ته چپ کي ڪيئن ڪنٽرول ڪجي، اچو ته ڏسون ته ڊوائيس جي انٽرفيس جي وضاحت:
ها، هتي اهو آهي، چيني انگريزي پنهنجي تمام شان ۾. اهو ترجمو ڪرڻ مشڪل آهي، توهان ان کي سمجهي سگهو ٿا جيڪڏهن توهان چاهيو ٿا، پر هڪ ٻيو طريقو آهي - ڏسو ته ڪيئن فعلي طور تي ساڳيو TLC5940 سان ڪنيڪشن ڊيٽا شيٽ ۾ بيان ڪيو ويو آهي:
... ڊوائيس ۾ ڊيٽا داخل ڪرڻ لاء صرف ٽن پنن جي ضرورت آهي. SCLK سگنل جي اڀرندڙ ڪنڊ ڊيٽا کي SIN پن کان اندروني رجسٽر ڏانهن منتقل ڪري ٿو. سڀني ڊيٽا کي لوڊ ڪرڻ کان پوء، هڪ مختصر تيز XLAT سگنل ترتيب ڏنل ڊيٽا کي اندروني رجسٽرن ۾ منتقل ڪري ٿو. اندروني رجسٽرڊ دروازا آھن جيڪي XLAT سگنل جي سطح پاران شروع ڪيا ويا آھن. سڀ ڊيٽا منتقل ڪيو ويندو آهي سڀ کان اهم سا پهريون.
ليچ - لچ / لچ / تالا. اڀرندڙ ڪناري - نبض جي اڳئين ڪنڊ پهريون ڀيرو MSB - سڀ کان اهم (کاٻي پاسي) ٿورو اڳتي. ڊيٽا کي ڪلاڪ ڪرڻ لاء - ڊيٽا کي ترتيب سان منتقل ڪريو (بٽ بِٽ).
لفظ سينچ اڪثر ڪري چپس جي دستاويزن ۾ مليا آهن ۽ مختلف طريقن سان ترجمو ڪيا ويا آهن، تنهنڪري سمجهڻ جي خاطر آئون پاڻ کي اجازت ڏيندس
هڪ ننڍڙو تعليمي پروگرامLED ڊرائيور لازمي طور تي ھڪڙو شفٽ رجسٽر آھي. "شفٽ" (شفٽ) نالي ۾ - ڊوائيس اندر ڊيٽا جي bitwise حرڪت: هر نئين بٽ اندر اڇلائي پوري زنجير کي ان جي اڳيان اڳتي وڌائيندو آهي. جيئن ته ڪو به ماڻهو شفٽ دوران ايل اي ڊي جي افراتفري جي چمڪندڙ ڏسڻ نه ٿو چاهي، اهو عمل بفر رجسٽرن ۾ ٿئي ٿو جيڪو ڪم ڪندڙ رجسٽرن کان الڳ ٿيل ڊمپر (سينچ) ھڪ قسم جو انتظار جو ڪمرو آھي جتي بِٽ ترتيب ڏنل آھن مطلوب ترتيب ۾. جڏهن سڀ ڪجهه تيار آهي، شٽر کوليو ويندو آهي ۽ بٽ ڪم تي ويندا آهن، پوئين بيچ کي تبديل ڪندي. لفظ سينچ microcircuits لاء دستاويزن ۾ تقريبا هميشه هڪ اهڙي ڊيمر جو مطلب آهي، ڪنهن به معاملي ۾ اهو استعمال ڪيو ويندو آهي.
تنهن ڪري، DM634 ڏانهن ڊيٽا جي منتقلي هن طرح ڪئي وئي آهي: DAI ان پٽ کي پري LED جي سڀ کان اهم سا جي قيمت تي مقرر ڪريو، DCK کي مٿي ۽ هيٺ ڇڪيو؛ DAI ان پٽ کي ايندڙ بٽ جي قيمت تي مقرر ڪريو، DCK کي ڇڪيو؛ ۽ ائين ئي جيستائين سڀ بٽ منتقل ڪيا ويا (بند ڪيو ويو)، جنهن کان پوء اسان LAT ڇڪيندا آهيون. اهو دستي طور تي ڪري سگهجي ٿو (بيٽ بينگ)، پر اهو بهتر آهي ته هڪ SPI انٽرفيس استعمال ڪرڻ لاء خاص طور تي هن لاء ٺهيل آهي، ڇاڪاڻ ته اهو اسان جي STM32 تي ٻن نسخن ۾ پيش ڪيو ويو آهي.
نيري گولي STM32F103
تعارفي: STM32 ڪنٽرولرز Atmega328 کان وڌيڪ پيچيده آهن ان کان سواءِ اهي خوفناڪ نظر اچن ٿا. ان کان علاوه، توانائي جي بچت جي سببن لاء، لڳ ڀڳ سڀ پرديئرز شروع ۾ بند ٿي ويا آهن، ۽ ڪلاڪ جي تعدد اندروني ذريعن کان 8 MHz آهي. خوشقسمتيءَ سان، ايس ٽي ايم پروگرامرز ڪوڊ لکيو جيڪو چپ کي ”حساب ٿيل“ 72 ميگا هرٽز تائين آڻي ٿو، ۽ سڀني IDEs جي ليکڪن جن کي مان ڄاڻان ٿو ان کي شروعاتي طريقيڪار ۾ شامل ڪيو آهي، تنهن ڪري اسان کي ڪلاڪ جي ضرورت نه آهي (پر توهان ڪري سگهو ٿا جيڪڏهن توهان واقعي چاهيو ٿا). پر توهان کي پردي کي چالو ڪرڻو پوندو.
دستاويز: بليو پِل مشهور STM32F103C8T6 چپ سان ليس آهي، ان لاءِ ٻه مفيد دستاويز آهن:
پن آئوٽ - چپ پن آئوٽ - ان صورت ۾ جڏهن اسان پاڻ بورڊ ٺاهڻ جو فيصلو ڪريون؛
ياداشت جو نقشو - هڪ مخصوص چپ لاءِ ياداشت جو نقشو. ريفرنس مينوئل ۾ پوري لائن لاءِ هڪ نقشو آهي، ۽ اهو انهن رجسٽرن جو ذڪر ڪري ٿو جيڪي اسان وٽ نه آهن.
پن جي تعريف واري جدول - پنن جي مکيه ۽ متبادل ڪمن جي لسٽنگ؛ "نيري گولي" لاء توهان انٽرنيٽ تي پنن ۽ انهن جي ڪمن جي فهرست سان وڌيڪ آسان تصويرون ڳولي سگهو ٿا. تنهن ڪري، اسان فوري طور تي گوگل بليو پِل پن آئوٽ ۽ هن تصوير کي هٿ ۾ رکون ٿا:
نوٽ: انٽرنيٽ تان تصوير ۾ هڪ غلطي هئي، جيڪا تبصرن ۾ نوٽ ڪئي وئي هئي، ان لاءِ مهرباني. تصوير کي تبديل ڪيو ويو آهي، پر هي هڪ سبق آهي - اهو بهتر آهي ته معلومات چيڪ ڪرڻ لاء ڊيٽا شيٽ مان نه.
اسان ڊيٽا شيٽ کي هٽائي ڇڏيو، ريفرنس مينوئل کوليو، ۽ هاڻي کان اسان صرف ان کي استعمال ڪندا آهيون.
طريقيڪار: اسان معياري ان پٽ/آئوٽ پٽ سان ڊيل ڪريو، SPI ترتيب ڏيو، ضروري پرديئرز کي چالو ڪريو.
ان پٽ آئوٽ
Atmega328 تي، I/O لاڳو ڪيو ويو آهي انتهائي سادو، ڇو ته STM32 اختيارن جي گهڻائي مونجهارو ٿي سگهي ٿي. هاڻي اسان کي صرف نتيجن جي ضرورت آهي، پر انهن وٽ چار اختيار آهن:
"ڇڏڻ" (ڇڪڻ) Arduino مان معمولي پيداوار آهي، پن قيمت وٺي سگھي ٿو يا ته HIGH يا LOW. پر ”اوپن ڊرين“ سان گڏ آهن مشڪلاتون، جيتوڻيڪ حقيقت ۾ هتي هر شيء سادو آهي:
کليل نالن جي وچ ۾ سڀ فرق (کليل پاڻي) مان "پش-پل" (ڇڪڻ) اهو آهي ته پهرين پن ۾ اعليٰ حالت کي قبول نه ٿو ڪري سگهجي: جڏهن هڪ کي ٻاڦ واري رجسٽر ڏانهن لکجي ته اهو اعليٰ مزاحمتي موڊ ۾ وڃي ٿو (اعلي رڪاوٽ, هاءِ-Z). جڏهن صفر لکڻ، پن ٻنهي طريقن ۾ ساڳيو ڪم ڪندو آهي، ٻنهي منطقي ۽ برقي طور تي.
عام ٻاھرين موڊ ۾، پن صرف ٻاھرين رجسٽر جي مواد کي نشر ڪري ٿو. "متبادل" ۾ ان کي لاڳاپيل پرديئرز طرفان ڪنٽرول ڪيو ويندو آهي (ڏسو 9.1.4):
جيڪڏهن هڪ پورٽ بٽ هڪ متبادل فنڪشن پن جي طور تي ترتيب ڏني وئي آهي، پن رجسٽر کي بند ڪيو ويندو آهي ۽ پن پردي پن سان ڳنڍيل آهي.
هر پن جي متبادل ڪارڪردگي بيان ڪئي وئي آهي پن جون وصفون ڊيٽا شيٽ ڊائون لوڊ ٿيل تصوير تي آهي. سوال ڪرڻ لاءِ ته ڇا ڪجي جيڪڏهن هڪ پن ۾ ڪيترائي متبادل ڪم آهن، جواب ڏنو ويو آهي فوٽ نوٽ ذريعي ڊيٽ شيٽ ۾:
جيڪڏھن گھڻا پرديئر ساڳيا پن استعمال ڪن ٿا، متبادل ڪمن جي وچ ۾ تڪرار کان بچڻ لاء، ھڪڙي وقت ۾ صرف ھڪڙو پردي استعمال ڪيو وڃي، پردي جي گھڙي کي استعمال ڪندي ٽوگل ڪيو وڃي (مناسب RCC رجسٽر ۾).
آخرڪار، آئوٽ موڊ ۾ پنن ۾ پڻ گھڙي جي رفتار آھي. اها هڪ ٻي توانائي جي بچت جي خاصيت آهي؛ اسان جي صورت ۾، اسان صرف ان کي وڌ ۾ وڌ سيٽ ڪيو ۽ ان کي وساريو.
تنهن ڪري: اسان استعمال ڪري رهيا آهيون SPI، جنهن جو مطلب آهي ته ٻه پن (ڊيٽا سان ۽ هڪ ڪلاڪ سگنل سان) هجڻ گهرجي "متبادل پش-پل فنڪشن"، ۽ ٻيو هڪ (LAT) هجڻ گهرجي "باقاعده پش-پل". پر انهن کي تفويض ڪرڻ کان اڳ، اچو ته SPI سان معاملو ڪريو.
ايس آء
ٻيو ننڍڙو تعليمي پروگرام
SPI يا Serial Peripheral Interface (سيريل پرفيرل انٽرفيس) هڪ MK کي ٻين MKs ۽ عام طور تي ٻاهرين دنيا سان ڳنڍڻ لاءِ هڪ سادو ۽ تمام مؤثر انٽرفيس آهي. ان جي آپريشن جو اصول اڳ ۾ ئي مٿي بيان ڪيو ويو آهي، جتي چيني LED ڊرائيور جي باري ۾ (حوالن جي دستيابي ۾، سيڪشن 25 ڏسو). SPI ماسٽر ("ماسٽر") ۽ غلام ("غلام") موڊ ۾ ڪم ڪري سگھي ٿو. SPI ۾ چار بنيادي چينل آھن، جن مان سڀئي استعمال نٿا ڪري سگھجن:
MOSI، ماسٽر آئوٽ / غلام ان پٽ: هي پن ڊيٽا کي ماسٽر موڊ ۾ منتقل ڪري ٿو، ۽ غلام موڊ ۾ ڊيٽا وصول ڪري ٿو؛
MISO، ماسٽر ان پٽ / غلام ٻانھون: ان جي ابتڙ، اھو ماسٽر ۾ حاصل ڪري ٿو، ۽ ٻانھي ۾ منتقل ڪري ٿو.
SCK، سيريل ڪلاڪ: ماسٽر ۾ ڊيٽا ٽرانسميشن جي تعدد کي سيٽ ڪري ٿو يا غلام ۾ گھڙي سگنل وصول ڪري ٿو. لازمي طور تي ڌڪ هڻڻ؛
ايس ايس، غلام چونڊيو: هن چينل جي مدد سان، غلام ڄاڻي ٿو ته هن کان ڪجهه گهربل آهي. STM32 تي ان کي NSS سڏيو ويندو آهي، جتي N = منفي، يعني. ڪنٽرولر غلام بڻجي ويندو آهي جيڪڏهن هن چينل ۾ زمين آهي. اهو چڱي طرح گڏ ڪري ٿو اوپن ڊرين آئوٽ موڊ سان، پر اها ٻي ڪهاڻي آهي.
هر شيء وانگر، SPI تي STM32 ڪارڪردگي ۾ مالدار آهي، جنهن کي اهو سمجهڻ ڏکيو آهي. مثال طور، اهو ڪم ڪري سگهي ٿو نه رڳو SPI سان، پر پڻ هڪ I2S انٽرفيس سان، ۽ دستاويز ۾ انهن جي وضاحتن کي ملايو ويو آهي، اهو ضروري آهي ته بروقت انداز ۾ اضافي کي ختم ڪرڻ لاء. اسان جو ڪم انتهائي سادو آهي: اسان کي صرف MOSI ۽ SCK استعمال ڪندي ڊيٽا موڪلڻ جي ضرورت آهي. اسان وڃون ٿا سيڪشن 25.3.4 (اڌ ڊپلڪس ڪميونيڪيشن، اڌ ڊپلڪس ڪميونيڪيشن)، جتي اسان ڳوليون ٿا. 1 ڪلاڪ ۽ 1 اڻ سڌي ڊيٽا تار (1 ڪلاڪ سگنل ۽ 1 اڻ سڌي ڊيٽا وهڪرو):
هن موڊ ۾، ايپليڪيشن استعمال ڪري ٿو SPI يا ته صرف منتقلي يا وصول ڪرڻ واري موڊ ۾. / صرف ٽرانسمٽ موڊ ڊپليڪس موڊ سان ملندڙ جلندڙ آهي: ڊيٽا ٽرانسمٽ پن تي منتقل ڪئي ويندي آهي (ماسٽر موڊ ۾ MOSI يا غلام موڊ ۾ MISO)، ۽ وصولي پن (بالترتيب MISO يا MOSI) کي باقاعده I/O پن طور استعمال ڪري سگهجي ٿو. . انهي حالت ۾، ايپليڪيشن کي صرف Rx بفر کي نظر انداز ڪرڻ جي ضرورت آهي (جيڪڏهن اهو پڙهيو وڃي، اتي ڪو به ڊيٽا منتقل نه ٿيندو).
عظيم، MISO پن مفت آهي، اچو ته ان سان LAT سگنل ڳنڍيون. اچو ته ڏسو غلام چونڊيو، جيڪو STM32 تي ڪنٽرول ڪري سگهجي ٿو پروگرام سان، جيڪو انتهائي آسان آهي. اسان ساڳئي نالي جو پيراگراف سيڪشن 25.3.1 ۾ پڙهون ٿا SPI جنرل وضاحت:
سافٽ ويئر ڪنٽرول NSS (SSM = 1) / غلام جي چونڊ جي معلومات SPI_CR1 رجسٽر جي SSI بٽ ۾ موجود آهي. ٻاهرين NSS پن ٻين ايپليڪيشنن جي ضرورتن لاءِ مفت رهي ٿو.
اهو وقت رجسٽر ڏانهن لکڻ جو وقت آهي. مون SPI2 استعمال ڪرڻ جو فيصلو ڪيو، ڊيٽا شيٽ ۾ ان جو بنيادي پتو ڳولھيو - سيڪشن 3.3 ميموري ميپ ۾:
BR بٽ ڪنٽرولر ڪلاڪ ورهائيندڙ مقرر ڪري ٿو، اھڙيء طرح تعدد جو تعين ڪيو ويو آھي جنھن تي SPI ڪم ڪندو. اسان جي STM32 فريڪوئنسي 72 MHz هوندي، LED ڊرائيور، ان جي ڊيٽ شيٽ جي مطابق، 25 MHz جي فريڪوئنسي سان هلندي آهي، تنهنڪري اسان کي چار (BR[2:0] = 001) سان ورهائڻو پوندو.
4. بلاڪ فارميٽ کي طئي ڪرڻ لاءِ SPI_CR1 رجسٽر ۾ LSBFIRST بٽ کي ترتيب ڏيو
LSBFIRST، جيئن ان جو نالو مشورو ڏئي ٿو، ٽرانسميشن کي ترتيب ڏئي ٿو گھٽ ۾ گھٽ اھم سا سان. پر DM634 حاصل ڪرڻ گھري ٿو سڀ کان اهم ساٽ کان شروع ٿيندڙ ڊيٽا. تنهن ڪري، اسان ان کي ري سيٽ ڪري ڇڏيندا آهيون.
5. هارڊويئر موڊ ۾، جيڪڏهن NSS پن مان انپٽ گهربل هجي، پوري بائيٽ جي منتقلي جي تسلسل دوران NSS پن ڏانهن هڪ اعلي سگنل لاڳو ڪريو. NSS سافٽ ويئر موڊ ۾، SPI_CR1 رجسٽر ۾ SSM ۽ SSI بٽ سيٽ ڪريو. جيڪڏهن اين ايس ايس پن کي هڪ آئوٽ جي طور تي استعمال ڪيو وڃي، صرف SSOE بٽ کي سيٽ ڪرڻ جي ضرورت آهي.
پهرين ٻه رجسٽر غير معمولي آهن، ۽ پڻ ڪافي تڪليف، ڇو ته 16 بندرگاهن پن انهن جي وچ ۾ "چار بٽ في ڀاء" فارميٽ ۾ پکڙيل آهن. اهي. پن صفر کان ست CRL ۾ آهن، ۽ باقي CRH ۾ آهن. ساڳئي وقت، باقي رجسٽرز ڪاميابيء سان بندرگاهن جي سڀني پنن جي بٽس تي مشتمل آهن - اڪثر ڪري اڌ "محفوظ" باقي.
سادگي لاءِ، اچو ته فهرست جي آخر کان شروع ڪريون.
اسان کي بلاڪنگ رجسٽر جي ضرورت ناهي.
سيٽ ۽ ري سيٽ رجسٽر تمام مضحکہ خیز آهن ان ۾ اهي جزوي طور تي هڪ ٻئي کي نقل ڪن ٿا: توهان سڀ ڪجهه صرف BSRR ۾ لکي سگهو ٿا، جتي اعلي 16 بٽس پن کي صفر تي ري سيٽ ڪندا، ۽ هيٺيان 1 تي سيٽ ڪيا ويندا، يا توهان پڻ ڪري سگهو ٿا. BRR استعمال ڪريو، هيٺيان 16 بٽ جن مان صرف پن کي ري سيٽ ڪريو. مون کي ٻيو اختيار پسند آهي. اهي رجسٽر اهم آهن ڇو ته اهي پنن تائين ايٽمي رسائي فراهم ڪن ٿا:
ايٽمي سيٽ يا ري سيٽ
بٽ سطح تي GPIOx_ODR پروگرام ڪرڻ دوران مداخلت کي بند ڪرڻ جي ڪا ضرورت ناهي: هڪ يا وڌيڪ بٽ هڪ واحد ايٽمي لکڻ جي آپريشن APB2 سان تبديل ٿي سگهن ٿا. اهو "1" لکڻ سان حاصل ڪيو وڃي ٿو سيٽ / ري سيٽ رجسٽر تي (GPIOx_BSRR يا، صرف ري سيٽ ڪرڻ لاءِ، GPIOx_BRR) جنهن کي تبديل ڪرڻ جي ضرورت آهي. ٻيون بٽون تبديل نه ٿينديون.
ڊيٽا رجسٽرن ۾ ڪافي خود وضاحتي نالا آھن - IDR = پٽ هدايت رجسٽر، ان پٽ رجسٽر؛ او ڊي آر = پيداوار ڊائريڪشن رجسٽر، آئوٽ پُٽ رجسٽر. اسان کي موجوده منصوبي ۾ انهن جي ضرورت نه هوندي.
۽ آخرڪار، ڪنٽرول رجسٽرڊ. جيئن ته اسان ٻئي SPI پنن ۾ دلچسپي رکون ٿا، يعني PB13، PB14 ۽ PB15، اسان فوري طور تي CRH تي نظر رکون ٿا:
۽ اسان ڏسون ٿا ته اسان کي 20 کان 31 بٽس ۾ ڪجهه لکڻ جي ضرورت پوندي.
اسان اڳ ۾ ئي مٿي ڄاڻائي چڪا آهيون ته اسان پنن مان ڇا چاهيون ٿا، تنهنڪري هتي آئون بغير اسڪرين شاٽ جي ڪندس، مان صرف ايترو چوندس ته موڊ هدايت جي وضاحت ڪري ٿو (ان پٽ جيڪڏهن ٻئي بٽ 0 تي سيٽ ٿيل آهن) ۽ پن جي رفتار (اسان کي 50MHz جي ضرورت آهي، يعني. ٻنهي پنن کي “1” ڏانهن، ۽ CNF موڊ سيٽ ڪري ٿو: باقاعده “پش-پل” – 00، “متبادل” – 10. ڊفالٽ طور، جيئن اسان مٿي ڏسون ٿا، سڀني پنن ۾ ٽيون بٽ آهي هيٺان کان (CNF0)، اھو انھن کي موڊ ۾ سيٽ ڪري ٿو سچل ان پٽ.
جيڪڏهن توهان وٽ موقعو آهي ۽ ٽيسٽ ڪرڻ جي خواهش، ته پوءِ DM634 کي هن طرح جوڙيو: DAI کان PB15، DCK کان PB13، LAT کي PB14. اسان ڊرائيور کي 5 وولٽ کان طاقت ڏيون ٿا، گرائونڊ کي ڳنڍڻ نه وساريو.
STM8 PWM
STM8 تي PWM
جڏهن مان صرف هن مضمون جي منصوبابندي ڪري رهيو هوس، مون فيصلو ڪيو، مثال طور، صرف هڪ ڊيٽا شيٽ استعمال ڪندي اڻڄاتل چپ جي ڪجهه ڪارڪردگي کي ماهر ڪرڻ جي ڪوشش ڪرڻ جي ڪوشش ڪئي، ته جيئن مان بوٽن جي بغير بوٽن سان ختم نه ڪندس. STM8 هن ڪردار لاءِ مثالي هو: پهرين، مون وٽ STM8S103 سان گڏ ٻه چيني بورڊ هئا، ۽ ٻيو، اهو تمام گهڻو مشهور نه آهي، ۽ تنهن ڪري انٽرنيٽ تي پڙهڻ ۽ حل ڳولڻ جو لالچ انهن حلن جي کوٽ تي آهي.
جيئن ته پن آئوٽ کان اڳ ۾ ئي واضح آهي، ٻه ٽائمرز وٽ PWM صلاحيتون آهن - پهريون ۽ ٻيو. ٻئي 16-bit آهن، پهرين ۾ تمام گهڻيون اضافي خاصيتون آهن (خاص طور تي، اهو مٿي ۽ هيٺ ٻنهي کي شمار ڪري سگهي ٿو). اسان ٻنهي کي برابر ڪم ڪرڻ جي ضرورت آهي، تنهنڪري مون واضح طور تي غريب سيڪنڊ سان شروع ڪرڻ جو فيصلو ڪيو، ته جيئن اتفاقي طور تي ڪجهه استعمال نه ڪيو وڃي جيڪا اتي موجود ناهي. ڪجهه مسئلو اهو آهي ته ريفرنس مينوئل ۾ سڀني ٽائمرز جي PWM ڪارڪردگيءَ جو بيان پهرين ٽائمر (17.5.7 PWM موڊ) بابت باب ۾ آهي، تنهنڪري توهان کي هر وقت سڄي دستاويز ۾ اڳتي پوئتي وڃڻو پوندو.
PWM STM8 تي هڪ اهم فائدو آهي PWM تي Atmega:
PWM حد جي ترتيب سان
اڪائونٽ جي ٺاھ جوڙ ھيٺ کان مٿي تائين
ھيٺيون ڳڻپ فعال آھي جيڪڏھن TIM_CR1 رجسٽر ۾ DIR بٽ صاف ٿيل آھي
مثال طور
مثال پهريون PWM موڊ استعمال ڪري ٿو. PWM ريفرنس سگنل OCiREF بلند رکيو وڃي ٿو جيستائين TIM1_CNT < TIM1_CCRi. ٻي صورت ۾ اهو گهٽ سطح وٺندو آهي. جيڪڏهن مقابلي جي قيمت TIM1_CCRi رجسٽر ۾ آٽو لوڊ ويليو (TIM1_ARR رجسٽر) کان وڌيڪ آهي، OCiREF سگنل 1 تي رکيل آهي. جيڪڏهن مقابلي جي قيمت 0 آهي، OCiREF صفر تي رکيل آهي....
STM8 ٽائمر دوران واقعي جي تازه ڪاري پهرين چيڪ ڪري ٿو قدر جي ڀيٽ ڪريو، ۽ صرف پوء هڪ حوالو سگنل پيدا ڪري ٿو. Atmega جي ٽائمر پهرين کي ڇڪي ٿو ۽ پوء موازنہ ڪري ٿو، نتيجي ۾ compare value == 0 آئوٽ پٽ هڪ سوئي آهي، جنهن کي ڪنهن نه ڪنهن طريقي سان ڊيل ڪرڻ گهرجي (مثال طور، پروگرام جي ترتيب سان منطق کي ڦيرائڻ سان).
پوء جيڪو اسان ڪرڻ چاهيون ٿا: 8-bit PWM (AR == 255)، هيٺان کان مٿي تائين ڳڻڻ، سرحد سان ترتيب ڏيڻ. جيئن ته لائٽ بلب چپ سان ڪيٿوڊس سان ڳنڍيل هوندا آهن، ان ڪري PWM کي 0 (LED آن) تائين آئوٽ ڪرڻ گهرجي. قدر جي ڀيٽ ڪريو ۽ 1 کان پوء.
پهرئين ٽائمر وٽ بلڪل ساڳين بِٽس آهن ساڳين رجسٽرن ۾ (اهو صرف اهو آهي ته اهي بِٽ جيڪي باقي ٽائمر ۾ ”محفوظ“ رهيا آهن اهي پهرين ۾ هر قسم جي جديد شين لاءِ استعمال ڪيا ويندا آهن). تنهن ڪري، اهو ڪافي آهي ته ساڳين رجسٽرن جي ايڊريس کي ڊيٽا شيٽ ۾ ڳولڻ ۽ ڪوڊ کي نقل ڪريو. خير، تعدد ورهائيندڙ جي قيمت کي تبديل ڪريو، ڇاڪاڻ ته ... پهريون ٽائمر حاصل ڪرڻ چاهي ٿو ٻن جي طاقت نه، پر ٻن رجسٽرن ۾ صحيح 16-بٽ قيمت Prescaler هاء и گھٽ. اسان سڀ ڪجھ ڪندا آهيون ۽... پهريون ٽائمر ڪم نٿو ڪري. مسئلو ڇا آهي؟
مسئلو صرف ٽائمر 1 جي ڪنٽرول رجسٽر جي باري ۾ سڄي سيڪشن کي ڏسڻ سان حل ٿي سگهي ٿو، جتي اسان هڪ کي ڳوليندا آهيون ته ٻيو ٽائمر نه آهي. هوندو 17.7.30 بريڪ رجسٽر (TIM1_BKR)، جتي هي سا آهي:
ٽيون ميني پروجيڪٽ اٺ RGB LEDs کي PWM موڊ ۾ ٻئي ٽائمر سان ڳنڍڻ ۽ انهن کي مختلف رنگ ڏيکارڻ آهي. اهو LED ملٽي پلڪسنگ جي تصور تي مبني آهي، جيڪو اهو آهي ته جيڪڏهن توهان LEDs کي تمام گهڻو، تمام جلدي آن ۽ بند ڪيو، اهو اسان کي لڳي ٿو ته اهي مسلسل آهن (نظر جي تسلسلبصري تصور جي inertia). مون هڪ دفعو ڪيو Arduino تي هن وانگر ڪجهه.
ڪم الورورٿم هن طرح نظر اچي ٿو:
پهرين RGB LED جي anode سان ڳنڍيل؛
ان کي روشن ڪيو، ڪيٿوڊس ڏانهن ضروري سگنل موڪلڻ؛
PWM چڪر جي آخر تائين انتظار ڪيو؛
ٻئي RGB LED جي anode سان ڳنڍيل؛
روشن ڪيو...
خير، وغيره. يقينا، خوبصورت آپريشن لاء ضروري آهي ته anode ڳنڍيل آهي ۽ LED هڪ ئي وقت ۾ "بجلي" آهي. خير، يا لڳ ڀڳ. ڪنهن به صورت ۾، اسان کي هڪ ڪوڊ لکڻ جي ضرورت آهي جيڪا سيڪنڊ ٽائمر جي ٽن چينلن ۾ قيمتون ڪڍي، انهن کي تبديل ڪريو جڏهن UEV پهچي وڃي، ۽ ساڳئي وقت موجوده فعال RGB LED کي تبديل ڪريو.
جيئن ته LED سوئچنگ خودڪار آهي، اسان کي هڪ "ويڊيو ياداشت" ٺاهڻ جي ضرورت آهي جنهن مان مداخلت ڪندڙ هينڊلر ڊيٽا حاصل ڪندو. هي هڪ سادي صف آهي:
uint8_t colors[8][3];
هڪ مخصوص LED جو رنگ تبديل ڪرڻ لاء، هن صف ۾ گهربل قدر لکڻ لاء ڪافي ٿيندو. ۽ متغير فعال LED جي تعداد لاء ذميوار ٿيندو
uint8_t cnt;
ڊيمڪس
مناسب ملائيپليڪسنگ لاءِ، اسان کي ضرورت آھي، بيحد ڪافي، ھڪ CD74HC238 demultiplexer. Demultiplexer - هڪ چپ جيڪو هارڊويئر ۾ آپريٽر کي لاڳو ڪري ٿو <<. ٽن ان پٽ پنن ذريعي (بٽ 0، 1 ۽ 2) اسان ان کي ٽي بٽ نمبر X فيڊ ڪندا آهيون، ۽ جواب ۾ اهو آئوٽ پٽ نمبر چالو ڪري ٿو (1<<X). چپ جا باقي ان پٽ استعمال ڪيا ويندا آھن پوري ڊيزائن کي ماپڻ لاءِ. اسان کي هن چپ جي ضرورت آهي نه رڳو مائڪرو ڪنٽرولر جي قبضي واري پنن جي تعداد کي گهٽائڻ لاءِ، پر حفاظت لاءِ- ته جيئن حادثاتي طور تي ممڪن کان وڌيڪ LED آن نه ٿئي ۽ MK کي ساڙي نه وڃي. چپ جي قيمت هڪ پئسو آهي ۽ هميشه توهان جي گهر جي دوائن جي ڪابينا ۾ رکڻ گهرجي.
اسان جي CD74HC238 گهربل LED جي anode کي وولٹیج جي فراهمي جي ذميوار هوندي. هڪ مڪمل ملٽي پلڪس ۾، اهو هڪ P-MOSFET ذريعي ڪالمن کي وولٹیج فراهم ڪندو، پر هن ڊيم ۾ اهو سڌو ممڪن آهي، ڇاڪاڻ ته اهو 20 ايم اي ٺاهي ٿو، مطابق مطلق وڌ ۾ وڌ درجه بندي ڊيٽا شيٽ ۾. کان ڊيٽا شيٽ CD74HC238 اسان کي پن آئوٽ ۽ هي چيٽ شيٽ جي ضرورت آهي:
H = اعلي وولٹیج سطح، L = گھٽ وولٹیج سطح، X - پرواه نه ڪريو
اسان E2 ۽ E1 کي زمين سان ڳنڍيندا آهيون، E3، A0، A1 ۽ A3 کي PD5، PC3، PC4 ۽ PC5 کي STM8 جي پنن سان. جيئن ته مٿي ڏنل جدول ۾ هيٺين ۽ اعليٰ ٻنهي سطحن تي مشتمل آهي، ان ڪري اسان انهن پنن کي پش-پل پن طور ترتيب ڏيون ٿا.
پي ڊبليو ايم
ٻئي ٽائمر تي PWM ساڳئي طرح ترتيب ڏنل آهي جيئن پوئين ڪهاڻي ۾، ٻن اختلافن سان:
پهرين، اسان کي مداخلت کي فعال ڪرڻ جي ضرورت آهي تازه ڪاري واقعو (UEV) جيڪو هڪ فنڪشن کي سڏيندو جيڪو فعال LED کي ٽوگل ڪري ٿو. اهو بٽ تبديل ڪندي ڪيو ويندو آهي تازه ڪاري مداخلت فعال ڪريو نالي سان رجسٽر ۾
ٻيو فرق ملٽي پلڪسنگ جي رجحان سان لاڳاپيل آهي، جهڙوڪ گھوڙا - diodes جي parasitic چمڪ. اسان جي صورت ۾، اهو ظاهر ٿي سگھي ٿو ته ٽائمر، UEV تي مداخلت جو سبب بڻيل، ٽڪ ڪرڻ جاري رکي ٿو، ۽ مداخلت واري هينڊلر وٽ وقت نه آهي ته LED کي تبديل ڪرڻ کان اڳ ٽائمر پنن تي ڪجهه لکڻ شروع ڪري. هن کي منهن ڏيڻ لاءِ، توهان کي منطق کي ڦيرائڻو پوندو (0 = وڌ ۾ وڌ چمڪ، 255 = ڪجھ به نه روشن آهي) ۽ انتهائي ڊيوٽي چڪر جي قدرن کان پاسو ڪرڻ گهرجي. اهي. پڪ ڪريو ته UEV کان پوءِ LEDs مڪمل طور تي ھڪڙي PWM چڪر لاءِ نڪرنديون آھن.
جيڪڏهن گهٽ ۾ گهٽ ڪنهن کي اهو مضمون مفيد معلوم ٿئي، ته پوءِ مون ان کي بيڪار نه لکيو. مون کي رايا ۽ تبصرا حاصل ڪرڻ لاء خوش ٿي ويندي، مان هر شيء جو جواب ڏيڻ جي ڪوشش ڪندس.