সুচিপত্র:

AVRSH: Arduino/AVR- এর জন্য একটি কমান্ড ইন্টারপ্রেটার শেল। 6 ধাপ (ছবি সহ)
AVRSH: Arduino/AVR- এর জন্য একটি কমান্ড ইন্টারপ্রেটার শেল। 6 ধাপ (ছবি সহ)

ভিডিও: AVRSH: Arduino/AVR- এর জন্য একটি কমান্ড ইন্টারপ্রেটার শেল। 6 ধাপ (ছবি সহ)

ভিডিও: AVRSH: Arduino/AVR- এর জন্য একটি কমান্ড ইন্টারপ্রেটার শেল। 6 ধাপ (ছবি সহ)
ভিডিও: Easily Make A Distance Measurement Meter with Arduino | JLCPCB 2024, জুলাই
Anonim
AVRSH: Arduino/AVR এর জন্য একটি কমান্ড ইন্টারপ্রেটার শেল।
AVRSH: Arduino/AVR এর জন্য একটি কমান্ড ইন্টারপ্রেটার শেল।

কখনও আপনার AVR মাইক্রোকন্ট্রোলারে "লগ ইন" হতে চেয়েছিলেন? আপনি কি কখনও ভেবেছেন যে একটি নিবন্ধকে "বিড়াল" এর বিষয়বস্তু দেখতে শীতল হবে? আপনি কি সর্বদা আপনার AVR বা Arduino এর পৃথক পেরিফেরাল সাব-সিস্টেমগুলিকে * রিয়েল টাইম * এ পাওয়ার এবং পাওয়ার পাওয়ার উপায় চেয়েছিলেন? আমিও, তাই আমি AVR শেল লিখেছি, একটি UNIX- এর মতো শেল। এটি ইউনিক্স-এর মতো কারণ এটি আপনার যে শেল অ্যাকাউন্টের বাইরে গিয়েছিল এবং আপনার আইআরসি নিক কোলিশন বটগুলি চালানোর জন্য কেনা হয়েছিল, সেইসাথে একটি কমান্ড বা দুটি কমান্ড থাকার কথা মনে করিয়ে দেয়। এটির একটি ফাইল সিস্টেমও রয়েছে যা ইউনিক্স এক্সটফস-এর সাথে সাদৃশ্যপূর্ণ, একটি বহিরাগত EEPROM ব্যবহার করে, কিন্তু এটি নিজেই একটি প্রকল্প হয়ে গেছে তাই আমি সেই মডিউলটি আলাদাভাবে একটি ভিন্ন নির্দেশের অধীনে প্রকাশ করব যখন এটি উত্পাদন-প্রস্তুত। AVR শেলের সাহায্যে আপনি বর্তমানে যা করতে পারেন তার একটি তালিকা এখানে দেওয়া হল:

  • রিয়েল-টাইমে আপনার সমস্ত ডেটা ডিরেকশন রেজিস্টার (DDRn), পোর্ট এবং পিন পড়ুন
  • মোটর, LED, বা রিয়েল-টাইমে সেন্সর পড়ার জন্য আপনার সমস্ত DDRn, পোর্ট এবং পিনগুলিতে লিখুন
  • সিস্টেমে সমস্ত পরিচিত রেজিস্টার তালিকা করুন
  • EEPROM দ্বারা সমর্থিত ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবলে মান তৈরি এবং সঞ্চয় করুন।
  • একটি রুট পাসওয়ার্ড তৈরি করুন এবং এর বিরুদ্ধে প্রমাণীকরণ করুন (টেলনেট অ্যাক্সেসের জন্য ব্যবহৃত)
  • কনফিগার করা CPU ঘড়ির গতি পড়ুন
  • প্রেসকলার সেট করে আপনার CPU ঘড়ির গতি পরিবর্তন করুন
  • বিভিন্ন জিনিসের সময় নির্ধারণের জন্য 16-বিট টাইমার শুরু এবং বন্ধ করুন
  • পেরিফেরাল সাব-সিস্টেমগুলিকে পাওয়ার আপ এবং/অথবা পাওয়ার ডাউন: এনালগ টু ডিজিটাল কনভার্টারস (এডিসি), সিরিয়াল পেরিফেরাল ইন্টারফেস (এসপিআই), টু-ওয়্যার ইন্টারফেস (TWI/I2C), UART/USART। যখন আপনি মাইক্রোকন্ট্রোলারের বিদ্যুৎ খরচ কমাতে চান বা নির্দিষ্ট ফাংশন সক্ষম করতে চান তখন এটি কার্যকর।
  • পুনর্ব্যবহারযোগ্য বস্তুর সাথে C ++ এ লেখা।

এই নির্দেশযোগ্য avrsh এর ইনস্টলেশন, ব্যবহার এবং কাস্টমাইজেশনের মাধ্যমে চলবে।

ধাপ 1: আপনার যা লাগবে

আপনার যা লাগবে
আপনার যা লাগবে

