एक प्रोग्रामर के रूप में एक Arduino का उपयोग करते समय मैं ATTiny85 पर घड़ी की गति फ़्यूज़ कैसे सेट करता हूं?


17

मैं इस ट्यूटोरियल का अनुसरण कर रहा हूं , एक Arduino के साथ ATtiny85 प्रोग्रामिंग, यह कुछ टन (एक पीजो स्पीकर के माध्यम से) खेलने के लिए उपयोग करता है। मैं सही पिच पर टोन प्राप्त करने के साथ संघर्ष कर रहा हूं (मैं तरंग रूपों को मैन्युअल रूप से बना रहा हूं, क्योंकि टोन () फ़ंक्शन ATtiny85 पर असमर्थित है)।

मेरा मानना ​​है कि समस्या Arduino और ATtiny पर अलग-अलग घड़ी की गति के नीचे हो सकती है। मैं समझता हूं कि घड़ी की गति को एट्टीनी पर बदल दिया जा सकता है, मैं आर्दुनो वातावरण का उपयोग करके इसे कैसे पूरा कर सकता हूं?


वैसे यह वास्तव में अच्छा है, साझा करने के लिए धन्यवाद!
vicatcu

सलाम! मैं इस तरह से अपने attiny85 प्रोग्राम करने में कामयाब नहीं रहा हूँ .. मैं हमेशा "सिंक से बाहर प्रोग्रामर" त्रुटि है जब avrdude फ़्लैश लिखने का प्रयास करता है। एक बस समुद्री डाकू के साथ काम कर रहे arduino की अदला-बदली हालांकि ...
जोनाथन

@Jon: "प्रोग्रामर से बाहर सिंक" के पीछे मूल कारण के बारे में मुझे यकीन नहीं है, लेकिन AVR स्टूडियो के साथ आप प्रोग्रामिंग आवृत्ति को समायोजित कर सकते हैं। एवरड्यूड में एक समान विकल्प हो सकता है, अगर आप इसे फिर से एक बार फिर से दे सकते हैं, तो देखने लायक हो सकता है
Nick T

जवाबों:


2

मेरा मानना ​​है कि Arduino सॉफ़्टवेयर (लाइब्रेरी और सभी) मानता है कि आप 16MHz पर काम कर रहे हैं। यदि आप उस धारणा को उस घड़ी पर लागू करते हैं जो आप वास्तव में चला रहे हैं ... चीजों को काम करना चाहिए। यह मानते हुए कि आप Tiny85 को आंतरिक थरथरानवाला पर चला रहे हैं, मुझे लगता है कि यह 1MHz पर चलता है, इसलिए बस अपने सभी देरी बयानों (और समय की अन्य धारणाओं) को 16 से गुणा करें।

यदि आपको आंतरिक थरथरानवाला की तुलना में बेहतर सटीकता की आवश्यकता है, तो आपको बाहरी क्रिस्टल या एक अनुनादक का उपयोग करने के बारे में सोचना चाहिए, लेकिन इसके लिए आपको AVR की फ्यूज सेटिंग्स को काम करना होगा, और मुझे लगता है कि आपको AVRISP जैसे प्रोग्रामर की आवश्यकता होगी AVR स्टूडियो (मेरी सिफारिश) के साथ ऐसा करने के लिए mkII।

मुझे ArduinoISP स्केच के बारे में ज्यादा जानकारी नहीं है, लेकिन मुझे ऐसा लग रहा है कि यह आईएसपी प्रोटोकॉल को लक्षित चिप (न कि बोर्ड मेगा 328 पर) पर एक कार्यक्रम अपलोड करने के लिए थोड़ा धमाके करता है, सुनिश्चित नहीं है कि यह फ़्यूज़ में हेरफेर करने के लिए सुसज्जित है। ArduinoISP को यहाँ http://arduino.cc/en/Tutorial/ArduinoISP , fwiw के नाम से प्रलेखित किया गया है । ध्यान दें कि आप ArduinoISP स्केच को चलाने के लिए वर्तमान में UNO का उपयोग नहीं कर सकते हैं। यह मुझे ऐसा नहीं लगता है जैसे आप एवीआर स्टूडियो जीयूआई टूल का उपयोग करने के लिए Arduino को एक व्यवहार्य इंटरफ़ेस बनाने के लिए स्केच का उपयोग कर सकते हैं।

