সুচিপত্র:

পার্ট 3: জিপিআইও: এআরএম অ্যাসেম্বলি: লাইন ফলোয়ার: টিআই-আরএসএলকে: 6 টি ধাপ
পার্ট 3: জিপিআইও: এআরএম অ্যাসেম্বলি: লাইন ফলোয়ার: টিআই-আরএসএলকে: 6 টি ধাপ

ভিডিও: পার্ট 3: জিপিআইও: এআরএম অ্যাসেম্বলি: লাইন ফলোয়ার: টিআই-আরএসএলকে: 6 টি ধাপ

ভিডিও: পার্ট 3: জিপিআইও: এআরএম অ্যাসেম্বলি: লাইন ফলোয়ার: টিআই-আরএসএলকে: 6 টি ধাপ
ভিডিও: Raspberry Pi 3 B+ Features And Full Pin Configuration # 1 2024, জুলাই
Anonim
Image
Image
হার্ডওয়্যার
হার্ডওয়্যার

হ্যালো. এটি পরবর্তী কিস্তি যেখানে আমরা এআরএম সমাবেশ (উচ্চ স্তরের ভাষার পরিবর্তে) ব্যবহার চালিয়ে যাচ্ছি। এই নির্দেশনার জন্য অনুপ্রেরণা হল টেক্সাস ইন্সট্রুমেন্টস রোবটিক্স সিস্টেম লার্নিং কিটের ল্যাব 6, বা টিআই-আরএসএলকে।

আমরা কিট, MSP432 লঞ্চপ্যাড ডেভেলপমেন্ট বোর্ড থেকে মাইক্রোকন্ট্রোলার ব্যবহার করব, কিন্তু সম্ভবত আপনি লঞ্চপ্যাড ব্যবহার না করলেও, অথবা T. I- কে অনুসরণ না করলেও আপনি এই নির্দেশযোগ্য থেকে বের করার জন্য কিছু উপকারী পাবেন। পাঠ্যক্রম

আমরা একটি নির্দেশমূলক প্রবর্তন এআরএম সমাবেশ, উন্নয়ন পরিবেশ, এবং কিভাবে একটি প্রকল্প তৈরি করতে শুরু করেছি।

এআরএম সমাবেশে পরবর্তী নির্দেশিকা কীভাবে ইনপুট/আউটপুট (জিপিআইও) এর সাথে যোগাযোগ করতে হয় তা চালু করে।

তারপর আমরা আমাদের জ্ঞান প্রসারিত, এবং LEDs এবং সুইচ নিয়ন্ত্রণ, ফাংশন চালু।

এখন এই নির্দেশের সাহায্যে, আমরা যা শিখেছি তা আরও মজাদার, আরও দরকারী করতে ব্যবহার করতে পারি: একটি লাইন সনাক্ত করুন।

যখন আমরা লাইন-ফলোয়ার রোবট তৈরি করব তখন এটি আমাদের সাহায্য করতে পারে।

পাঠ্যসূচিতে, বেশিরভাগ প্রোগ্রামিং সি বা সি ++ তে করা হয়, তবে উচ্চ স্তরের ভাষা এবং লাইব্রেরির উপর নির্ভর করার আগে সমাবেশের সাথে পরিচিত হওয়া সহায়ক।

ধাপ 1: হার্ডওয়্যার

হার্ডওয়্যার
হার্ডওয়্যার
হার্ডওয়্যার
হার্ডওয়্যার
হার্ডওয়্যার
হার্ডওয়্যার

আমি হার্ডওয়্যারটি বিস্তারিতভাবে পুনর্বিন্যাস করতে চাই না, যেহেতু ইতিমধ্যেই উৎস আছে, কিন্তু আমরা যেখানে প্রয়োজন সেখানে ব্যাখ্যা যোগ করব।

এই নির্দেশের জন্য, আমরা পোলোলু থেকে প্রতিফলন সেন্সর অ্যারে ব্যবহার করব, যেহেতু এটি টিআই-আরএসএলকে (রোবট কিট) এর অংশ হিসাবে আসে। এটি কোর্সে এবং পাঠ্যক্রমের ল্যাব 6 এ ব্যবহৃত হয়।