এই নির্দেশযোগ্য আপনি ছাড়া যে অনেক প্রয়োজন হয় না:

  • একটি Arduino বা ATmega328P আছে। অন্যান্য AVR কাজ করতে পারে, কিন্তু আপনার MCU- এর জন্য অনন্য যে কোনো রেজিস্টার তালিকা করার জন্য আপনাকে কোডটি সংশোধন করতে হতে পারে। আপনার MCU- এর জন্য অনন্য হেডার ফাইলে তালিকাভুক্ত নামগুলির সাথে কেবল মিল থাকা দরকার। অনেক রেজিস্টারের নাম AVR- এর মধ্যে একই, তাই পোর্ট করার সময় আপনার মাইলেজ পরিবর্তিত হতে পারে।
  • আপনার Arduino/AVR এর সিরিয়াল USART এর সাথে সংযোগ করার একটি উপায় আছে। সিস্টেমটি AVR টার্মিনালের সাথে ব্যাপকভাবে পরীক্ষা করা হয়েছে, একটি উইন্ডোজ অ্যাপ যা আপনার USB বা COM পোর্টের মাধ্যমে সিরিয়াল সংযোগ তৈরি করে। USB সংযোগ ব্যবহার করে Arduinos এবং Moderndevice.com থেকে USB-BUB ব্যবহার করে যেকোনো AVR- এর সাথে কাজ করে। অন্যান্য টার্মিনাল বিকল্পগুলির মধ্যে রয়েছে: পুটি, মিনিকম (লিনাক্স এবং ফ্রিবিএসডি), স্ক্রিন (লিনাক্স/ফ্রিবিএসডি), হাইপারটার্মিনাল, টেরাটার্ম। আমি খুঁজে পেয়েছি পুট্টি এবং টেরটারম সংযোগ করার সময় কিছু আবর্জনা পাঠায় যাতে আপনার প্রথম কমান্ডটি নষ্ট হয়ে যায়।
  • AVR শেল ফার্মওয়্যার ইনস্টল এবং চলমান আছে, যা আপনি এই পৃষ্ঠাগুলি থেকে ডাউনলোড করতে পারেন, অথবা সর্বদা BattleDroids.net এ সর্বশেষ সংস্করণ পেতে পারেন।

AVR টার্মিনাল ইনস্টল করার জন্য, এটি আনপ্যাক করুন এবং এটি চালান। AVR শেল ফার্মওয়্যার ইনস্টল করার জন্য, এটি ডাউনলোড করুন এবং সরাসরি হেক্স ফাইল আপলোড করুন এবং আপনার সিরিয়াল টার্মিনালটিকে 9600 বাউডে সংযুক্ত করুন, অথবা হেক্স আপলোড করার জন্য "মেক" এবং তারপর "মেক প্রোগ্রাম" দিয়ে এটি কম্পাইল করুন। মনে রাখবেন, আপনার COM পোর্ট প্রতিফলিত করার জন্য আপনাকে AVRDUDE সেটিংস পরিবর্তন করতে হতে পারে। দ্রষ্টব্য: C ++ এর জন্য বর্তমান AVR GCC বাস্তবায়নে PROGMEM বৈশিষ্ট্যটি ভেঙ্গে গেছে এবং এটি একটি পরিচিত বাগ। যদি আপনি এটি সংকলন করেন, তাহলে অনেক সতর্কতা বার্তা পাওয়ার আশা করুন "সতর্কতা: শুধুমাত্র প্রাথমিক ভেরিয়েবলগুলি প্রোগ্রাম মেমরি এলাকায় স্থাপন করা যেতে পারে।" দেখতে বিরক্তিকর হওয়া ছাড়াও, এই সতর্কতাটি নিরীহ। যেহেতু এমবেডেড প্ল্যাটফর্মে C ++ AVR GCC অগ্রাধিকার তালিকায় বেশি নয়, এটি কখন ঠিক করা হবে তা অজানা। যদি আপনি কোডটি চেক করেন, তাহলে আপনি দেখতে পাবেন যে আমি আমার নিজের বৈশিষ্ট্য বিবৃতি বাস্তবায়ন করে এই সতর্কতা কমাতে কাজের আশেপাশে কোথায় তৈরি করেছি। ডাউনলোড করুন এবং ইনস্টল করুন যা আপনার প্রয়োজন হতে পারে তারপর পৃষ্ঠা উল্টান এবং আসুন ক্র্যাকিন '।

ধাপ 2: নিবন্ধন পড়া এবং লেখা

রেজিস্টার পড়া এবং লেখা
রেজিস্টার পড়া এবং লেখা

AVR শেলটি মূলত আমার AVR- এর সাথে সংযুক্ত কিছু সেন্সর অ্যাক্সেস করার জন্য লেখা হয়েছিল। এটি একটি সাধারণ LED দিয়ে শুরু হয়েছিল তারপর হালকা সেন্সর, তাপমাত্রা সেন্সর এবং অবশেষে দুটি অতিস্বনক ট্রান্সডুসার্সে স্থানান্তরিত হয়েছিল। avrsh এই সেন্সরের ডিজিটাল উপাদানগুলিকে সেগুলি নিয়ন্ত্রণকারী রেজিস্টারে লিখে সেট করতে পারে। চলমান অবস্থায় AVR রেজিস্টার ম্যানিপুলেট করা

প্রিন্ট রেজিস্টার এবং আপনি দেখতে একটি প্রিন্টআউট পাবেন

আমি নিম্নলিখিত রেজিস্টার সম্পর্কে জানি:

