- MCP4921 DAC (डिजिटल से एनालॉग कनवर्टर)
- अवयव आवश्यक
- ढांच के रूप में
- कोड स्पष्टीकरण
- PIC का उपयोग करके डिजिटल से एनालॉग रूपांतरण में परीक्षण
डिजिटल और एनालॉग इलेक्ट्रॉनिक्स का एक अभिन्न अंग है। अधिकांश उपकरणों में ADC के साथ-साथ DAC दोनों होते हैं और इनका उपयोग तब किया जाता है जब सिग्नल को डिजिटल से एनालॉग या डिजिटल से एनालॉग में परिवर्तित करने की आवश्यकता होती है। साथ ही वास्तविक विश्व सिग्नल जैसे ध्वनि और प्रकाश प्रकृति में एनालॉग हैं, इसलिए जब भी इन वास्तविक विश्व संकेतों का उपयोग किया जाना है, तो डिजिटल सिग्नल को एनालॉग में परिवर्तित करना होगा, उदाहरण के लिए स्पीकर का उपयोग करके ध्वनि का उत्पादन करना या किसी प्रकाश स्रोत को नियंत्रित करना।
DAC का एक अन्य प्रकार पल्स चौड़ाई मॉड्युलेटर (PWM) है। एक PWM एक डिजिटल शब्द लेता है और चर पल्स चौड़ाई के साथ एक डिजिटल पल्स उत्पन्न करता है। जब यह संकेत एक फिल्टर के माध्यम से पारित किया जाता है, तो परिणाम विशुद्ध रूप से एनालॉग होगा। एक एनालॉग सिग्नल में एक सिग्नल में कई प्रकार के डेटा हो सकते हैं।
इस ट्यूटोरियल में, हम डिजिटल रूपांतरण से एनालॉग रूपांतरण के लिए माइक्रोचिप PIC16F877A के साथ DAC MCP4921 को इंटरफेस करेंगे ।
इस ट्यूटोरियल में हम डिजिटल सिग्नल को एक एनालॉग सिग्नल में परिवर्तित करेंगे और 16x2 एलसीडी पर इनपुट डिजिटल मूल्य और आउटपुट एनालॉग मूल्य प्रदर्शित करेंगे। यह अंतिम एनालॉग आउटपुट के रूप में 1V, 2V, 3V, 4V, और 5V प्रदान करेगा जो अंत में दिए गए वीडियो में दिखाया गया है। आप आगे राकबेरी पाई, Arduino और STM32 बोर्डों के साथ DAC के हमारे अनमोल ट्यूटोरियल में DAC के बारे में जान सकते हैं।
DAC का उपयोग कई अनुप्रयोगों में किया जा सकता है जैसे मोटर नियंत्रण, LED लाइट्स का कंट्रोल ब्राइटनेस, ऑडियो एम्पलीफायर, वीडियो एनकोडर, डाटा अधिग्रहण सिस्टम आदि। सीधे इंटरफेसिंग हिस्से में कूदने से पहले, MCP221 के बारे में अवलोकन करना महत्वपूर्ण है।
MCP4921 DAC (डिजिटल से एनालॉग कनवर्टर)
MCP4921 एक 12 बिट DAC है, इसलिए MCP4921 12 बिट आउटपुट रिज़ॉल्यूशन प्रदान करेगा। डीएसी रिज़ॉल्यूशन का मतलब डिजिटल बिट्स की संख्या है जिसे एनालॉग सिग्नल में परिवर्तित किया जा सकता है। हम इससे कितने मूल्य प्राप्त कर सकते हैं यह सूत्र पर आधारित है। 12-बिट के लिए, यह = 4096 है। इसका मतलब है कि 12-बिट रिज़ॉल्यूशन डीएसी 4096 विभिन्न आउटपुट उत्पन्न कर सकता है।
इस मान का उपयोग करके, कोई एकल एनालॉग चरण वोल्टेज की आसानी से गणना कर सकता है। चरणों की गणना के लिए, संदर्भ वोल्टेज की आवश्यकता होती है। जैसे डिवाइस के लिए लॉजिक वोल्टेज 5 वी है, स्टेप वोल्टेज 5/4095 (4096-1 है क्योंकि डिजिटल के लिए शुरुआती बिंदु 1 नहीं है, यह 0 है), जो 0.00122100122 मिलीवॉल है। तो, 1 बिट का परिवर्तन 0.00122100122 के साथ एनालॉग आउटपुट को बदल देगा।
तो, यह रूपांतरण हिस्सा था। MCP4921 एक 8 पिन आईसी है । पिन आरेख और विवरण नीचे पाया जा सकता है।
MCP4921 आईसी SPI प्रोटोकॉल द्वारा माइक्रोकंट्रोलर के साथ संचार । एसपीआई संचार के लिए, एक उपकरण को मास्टर होना पड़ता है, जो डेटा या कमांड को एक गुलाम के रूप में जुड़े बाहरी डिवाइस के लिए प्रस्तुत करता है। एसपीआई संचार प्रणाली में, एक मास्टर डिवाइस के साथ कई दास उपकरणों को जोड़ा जा सकता है।
डेटा और कमांड सबमिट करने के लिए, कमांड रजिस्टर को समझना महत्वपूर्ण है।
नीचे की छवि में, कमांड रजिस्टर दिखाया गया है,
आदेश रजिस्टर एक 16-बिट रजिस्टर है । कॉन्फ़िगरेशन आदेश के लिए बिट -15 से बिट -12 का उपयोग किया जाता है। उपरोक्त छवि में डेटा इनपुट और कॉन्फ़िगरेशन स्पष्ट रूप से दिखाया गया है। इस परियोजना में, MCP4921 को निम्न विन्यास के रूप में इस्तेमाल किया जाएगा-
बिट संख्या |
विन्यास |
कॉन्फ़िगरेशन मान |
बिट १५ |
डीएसी ए |
० |
बिट १४ |
अनबन हुई |
० |
बिट १३ |
1x (V OUT * D / 4096) |
1 |
बिट १२ |
आउटपुट पावर डाउन कंट्रोल बिट |
1 |
तो बाइनरी 0011 है जो डेटा के साथ रजिस्टर के D11 से D0 बिट्स तक निर्धारित होता है। 16-बिट डेटा 0011 xxxx xxxx xxxx को जमा करने की आवश्यकता है, जहाँ MSB का पहला 4 बिट कॉन्फ़िगरेशन है और शेष LSB है। यह लिखित कमांड टाइमिंग आरेख को देखकर स्पष्ट हो जाएगा।
समय आरेख और डेटाशीट के अनुसार, CS पिन संपूर्ण कमांड लेखन अवधि के लिए MCP4921 तक कम है।
अब हार्डवेयर के साथ डिवाइस को इंटरफ़ेस करने और कोड लिखने का समय है।
अवयव आवश्यक
इस परियोजना के लिए, निम्नलिखित घटकों की आवश्यकता है-
- MCP4921
- PIC16F877A
- 20 मेगाहर्ट्ज क्रिस्टल
- एक प्रदर्शन 16x2 वर्ण एलसीडी।
- 2k रोकनेवाला -1 पीसी
- 33pF कैपेसिटर - 2 पीसी
- 4.7k रोकनेवाला - 1 पीसी
- आउटपुट वोल्टेज को मापने के लिए एक बहु-मीटर
- एक ब्रेडबोर्ड
- 5 वी बिजली की आपूर्ति, एक फोन चार्जर काम कर सकता है।
- हुकअप तारों या बर्ग तारों के बहुत सारे।
- संकलक के साथ प्रोग्रामर किट और आईडीई के साथ माइक्रोचिप प्रोग्रामिंग वातावरण
ढांच के रूप में
PIC माइक्रोकंट्रोलर के साथ DAC4921 के इंटरफेस के लिए सर्किट आरेख नीचे दिया गया है:
सर्किट का निर्माण ब्रेडबोर्ड में किया गया है-
कोड स्पष्टीकरण
PIC16F877A के अनुरूप डिजिटल संकेतों को एनालॉग में परिवर्तित करने के लिए पूरा कोड लेख के अंत में दिया गया है। हमेशा की तरह, हमें पहले PIC माइक्रोकंट्रोलर में कॉन्फ़िगरेशन बिट्स सेट करने की आवश्यकता है।
// PIC16F877A कॉन्फ़िगरेशन बिट सेटिंग्स // 'C' सोर्स लाइन कॉन्फिगरेशन स्टेटमेंट्स // CONFIG #pragma config FOSC = HS // Oscillator सिलेक्शन बिट्स (HS ऑसिलेटर) #pragma config WDTE = OFF // वॉचटॉग टाइमर बिट (WDT अक्षम) सक्षम करें # pragma config PWRTE = OFF // पावर-अप टाइमर सक्षम करें (PWRT अक्षम) #pragma config BOREN = ON // ब्राउन-आउट रीसेट सक्षम बिट (BOR सक्षम) #pragma config LVP = OFF / लो-वोल्टेज (एकल-आपूर्ति)) इन-सर्किट सीरियल प्रोग्रामिंग इनेबल बिट (RB3 / PGM पिन में PGM फंक्शन है; लो-वोल्टेज प्रोग्रामिंग इनेबल है) #pragma config CPD = OFF // Data EEPROM मेमोरी कोड प्रोटेक्शन बिट (डेटा EEPROM कोड प्रोटेक्शन ऑफ) #pragma config WRT = OFF // फ़्लैश प्रोग्राम मेमोरी राइट बिट्स सक्षम करें (सुरक्षा बंद लिखें; सभी प्रोग्राम मेमोरी EECON कंट्रोल द्वारा लिखी जा सकती है) #pragma config CP = OFF // फ्लैश प्रोग्राम मेमोरी कोड प्रोटेक्शन बिट (कोड प्रोटेक्शन ऑफ)
एलसीडी और एसपीआई हेडर फ़ाइलों को एकीकृत करने के लिए नीचे की कोड लाइनों का उपयोग किया जाता है, एक्सटीएएल फ्रीक्वेंसी और डीएसी का सीएस पिन कनेक्शन भी घोषित किया जाता है।
PIC SPI ट्यूटोरियल और लाइब्रेरी दिए गए लिंक पर पाया जा सकता है।
#शामिल
Funciton SPI_Initialize_Master () थोड़ा इस परियोजना के लिए आवश्यक एक अलग विन्यास के लिए संशोधित किया गया है। इस स्थिति में, SSPSTAT रजिस्टर को इस तरह से कॉन्फ़िगर किया गया है कि इनपुट डेटा डेटा आउटपुट समय के अंत में और एसपीआई घड़ी को भी कॉन्फ़िगर किया गया है क्योंकि ट्रांसमिट सक्रिय से निष्क्रिय घड़ी राज्य मोड में संक्रमण पर होता है। अन्य समान है।
शून्य SPI_Initialize_Master () { TRISC5 = 0; // आउटपुट के रूप में सेट करें SSPSTAT = 0b11000000; // pg 74/234 SSPCON = 0b00100000; // pg 75/234 TRISC3 = 0; // गुलाम मोड के लिए आउटपुट के रूप में सेट }
इसके अलावा, नीचे दिए गए फ़ंक्शन के लिए, SPI_Write () को थोड़ा संशोधित किया गया है। एसपीआई पर सही डेटा ट्रांसमिशन सुनिश्चित करने के लिए बफर क्लियर होने के बाद डेटा ट्रांसमिशन होगा।
शून्य SPI_Wite (आवक) { SSPBUF = आवक; // दिए गए उपयोगकर्ता को बफर में लिखें (जबकि! SSPSTATbits.BF); }
कार्यक्रम का महत्वपूर्ण हिस्सा MCP4921 ड्राइवर है। यह थोड़ा मुश्किल हिस्सा है क्योंकि कमांड और डिजिटल डेटा को SPI पर पूरा 16-बिट डेटा प्रदान करने के लिए एक साथ छिद्रित किया जाता है। हालाँकि, उस तर्क को कोड टिप्पणियों में स्पष्ट रूप से दिखाया गया है।
/ * यह फ़ंक्शन डिजिटल मूल्य को एनालॉग में परिवर्तित करने के लिए है। * ( void Convert_DAC (अहस्ताक्षरित int value) { / * Step size = 2 ^ n, इसलिए 12bit 2 ^ 12 = 4096 5V संदर्भ के लिए, चरण 5/4095 = 0.0012210012210012V / 1mV (लगभग) * / अहस्ताक्षरित int कंटेनर होगा; अहस्ताक्षरित int MSB; अहस्ताक्षरित int एलएसबी; / * चरण: 1, कंटेनर में 12 बिट डेटा संग्रहीत किया जाता है मान लीजिए कि डेटा 4095 है, बाइनरी 1111 1111 1111 * / कंटेनर = मूल्य में; / * चरण: 2 डमी 8 बिट बनाना। तो, 256 को विभाजित करके, ऊपरी 4 बिट्स LSB LSB = 0000 1111 * / LSB = कंटेनर / 256 में कैप्चर किए जाते हैं ; / * चरण: 3 4 बिट डेटा छिद्रण के साथ विन्यास भेज रहा है। LSB = 0011 0000 या 0000 1111. परिणाम 0011 1111 * / LSB = (0x30) - LSB है; / * चरण: 4 कंटेनर में अभी भी 21 बिट मूल्य है। निचले 8 बिट्स को निकालना। 1111 1111 और 1111 1111 1111. परिणाम 1111 1111 है जो MSB * / MSB = 0xFF और कंटेनर है; / * चरण: 4 दो बाइट्स में विभाजित करके 16 बिट्स डेटा भेजना। * ( DAC_CS = 0; // सीएस डाटा ट्रांसमिशन के दौरान कम है। डेटा-शीट के अनुसार इसे SPI_Write (LSB) की आवश्यकता होती है ; SPI_Write (MSB); DAC_CS = 1; }
मुख्य फ़ंक्शन में, एक 'लूप के लिए' का उपयोग किया जाता है जहां 1V, 2V, 3V, 4V, और 5V के आउटपुट बनाने के लिए डिजिटल डेटा बनाया जाता है। डिजिटल वैल्यू की गणना आउटपुट वोल्टेज / 0.0012210012210012 मिलीवॉल के खिलाफ की जाती है।
शून्य मुख्य () { system_init (); परिचय_स्क्रीन (); int संख्या = 0; int volt = 0; जबकि (1) {के लिए (वोल्ट = 1; वोल्ट <= मैक्स_वीओएलटी; वोल्ट ++) { नंबर = वोल्ट / 0.0012210012210012; साफ़ स्क्रीन(); lcd_com (FIRST_LINE); lcd_puts ("DATA Sent: -"); lcd_print_number (संख्या); lcd_com (SECOND_LINE); lcd_puts ("आउटपुट: -"); lcd_print_number (वाल्ट); lcd_puts ("वी"); Convert_DAC (संख्या); __delay_ms (300); } } }
PIC का उपयोग करके डिजिटल से एनालॉग रूपांतरण में परीक्षण
निर्मित सर्किट का परीक्षण मल्टी-मीटर का उपयोग करके किया जाता है। नीचे की छवियों में, आउटपुट वोल्टेज और डिजिटल डेटा एलसीडी पर दिखाया गया है। मल्टी-मीटर निकट रीडिंग दिखा रहा है।
एक कामकाजी वीडियो के साथ पूरा कोड नीचे संलग्न है।