nRF24L01 পাইপ প্রশ্ন


9

আমি এখানে পাওয়া উদাহরণ কোড মাধ্যমে সন্ধান করছি । আমি জানি যে এখানে 6 টি পাইপ রয়েছে যা এনআরএফ 24 এল 0 মডিউলটি ব্যবহার করতে পারে তবে আমি ঠিকানার জন্য ডিজাইনের জন্য ইন্টারনেট অনুসন্ধান করেছি এবং কিছুই খুঁজে পেতে সক্ষম হয়েছি। ৩ specifically লাইনে আরও নির্দিষ্টভাবে, লেখক যেখানে 0xF0F0F0F0E0LL, 0xF0F0F0F0F0D2LL পাচ্ছেন তার জন্য কোনও উল্লেখ রয়েছে?

ধন্যবাদ।


1
আপনি কি রেডিও আইসি-র জন্য ডেটাশিটটি দেখেছেন? পাইপে ঠিকানাগুলি সম্পর্কে অবশ্যই এটির আরও তথ্য রয়েছে।

1
openReadingPipe()এখানে RF24 এপিআই ডক পরীক্ষা করুন: maniacbug.github.io/RF24/… এতে আপনি শেষ ঠিকানা বাইটের জন্য কোনও মান ব্যবহার করতে পারবেন বলে উল্লেখ করা হয়েছে ।
jfpoil ব্যাখ্যা

সুতরাং আমি ডকুমেন্টেশনটি দেখেছি তবে পাইপের ঠিকানাটি কীভাবে বেছে নেওয়া হয়েছে তা উল্লেখ করা হয়নি। এটি কেবল তাদের প্রথম 32 বিট ভাগ করে নেওয়া উচিত বলেছে। উদাহরণস্বরূপ 0xF0F0F0F0 (XX), 0x কি বাইট হিসাবে গণনা করে? বা F0F0F0F0 32 বিট যে বিষয়টি? এছাড়াও, পাইপগুলি সেই 32 টি বিট ভাগ না করা যতক্ষণ এটি F0F0F0F0 না থাকে তা কি গুরুত্বপূর্ণ? শেষ দুটি উল্লেখযোগ্য বাইট (XX) সম্পর্কে কীভাবে? ওঁরাও স্বেচ্ছাচারী?
অ্যালেক্স এইচ

0x...উপসর্গটি হেক্সাডেসিমাল মানটি বলতে কেবল । এটি হ'ল ডেসিম্যালিতে 99 হেক্সাডেসিমালের 99 এর চেয়ে পৃথক, যদিও তারা দেখতে একই রকম। সুতরাং পরিবর্তে আমরা 0x99 ব্যবহার করি।
গেরবেন

2
আপনি যে কোডটি ব্যবহার করছেন সেটি কেবল 1 টি পাইপ সমর্থন করে। NRF24L01 এর 2 টি অনন্য পাইপ রয়েছে (0 এবং 1)। এটিতে আরও 4 টি অতিরিক্ত পাইপ রয়েছে (2, 3, 4 এবং 5), যেখানে আপনি কেবলমাত্র সর্বনিম্ন-উল্লেখযোগ্য-বাইট সেট করতে পারেন। অন্যান্য বাইটগুলি দ্বিতীয় পাইপের (1) সমান হবে।
গেরবেন

উত্তর:


5

যেহেতু বেশিরভাগ লোকেরা পোস্ট করেছেন, পাইপের মানগুলি নির্বিচারে হয় তবে অবশ্যই API অনুসারে নিয়মগুলি মেনে চলতে হবে:

পাইপ 1-5 প্রথম 32 বিট ভাগ করা উচিত। শুধুমাত্র কমপক্ষে উল্লেখযোগ্য বাইটটি অনন্য হওয়া উচিত, যেমন eg

আমি আপনার প্রশ্নের উত্তর দেওয়ার আগে আমার ধারণা হেক্স এবং দশমিক মান সম্পর্কে একটি ব্যাখ্যা প্রয়োজন।

40 বিট হেক্সাডেসিমাল হল বেস 16 এর একটি সংখ্যা উপস্থাপনা dec দশমিক 10 বেস of যেহেতু এটি প্রশ্নের আওতার বাইরে, আপনি কীভাবে একটি থেকে অন্যটিতে রূপান্তর করবেন তা গুগল করতে পারেন। কিছু অনলাইন রূপান্তরকারী রয়েছে:

হেক্স থেকে দশমিক রূপান্তরকারী

আপনি যখন হেক্স মানকে দশমিকের সাথে রূপান্তর করবেন তখন দেখবেন যে এটি কেবল একটি সংখ্যার উপস্থাপনা। আপনি যখন রূপান্তর করবেন, আপনি ড্রপ 0xএবং LL। যেমনটি বলা 0xহয়েছে যে মানটি হেক্স মান এবং এর LLঅর্থ লং লং টাইপ

সুতরাং আপনার প্রশ্নের উত্তর দেওয়ার জন্য, একটি হেক্স নম্বর যেমন কনভার্টারটি ব্যবহার করুন:

F0F0F0F0A1
F0F0F0F0A2
F0F0F0F0B4
F0F0F0F0E9

কেবলমাত্র শেষ 2 টি সংখ্যা পরিবর্তন করুন (কমপক্ষে গুরুত্বপূর্ণ বিট):

Pipes 1-5 should share the first 32 bits. Only the least significant byte should be unique, e.g.
   openReadingPipe(1,0xF0F0F0F0AA);
   openReadingPipe(2,0xF0F0F0F066);

যোগ করুন 0xএবংLL

0xF0F0F0F0A1LL
0xF0F0F0F0A2LL
0xF0F0F0F0B4LL
0xF0F0F0F0E9LL