संपादित करें : ऐसा लगता है कि सामान ने पकड़ लिया है और एक संयुक्त राष्ट्र संघ ArduinoISP के लिए अब व्यवहार्य है - सभी टिप्पणियों के लिए धन्यवाद


संयुक्त राष्ट्र संघ के बारे में सिर के लिए धन्यवाद, मैं वास्तव में एक 328 के लिए बदली गई 168 चिप के साथ ड्यूमिलानोव का उपयोग कर रहा हूं, और ArduinoISP के माध्यम से ठीक से अपलोड करने के लिए सामान्य ATtiny रेखाचित्र प्राप्त कर सकता हूं। मैं तुम्हारे / 16 टिप कोशिश कर रहा हूँ!
डरफॉर्स

@fearoffours आपको एक और बात पता है कि आप कोशिश कर सकते हैं कि आप ArduinoISP पर आधारित एक स्केच लिख रहे हैं जो फ़्यूज़ को एक निश्चित मूल्य पर सेट करता है। यदि ArduinoISP फ्लैश लिख सकता है, तो कोई कारण नहीं है कि मैं सोच सकता हूं कि आप फ़्यूज़ सेट करने के लिए AVR डेटाशीट में वर्णित ISP प्रोटोकॉल को बिट-बैंग नहीं कर सकते।
vicatcu

1
@fearoffours, मैं भी सिर्फ एहसास (और अद्यतन पोस्ट) को 16 से विभाजित करने के बजाय 16 से गुणा करने के लिए कहता हूं (आपकी धीमी घड़ी चल रही है यह समान अवधि प्राप्त करने के लिए अधिक टिक
लेगा

मुझे पता है कि यह एक साल बाद है, लेकिन मैं AVR प्रोग्रामर के रूप में सफलतापूर्वक और UNO का उपयोग करता हूं। (हालांकि, मैं ArduinoISP स्केच करने के लिए बदल किया था delay(20)के insted delay(40)की अपनी परिभाषा में void heartbeat()।)
JellicleCat

मुझे पता है कि यह बाद में भी है, लेकिन मैंने स्केच में कुछ भी बदले बिना अपने Uno को AVR प्रोग्रामर के रूप में सफलतापूर्वक उपयोग किया।
21

4

मैं Arduino UNO + ArduinoISP का सफलतापूर्वक उपयोग कर रहा हूं।

-Uअपने झंडे जोड़ेंavrdudeकिसी भी या सभी तीन एटिट्यूड फ़्यूज़ को सेट करने के कमांड में ।

avrdude -p attiny85 -P com8 -c stk500v1 -b 19200 -U lfuse:w:0x6f:m -U flash:w:main.hex

घड़ी का चयन बिट्स [3: 0] में तीसरे फ्यूज ('फ्यूज लो बाइट') पर किया जाता है। बाहरी क्रिस्टल (8 मेगाहर्ट्ज या तेज) का उपयोग करने के लिए उन्हें निम्नानुसार सेट करें:

-U lfuse:w:0x6f:m

इसकी परिभाषा (मुझे पता है) कुछ इस तरह होनी चाहिए: [फ्यूज लो बाइट]: [लिखना]: [हेक्स मूल्य]: [सेट]

इस बाइट के चार उच्च बिट्स के लिए डिफ़ॉल्ट मान है 0110, इसलिए इसे इस रूप 6में छोड़ दें 0x6f, और केवल दूसरे अंक को बदलें, f(इसका डिफ़ॉल्ट मान है 2)।

एनबी: यदि आपकी प्रक्रिया आपकी अपेक्षा से अधिक या कम समय लेती है, तो अपनी घड़ी प्रीस्कूलर और एफ _ सीपीयू की परिभाषा जांचें


मैं सावधानी से कहना चाहता था कि मैंने उपरोक्त -U lfuse:w:0x6f:mएवरुड विकल्प का उपयोग करके अपने एटटीनी85 को बंद कर दिया है । मुझे उच्च-वोल्टेज सेटअप का उपयोग करके इसे रीसेट करना होगा। तो लोगों को सावधानी के एक शब्द (अपने आप की तरह) जो फ़्यूज़ रीसेट करने की कोशिश कर रहे हैं बिना यह जाने कि वे क्या कर रहे हैं।
एमवी

@MV क्या आपने फ़्यूज़ को रीसेट करने का प्रयास करते समय वास्तव में इसे ईंट किया था या बाहरी एक्सओ का उपयोग नहीं किया था?
बांध

उपयोग करने के लिए कोई बाहरी घड़ी नहीं थी। कड़े अर्थों में ईंट लगाने का क्या मतलब है?
जेलिकैकट

@JellicleCat, यदि आप किसी बाहरी XO का उपयोग करने के लिए फ़्यूज़ सेट करते हैं, तो आपको mcu से जुड़े एक बाहरी XO को तब से प्रोग्राम / सेट / रीसेट फ़्यूज़ पर उपयोग करना होगा। ऐसा नहीं करने पर, आपको यह आभास होगा कि mcu को ईंट दिया गया है (~ अब काम नहीं कर रहा है) क्योंकि इसे एक्सट की आवश्यकता है। कार्य करने के लिए XO, ISP के माध्यम से प्रोग्रामिंग के लिए भी।
बांध

ठीक है। अगर मुझे बात समझ में आती है, तो मैंने एक्सओ की उम्मीद करने के लिए फ़्यूज़ सेट किया, और फिर चिप को बहाल करने के लिए, मैंने एक खड़े लहर की आपूर्ति करने के लिए एक Arduino का उपयोग किया, जो एक XO के लिए सेवा करता था।
जेलिकैट

3

एक ही समूह (एमआईटी के हाई-लो टेक) द्वारा संबंधित ट्यूटोरियल का उपयोग करने का प्रयास करें, जिसे एटीटीनी w / Arduino 1.0 प्रोग्रामिंग कहा जाता है

एक त्वरित सारांश: Arduino IDE में टूल-> बोर्ड मेनू से, ATtiny85 और उस आवृत्ति का चयन करें जिसे आप (1 या 8 मेगाहर्ट्ज आंतरिक घड़ी, या 20Mhz बाहरी क्रिस्टल) पर चलाना चाहते हैं और फिर टूल्स का उपयोग करें - "बर्न बूटलोडर" मेरा मानना ​​है कि वांछित गति बोर्ड का चयन विलंब की गति () और अन्य समय-संबंधित अरुडिनो कार्यों को संशोधित करता है ताकि घड़ी की गति के साथ तालमेल बैठ सके।

मुझे इस दृष्टिकोण के साथ खुद को कुछ ATtiny84 चिप्स का उपयोग करके सफलता मिली है। सरल ब्लिंक कार्यक्रम तय हो गया है, साथ ही देरी के लिए एक इमदादी को भेजे गए दालों को मैन्युअल रूप से नियंत्रित करने के लिए अधिक संवेदनशील समय की आवश्यकता है।


1

ऐसा लगता है कि आप ArduinoISP का उपयोग कर रहे हैं, AVR स्टूडियो या कमांड लाइन विकल्पों का उपयोग करने का प्रयास करें avrdude। ArduinoISP कैसे लिखा गया था, इसके आधार पर, यह एक Atmel AVRISP mkII या इसी तरह कार्य कर सकता है।


मुझे नहीं लगा कि Arduino खुद एक ISP प्रोग्रामर था - मुझे लगा कि इस पर एक ISP हैडर है ताकि आप सर्किट में एक नए
ATMega328

लेख को और अधिक बारीकी से पढ़ते हुए, ऐसा लगता है कि आप ऐसा करने के लिए ArduinoISP स्केच का उपयोग कर सकते हैं - आप हर दिन कुछ नया सीखते हैं! :)
vicatcu

यदि आप विंडोज पर हैं तो AVR स्टूडियो ठीक है। यह जान लें कि ग्रहण के लिए एक AVR प्लगइन है (यह Arduino प्लगइन से अलग है जिसे स्लोबेर के रूप में जाना जाता है)। गुणों के तहत उपलब्ध निफ्टी फ्यूज संवाद है -> एवीआर। लेकिन हाँ, ओपी केवल "कोर" आवृत्तियों और "बर्न बूटलोडर" का उपयोग करना चाहता है।
मैकेंज़्म

1

ATtiny85 के लिए डिफ़ॉल्ट फ्यूज सेटिंग्स हैं: lfuse 0x62, hfuse 0xdf, efuse 0xff। यह "8 से विभाजित" के साथ आंतरिक आरसी (8 मेगाहर्ट्ज) थरथरानवाला का उपयोग करता है इसलिए घड़ी 1 मेगाहर्ट्ज है।

अधिक फ़्यूज़ सेटिंग के लिए http://www.engbedded.com/fusecalc देखें ।

प्रोग्रामर के रूप में एक ArduinoISP का उपयोग करते समय आप अभी भी सीधे अपने ATtiny85 के फ्यूज सेटिंग्स को बदलने के लिए avrdude का उपयोग कर सकते हैं।

यदि आप घड़ी को बदलने के लिए मैन्युअल रूप से बदलते फ्यूज को समाप्त करते हैं, तो attiny85.build.f_cpuअपने [arduino_folder] \ हार्डवेयर \ attiny45_85 \ board.txt फ़ाइल की रेखा को संपादित करना सुनिश्चित करें ।


+1 यह वास्तव में उपयोगी है, जो कि घड़ी की गति 1MHz है, धन्यवाद
डर है

0

मुझे लगता है कि आप ArduinoISP के साथ फ़्यूज़ सेट कर सकते हैं, लेकिन Arduino IDE के साथ नहीं, बल्कि avrdude के साथ, इस लिंक की जाँच करें । कभी खुद इसका परीक्षण नहीं किया।

ट्यूटोरियल स्पष्ट रूप से कहता है कि आप Arduino UNO का उपयोग कर सकते हैं और मैंने इसका परीक्षण किया है और काम किया है, इसलिए मैं इसकी पुष्टि कर सकता हूं, इसलिए ArduinoISP पृष्ठ पुराना है और UNO चेतावनी को अनदेखा किया जाना चाहिए। यदि आपका यूएनओ पहले बैच में से एक था, तो आपके पास संभवतः एक दोषपूर्ण बूटलोडर है, तो आपको बूटलोडर को फिर से चालू करना होगा। चेक इस पेज में अधिक जानकारी के लिए (सीरियल नंबर की अनदेखी, मेरे सारे UNOS उस श्रृंखला से नहीं थे और समस्या नहीं थी)।

ट्यूटोरियल से डाउनलोड की गई पोर्ट की गई कोर लाइब्रेरीज़ को 1MHz इंटरनल ऑसिलेटर (बोर्ड्सटेक्स्ट फाइल से कन्फर्म) का उपयोग करने के लिए लिखा गया है, इसलिए हो सकता है कि टाइमिंग की समस्या पोर्टेड कोर लाइब्रेरीज़ या आपके कोड में हो।

सधन्यवाद


0
  1. ATTiny85 शामिल है कि "बोर्डों प्रबंधक" से एक ATTiny बोर्ड चुनें। यह "टूल" मेनू में है। मुझे लगता है कि इसमें अब "16MHz आंतरिक PLL" शामिल है। (आप http://drazzy.com/package_drazzy.com_index.json से एक स्थापित कर सकते हैं )

  2. यदि आवश्यक हो तो स्पष्ट रूप से ATTiny85 का चयन करें।

  3. एक घड़ी चुनें। जब तक आप अधिक नहीं जानते, एक आंतरिक घड़ी चुनें।

  4. मेनू आइटम के रूप में "बर्न बूटलोडर" पर क्लिक करें।

यदि आप बहुत कम मान चुनते हैं तो सावधानी, अब आप MCU को प्रोग्राम नहीं कर सकते। यदि यह आपका इरादा है, तो इसे तब तक करें जब तक कि फ़्यूज़ को रीसेट करने के लिए आपके पास पुर्जों या उच्च वोल्टेज प्रोग्रामर न हों।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.