যদি আপনার কাছে এটি না থাকে, আপনি উপস্থিতি এবং অনুপস্থিতির জন্য যে কোনও আইআর ডিটেক্টর (বা তাদের সিরিজ) ব্যবহার করতে পারেন যা একটি ডিজিটাল সংকেত, উচ্চ বা নিম্ন আউটপুট করে।

অ্যারে সেন্সরটি সর্বোত্তম কারণ এটি সনাক্ত করতে সাহায্য করতে পারে যে আমরা লাইনের কেন্দ্রে ঠিক আছি, অথবা একপাশে। প্লাস, যেহেতু আমরা পরে দেখব, এটি আমাদেরকে রোবটের কোণ সনাক্ত করতে সাহায্য করতে পারে।

প্রতিফলন অ্যারে একে অপরের খুব কাছাকাছি ডিটেক্টর আছে। তার মানে অবশ্যই লাইনের পুরুত্বের উপর নির্ভর করে আমাদের একাধিক সনাক্তকরণ সংকেত পাওয়া উচিত।

যদি তাই হয়, তাহলে যদি রোবটটি সরাসরি লাইনের সাথে ইনলাইন না হয়, তাহলে এটি এমন একটি আউটপুট ফেরত দেওয়া উচিত যে লাইনটি তার চেয়ে বিস্তৃত (কারণ আমরা একটি কোণে আছি)।

উপরের একটি ভাল ব্যাখ্যার জন্য, ল্যাব 6 নথি দেখুন।

এমএসপি 432 লঞ্চপ্যাড ডেভেলপমেন্ট বোর্ডের সাথে সেন্সর সংযোগ / সংযোগের ক্ষেত্রে সাহায্যের জন্য, এখানে কিছু সহায়ক নির্দেশনা দেওয়া হল।

আমি এই ধাপে একই (অনুরূপ?) পিডিএফ নির্দেশাবলী যোগ করেছি।

আপনি যদি পোলোলু ডকুমেন্টগুলি সাবধানে পড়েন, তাহলে তারা "3.3V বাইপাস" এর কারণ ব্যাখ্যা করে যে, আপনি যদি 5V এর পরিবর্তে 3.3V ব্যবহার করেন তাহলে আপনি জাম্পার করতে চান।

যেহেতু আমরা এখনো রোবট তৈরি করছি না কিন্তু এর পরিবর্তে আমরা শুধু এআরএম সমাবেশ এবং কিভাবে রোবটের টুকরো (সাবসিস্টেম) এর সাথে ইন্টারঅ্যাক্ট করতে হয় তা শিখছি, তাই আমাদের চিঠিতে উপরের নির্দেশাবলী অনুসরণ করতে হবে না।

আপাতত, লাইন সেন্সর অ্যারে সংযুক্ত করে নিচের দিকে ফোটায়/কমায়:

  • MSP432 বোর্ড থেকে 3.3V এবং GND কে সেন্সর অ্যারেতে সংযুক্ত করুন।
  • MSP432 থেকে লাইন সেন্সর অ্যারেতে LED সক্ষম পিনের সাথে একটি পোর্ট পিন (আমি P5.3 সুপারিশ করি) সংযুক্ত করুন। সেন্সরের সেই পিনটি 3.3V এবং GND এর মধ্যে।
  • একটি পোর্টের সমস্ত আটটি পিন/বিট (আমি P7.0 থেকে P7.7 এর পরামর্শ দিই) সেন্সর অ্যারের আট পিনের সাথে "1" থেকে "8" লেবেল যুক্ত করুন। এই লাইনগুলি যেগুলি তারা কি অনুভব করে তার উপর নির্ভর করে উচ্চ বা নিম্ন হবে।

আপনি যেমন এই ধাপের ছবিগুলিতে এবং ভিডিওতে দেখতে পাচ্ছেন, আমি সেন্সরটি রোবট চ্যাসিসের সাথে সংযুক্ত করিনি, কারণ আমি প্রোগ্রামিং, ডিবাগিং, টেস্টিং, শেখার সহজতা চাই।

তাই সংযুক্ত সবকিছু সঙ্গে, আমরা সফ্টওয়্যার মধ্যে পেতে প্রস্তুত।

ধাপ 2: লাইন অনুসরণ

