সফ্টওয়্যারটিতে কোন অর্ডিনো বোর্ড (বা কোন নিয়ামক) আমি কীভাবে সনাক্ত করতে পারি?


14

আমার একটি প্রকল্প আছে যা আমি ইউনো বা একটি মেগা (বা এমনকি একটি নির্ধারিত) এর উপরও কাজ করতে চাই এবং আমার যদি সফ্টওয়্যারটির দুটি সংস্করণ না প্রয়োজন হয় তবে এটি বেশ ভাল হবে। উদাহরণস্বরূপ, কোনও মেগায়, সফটওয়্যারসিরিল ব্যবহার করতে আপনাকে ইউনোতে থাকা পিনের চেয়ে আলাদা পিন ব্যবহার করতে হবে। সফ্টওয়্যার সিরিয়ালে ডক্স দেখুন । যাইহোক, এটি সনাক্ত করে ভাল লাগবে যে আমি একটি ইউনো ব্যবহার করছি যাতে আমি টিএক্স / আরএক্সের জন্য কেবল পিন 4 এবং 5 ব্যবহার করতে পারি এবং যদি আমি একটি মেগা ব্যবহার করি তবে সফ্টওয়্যারটি সনাক্ত করবে এবং কেবল পিনগুলি 10 এবং 11 ব্যবহার করবে (এবং এর অবশ্যই, আমি এটিকে আলাদাভাবে বেঁধে ফেলতে হবে তবে কমপক্ষে সফ্টওয়্যারটি একই হবে)।

উত্তর:


16

রান সময়

আমার জানা মতে আপনি বোর্ডের প্রকারটি সনাক্ত করতে পারবেন না তবে আপনি এটিমেগা ডিভাইস আইডিটি পড়তে পারেন। এটি কীভাবে করা যায় এই প্রশ্নটি পরীক্ষা করুন: চলার সময় কোনও এটিমেগা বা এটিটিনি ডিভাইসের স্বাক্ষরটি পড়া যায়? লক্ষ্য করুন যদিও এই পদ্ধতিটি ব্যবহার করার সময়, বেশ কয়েকটি নিবন্ধক কার্যভার পরিবর্তন হবে, কেবল পিনআউট নয়। সুতরাং আপনার কোড উল্লেখযোগ্যভাবে আরও জটিল হতে পারে। সুবিধাটি হ'ল যদি আপনি সমস্ত পরিবর্তিত রেজিস্টার কার্যভার এবং অন্যান্য হার্ডওয়্যার নির্ভরতাগুলির আশেপাশে কাজ পরিচালনা করেন তবে আপনি সরাসরি আপনার ডিভাইসগুলি প্রোগ্রাম করার জন্য একটি একক .হেক্স ফাইল ব্যবহার করতে পারেন avrdude

সংকলন সময়

বোর্ড / নিয়ামক প্রকারটি বের করার আরেকটি উপায় হ'ল সংকলনের সময়। মূলত আপনি কোডের কিছু অংশ সঙ্কলন করেন বা আরডুইনো আইডিইতে কনফিগার করা ডিভাইসের ধরণের উপর নির্ভর করে ম্যাক্রোগুলি সেট করেন। উদাহরণস্বরূপ এই কোড স্নিপলেট পরীক্ষা করুন:

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define DEBUG_CAPTURE_SIZE 7168
#define CAPTURE_SIZE 7168
#elif defined(__AVR_ATmega328P__)
#define DEBUG_CAPTURE_SIZE 1024
#define CAPTURE_SIZE 1024
#else
#define DEBUG_CAPTURE_SIZE 532
#define CAPTURE_SIZE 532
#endif

কোড স্নিপলেটটি নির্লজ্জভাবে https://github.com/gillham/logic_analyzer/wiki থেকে অনুলিপি করা হয়েছিল এবং আরও কিছু ডিভাইস নির্দিষ্ট ট্রিকির জন্য সেই কোডটি পরীক্ষা করুন।

আপনার হোস্টের অপারেটিং সিস্টেমের উপর নির্ভর করে সমর্থিত নিয়ামক প্রকারগুলি নিম্নলিখিত ফাইলে পাওয়া যাবে:

  • লিনাক্স: /usr/lib/avr/include/avr/io.h
  • উইন্ডোজ: ...\Arduino\hardware\tools\avr\avr\include\avr\io.h

সি-প্রিপ্রসেসর ব্যবহার (যার মাধ্যমে উপরের কোডটি পরিচালনা করা হয়) সম্ভবত এই সাইটের জন্য সুযোগের বাইরে। http://stackoverflow.com বিশদ প্রশ্নের জন্য আরও ভাল জায়গা হবে।

আপনি যদি লিনাক্সে থাকেন তবে আপনি সহজেই টাইপ করে সমস্ত সমর্থিত নিয়ামক প্রকারগুলি খুঁজে পেতে পারেন:

grep 'defined (__AVR' /usr/lib/avr/include/avr/io.h | sed 's/^[^(]*(\([^)]*\))/\1/'

.. \ আরডুইনো \ হার্ডওয়্যার \ সরঞ্জামগুলি \ এভ্রি \
আভ্র

@mpflaga আমি উত্তর আপডেট করেছি updated আপনার ইনপুট জন্য Thnx।
জিপ্পি

সমস্ত এভিআর-নির্দিষ্ট পূর্বনির্ধারিত ম্যাক্রোগুলি অ্যাভির-লিবিসি ডকুমেন্টেশনে তালিকাভুক্ত ।
Ignacio Vazquez-Abram

তাহলে আরডুইনো আইডিই বোর্ডের তথ্যটি কীভাবে পাবেন? ( Tools > Get Board Info) আমি সিরিয়াল সংযোগ থেকে একটি স্ট্রিং চেক করার আশা করছিলাম, সুতরাং আমার অ্যাপ্লিকেশন শুরু হলে সঠিক সিওএম বন্দরটি স্বয়ংক্রিয়ভাবে নির্বাচন করা যায়। কারণ স্পষ্টতই, আইডিই এটি করতে পারে, কোনও ধারণা যদি তারা উপরের পদ্ধতিগুলি ব্যবহার করে?
n00dles

@ n00dles উপরে বর্ণিত পদ্ধতিগুলি আপনি চান থেকে আলাদা। এটি সম্ভবত আরডুইনোএসই-তে নিজের নিজের প্রশ্নের জন্য মূল্যবান। আমি বোর্ডের তথ্য পান তা পরীক্ষা করতে পারি না, এটি আমার কাছে পাওয়া আরডুইনো সংস্করণে নেই।
জিপ্পি

6

আরডুইনো হার্ডওয়্যার স্পেসিফিকেশনে যেমন বলা হয়েছে , আরডুইনো আইডিই এখন প্রতিটি বোর্ডের জন্য ম্যাক্রো সংজ্ঞায়িত করে, যেমন বোর্ডস.এসটিএসটি build.boardসম্পত্তি হিসাবে সংজ্ঞায়িত করা হয়েছে । এই মানটি এতে যুক্ত হয় ARDUINO_, উদাহরণস্বরূপ, আপনার আগ্রহী বোর্ডগুলির ম্যাক্রোগুলি হ'ল :

  • : uno ARDUINO_AVR_UNO
  • মেগা 2560: ARDUINO_AVR_MEGA2560
  • বাকি: ARDUINO_SAM_DUE

আপনি কীভাবে এই কোডগুলি আপনার কোডটিতে ব্যবহার করতে পারেন তার উদাহরণ:

#if defined(ARDUINO_AVR_UNO)
//Uno specific code
#elif defined(ARDUINO_AVR_MEGA2560)
//Mega 2560 specific code
#elif defined(ARDUINO_SAM_DUE)
//Due specific code
#else
#error Unsupported hardware
#endif

আমি বলব এটি প্রশ্নের সবচেয়ে সহজ এবং সোজা-থেকে-দফার উত্তর। ইচ্ছুক এটি গৃহীত এক।
এরুতান 409

4

বোর্ড স্নিফিংয়ের একটি সহজ উপায় হ'ল আরডুইনো ম্যানেজারের মতো একটি লাইব্রেরি ব্যবহার করা। এটির সাহায্যে আপনি খুব সহজেই বোর্ডের নাম এবং বৈশিষ্ট্যগুলি পেতে পারেন https://github.com/backupbrain/ArdinoBoardManager

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

আপনার আরডিনো প্রকল্পে কেবল ডাউনলোড করুন এবং অন্তর্ভুক্ত করুন।

#include "ArduinoBoardManager.h"

ArduinoBoardManager arduino = ArduinoBoardManager(); // required if you want to know the board name and specific features

void setup() {
  Serial.begin(9600);

  Serial.print("Board is compatible with Arduino ");
  Serial.println(arduino.BOARD_NAME);

  Serial.println("Speed/SRAM/Flash: ");
  Serial.print(ArduinoBoardManager::MAX_MHZ);
  Serial.println(ArduinoBoardManager::SRAM_SIZE);
  Serial.println(ArduinoBoardManager::FLASH_SIZE);

  // Board features (multiple serial ports on Mega, for example)
  if (arduino.featureExists(ArduinoBoardManager::FEATURE_MULTIPLE_SERIAL)) {
    Serial.println("Your board supports multiple serial connections");
  }

}

void loop() {
}

আরডুইনো ইউনিোর ফলাফল ফলাফল:

Board is compatible with Arduino UNO

Speed/SRAM/Flash: 
16000000
2048
33554432

আরডুইনো বোর্ডের মডেল এবং সংস্করণ নির্ধারণের জন্য এই লাইব্রেরিটি (উদাহরণ কোড সহ) তৈরি করার প্রক্রিয়াটি আমার ব্লগে বিস্তারিতভাবে বর্ণনা করা হয়েছে।



অনুগ্রহ করে আপনার প্রকল্পে একটি লাইসেন্স ইঙ্গিত ..
অরুণ

2

আরডুওও ডিউয়ের সাথে সামঞ্জস্যপূর্ণ সমস্ত বোর্ডের জন্য

#if defined (__arm__) && defined (__SAM3X8E__) // Arduino Due compatible
// your Arduino Due compatible code here
#endif

( আরও তথ্যের জন্য sam3.h ফাইলটি দেখুন ))

আপনি যদি কেবল আরডুইনো ডিউকে লক্ষ্য রাখতে চান (উপযুক্ত বোর্ডগুলি রেখে) তবে আপনি ব্যবহার করতে পারেন

#if defined (_VARIANT_ARDUINO_DUE_X_)
// your Arduino Due code here
#endif

(এটি আরডুইনো ডিউর ভেরিয়েন্ট h ফাইলে সংজ্ঞায়িত করা হয়েছে ))

অ্যাডাম এফ /programming//a/21058963/354144 এ জমা দিন


1

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

আপনার প্রোগ্রামের দ্বারা যে কোনও বোর্ডে ইতিমধ্যে ব্যবহৃত হচ্ছে না এমন দুটি ডিজিটাল পিন বেছে নিয়ে কোনও বোর্ড আইডি হিসাবে উচ্চ বা নিম্নে বেঁধে আপনি পুনরায় সংশোধন না করে রানটাইমে বোর্ডের ধরণটি নির্ধারণ করতে পারেন। উদাহরণস্বরূপ, আপনার চয়ন করা পিনগুলি যদি PC1 এবং PC3 হয়:

 PC1   PC3   Board ID
  0     0      Uno
  0     1      Mega
  1     0      Due
  1     1      spare

তারপরে কেবল পাওয়ার আপ পোর্টটি পড়ুন এবং আপনার প্রোগ্রামে একটি ভেরিয়েবল সেট করুন।

অন্য একটি স্কিম যা ব্যবহার করা যেতে পারে, যা কেবল একটি পিনের সাথে সম্পর্কযুক্ত তা হ'ল একটি এনালগ ইনপুট পিন ব্যবহার করা এবং একটি রেজিস্টার ডিভাইডার ব্যবহার করা, এমন প্রতিরোধক নির্বাচন করা যাতে আপনি বিভিন্ন ভোল্টেজ পেতে পারেন 0.25V ইনক্রিমেন্ট। আমি সেই কৌশলটি কেবল বোর্ড টাইপই নয়, একই বোর্ডের জন্য একটি বোর্ড পুনর্বিবেচনা (যা এক অর্থে একটি নতুন বোর্ডের ধরণ) উল্লেখ করতে ব্যবহার করেছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.