সব কাজ করা উচিত।

আমি শিখছি বলে আমি হেক্সের কোনও বিশেষজ্ঞ নই, তাই যদি আমি ভুল হয় তবে দয়া করে কেউ আমাকে সংশোধন করুন।

অবশেষে, এনআরএফ 24 এল01 ডেটাশিটটি নিম্নলিখিত বিষয়টিকে নিশ্চিত করে যে ঠিকানার পছন্দটি সম্পূর্ণ স্বেচ্ছাসেবী নয়:

দ্রষ্টব্য: স্তরগুলি কেবলমাত্র একবারে স্থানান্তরিত করে এমন ঠিকানা (যা, 000FFFFFFF) প্রায়শই শব্দে সনাক্ত করা যায় এবং একটি মিথ্যা সনাক্তকরণ দিতে পারে, যা প্যাকেট ত্রুটির হার বাড়িয়ে দিতে পারে। প্রচারের ধারাবাহিকতা হিসাবে ঠিকানাগুলি (হাই-লো টগলিং) এছাড়াও প্যাকেট ত্রুটি হার বাড়ায়।


আপনি দয়া করে আরও উল্লেখ করতে পারেন, যে পাইপগুলি কেবল "6 ডেটা মাল্টি-রিসিভার" বৈশিষ্ট্য (গুলি নরডিক ডেটাশিট পি 39-40) to ডিফল্টরূপে কেবল ডেটা পাইপ 0 এবং 1 সক্ষম হয়।

@ বিবার্স - এটি কি প্রাসঙ্গিক? ওপি জিজ্ঞাসা করছিল যে পাইপের মানগুলি কীভাবে চয়ন করা হয় যেমন where the author is getting 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL?পাইপগুলি কীভাবে ব্যবহৃত হয় তা নয়।
ফিলিএনজে

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

আমার পরীক্ষা থেকে, মানগুলি যতক্ষণ না ট্রান্সমিটার এবং রিসিভারে আপনার পাইপ 0 এবং 1 একই থাকে
ফিলিএনজে

আমি দেখি. নিজের জন্য আমি মাল্টি-রিসিভার বৈশিষ্ট্যটি পরীক্ষা করে দেখিনি। আমি প্রতিটি চিপ প্রেরণ এবং গ্রহণের জন্য ব্যবহার করি।

2

মানগুলি 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LLস্বেচ্ছাচারিত মান হয় এবং প্রেরক এবং প্রেরণের ঠিকানাগুলিকে সংজ্ঞা দেয়।

আপনি যদি মিরফ লাইব্রেরি ব্যবহার করেন

Mirf.setRADDR((byte *)"serv1");

তারা মত স্ট্রিং হতে পারে serv1

RF24 ব্যবহারসমূহ

write_register(RX_ADDR_P0, &value, 5);
write_register(TX_ADDR, &value, 5);

1

এমন কিছু আছে যা প্রত্যেকে আপনাকে বলতে ভুলে যায়:

রিসিভারে পাইপগুলি প্রথমটির পরে ছোট করা উচিত

const uint64_t pipe01 = 0xE8E8F0F0A1LL;
const uint64_t pipe02 = 0xA2LL;  
const uint64_t pipe03 = 0xA3LL;
const uint64_t pipe04 = 0xA4LL;
const uint64_t pipe05 = 0xA5LL;
const uint64_t pipe06 = 0xA6LL;

radio.openReadingPipe(1, pipe01);  
radio.openReadingPipe(2, pipe02);
radio.openReadingPipe(3, pipe03);
radio.openReadingPipe(4, pipe04);
radio.openReadingPipe(5, pipe05);

ট্রান্সমিটারে পাইপগুলি হওয়া উচিত

const uint64_t pipe01 = 0xE8E8F0F0A1LL;
const uint64_t pipe02 = 0xE8E8F0F0A2LL;  
const uint64_t pipe03 = 0xE8E8F0F0A3LL;
const uint64_t pipe04 = 0xE8E8F0F0A4LL;
const uint64_t pipe05 = 0xE8E8F0F0A5LL;
const uint64_t pipe06 = 0xE8E8F0F0A6LL;

uint64_t setPipeToSend = pipe01; // or pipe02 or pipe03 or pipe04 or pipe05
radio.openWritingPipe(setPipeToSend );

কোন পাইপের বার্তা এসেছে তা যদি আপনি জানতে চান তবে ব্যবহার করুন

  uint8_t someVariable;
    if (radio.available(&someVariable))
    {
       Serial.print("pipe number ");
       Serial.printLn(someVariable);
    }

এছাড়াও পাইপ নম্বর receiving স্বীকৃতি বার্তা গ্রহণের জন্য ব্যবহৃত হয় ।

তদতিরিক্ত, প্রারম্ভিককরণ কোডটিতে অবশ্যই radio.enableDynamicPayloads(); এটি অবশ্যই আমার পক্ষে ভাল কাজ করে:

    radio.begin();
    //radio.setChannel(0x57); //if set should be the same at the both sides
    radio.setPALevel(RF24_PA_LOW);  // "LOW" is more stable mode
    radio.enableAckPayload(); //for autoanswers
    radio.openWritingPipe(pipe01); //for sending
    //link pipe numbers to the pipe addresses
    //radio.openReadingPipe(1, pipe01); // I use pipe01 for sending
    radio.openReadingPipe(2, pipe02);
    radio.openReadingPipe(3, pipe03);
    radio.openReadingPipe(4, pipe04);
    radio.openReadingPipe(5, pipe05);
    radio.enableDynamicPayloads(); //must have for multi pipe receiving
    radio.startListening();  //start listening

শুভকামনা ...


pipeআপনার উদাহরণ হিসাবে সংজ্ঞায়িত কি ?
x29a

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