TIFR0 PORTC TIFR1 PORTD TIFR2 DDRD PCIFR DDRB EIFR DDRC EIMSK PINB EECR PINC EEDR PIND SREG EEARL GPIOR0 EEARH GPIOR1 GTCCR GPIOR2 TCCR0A TCCR0B TCNT0 OCR0A OCR0B SPCR SPDR ACSR SMCR MCUSR MCUCR SPMCSR WDTCSR CLKPR PRR OSCCAL PCICR EICRA PCMSK0 PCMSK1 TIMSK0 TIMSK1 TIMSK2 ADCL ADCH ADCSRA ADCSRB ADMUX DIDR0 DIDR1 TCCR1A TCCR1B TCCR1C TCNT1L TCNT1H ICR1L ICR1H OCR1AL OCR1AH OCR1BL OCR1BH TCCR2A TCCR2B TCNT2 OCR2A OCR2B ASSR TWBR TWSR TWAR TWDR TWCR TWAMR UCSR0A UCSR0B UCSR0C UBRR0L UBRR0H UDR0 PORTB রুট @ ATmega328p> কোন রেজিস্টারে কিভাবে পৃথক বিট সেট করা আছে তা দেখতে, cat বা echo কমান্ড ব্যবহার করুন

বিড়াল %GPIOR0 এখানে আমি কমান্ড ইন্টারপ্রেটারকে সাধারণ উদ্দেশ্য I/O রেজিস্টার #0 এর বিষয়বস্তু প্রদর্শন বা প্রতিধ্বনি করতে বলছি। রেজিস্টার নামের সামনে শতাংশ চিহ্ন (%) নোট করুন। শেলের প্রতি ইঙ্গিত করার জন্য আপনার এটি প্রয়োজন একটি ইকো কমান্ড থেকে সাধারণ আউটপুট এই মত দেখায়

GPIOR0 (0x0) [00000000] এ সেট আউটপুট রেজিস্টারের নাম, রেজিস্টারে পাওয়া হেক্সাডেসিমাল মান এবং রেজিস্টারের বাইনারি উপস্থাপনা দেখায় (প্রতিটি বিট 1 বা 0 হিসাবে দেখায়)। যে কোন রেজিস্টারে একটি নির্দিষ্ট বিট সেট করতে, "সূচকের" অপারেটর ব্যবহার করুন। উদাহরণস্বরূপ, ধরা যাক আমি তৃতীয় বিটকে 1 করতে চাই

%GPIOR0 [3] = 1 এবং শেল আপনাকে একটি প্রতিক্রিয়া দেবে যা নির্দেশ করে এর ক্রিয়া এবং ফলাফল

GPIOR0 (0x0) [00000000] (0x8) [00001000] এ সেট আপনি একটি রেজিস্টার দিয়ে কাজ করছেন এমন শেলটি বলতে শতকরা চিহ্নটি ভুলে যাবেন না। এছাড়াও মনে রাখবেন যে 3 য় বিট সেট করে, এটি 4 বিট কারণ আমাদের AVR একটি শূন্য-ভিত্তিক সূচক ব্যবহার করে। অন্য কথায়, 3 য় বিট গণনা আপনি 0, 1, 2, 3 গণনা করেন, যা 4 র্থ স্থান, কিন্তু 3 য় বিট। আপনি বিটকে শূন্যে সেট করে একইভাবে কিছুটা পরিষ্কার করতে পারেন। এই মত বিট সেট করে আপনি ফ্লাইতে আপনার AVR এর কার্যকারিতা পরিবর্তন করতে পারেন। উদাহরণস্বরূপ, ওসিআর 1 এ পাওয়া সিটিসি টাইমার মিলের মান পরিবর্তন করে। এটি আপনাকে নির্দিষ্ট সেটিংসে উঁকি দিতে দেয় যা আপনাকে আপনার কোডে প্রোগ্রামগতভাবে চেক করতে হবে, যেমন আপনার বড রেটের জন্য ইউবিবিআর মান। DDRn, PORTn, এবং PINn এর সাথে কাজ করা I/O পিনগুলিও রেজিস্টারে নির্ধারিত হয় এবং ঠিক একইভাবে সেট করা যায়, কিন্তু এই ধরনের রেজিস্টারের সাথে কাজ করার জন্য একটি বিশেষ সিনট্যাক্স তৈরি করা হয়েছে। কোডে, একটি LED বা অন্য ডিভাইস চালু করার জন্য একটি স্বাভাবিক প্রক্রিয়া আছে যার জন্য একটি ডিজিটাল উচ্চ বা নিম্ন প্রয়োজন। এটি পিন আউটপুট জন্য নির্দেশ করার জন্য ডেটা নির্দেশনা রেজিস্টার সেট করা প্রয়োজন, এবং তারপর সঠিক পোর্টে নির্দিষ্ট বিটে 1 বা 0 লেখা। ধরে নিচ্ছি আমাদের একটি ডিজিটাল পিন 13 (PB5) এর সাথে একটি LED সংযুক্ত আছে এবং আমরা এটি চালু করতে চাই, আপনার AVR চলাকালীন এটি কীভাবে করবেন তা এখানে

পিন pb5 আউটপুট লিখুন পিন pb5 উচ্চ লিখুন আউটপুট, আপনার এলইডি দেখতে সক্ষম হওয়ার পাশাপাশি, এইরকম দেখাবে

root@ATmega328p> সেট পিন pb5 আউটপুট আউটপুট রুট@ATmega328p> পিন pb5 high লিখুন "Root@ATmega328p>" হল শেলের প্রম্পট যা নির্দেশ করে যে এটি আপনার কাছ থেকে কমান্ড গ্রহণ করতে প্রস্তুত। LED বন্ধ করতে, আপনি কেবল পিনে একটি কম লিখবেন। আপনি যদি একটি পিন থেকে ডিজিটাল ইনপুট পড়তে চান, তাহলে read কমান্ডটি ব্যবহার করুন। আমাদের উপরের উদাহরণ ব্যবহার করে