লাইন অনুসরণ করা হচ্ছে
লাইন অনুসরণ করা হচ্ছে
লাইন অনুসরণ করা হচ্ছে
লাইন অনুসরণ করা হচ্ছে

প্রতিফলন অ্যারে সেন্সর বেশ নিফটি কারণ এটি কমপক্ষে দুটি উপায়ে সাহায্য করতে পারে।

  • নির্ণয় করা হলো রোবটটি লাইনে কেন্দ্রীভূত বা একদিকে চলে যাওয়া।
  • রোবটটি কি লাইনের দিকের সাথে সংযুক্ত, নাকি এটি একটি কোণে।

অ্যারের প্রতিটি ডিটেক্টর মূলত একটি বিট তথ্য প্রদান করে, হয় উচ্চ বা নিম্ন।

ধারণাটি হল সেই সমস্ত বিটগুলিকে একক সংখ্যা বা একক বিট-প্যাটার্নে একত্রিত করা, এবং সিদ্ধান্ত নেওয়ার জন্য সেই প্যাটার্নটি ব্যবহার করুন (সঠিকভাবে সরানোর জন্য)।

ধাপ 3: আমরা সত্যিই শুরু করার আগে …

.. আমাদের ARM সমাবেশ প্রোগ্রামিং সম্পর্কে নতুন কিছু শিখতে হবে। এবং আমি শুধু অন্য নির্দেশ মানে না। যারা নাবালক হয়।

এখন পর্যন্ত আমরা আমাদের প্রোগ্রামগুলিতে "স্ট্যাক" ব্যবহার করিনি।

আমরা বিশ্বব্যাপী বিভিন্ন সাবরুটিন জুড়ে বেশিরভাগ কোর সিপিইউ রেজিস্টার ব্যবহার করার উপর নির্ভর করেছি।

আমরা যা করেছি তা হল একটি ফাংশনের জন্য LR (লিঙ্ক রেজিস্টার) ঠিকানা সংরক্ষণ করা এবং পুনরুদ্ধার করা - যেটি অন্য বেশ কয়েকটি ফাংশনকে বলে। (আমি এখানে "ফাংশন" এবং "সাবরুটিন" বিনিময়যোগ্যভাবে ব্যবহার করি)।

আমরা যা করছি তা ভাল নয়। যদি আমরা অন্যান্য ফাংশন বাসা বাঁধতে চাই? আমাদের যদি একাধিক স্তরের বাসা বাঁধে তাহলে কি হবে?

পূর্ববর্তী উদাহরণগুলিতে, আমরা LR বা রিটার্ন ঠিকানার জন্য স্টোরেজ হিসাবে R6 রেজিস্টার ব্যবহার করতে বেছে নিয়েছি। কিন্তু যদি আমরা আরও/গভীর বাসা বাঁধতে চাই, আমরা R6 এর মান পরিবর্তন করতে পারি না। আমাদের আরেকটি রেজিস্টার বাছাই করতে হবে। এবং অন্য. এবং তারপরে কোন সিপিইউ রেজিস্টারে কোন এলআর কোন ফাংশনে ফিরিয়ে আনা যায় তার হিসাব রাখা ভারী হয়ে ওঠে।

তাই এখন আমরা "স্ট্যাক" এক নজর।

ধাপ 4: স্ট্যাক

এখানে স্ট্যাক ব্যাখ্যা কিছু পড়া উপাদান।

আমি কয়েকটি ধারণাগুলির একটি বড় প্রবক্তা:

  • যতটুকু তত্ত্ব প্রয়োজন, তাড়াতাড়ি ব্যবহারিক ব্যবহার করুন
  • প্রয়োজন অনুযায়ী শিখুন, আসলে কিছু করার উপর মনোযোগ দিন এবং উদ্দেশ্যহীন ব্যায়াম বা উদাহরণ নয়।

অনলাইনে প্রচুর এআরএম এবং এমএসপি 432 ডকুমেন্টেশন রয়েছে যা স্ট্যাক সম্পর্কে কথা বলে, তাই সেগুলি পুনরায় পুনরাবৃত্তি করতে যাচ্ছে না। আমি এখানে স্ট্যাকের ব্যবহারকে সর্বনিম্ন রাখতে যাচ্ছি - রিটার্ন ঠিকানা (লিঙ্ক রেজিস্টার) সংরক্ষণ করা।

মূলত, আমাদের কেবল নির্দেশনা প্রয়োজন:

পুশ করুন {তালিকা তালিকা}

POP {তালিকা তালিকা}

অথবা, আমাদের ক্ষেত্রে, বিশেষভাবে:

ধাক্কা {LR}

POP {LR}

সুতরাং, একটি সমাবেশ ফাংশন/সাবরুটিন এর মত দেখতে হবে:

funcLabel:.asmfunc

PUSH {LR}; এটি সম্ভবত প্রবেশের প্রথম নির্দেশাবলীর মধ্যে একটি হওয়া উচিত।; এখানে আরো কোড করুন..; ব্লা.. ব্লা… ব্লা…; ঠিক আছে, আমরা ফাংশন সম্পন্ন করেছি, কলিং ফাংশন POP {LR} এ ফিরে যাওয়ার জন্য প্রস্তুত; এটি সঠিক রিটার্ন ঠিকানাটি পুনরায় কলিংয়ে ফিরিয়ে আনে; ফাংশন BX LR; ফিরে.endasmfunc

ভিডিওটি বেশ কয়েকটি নেস্টেড ফাংশনের একটি জীবন্ত উদাহরণ দিয়ে যায়।

ধাপ 5: সফটওয়্যার

"MSP432_Chapter …" লেবেলযুক্ত সংযুক্ত ফাইলটিতে MSP432 এর পোর্ট সম্পর্কে অনেক ভাল তথ্য রয়েছে এবং সেই নথি থেকে আমরা নিম্নলিখিত পোর্ট, রেজিস্টার, ঠিকানা ইত্যাদি পাই। যাইহোক, আমি পোর্ট 5 এবং তার উপরে তালিকাভুক্ত বিস্তারিত ঠিকানা দেখিনি। (শুধুমাত্র "বিকল্প ফাংশন")। কিন্তু এটি এখনও দরকারী।

আমরা দুটি পোর্ট ব্যবহার করতে যাচ্ছি। P5, P7, P1, এবং P2।

P5.3 (একক বিট) আউটপুট হবে সেন্সরে IR LED- সক্ষম নিয়ন্ত্রণ করা। আমরা P5.3 ব্যবহার করছি কারণ এটি একই শিরোলেখের একটি উন্মুক্ত পিন যা অন্যান্য MSP432 সংযোগ সেন্সর অ্যারেতে যাচ্ছে।

P7.0 থেকে P7.7 হল আটটি ইনপুট যা সেন্সর থেকে তথ্য সংগ্রহ করে; যা "দেখে"।

P1.0 হল একক লাল LED এবং আমরা এটি ব্যবহার করতে পারি আমাদের তথ্যের কিছু ইঙ্গিত দিতে।

P2.0, P2.1, P2.2 হল RGB LED এবং আমরা সেন্সর ডেটার ইঙ্গিত দিতে এটিকে বিভিন্ন রঙের সম্ভাবনার সাথে ব্যবহার করতে পারি।

আপনি যদি এই সমস্ত সম্পর্কিত পূর্ববর্তী নির্দেশিকাগুলির মধ্য দিয়ে গিয়ে থাকেন তবে আপনি ইতিমধ্যে জানেন কিভাবে প্রোগ্রামটি সেট আপ করতে হয়।

শুধু পোর্ট এবং বিট ইত্যাদির জন্য ঘোষণা বিভাগ আছে।

আপনার একটি "প্রধান" বিভাগ থাকবে।

সেখানে একটি লুপ থাকা উচিত, যেখানে আমরা ক্রমাগত P7 থেকে ডেটা পড়ি, সেই ডেটার সিদ্ধান্ত নিই এবং সেই অনুযায়ী দুটি LEDs আলোকিত করি।

এখানে আবার পোর্ট রেজিস্টারের ঠিকানা রয়েছে:

  • GPIO P1: 0x4000 4C00 + 0 (এমনকি ঠিকানা)
  • GPIO P2: 0x4000 4C00 + 1 (বিজোড় ঠিকানা)
  • GPIO P3: 0x4000 4C00 + 20 (এমনকি ঠিকানা)
  • GPIO P4: 0x4000 4C00 + 21 (বিজোড় ঠিকানা)
  • GPIO P5: 0x4000 4C00 + 40 (এমনকি ঠিকানা)
  • GPIO P6: 0x4000 4C00 + 41 (বিজোড় ঠিকানা)
  • GPIO P7: 0x4000 4C00 + 60 (এমনকি ঠিকানা)
  • GPIO P8: 0x4000 4C00 + 61 (বিজোড় ঠিকানা)
  • GPIO P9: 0x4000 4C00 + 80 (এমনকি ঠিকানা)
  • GPIO P10: 0x4000 4C00 + 81 (বিজোড় ঠিকানা)

সাহসী কি আমরা এই নির্দেশযোগ্য জন্য ব্যবহার করা হবে।

আইআর ডিটেক্টর পড়ার জন্য প্রোগ্রামের ধাপ

সি-তে প্রোগ্রামটি লেখার জন্য নিম্নলিখিতটি psuedo- কোড, কিন্তু এটি এখনও দরকারী, এবং আমরা এটি প্রোগ্রামের সমাবেশ সংস্করণে বেশ ঘনিষ্ঠভাবে অনুসরণ করব।

প্রধান প্রোগ্রাম 0) আরম্ভ করুন // পোর্ট যখন (1) {1) P5.3 উচ্চ সেট করুন (IR LED চালু করুন) 2) P7.0 একটি আউটপুট করুন, এবং এটি উচ্চ সেট করুন (ক্যাপাসিটরের চার্জ করা) 3) আমাদের অপেক্ষা করুন 10, Clock_Delay1us (10); 4) P7.0 কে একটি ইনপুট করুন 5) এই লুপটি 10, 000 বার চালান a) P7.0 পড়ুন (P7.0 এ ভোল্টেজকে বাইনারিতে রূপান্তরিত করুন) খ) আউটপুট বাইনারি থেকে P1.0 (আপনাকে রিয়েল টাইমে বাইনারি দেখতে দেয় 6) P5.3 কম সেট করুন (IR LED বন্ধ করুন, পাওয়ার সাশ্রয় করুন) 7) 10 ms অপেক্ষা করুন, Clock_Delay1ms (10); } // পুনরাবৃত্তি (ফিরে যখন ())

ধাপ 6: আসুন কোডটি উন্নত করি

পোলোলু আইআর এলইডি অ্যারের উদ্দেশ্য বা ব্যবহার হল একটি লাইন সনাক্ত করা, এবং রোবট (ভবিষ্যত) সরাসরি লাইনে কেন্দ্রীভূত কিনা, বা একপাশে বন্ধ কিনা তা জানা। এছাড়াও, যেহেতু লাইনের একটি নির্দিষ্ট বেধ আছে, যদি সেন্সর অ্যারেটি সরাসরি লাইনের উপর লম্ব হয়, N সংখ্যক সেন্সরের বাকী অংশের চেয়ে আলাদা পড়া থাকবে, যেখানে যদি IR LED অ্যারে কিছু কোণে থাকে (লম্ব নয়), তাহলে N+1 বা N+2 IR LED/ডিটেক্টর জোড়াগুলিকে এখন আলাদা পড়া উচিত।

এইভাবে, কতগুলি সেন্সর লাইনের উপস্থিতি নির্দেশ করে তার উপর নির্ভর করে, আমাদের জানা উচিত যে আমরা কেন্দ্রীভূত, এবং যদি আমরা কোণযুক্ত বা না।

এই চূড়ান্ত পরীক্ষার জন্য, আসুন আমরা দেখি যে আমরা লাল LED এবং RGB LED পেতে পারি কিনা যাতে সেন্সর অ্যারে আমাদের কী বলছে সে সম্পর্কে আরও তথ্য দিতে পারে।

ভিডিওটি সমস্ত বিবরণে যায়। চূড়ান্ত কোডটিও সংযুক্ত।

এটি জিপিআইও সম্পর্কিত এআরএম সমাবেশের সিরিজটি সম্পূর্ণ করে। আমরা আশা করি পরবর্তী সময়ে আরও এআরএম সমাবেশ নিয়ে ফিরে আসব।

ধন্যবাদ.

প্রস্তাবিত: