जबकि मैं उपलब्ध विभिन्न प्रोग्रामिंग विधियों में गोता लगाना पसंद करूंगा, किसी और के पास पहले से ही है। यहाँ AVRFreaks, AVR प्रोग्रामिंग विधियों पर डीन कैमरा का ट्यूटोरियल है :
AVR माइक्रोकंट्रोलर को प्रोग्राम करने के कई तरीके हैं। चूंकि कई लोग एक या दूसरे समय के बारे में अलग-अलग लोगों के बारे में पूछते हैं, मैंने सोचा कि मैं उन्हें यहां पर रूपरेखा दूंगा ताकि उनके सवालों का जवाब जल्दी और कुशलता से दिया जा सके। अगर मुझे कोई विधि याद आती है या कोई त्रुटि होती है तो कृपया मुझे क्षमा करें।
विधि 1: सिस्टम प्रोग्रामिंग (ISP) में
समर्थित द्वारा: AVRs के विशाल बहुमत (नीचे के पद देखें)
समर्थित प्रोग्रामर: AVRISP MKI / II, JTAG MKII, STK500, STK600, ड्रैगन, AVRISP क्लोन, AVR9P प्रोग्रामर, AVRONE
सिस्टम प्रोग्रामिंग में संभवतया संपूर्ण AVR लाइन के फ्लैश, EEPROM, फ्यूज और लॉकबाइट की प्रोग्रामिंग का सबसे आम तरीका है। ISP AVRs को अत्यधिक उच्च दरों पर प्रोग्राम कर सकता है (यह मानते हुए कि लक्ष्य AVR उच्च आवृत्ति पर चल रहा है और प्रोग्रामर इसका समर्थन करता है) और लगभग सभी AVR शौक़ीनों की पसंद का तरीका है। सरल डू-इट-द-डोंगल के अलावा बाजार में कई एवीआरआईएसपी क्लोन और एवीआर 910 प्रोग्रामर हैं जो आपके कंप्यूटर के समानांतर पोर्ट से जुड़ते हैं।
हाल के नए डोंगल डिज़ाइन कंप्यूटर के सीरियल पोर्ट का उपयोग कर सकते हैं, हालांकि वास्तविक प्रमाणों में कहा गया है कि तकनीकी सीमाओं के कारण यह विधि बेहद धीमी है।
ISP के लिए आवश्यक है कि लक्ष्य AVR ISP घड़ी के कम से कम चार बार क्लॉक रेट पर चल रहा हो। यह एक आम नुकसान है और AVRs के लिए कई नए भ्रम का स्रोत है।
विधि 2: जेटीजी
समर्थित द्वारा: MKR और MKII डिवाइस समर्थन के लिए AVRStudio उपकरण सहायता देखें
समर्थित प्रोग्रामर: JTAG-ICE, JTAG-ICE MKII, ड्रैगन, JTAG-ICE क्लोन, AVRONE, ST600 (केवल प्रोग्रामिंग)
तकनीकी रूप से JTAG एक डिबगिंग सिस्टम है, न कि प्रोग्रामिंग पद्धति। फिर भी, JTAG इंटरफ़ेस एक AVR की प्रोग्रामिंग के लिए अनुमति देता है जो इसका समर्थन करता है।
JTAG एक इन-सिस्टम डिबगिंग टूल है जो आपको एक सर्किट में चलने के दौरान एक समर्थित AVR की स्थिति में हेरफेर और जांच करने की अनुमति देता है। JTAG उपयोगकर्ता को किसी भी समय निष्पादन को रोकने की अनुमति देता है, एवीआर के आंतरिक रजिस्टरों का हेरफेर और बहुत कुछ।
ATMEL की आधिकारिक JTAG-ICE इकाइयों को JTAG-ICE MKII द्वारा अधिगृहीत किया गया है, जो AVR रेंज डीबगवायर डीबगिंग प्रोटोकॉल के साथ-साथ ISP विधि (ऊपर देखें) के माध्यम से प्रोग्रामिंग में नए और अधिक व्यापक रूप से समर्थित है।
जेटीजी-आईसीई क्लोन कम कीमतों के लिए उपलब्ध हैं, हालांकि केवल एक मुट्ठी भर एवीआर के साथ उनकी सीमित संगतता उनकी उपयोगिता को सीमित करती है। इसके बावजूद, अगर आपका AVR JTAG इंटरफ़ेस का समर्थन करता है, JTAG-ICE एक बहुत ही अच्छा और प्रभावी डिबगिंग विधि और प्रोग्रामर बना हुआ है।
विधि 3: डिबगवायर
समर्थित द्वारा: कई छोटे AVRs
समर्थित प्रोग्रामर: JTAG-ICE MKII, ड्रैगन, AVRONE
फिर से डिबगवायर एक प्रोग्रामिंग इंटरफ़ेस के बजाय एक डीबगिंग है, लेकिन इसका उपयोग कार्यक्रमों में समर्थित AVR में लोड करने के लिए किया जा सकता है। DW इंटरफ़ेस सभी संचारों के लिए एक एकल AVR पिन (/ RESET लाइन) का उपयोग करता है, जिससे यह कम-पिन गणना AVR उपकरणों के लिए आदर्श होता है।
विधि 4: बूटलोडर
द्वारा समर्थित: अधिकांश नए AVRs
समर्थित प्रोग्रामर: N / A
फिर तकनीकी रूप से एक प्रोग्रामिंग विधि नहीं है। बूटलोडर एक छोटा एवीआर प्रोग्राम है जो नियमित फ्लैश के उपयोगकर्ता-सेटल किए जाने वाले आरक्षित सेक्शन में बैठता है। बूटलोडर्स नए AVR में उपलब्ध फ्लैश सेल्फ-मॉडिफिकेशन फीचर्स का उपयोग करते हैं, जिससे AVR को किसी बाहरी स्रोत से लोड किए गए प्रोग्राम डेटा के माध्यम से खुद को प्रोग्राम करने की अनुमति मिलती है। बूटलोडर्स किसी भी स्थान से अपने डेटा को स्रोत कर सकते हैं (जैसे बाहरी डेटाफ्लेश या एसडी कार्ड), हालांकि अब तक सबसे सामान्य प्रकार का बूटलोडर AVR के RS-232 (सीरियल) पोर्ट के माध्यम से एक पीसी के साथ संचार करता है।
बूटलोडर्स सीमित हैं कि वे फ्लैश स्पेस का उपभोग करते हैं (एवीआर के आवेदन के लिए उपलब्ध फ्लैश के आकार को सीमित करते हुए) और वे एवीआर फ्यूसेबिट्स को बदलने में असमर्थ हैं।
बूटलोडर्स व्यापक रूप से डाउनलोड के लिए इंटरनेट पर उपलब्ध हैं, लेकिन वे "चिकन और अंडा" समस्या से पीड़ित हैं; पहली जगह में बूटलोडर में प्रोग्राम करने के लिए आपको दूसरे प्रकार के प्रोग्रामर की आवश्यकता है। यह आमतौर पर एक साधारण समानांतर पोर्ट डोंगल (ISP अनुभाग देखें) के निर्माण या एक बूटलोडर (जैसे AVRButterfly बोर्ड) के साथ पहले से लोड किए गए AVR की खरीद के द्वारा हल किया जाता है।
विधि 5: उच्च वोल्टेज समानांतर प्रोग्रामिंग (HVPP)
द्वारा समर्थित: अधिकांश गैर-टिन AVR (अपवादों के साथ)
समर्थित प्रोग्रामर: STK500, STK600, ड्रैगन, होमब्रे डोंगल, AVRONE
उच्च वोल्टेज समानांतर प्रोग्रामिंग प्रोग्रामिंग का एक तरीका है जो शायद ही कभी उपयोग किया जाता है, क्योंकि परेशानी के कारण इसे स्थापित करने की आवश्यकता होती है। इसके बावजूद, एचवीपीपी प्रोग्रामिंग का उपयोग आमतौर पर एवीआर को पुनर्जीवित करने के लिए किया जाता है, जिनके फ्यूज़बिट को एक अन्य प्रोग्रामिंग विधि के माध्यम से गलत तरीके से कॉन्फ़िगर किया गया है।
STK500 और ड्रैगन दोनों HVPP का समर्थन करते हैं। एचवीपीपी के दौरान, लक्ष्य / RESET पिन को 12V के असामान्य रूप से उच्च मूल्य पर उठाया जाता है जो आंतरिक समानांतर प्रोग्रामिंग सर्किटरी को संलग्न करता है। / RESET पिन AVR (HVPP समर्थित AVRs पर) का एकमात्र पिन है जिसे सुरक्षित रूप से इस स्तर तक उठाया जा सकता है।
आप इस तरह की ऑनलाइन योजनाओं का उपयोग करके अपना खुद का एचवीपीपी डोंगल बना सकते हैं।
विधि 6: हाई वोल्टेज सीरियल प्रोग्रामिंग (एचवीएसपी)
द्वारा समर्थित: कई छोटे AVR (अपवादों के साथ)
समर्थित प्रोग्रामर: STK500, STK600, ड्रैगन, होमब्रे डोंगल, AVRONE
एचवीएसपी एचवीपीपी के समान है, सिवाय इसके कि डेटा ट्रांसफर को क्रमबद्ध रूप से समानांतर रूप से किया जाता है। यह वैकल्पिक प्रोग्रामिंग विधि है जिसका उपयोग कई टिन श्रृंखला AVRs पर किया जाता है जिनके पास HVPP के लिए पर्याप्त पिन की कमी होती है।
विधि 7: पीडीआई
समर्थित द्वारा: XMEGA AVRs
समर्थित प्रोग्रामर: STK600, AVRONE, JTAG MKII, ड्रैगन, AVRISP MKII
एवीआर के एक्समेगा लाइन के लिए पीडीआई डीबगवायर प्रोटोकॉल पर आधारित नया प्रोग्रामिंग इंटरफेस है। यह वर्तमान में किसी भी अन्य 8-बिट AVR माइक्रोकंट्रोलर पर उपयोग नहीं किया जाता है।
विधि 8: टीपीआई
द्वारा समर्थित: 6-पिन टिनि AVR (ATTINY10, आदि)
समर्थित प्रोग्रामर: STK600, ड्रैगन, AVRISP MKII
टीपीआई सीमित पिन के साथ AVRs की नई टिन लाइन के लिए एक बहुत ही छोटा प्रोग्रामिंग इंटरफ़ेस है, जैसे 6 पिन ATTINV10। DW की तरह, TPI डिवाइस / / RESET लाइन का उपयोग संचार इंटरफेस के हिस्से के रूप में करता है, लेकिन इसमें समानता समाप्त होती है। चूंकि पिंट के आकार के टिनी एवीआर में ऑन-चिप डिबगिंग सर्किट की कमी होती है, इसलिए टीपीआई प्रोटोकॉल आधे-द्वैध प्रोटोकॉल में तीन पिनों के नए प्रोग्रामिंग इंटरफ़ेस का उपयोग करता है। क्योंकि डिवाइस के RSTDSB पिन सेट होने पर प्रोग्रामिंग के लिए / RESET लाइन को + 12V तक उठाना पड़ता है, यह वर्तमान में केवल नए STK600 प्रोग्रामिंग बोर्ड द्वारा समर्थित है।
बोनस पूछे जाने वाले प्रश्न अनुभाग!
सबसे अच्छा तरीका कौन सा है?
कोई सार्वभौमिक "सर्वश्रेष्ठ" विधि नहीं है। आईएसपी प्रोग्रामिंग सरल और बेहद लोकप्रिय है, हालांकि उपरोक्त सभी तरीके काम करेंगे। दो उच्च वोल्टेज प्रोग्रामिंग मोड (जो भी आपके डिवाइस पर लागू होता है) सबसे अधिक सुविधा संपन्न होते हैं, क्योंकि वे एक एवीआर की मरम्मत के लिए अनुमति देते हैं, जिससे इसके फ़्यूज़ गलत हो गए हैं। हालांकि, उन तरीकों को स्थापित करने के लिए एक दर्द है, इसलिए अधिकांश उपयोगकर्ता आईएसपी के साथ चलते हैं।
मैंने एक समानांतर पोर्ट डोंगल बनाया है। क्या मैं इसे AVRStudio के साथ उपयोग कर सकता हूं?
मुझे डर नहीं लग रहा है। AVRStudio किसी भी "गूंगा" डोंगल के साथ इंटरफ़ेस नहीं कर सकता है - इसके लिए एक स्मार्ट प्रोग्रामिंग डिवाइस की आवश्यकता होती है - जिसमें एक माइक्रोकंट्रोलर होता है - जो संचार प्रोटोकॉल को भेजता है। एक माइक्रोकंट्रोलर के बिना सरल डोंगल को "बिट-बैंग" होना चाहिए (यानी! कंप्यूटर के माध्यम से डोंगल के माध्यम से उपयुक्त उचित संकेत।
तो मेरे डोंगल बेकार है?
नहीं। आप थर्ड पार्टी प्रोग्रामिंग सॉफ्टवेयर टूल के साथ होम मेड डोंगल के जरिए भी प्रोग्राम कर सकते हैं। AVRDude एक अच्छी, ज्ञात, मुफ्त कमांड लाइन उपयोगिता है - और यह WinAVR पैकेज के साथ शामिल है।
यदि मेरे प्रोग्रामर AVRStudio के साथ काम करना चाहते हैं तो मेरे पास क्या विकल्प हैं?
एक प्रोग्रामर चुनें जो एक AVRStudio- समर्थित प्रोटोकॉल का उपयोग करता है। यह सरल "AVR910" प्रोटोकॉल (पदावनत) या STK500 / AVRISP द्वारा प्रयुक्त प्रोटोकॉल का एक कस्टम कार्यान्वयन हो सकता है। ध्यान दें कि इन प्रोग्रामर्स को उनमें एक माइक्रो कंट्रोलर की आवश्यकता होती है, जिससे कैच -22 स्थिति पैदा होती है। उपयुक्त फर्मवेयर के साथ खरीद के समय प्रोग्रामर के AVR पूर्व-क्रमादेशित होने या AVR पूर्व-प्रोग्रामर के साथ बूटलोडर के साथ होने से इसे हल किया जा सकता है।
ठीक है, मैं एक बूटलोडर का उपयोग करना चाहता हूं। मैं इसे पहली जगह में कैसे प्राप्त करूँ?
किसी AVR में बूटलोडर का उपयोग करने के लिए, आपको सबसे पहले बूटलोडर को प्रोग्राम करना होगा। यदि आपके पास कोई मौजूदा प्रोग्रामर नहीं है (यहां तक कि एक साधारण गूंगा डोंगल प्रारंभिक प्रोग्रामिंग के लिए पर्याप्त होगा), तो आप वैकल्पिक रूप से एवीआर के साथ पूर्व-क्रमबद्ध खरीद सकते हैं। कई आपूर्तिकर्ताओं से बूटलोडर।
Atmel भी बटरफ्लाई डेमो बोर्ड बनाती है, जिसका MEGA169 AVR AVR-Studio संगत बूटलोडर के साथ प्री-लोडेड आता है।
मदद! मैंने फ़्यूज़ के साथ खिलवाड़ किया है और ISP का उपयोग करते समय अपने AVR को पछाड़ दिया है!
सबसे आम गलती घड़ी चयन फ़्यूज़ को अमान्य सेटिंग में बदल रही है। AVR के XTAL1 पिन पर एक बाहरी घड़ी लगाने की कोशिश करें और देखें कि क्या मदद करता है।
असफल होना, यदि संभव हो तो उच्च-वोल्टेज विधियों में से एक का उपयोग करें। ये किसी भी ग़लतफ़हमी को ठीक कर देंगे, जिसमें घड़ी का स्रोत भी शामिल होगा क्योंकि उच्च-वोल्टेज विधियाँ प्रोग्रामिंग के लिए AVR को अपनी स्वयं की घड़ी प्रदान करती हैं।
मैं अपने प्रोग्रामर के साथ कैसे इंटरफेस करूं?
आप अपने प्रोग्रामर के साथ इंटरफेस करने के लिए किस सॉफ्टवेयर का उपयोग करते हैं, यह आपके द्वारा उपयोग किए जा रहे प्रोग्रामर के प्रकार पर निर्भर करता है।
सरल "गूंगा" डोंगल को पोनीप्रोग या एवीआरडूड जैसे तीसरे पक्ष के सॉफ़्टवेयर की आवश्यकता होती है। ये कमांड लाइन या GUI उपकरण हो सकते हैं - वेब पर चारों ओर देखें और आप अपनी आवश्यकताओं को पूरा करने के लिए एक को ठीक करेंगे।
AVR910 प्रोटोकॉल के आधार पर प्रोग्रामर और बूटलोडर्स का उपयोग AVRStudio के भीतर किया जा सकता है। टूल मेनू से, अपने प्रोग्रामर के साथ इंटरफ़ेस करने के लिए GUI स्क्रीन खोलने के लिए "AVRProg" विकल्प चुनें। एक विकल्प के रूप में, AVRDude जैसे तीसरे पक्ष के उपकरण भी AVR910 संगत हैं।
आधिकारिक उपकरण कसकर AVRStudio में एकीकृत होते हैं, विशेष रूप से डिबगिंग वेरिएंट (JTAG / Dragon / etc) के मामले में। AVRStudio टूल मेनू से, "प्रोग्राम AVR ..." सबमेनू चुनें और "कनेक्ट" आइटम पर क्लिक करें। नई विंडो से, अपने टूल और उसके कनेक्शन इंटरफेस का चयन करें और ठीक पर क्लिक करें।
जैसा कि गूंगा डोंगल और AVR910 प्रोग्रामर के साथ होता है, आधिकारिक उपकरण का उपयोग थर्ड पार्टी प्रोग्रामिंग सॉफ्टवेयर के साथ भी किया जा सकता है।
(सी) डीन कैमरा, 2009. सभी अधिकार सुरक्षित। बिना किसी पूर्व अनुमति के AVRFreaks.net के अलावा किसी भी वेबसाइट पर प्रजनन के लिए नहीं।