root@ATmega328p> পিন পড়ুন pb5Pin: pb5 উচ্চ বিকল্পভাবে, কেবল পিন রেজিস্টারটি প্রতিধ্বনিত করুন যা সেই পিন পোর্টটি নিয়ন্ত্রণ করে। উদাহরণস্বরূপ, যদি আমাদের ডিজিটাল পিন 7 এবং 8 (PD7 এবং PD8) এর সাথে ডিপ সুইচ সংযুক্ত থাকে, তাহলে আপনি কমান্ডটি পাঠাতে পারেন

প্রতিধ্বনি %PIND এবং শেলটি তখন সেই রেজিস্টারের বিষয়বস্তু প্রদর্শন করবে, যা আপনাকে সংযুক্ত ডিভাইসের সমস্ত ইনপুট/আউটপুট অবস্থা দেখাবে এবং সুইচের অবস্থা চালু ছিল কি বন্ধ।

ধাপ 3: ফিউজ পড়া এবং লেখা

ফিউজ পড়া এবং লেখা
ফিউজ পড়া এবং লেখা

ফিউজ হল বিশেষ ধরনের রেজিস্টার। তারা আপনার মাইক্রোকন্ট্রোলারের ঘড়ির গতি থেকে শুরু করে EEPROM লেখা-সুরক্ষার জন্য কোন প্রোগ্রামিং পদ্ধতিগুলি উপলব্ধ তা সবকিছু নিয়ন্ত্রণ করে। কখনও কখনও আপনাকে এই সেটিংসগুলি পরিবর্তন করতে হবে, বিশেষত যদি আপনি একা একা AVR সিস্টেম তৈরি করেন। আমি নিশ্চিত নই যে আপনার আরডুইনোতে আপনার ফিউজ সেটিংস পরিবর্তন করা উচিত। আপনার ফিউজের সাথে সতর্ক থাকুন; আপনি যদি তাদের ভুলভাবে সেট করেন তাহলে আপনি নিজেকে লক আউট করতে পারেন পূর্ববর্তী নির্দেশনায়, আমি দেখিয়েছি কিভাবে আপনি আপনার প্রোগ্রামার এবং অ্যাভারডুড ব্যবহার করে আপনার ফিউজ পড়তে এবং সেট করতে পারেন। এখানে, আমি আপনাকে দেখাব কিভাবে রান করার সময় আপনার ফিউজগুলি কীভাবে পড়তে হয় তা দেখতে আপনার এমসিইউ আসলে সেগুলি কীভাবে সেট করেছে। মনে রাখবেন, এটি কম্পাইল-টাইম সেটিং নয় যা আপনি সংজ্ঞা থেকে পান কিন্তু প্রকৃত ফিউজগুলি যেমন এমসিইউ রান টাইমে পড়ে। ATmega328P ডেটশীটে সারণি 27-9 থেকে (ডেটাবুক, এটির মতো) ফিউজ লো বাইটের বিটগুলি নিম্নরূপ:

CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0একটি আকর্ষণীয় বিষয় লক্ষণীয় যে ফিউজের সাথে, 0 মানে প্রোগ্রাম করা এবং 1 এর মানে হল যে নির্দিষ্ট বিটটি প্রোগ্রামহীন। কিছুটা পাল্টা-স্বজ্ঞাত, কিন্তু একবার আপনি এটি জানেন আপনি এটি জানেন।

  • CKDIV8 আপনার CPU ঘড়িকে 8 দ্বারা ভাগ করার জন্য সেট করে। ATmega328P 8MHz এ তার অভ্যন্তরীণ অসিলেটর ব্যবহার করার জন্য পরিকল্পিত কারখানা থেকে আসে CKDIV8 প্রোগ্রামযুক্ত (অর্থাৎ 0 এ সেট করা) আপনাকে 1MHz এর চূড়ান্ত F_CPU বা CPU ফ্রিকোয়েন্সি প্রদান করে। Arduino- এ, এটি পরিবর্তিত হয়েছে যেহেতু তারা 16MHz এ একটি বহিরাগত অসিলেটর ব্যবহার করার জন্য কনফিগার করা হয়েছে।
  • CKOUT যখন প্রোগ্রাম করা হবে আপনার CPU ঘড়িটি PB0 তে আউটপুট করবে, যা Arduinos এ ডিজিটাল পিন 8।
  • SUT [1..0] আপনার AVR এর প্রারম্ভিক সময় নির্দিষ্ট করে।
  • CKSEL [3..0] ঘড়ির উৎস নির্ধারণ করে, যেমন অভ্যন্তরীণ RC দোলক, বাহ্যিক দোলক ইত্যাদি।

যখন আপনি আপনার ফিউজ পড়বেন, তখন এটি আপনাকে হেক্সাডেসিমালে ফেরত দেওয়া হবে। আপনি যদি avrdude এর মাধ্যমে ফিউজ লিখতে চান তাহলে এই ফর্ম্যাটটি আপনার প্রয়োজন। আমার আরডুইনোতে, নিম্ন ফিউজ বাইট পড়লে আমি যা পাই তা এখানে:

root@ATmega328p> lfuseLower Fuse: 0xff পড়ুনসুতরাং, সমস্ত বিট 1 এ সেট করা আছে। আমি একটি Arduino ক্লোনে একই পদ্ধতি করেছি এবং একই মান পেয়েছি। আমার একক AVR সিস্টেম চেক করে, আমি 0xDA পেয়েছি যা চিপ কনফিগার করার সময় আমি কিছু সময় পিছনে সেট করেছিলাম একই পদ্ধতি হাই ফিউজ বাইট, এক্সটেন্ডেড ফিউজ বাইট এবং লক ফিউজ চেক করার জন্য ব্যবহৃত হয়। ক্রমাঙ্কন এবং স্বাক্ষর ফিউজ বাইটগুলি কোডে একটি #if 0 প্রি -প্রসেসর নির্দেশের সাথে নিষ্ক্রিয় করা হয়েছে, যা আপনি যদি খারাপ মনে করেন তবে আপনি পরিবর্তন করতে পারেন।

ধাপ 4: অন্যান্য কমান্ড

অন্যান্য কমান্ড
অন্যান্য কমান্ড

আরও বেশ কয়েকটি কমান্ড রয়েছে যা ডিফল্ট কমান্ড ইন্টারপ্রেটার বুঝতে পারে যে আপনি কাজে লাগতে পারেন। প্রম্পটে সাহায্য বা মেনু জারি করে আপনি সমস্ত বাস্তবায়িত এবং ভবিষ্যত-রিলিজ কমান্ড দেখতে পারেন। আমি দ্রুত তাদের এখানে coverেকে দেব কারণ তারা বেশিরভাগই স্ব-ব্যাখ্যামূলক। CPU ক্লক ফ্রিকোয়েন্সি সেটিংস আপনি fcpu কমান্ড দিয়ে CPU ক্লক সেটিংস হিসেবে আপনার ফার্মওয়্যার কি কনফিগার করা হয়েছে তা জানতে পারেন:

root@ATmega328p> fcpuCPU Freq: 16000000এটি 16 মিলিয়ন বা 16 মিলিয়ন হার্জ, যা সাধারণত 16 মেগাহার্টজ নামে পরিচিত। আপনি ঘড়ির কমান্ডের সাহায্যে, যেকোনো কারণে, ফ্লাইতে এটি পরিবর্তন করতে পারেন। এই কমান্ডটি একটি যুক্তি নেয়: আপনার ঘড়ির গতি ভাগ করার সময় প্রেসকেলার ব্যবহার করতে হবে। ঘড়ি কমান্ড এই prescaler মান বোঝে:

  • ckdiv2
  • ckdiv4
  • ckdiv8
  • ckdiv16
  • ckdiv32
  • ckdiv64
  • ckdiv128
  • ckdiv256

কমান্ড ব্যবহার করে:

ঘড়ি ckdiv2 যখন আপনার cpu গতি 16MHz হয় তখন আপনার ঘড়ির গতি 8MHz এ পরিবর্তিত হবে। Ckdiv64 এর প্রিসকলার ব্যবহার করে 16MHz এর প্রারম্ভিক ঘড়ির গতির ফলে চূড়ান্ত ঘড়ির গতি হবে 250 KHz। কেন পৃথিবীতে আপনি আপনার MCU ধীর করতে চান? ঠিক আছে, একের জন্য, কম ঘড়ির গতি কম বিদ্যুৎ খরচ করে এবং যদি আপনার একটি এমসিইউ একটি প্রজেক্টের ঘেরের ব্যাটারি থেকে বন্ধ হয়ে যায় তবে আপনার এটি সর্বোচ্চ গতিতে চালানোর প্রয়োজন হতে পারে না, এবং তাই, গতি কমিয়ে এবং এর বিদ্যুৎ খরচ কমাতে পারে, ব্যাটারির আয়ু বাড়ায়। এছাড়াও, যদি আপনি অন্য কোন MCU- এর সাথে টাইমিং ইস্যুগুলির জন্য ঘড়িটি ব্যবহার করেন, বলুন, একটি সফটওয়্যার UART বা এরকম কিছু বাস্তবায়ন, আপনি এটিকে একটি নির্দিষ্ট মান সেট করতে চাইতে পারেন যা দিয়ে সুন্দর এমনকি বড রেট পাওয়া সহজ। ত্রুটির হার কম। পেরিফেরাল সাব-সিস্টেমগুলিকে পাওয়ার আপ এবং পাওয়ার ডাউন করার পূর্বে উল্লিখিত বিদ্যুৎ খরচ কমানোর মতো একই নোটে, আপনি ব্যবহার করছেন না এমন কিছু অন-বোর্ড পেরিফেরাল বন্ধ করে আপনি আরও বিদ্যুৎ কমাতে চাইতে পারেন। কমান্ড ইন্টারপ্রেটার এবং শেল বর্তমানে নিম্নলিখিত পেরিফেরালগুলিকে পাওয়ার আপ এবং পাওয়ার ডাউন করতে পারে:

  • এনালগ-টু-ডিজিটাল কনভার্টার (এডিসি)। এই পেরিফেরাল ব্যবহার করা হয় যখন আপনার কাছে একটি এনালগ সেন্সর থাকে যা ডেটা প্রদান করে (যেমন তাপমাত্রা, আলো, ত্বরণ ইত্যাদি) এবং এটিকে ডিজিটাল ভ্যালুতে রূপান্তর করতে হবে।
  • সিরিয়াল পেরিফেরাল ইন্টারফেস (SPI)। SPI বাসটি অন্যান্য SPI- সক্ষম ডিভাইসের সাথে যোগাযোগের জন্য ব্যবহৃত হয়, যেমন বাহ্যিক স্মৃতি, LED ড্রাইভার, বাহ্যিক ADC, ইত্যাদি SPI- এর অংশগুলি ISP প্রোগ্রামিংয়ের জন্য ব্যবহার করা হয়, অথবা কমপক্ষে পিনগুলি থাকে, তাই এটি বন্ধ করার সময় সতর্ক থাকুন আপনি যদি ISP এর মাধ্যমে প্রোগ্রামিং করেন।
  • দুই-ওয়্যার ইন্টারফেস। কিছু বহিরাগত ডিভাইস যোগাযোগের জন্য I2C বাস ব্যবহার করে, যদিও এসপিআই-এর সাহায্যে এগুলি দ্রুত প্রতিস্থাপিত হচ্ছে কারণ এসপিআই-এর বৃহত্তর থ্রুপুট রয়েছে।
  • USART। এটি আপনার সিরিয়াল ইন্টারফেস। আপনি সম্ভবত এটি বন্ধ করতে চান না যদি আপনি সিরিয়াল সংযোগের মাধ্যমে AVR- এর সাথে সংযুক্ত থাকেন! যাইহোক, আমি এটিকে এখানে সংযুক্ত করেছি একটি কঙ্কাল হিসাবে ডিভাইসগুলিতে পোর্টিং করার জন্য যার একাধিক USART আছে যেমন ATmega162 বা ATmega644P।
  • সব পাওয়ারআপ বা পাওয়ারডাউন কমান্ডের এই যুক্তিটি উল্লিখিত সমস্ত পেরিফেরাল চালু করে বা একটি কমান্ড দিয়ে সেগুলি বন্ধ করে দেয়। আবার, এই কমান্ডটি বুদ্ধিমানের সাথে ব্যবহার করুন।

রুট@ATmega328p> পাওয়ারডাউন টুই

টাইমার শুরু এবং বন্ধ করা শেলের একটি অন্তর্নির্মিত 16-বিট টাইমার রয়েছে যা ব্যবহারের জন্য উপলব্ধ। আপনি টাইমার কমান্ড দিয়ে টাইমার শুরু করুন:

টাইমার শুরুএবং স্টপ আর্গুমেন্ট দিয়ে টাইমার বন্ধ করুন

টাইমার স্টপএই টাইমার অভ্যন্তরীণ USART টাইমারের সাথে বিরোধ করবে না। ইউএসএআরটি টাইমারের বাস্তবায়নের বিশদ বিবরণের জন্য কোডটি দেখুন, যদি এই ধরণের বিশদ বিবরণ আপনার আগ্রহী হয়

root@ATmega328p> timer startStarted timer.root@ATmega328p> timer stop শেষ সময়: ~ 157 সেকেন্ড প্রমাণীকরণ শেল EEPROM- এ 8-অক্ষরের পাসওয়ার্ড সংরক্ষণ করতে পারে। এই পাসওয়ার্ড প্রক্রিয়াটি টেলনেট লগইন ক্ষমতাগুলিকে সমর্থন করার জন্য তৈরি করা হয়েছিল, তবে অন্যান্য জিনিসগুলিকে সুরক্ষিত করার জন্য এটি প্রসারিত করা যেতে পারে। উদাহরণস্বরূপ, আপনি প্রমাণীকরণ পদ্ধতির মাধ্যমে রেজিস্টার মান পরিবর্তন করার মতো কিছু কমান্ডের প্রয়োজন হতে পারে। পাসওয়ার্ড কমান্ড দিয়ে পাসওয়ার্ড সেট করুন

root@ATmega328p> passwd blahEEPROM- এ রুট পাসওয়ার্ড লিখুনAuth কমান্ড দিয়ে তার পাসওয়ার্ড (অথবা কোডের মাধ্যমে প্রোগ্রামগতভাবে অনুমোদনের প্রয়োজন) এর বিরুদ্ধে অনুমোদন করুন। মনে রাখবেন, যদি আপনি রুট পাসওয়ার্ড পরিবর্তন করার চেষ্টা করেন এবং ইতিমধ্যেই একটি রুট পাসওয়ার্ড সেট আছে, তাহলে আপনাকে নতুন পাসওয়ার্ড পরিবর্তন করার অনুমতি দেওয়ার আগে পুরনো পাসওয়ার্ডের বিরুদ্ধে নিজেকে অনুমোদন করতে হবে

root@ATmega328p> passwd blinky আপনাকে প্রথমে নিজেকে অনুমোদন করতে হবে।আপনার পুরানো মান এবং ভেরিয়েবলগুলি পুনরুদ্ধার করার জন্য আপনি যদি ফার্মওয়্যারটি মুছে দেন তবে অবশ্যই আপনাকে avrsh.eep ফাইলটি লোড করতে হবে। Makefile আপনার জন্য EEPROM ফাইল তৈরি করবে। ভেরিয়েবল শেল ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবলের ধারণা বুঝতে পারে। কোডটি এটিকে 20 এর মধ্যে সীমাবদ্ধ করে, কিন্তু আপনি যদি script.h- এ MAX_VARIABLES সংজ্ঞায়িত করে পরিবর্তন করতে পারেন। আপনি কোন 16-বিট মান (অর্থাৎ, 65, 536 পর্যন্ত যে কোন সংখ্যা) সংরক্ষণ করতে পারেন একটি ভেরিয়েবলে পরে প্রত্যাহার করতে হবে। সিনট্যাক্স রেজিস্টারের অনুরূপ একটি ডলার চিহ্ন ছাড়া ($) শেলের ভেরিয়েবল বোঝাতে ব্যবহৃত হয়। মুদ্রণ ভেরিয়েবল কমান্ড দিয়ে আপনার সমস্ত ভেরিয়েবল তালিকাভুক্ত করুন

মুদ্রণ ভেরিয়েবল ব্যবহারকারী -সংজ্ঞায়িত ভেরিয়েবল: সূচকের নাম -> মান (01): $ FREE $ -> 0 (02): $ FREE $ -> 0 (03): $ FREE $ -> 0 (04): $ FREE $ -> 0 (05): $ FREE $ -> 0 (06): $ FREE $ -> 0 (07): $ FREE $ -> 0 (08): $ FREE $ -> 0 (09): $ FREE $ -> 0 (10): $ FREE $ -> 0 (11): $ FREE $ -> 0 (12): $ FREE $ -> 0 (13): $ FREE $ -> 0 (14): $ FREE $ -> 0 (15): $ FREE $ -> 0 (16): $ FREE $ -> 0 (17): $ FREE $ -> 0 (18): $ FREE $ -> 0 (19): $ FREE $ -> 0 (20): $ বিনামূল্যে $ -> 0 সম্পূর্ণ।একটি পরিবর্তনশীল সেট করুন

$ newvar = 25 $ সময়সীমা = 23245একটি প্রদত্ত ভেরিয়েবলের মান পান

root@ATmega328p> echo $ newvar $ newvar 25আপনি ইতিমধ্যেই জানেন যে প্রিন্ট কমান্ড দিয়ে আপনি বর্তমানে যে সমস্ত ভেরিয়েবলগুলি ইনস্ট্যান্ট করেছেন তা দেখতে পারেন

ব্যবহারকারীর সংজ্ঞায়িত ভেরিয়েবল: সূচকের নাম -> মান (01): newvar -> 25 (02): সময়সীমা -> 23245 (03): $ FREE $ -> 0 (04): $ FREE $ -> 0 (05): $ FREE $ -> 0 (06): $ FREE $ -> 0 (07): $ FREE $ -> 0 (08): $ FREE $ -> 0 (09): $ FREE $ -> 0 (10): $ FREE $ -> 0 (11): $ FREE $ -> 0 (12): $ FREE $ -> 0 (13): $ FREE $ -> 0 (14): $ FREE $ -> 0 (15): $ FREE $ -> 0 (16): $ FREE $ -> 0 (17): $ FREE $ -> 0 (18): $ FREE $ -> 0 (19): $ FREE $ -> 0 (20): $ বিনামূল্যে $ -> 0 সম্পূর্ণ।$ FREE $ নামটি ইঙ্গিত দেয় যে পরিবর্তনশীল অবস্থানটি বিনামূল্যে এবং এখনও একটি পরিবর্তনশীল নাম বরাদ্দ করা হয়নি।

ধাপ 5: শেল কাস্টমাইজ করা

শেল কাস্টমাইজ করা
শেল কাস্টমাইজ করা

আপনি যদি কোডটি হ্যাক করতে পারেন এবং আপনার নিজের প্রয়োজন অনুযায়ী এটি কাস্টমাইজ করতে পারেন, যদি আপনি চান। যদি আমি জানতাম যে আমি এই কোডটি প্রকাশ করব, আমি একটি পৃথক কমান্ড ইন্টারপ্রেটার ক্লাস এবং কমান্ড কাঠামো তৈরি করতাম এবং এই ফাংশন পয়েন্টারকে কল করার মাধ্যমে কেবল পুনরাবৃত্তি করতাম। এটি কোডের পরিমাণ কমিয়ে দেবে, কিন্তু এটি শেলটি কমান্ড লাইন পার্স করে এবং উপযুক্ত শেল পদ্ধতিতে কল করে। কমান্ড লাইন বিশ্লেষণ করুন এবং আপনাকে আলাদাভাবে কমান্ড এবং কোন যুক্তি দিন। আর্গুমেন্টগুলি পয়েন্টার, বা পয়েন্টারগুলির একটি অ্যারে হিসাবে পাস করা হয়, তবে আপনি তাদের সাথে কাজ করতে পছন্দ করেন। এটি shell.cpp এ পাওয়া যায়। Shell.cpp খুলুন এবং AVRShell ক্লাসের ExecCmd পদ্ধতিটি খুঁজুন। আপনি প্রোগ্রাম মেমরিতে কমান্ড যোগ করতে চাইতে পারেন। যদি আপনি করেন, progmem.h এবং progmem.cpp কমান্ড যোগ করুন। আপনি PSTR () ম্যাক্রো ব্যবহার করে সরাসরি প্রোগ্রাম মেমরিতে কমান্ড যোগ করতে পারেন, কিন্তু আপনি পূর্বে উল্লেখ করা টাইপের আরেকটি সতর্কতা তৈরি করবেন। আবার, এটি C ++ এর সাথে কাজ করা একটি পরিচিত বাগ, কিন্তু আপনি সরাসরি progmem।* ফাইলে কমান্ড যোগ করে এটি পেতে পারেন, যেমনটি আমি করেছি। আপনি যদি আপনার SRAM ব্যবহারে আপত্তি না করেন, তাহলে আপনি কমান্ডটি যোগ করতে পারেন যেমনটি আমি "ঘড়ি" কমান্ড দিয়ে দেখিয়েছি। বলুন আপনি "newcmd" নামে একটি নতুন কমান্ড যোগ করতে চেয়েছিলেন। AVRShell:: ExecCmd এ যান এবং নিম্নলিখিত কোডটি সন্নিবেশ করার জন্য একটি সুবিধাজনক জায়গা খুঁজুন:

অন্যথায় যদি (! strcmp (c, "newcmd")) cmdNewCmd (args);এটি আপনার কমান্ড যুক্ত করবে এবং cmdNewCmd পদ্ধতিতে কল করবে যা আপনি পরবর্তী ধাপে লিখবেন। 2. আপনার কাস্টম কমান্ড কোড লিখুন একই ফাইলে, আপনার কাস্টম কমান্ড কোড যোগ করুন। এটি পদ্ধতির সংজ্ঞা। আপনি এখনও শেল.এইচ -এ ঘোষণা যোগ করতে চাইবেন। শুধু অন্যান্য কমান্ডের সাথে এটি যুক্ত করুন। পূর্ববর্তী উদাহরণে, কোডটি এরকম কিছু দেখতে পারে

voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR ("আপনার কমান্ড %s / r / n", args [0]); WriteRAM (buff);}এখানে বেশ কিছু জিনিস আছে। প্রথমত, "বাফ" হল একটি 40-অক্ষরের অ্যারে বাফার যা আপনার ব্যবহারের জন্য কোডে দেওয়া আছে। আমরা স্প্রিন্টফ এর প্রোগ্রাম মেমরি সংস্করণ ব্যবহার করি যেহেতু আমরা এটি একটি পিএসটিআর পাস করছি। আপনি যদি চান তবে নিয়মিত সংস্করণটি ব্যবহার করতে পারেন, তবে নিশ্চিত করুন যে আপনি একটি পিএসটিআর -এ বিন্যাসটি পাস করবেন না। এছাড়াও, আর্গুমেন্ট args অ্যারে হয়। আপনি যদি "newcmd arg1 arg2" টাইপ করেন তাহলে আপনি args [0] এবং args [1] সাবস্ক্রিপ্ট দিয়ে এই আর্গুমেন্টগুলি পেতে পারেন। কোডে সংজ্ঞায়িত হিসাবে আপনি সর্বাধিক MAX_ARGS আর্গুমেন্ট পাস করতে পারেন। যদি আপনি পুনরায় কম্পাইল করেন তাহলে সেই মান পরিবর্তন করতে বিনা দ্বিধায় আপনার যদি আরও অনেক যুক্তি একসাথে পাস করার প্রয়োজন হয়। এই ফাংশনের দ্বিতীয় যুক্তিটি অন্তর্নিহিত। যদি আপনি কিছু পাস না করেন, একটি কমান্ড প্রম্পট পরে লেখা হবে। যদি আপনি দ্বিতীয় যুক্তি হিসাবে 0 পাস করেন, একটি প্রম্পট লেখা হবে না। ব্যবহারকারীকে কমান্ড প্রম্পট ফেরত দেওয়ার আগে যখন আপনি আউটপুটে বেশ কয়েকটি পৃথক স্ট্রিং লিখতে চান তখন এটি কার্যকর। 3. শেলকে কমান্ড কোডটি চালাতে দিন আপনি নতুন কমান্ড সেটআপ করার সময় শেল এক্সিকিউটরকে cmdNewCmd পদ্ধতিটি কার্যকর করতে বলেছেন, কিন্তু শেল অবজেক্ট দ্বারা এটি বোঝার জন্য শেল.এইচ ফাইলে যুক্ত করুন। শুধু শেষ কমান্ডের নীচে অথবা প্রথম কমান্ডের সামনে, অথবা যে কোন জায়গায় এটি যোগ করুন এবং এটিই। আপনার Arduino এ ফার্মওয়্যারটি পুনরায় কম্পাইল করুন এবং আপলোড করুন এবং প্রম্পটে শেল থেকে আপনার নতুন কমান্ড পাওয়া যাবে।

ধাপ 6: সারাংশ

আপনার AVR/Arduino কে কিভাবে ইনস্টল এবং সংযুক্ত করতে হবে এবং আপনার চলমান মাইক্রোকন্ট্রোলারে লাইভ প্রম্পট পাবেন তা আপনার জানা উচিত। আপনি বেশ কয়েকটি কমান্ড জানেন যা এমসিইউ থেকে রানটাইম ডেটা টেনে আনবে বা ফ্লাইতে এমসিইউতে মান সেট করবে। আপনার নিজের কাস্টম কোডটি কীভাবে শেলটিতে তৈরি করতে আপনার নিজস্ব কাস্টম কোড যোগ করতে হয় তা আপনার নিজের প্রয়োজনের জন্য আরও কাস্টমাইজ করার জন্যও দেখানো হয়েছে। আপনি কমান্ড ইন্টারপ্রেটারকে শুধুমাত্র আপনার কাস্টম কমান্ডগুলি ধারণ করতে পারেন, যদি এটি আপনার প্রয়োজন অনুসারে হয়। আপনার নিজের বাস্তবায়নে একটি শেখার প্রক্রিয়া হিসাবে সর্বদা, আমি কিভাবে এই নির্দেশনা উন্নত করা যায় সে সম্পর্কে কোন মন্তব্য বা পরামর্শের জন্য উন্মুখ! আপনার AVR নিয়ে মজা করুন!

প্রস্তাবিত: