এখানে বেশ কয়েকটি কারণ রয়েছে:
- এটিমেগা 328 পি এমসিইউ কতটা উচ্চ স্তরের অর্জন করতে পারে?
- ইউএসবি-সিরিয়াল ইন্টারফেসটি কতটা উচ্চ স্তরে অর্জন করতে পারে?
- এটিমেগ 328 পি-তে দোলকের ফ্রিকোয়েন্সি কত?
- ইউএসবি-সিরিয়াল ইন্টারফেসে দোলকের ফ্রিকোয়েন্সিটি কী (যদি এটি থাকে)?
- বাউড-রেট মিলের ইউএসবি-সিরিয়াল ইন্টারফেসটি কতটা সহনশীল?
এই সমস্ত কারণ সর্বাধিক অর্জনযোগ্য বাউড হার নির্ধারণের জন্য প্রাসঙ্গিক। এটিএমগা 328 পি সিরিয়াল ইন্টারফেসের জন্য বেস-ক্লকটি তৈরি করতে এটির ক্লক-রেট থেকে একটি হার্ডওয়্যার বিভাজক ব্যবহার করে। পছন্দসই বাড রেটের বিট-টাইম পর্যন্ত যদি প্রধান ঘড়ি থেকে কোনও পূর্ণসংখ্যার অনুপাত না থাকে, এমসিইউ সঠিকভাবে পছন্দসই হার উত্পাদন করতে সক্ষম হবে না । এটি সম্ভাব্য সমস্যাগুলির দিকে নিয়ে যেতে পারে, কারণ কিছু ডিভাইস অন্যদের পরে বাউড-হারের মিলের চেয়ে বেশি সংবেদনশীল are
এফটিডিআই-ভিত্তিক ইন্টারফেসগুলি কয়েক শতাংশ ত্রুটি পর্যন্ত বাউড-রেট মিলের পক্ষে বেশ সহনশীল। তবে, আমি বিশেষায়িত এম্বেড থাকা জিপিএস মডিউলগুলি নিয়ে কাজ করেছি যা 0.5% বাড রেট ত্রুটি এমনকি পরিচালনা করতে অক্ষম ছিল।
সাধারণ সিরিয়াল ইন্টারফেসগুলি ~ 5% বাউড-রেটের ত্রুটি সহনীয়। তবে, যেহেতু প্রতিটি প্রান্তটি বন্ধ হতে পারে, তাই আরও একটি সাধারণ বৈশিষ্ট্যটি + -2.5%। এইভাবে, যদি এক প্রান্তটি 2.5% দ্রুত হয় এবং অন্যটি 2.5% ধীর গতিতে থাকে তবে আপনার সামগ্রিক ত্রুটি এখনও কেবল 5%।
যাইহোক। ইউনো একটি এমটিইউ প্রাথমিক এমসিইউ হিসাবে একটি এটিমেগ 328 পি এবং ইউএসবি-সিরিয়াল ইন্টারফেস হিসাবে একটি এটিমেগ 16 ইউ 2 ব্যবহার করে। আমরা এখানেও ভাগ্যবান যে এই দু'টি এমসিইউই একই রকম হার্ওয়ার ইউএসআর্ট এবং সেইসাথে 16 মেগাহার্জ ঘড়ি ব্যবহার করে।
যেহেতু উভয় এমসইউরই একই হারওয়ার এবং ক্লক-রেট রয়েছে, তাই উভয়ের একই ধরণের একই বাউড-রেট ত্রুটি থাকবে, তাই আমরা বাউড ত্রুটি সম্পর্কিত সমস্যাটিকে কার্যত উপেক্ষা করতে পারি।
যাইহোক, এই প্রশ্নের "যথাযথ" জবাবটি এটিএমগা 16 ইউ 2 এর উত্স খনন করা এবং সেখান থেকে সম্ভাব্য বৌড-রেটগুলি তৈরি করা জড়িত, তবে যেহেতু আমি অলস, তাই আমি অনুধাবন করি, অভিজ্ঞতা অভিজ্ঞতা কার্যকর হবে।
এটিমেগা 328 পি ডেটাশিটে তাত্ক্ষণিকভাবে এক নজরে নিম্নলিখিত সারণী তৈরি করা হয়েছে:
সুতরাং 2 এমবিপিএসের সর্বাধিক বর্ণিত বাড-রেট দেওয়া, আমি একটি দ্রুত পরীক্ষার প্রোগ্রাম লিখেছি:
void setup(){};
void loop()
{
delay(1000);
Serial.begin(57600);
Serial.println("\r\rBaud-rate = 57600");
delay(1000);
Serial.begin(76800);
Serial.println("\r\rBaud-rate = 76800");
delay(1000);
Serial.begin(115200);
Serial.println("\r\rBaud-rate = 115200");
delay(1000);
Serial.begin(230400);
Serial.println("\r\rBaud-rate = 230400");
delay(1000);
Serial.begin(250000);
Serial.println("\r\rBaud-rate = 250000");
delay(1000);
Serial.begin(500000);
Serial.println("\r\rBaud-rate = 500000");
delay(1000);
Serial.begin(1000000);
Serial.println("\r\rBaud-rate = 1000000");
delay(1000);
Serial.begin(2000000);
Serial.println("\r\rBaud-rate = 2000000");
};
এবং তারপরে সিরিয়াল টার্মিনাল সহ প্রাসঙ্গিক সিরিয়াল বন্দরটির দিকে তাকাতে:
সুতরাং এটি প্রদর্শিত হচ্ছে যে হার্ডওয়্যারটি সমস্যা ছাড়াই 2,000,000 বাডে চালাতে পারে।
নোট করুন যে এই বাড রেটটি কেবলমাত্র বাইট প্রতি এমসইউ 64 80০ ক্লক-সাইকেল দেয় , তাই সিরিয়াল ইন্টারফেসকে ব্যস্ত রাখা খুব চ্যালেঞ্জ হবে। পৃথক বাইটগুলি খুব দ্রুত স্থানান্তরিত হতে পারে, তবে ইন্টারফেসটি কেবল অলস থাকলে খুব বেশি সময় আসার সম্ভাবনা থাকে।
সম্পাদনা: আসল পরীক্ষা!
2 এমবিপিএস আসল:
প্রতিটি বিট-টাইম 500 এনএস হয়, যা প্রত্যাশার সাথে ঠিক মেলে।
পারফরম্যান্স ইস্যু! সামগ্রিক প্যাকেটের দৈর্ঘ্য:
500 কাবাউড:
1 এমবাউড:
2 এমবাউড: দ্রষ্টব্য: লক্ষণীয় ওভারশুটটি খারাপ স্কোপ তদন্তের ভিত্তি ভিত্তিক
অনুশীলনের কারণে এবং সম্ভবত এটি বাস্তব নয়। আমি গ্রাউন্ড-ক্লিপ-সীসা ব্যবহার করছি যা আমার স্কোপ তদন্তের অংশ, এবং সীসা-অন্তর্ভুক্তি সম্ভবত ওভারশটের বেশিরভাগের কারণ।
আপনি দেখতে পাচ্ছেন, সামগ্রিক সংক্রমণ দৈর্ঘ্য 0.5, 1 এবং 2 এমবাউডের জন্য একই same এটি কারণ যে কোডটি সিরিয়াল বাফারে বাইটগুলি রাখছে তা অসম্পূর্ণভাবে অনুকূলিত হয়েছে। যেমন আপনি নিজের ক্রিয়াকলাপের লাইব্রেরিগুলি না লিখে আপনি কোনও কার্যকর 500 কেবাউডের চেয়ে ভাল আর কখনই অর্জন করতে পারবেন না। যাও Arduino লাইব্রেরি খুব দুর্বল, অপ্টিমাইজ করা হয়, তাই এটি সম্ভবত হবে না খুব কঠিন একটি সঠিক 2 Mbaud পেতে, অন্তত ফেটে সম্প্রচার, যদি আপনি এটি সময় একটি বিট অতিবাহিত।