১০. 8051 এর ক্ষেত্রে সিরিয়াল কমিউনিকেশন পেরিফেরাল
কমিউনিকেশন এম্বেডেড সিস্টেমের অতি গুরুত্বপূর্ণ একটি বিষয়। এটি ছাড়া এম্বেডেড সিস্টেমের কথা কল্পনাও করা যায়না। এম্বেডেড সিস্টেমে ব্যবহৃত কমিউনিকেশনকে মুলত দুই ভাগে ভাগ করা যায়। প্যারালাল কমিউনিকেশন এবং সিরিয়াল কমিউনিকেশন। এই দুটি কমিউনিকেশনেরই নিজস্ব কিছু সুবিধা এবং অসুবিধা আছে। এখন প্রশ্ন হল এই কমিউনিকেশনের মাধ্যমে কি ধরনের ডেটা আদান-প্রদান হয় এবং কিভাবেই বা হয়? যেহেতু এম্বেডেড সিস্টেম পুরোটাই ডিজিটাল সিস্টেম তাই ডিজিটাল সিগন্যাল আদান-প্রদানের মাধ্যমেই এটা কমিউনিকেট করে। আর ডিজিটাল সিগন্যাল মানেই হল 0 এবং 1. অর্থাৎ মাইক্রোকন্ট্রোলার বা মাইক্রোপ্রসেসর এই 0 আর 1 এর বিভিন্ন প্যাটার্ন পাঠানোর মাধ্যমেই নিজেদের মধ্যে কমিউনিকেট করে থাকে।
ধরা যাক, একটি মাইক্রোকন্ট্রোলার থেকে 'A' অক্ষরটি আরেকটি মাইক্রোকন্ট্রোলারে পাঠানো হবে। মাইক্রোকন্ট্রোলার তো আসলে 'A' অক্ষরটি চিনে না বা জানেও না। সে সব সংখ্যা বা অক্ষরেরই ASCII মান বুঝে। 'A' মানে তার কাছে হল 01000001 এরকম একটি 0 আর 1 এর প্যাটার্ন। এখন এই প্যাটার্নটি সে সিরিয়াল আকারেও পাঠাতে পারে আবার প্যারালাল আকারেও পাঠাতে পারে। নিচের চিত্রটি দেখলেই বিষয়টি ক্লিয়ার হয়ে যাবে।
প্যারালাল কমিউনিকেশনঃ
সিরিয়াল কমিউনিকেশনঃ
উপরের চিত্র দুটি লক্ষ্য করলেই আমরা সিরিয়াল এবং প্যারালাল কমিউনিকেশনের নামের যথার্থতা বুঝতে পারি। এবং সুবিধা-অসুবিধাও বুঝতে পারি। প্যারালাল কমিউনিকেশনের ক্ষেত্রে আমরা দুটি মাইক্রোকন্ট্রোলারের মাঝে ৮ টি প্যারালাল লাইন দেখতে পাচ্ছি। এই ৮ টি প্যারালাল লাইন হল ৮টি পাশপাশি অবস্হিত কানেক্টিং ওয়্যার বা ক্যাবল। এই ৮ টি তার দিয়ে ৮টি বিট কিন্তু সাইমাল্ট্যানিয়াসলি যাতায়াত করতে পারে। মানে এক নিমিষেই ৮টি বিট মাইক্রোকন্ট্রোলার A থেকে মাইক্রোকন্ট্রোলার B তে পাড় হয়ে যাবে। কিন্তু সিরিয়াল কমিউনিকেশনের ক্ষেত্রে কিন্তু এই বিট প্যাটার্নটি এক বিট-এক বিট করে পাড় হবে যেহেতু একটাই কানেক্টিং ওয়্যার বরাদ্দ এক্ষেত্রে।
তাহলে এথেকে আমরা এতটুকু বুঝতে পারছি যে প্যারালাল কমিউনিকেশনের ক্ষেত্রে কানেক্টিং ওয়্যার বা ক্যাবল লাগে বেশি কিন্তু সিরিয়াল কমিউনিকেশনের ক্ষেত্রে কম (প্র্যাক্টিকালি ২টি বা ৩টি তার লাগে)। প্যারালাল কমিউনিকেশনে ডেটা নিমিষেই আদান-প্রদান করা যায়। কিন্তু সিরিয়ালি তা এক বিট-এক বিট করে আদান-প্রদান করা হয়। এক্ষেত্রে সিরিয়াল কমিউনিকেশনে টাইম প্যারালাল কমিউনিকেশন অপেক্ষা বেশি লাগে। উপরের উদাহরনের কথা চিন্তা করলে দেখা যায় যে 'A' ক্যারাক্টারটির ৮টি বিট প্যারালালে পাড় হতে যদি ১ মাইক্রোসেকেন্ড সময় নেয় (একসাথে পাড় হয়) তাহলে সিরিয়ালি পাড় হতে ৮ মাইক্রোসেকেন্ড সময় নিবে (এক এক করে পাড় হয়)।
মাইক্রোকন্ট্রোলারের ভিতরের ডেটা-বাস ৮ বিটের জন্যে, এটি এত দ্রুত গতিতে কাজ করতে পারে। কেননা মাইক্রোকন্ট্রোলারের ভিতরের ডেটা আদান-প্রদান সব প্যারালাল-ই হয়ে থাকে। আর ব্যাহিক কোন ডিভাইসের যেমন অপর কোন মাইক্রোকন্ট্রোলার বা সেন্সরের সাথে কমিউনিকেট করার জন্যে মাইক্রোকন্ট্রোলার মূলত সিরিয়াল কমিউনিকেশন ব্যবহার করে থাকে। এই সিরিয়াল কমিউনিকেশনের মধ্যে আবার বিভিন্ন ধরনের প্রোটোকল আছে, যেমন- UART Protocol, I2C/TWI Protocol, SPI Protocol, CAN Protocol ইত্যাদি। 8051 অনেক আগের মাইক্রোকন্ট্রোলার হওয়ায় এতে শুধুই হার্ডওয়্যার UART সিরিয়াল কমিউনিকেশন প্রোটোকলই আছে। বাকি গুলো ব্যবহার করতে হলে আমাদের সফটওয়্যারের মাধ্যমে অর্থাৎ প্রোগ্রামিং এর মাধ্যমে ইমপ্লিমেন্ট করে নিতে হবে।
8051 এর ক্ষেত্রে সিরিয়াল কমিউনিকেশনঃ
8051 মাইক্রোকন্ট্রোলারের সিরিয়াল পোর্ট হল ফুল-ডুপ্লেক্স। অর্থাৎ এই মাইক্রোকন্ট্রোলার একই সাথে ডেটা ট্রান্সমিট এবং রিসিভ করতে পারে। এই যে একই সাথে ডেটা ট্রান্সমিট এবং রিসিভ করার ক্ষমতা, এটাকেই বলা হয় ফুল-ডুপ্লেক্স সিরিয়াল কমিউনিকেশন। আর যদি ডেটা ট্রান্সমিট এবং রিসিভ আলাদা আলাদা ভাবে করে তাহলে বলা হয় হাফ-ডুপ্লেক্স। 8051 মাইক্রোকন্ট্রোলারের সিরিয়াল কমিউনিকেশন পেরিফেরাল্সে এই দুই ধরনর ফিচারই আছে। অর্থাৎ হাফ-ডুপ্লেক্স এবং ফুল-ডুপ্লেক্স উভয় মোডেই কাজ করানো যায়। এ বিষয়ে আমরা পরবর্তীতে আরও শিখতে পারবো।
সিরিয়াল কমিউনিকেশনের আরও দুটি ভাগ হল সিঙ্ক্রোনাস (Synchronous) সিরিয়াল কমিউনিকেশন এবং অ্যাসিঙ্ক্রোনাস (Asynchronous) সিরিয়াল কমিউনিকেশন। Synchronous সিরিয়াল কমিউনিকেশনে ডেটা ট্রান্সমিট এবং রিসিভ একটি নির্দিষ্ট ক্লক পালসে্ হয় এবং এর জন্যে ডেটা ট্রান্সমিট কানেক্টিং ওয়্যার, রিসিভ কানেক্টিং ওয়্যারের সাথে আরও একটি কানেক্টিং ওয়্যার এক্সট্রা লাগে যেটা এই ক্লক পালস্ সাপ্লাই দেয়। আর Asynchronous সিরিয়াল কমিউনিকেশনে ডেটা ট্রান্সমিট এবং রিসিভ কোন ক্লক পালস্ অনুযায়ী নয় বরং একটি নির্দিষ্ট স্পিডে এবং সিকুয়েন্স অনুযায়ী হয় এবং এরজন্যে দুটি কানেক্টিং ওয়্যারই যথেষ্ট। যে দুটি ডিভাইসের মধ্যে কমিউনিকেশন হয় সেই দুটি ডিভাইসের জন্যেই স্পিড একই হতে হয়। ডেটা ট্রান্সফার এবং রিসিভের এই স্পিড রেটকে বলা হয় বডরেট (অনেক সময় bps - bits per second)। এই বডরেট কিন্তু উভয় ডিভাইসের জন্যেই একই হতে হয়। এবং এই বডরেটের নির্দিষ্ট কিছু মান আছে যেমন - 1200 bps, 2400 bps, 4800 bps, 9600 bps, 19200 bps, 38400 bps, 57600 bps, 115200 bps ইত্যাদি। 8051 মাইক্রোকন্ট্রোলারের ক্ষেত্রে স্ট্যান্ডার্ড হিসেবে আমরা 9600bps এবং 19200bps দিয়েই কাজ করব। আচ্ছা এখন কথা হল এই 9600bps এর অর্থ কি? এর অর্থ হল সেকেন্ডে 9600 বিট ডেটা আদান-প্রদান করার ক্ষমতা। আর কেন আমরা স্ট্যান্ডার্ড হিসেবে 9600 bps নিলাম এটার উত্তর আরেকটু পরে জানতে পারবো। যেহেতু 8051 মাইক্রোকন্ট্রোলারের সিরিয়াল কমিউনিকেশন ফুল-ডুপ্লেক্স, সেহেতু ডেটা বাইরের জগতে ট্রান্সমিট করতে এবং বাইরের জগত থেকে রিসিভ করতে অবশ্যই দুটি আলাদা আলাদা পিন থাকার কথা। 8051 এর ১০নম্বর পিনটি হল রিসিভার পিন (RXD) এবং ১১ নম্বর পিনটি হল ট্রান্সমিটার পিন (TXD). RXD দিয়ে পিন দিয়ে ডেটা মাইক্রোকন্ট্রোলারে প্রবেশ করে এবং TXD পিন দিয়ে ডেটা মাইক্রোকন্ট্রোলার থেকে বের হয়। এই ডেটা আসলে 1 আর 0 এর কম্বিনেশন ছাড়া আর কিছুই না।এই গেলো আমাদের 8051 মাইক্রোকন্ট্রোলারের সিরিয়াল কমিউনিকেশন রিলেটেড বেসিক ধারনা। এখন আমাদের এর ভিতরের আর্কিটেকচার এবং এর সাথে রিলেটেড রেজিস্টার এবং বিট সম্পর্কে জানা উচিৎ। তবে এখানে একটি কথা বলে রাখা উচিৎ যে 8051 মাইক্রোকন্ট্রোলার বা যেকোন মাইক্রোকন্ট্রোলারের ক্ষেত্রেই সিরিয়াল কমিউনিকেশন বলতে UART প্রোটোকলকেই বোঝানো হয়। UART এর ফুল ফর্ম হল Universal Asynchronous Receiver Transmitter. কানেক্টিং ওয়্যার মাত্র দুটি লাগে জন্যেই এই প্রোটোকল প্রিফারেবল।
সিরিয়াল কমিউনিকেশনের সাথে রিলেটেড রেজিস্টারগুলো হল-
- SCON Register (Serial Control Register).
- SBUF Register (Serial Buffer Register).
তবে বডরেট জেনারেট করতে অবশ্য আরও দুটি রেজিস্টার দরকার হয়, যথা TMOD এবং TCON রেজিস্টার। এগুলো টাইমার রিলেটেড রেজিস্টার বিধায় এখানে আর আলোচনা করা হল না। টাইমার পেরিফেরাল পোস্টটি পড়লেই সব ক্লিয়ার হয়ে যাবে বলে আশা করি।
SBUF Register :
প্রথমেই আমরা এই রেজিস্টারটি নিয়ে আলোচনা করব। এর বিট নিয়ে আলোচনার দরকার নেই। কেনান এই রেজিস্টারটি 8051 মাইক্রোকন্ট্রোলার মূলত ইউজ করে ডেটা জমা রাখতে। যে ডেটা আমরা মাইক্রোকন্ট্রোলার থেকে বাইরের জগতে ট্রান্সমিট করতে চাই সেটাকে আগে এই রেজিস্টারে নিয়ে আসা হয়। এক্ষেত্রে রেজিস্টারটি write-only রেজিস্টার হিসেবে কাজ করে। আবার বাইরের জগত থেকে যে ডেটা আমাদের মাইক্রোকন্ট্রোলার রিসিভ করে সেটাও আগে এই রেজিস্টারে জমা করে এবং তারপর সেই ডেটা প্রসেস করে। এক্ষেত্রে এই রেজিস্টারটি read-only রেজিস্টার হিসেবে কাজ করে। ডেটা ট্রান্সমিট এবং রিসিভের জন্যে ফিজিকাল-ই ভিন্ন ভিন্ন দুটি SBUF রেজিস্টার ইউজ হলেও এদের মেমোরি লোকেশন কিন্তু একই (99H).
SCON Register :
এই রেজিস্টারের প্রত্যেক বিট সম্পর্কেই আমাদের ভালো ধারনা থাকা দরকার। নিচের চিত্রটি একটু ভালোভাবে লক্ষ্য করি।
SM0 & SM1 bits: 8051 মাইক্রোকন্ট্রোলারের সিরিয়াল কমিউনিকেশন চারটি পৃথক পৃথক মোডে কাজ করতে পারে। আর এই চারটি পৃথক পৃথক মোডের মধ্যে কোন মোডে কাজ করানো হবে তা নির্ধারন করে দেয় এই দুটি বিটের কম্বিনেশন। নিচের টেবিলটি দেখলে এই চারটি মোড সম্পর্কে ধারনা পাওয়া যাবে।
মোড-০ অনেকটা শিফ্ট রেজিস্টারের মত কাজ করে এবং এক্ষেত্রে বডরেট ফিক্সড। এই মোডটি কিন্তু হাফ-ডুপ্লেক্স মোড। অর্থাৎ এই মোডে ডেটা ট্রান্সমিট এবং রিসিভ কখনোই সাইম্যাল্টিনিয়াসলি হতে পারেনা। পরে এই মোড সম্পর্কে আলোচনা করা হবে।
মোড-১ হল সেই প্রচলিত UART মোড। এবং এটিই সবচেয়ে বেশি ব্যবহৃত হয়ে থাকে। এই মোডের বডরেট কিন্তু টাইমার-১ দ্বারা কন্ট্রোল করা যায়। 8051 মাইক্রোকন্ট্রোলারে সিরিয়াল কমিউনিকেশন বলতে মূলত এই মোডকেই বুঝানো হয়ে থাকে। এতে .৮ বিট আদান-প্রদান হয়।
মোড-২ এবং মোড-৩ এর কার্যক্রম একই টাইপের এবং এই দুটি মোডকে মাল্টিপ্রসেসর কমিউনিকেশন মোড বলে। এই মোড দুটিতে একটি মাইক্রোকন্ট্রোলার (মাস্টার) একাধিক মাইক্রোকন্ট্রোলারের (স্লেভ) সাথে কমিউনিকেট করতে পারে। তবে মেইন পার্থক্য হল মোড-২ এর বডরেট ফিক্সড কিন্তু মোড-৩ এর বডরেট ভ্যারিয়েবাল। এতে ৯ বিট আদান-প্রদান হয়।
SM2 bit: এই বিটটি আসলে খুবই ঝামেলার। এই বিট নিয়ে কথা বলতে গেলে মোটামোটি ভাবে এর সমান আরও একটি পোস্ট লিখতে হবে। আমরা এটা নিয়ে বিস্তারিত অন্য একটি পোস্টে জানবো। শুধু এটুকু জেনে রাখি যে এই বিটটি সেট করা হয় মাল্টিপ্রসেসর কমিউনিকেশন (মোড-২ এবং মোড-৩) এনাবেল করার জন্যে।
REN bit: এই বিটটি হাই করা হলে মাইক্রোকন্ট্রোলারের রিসিভ মোড এনাবেল হয়। আর ক্লিয়ার করা থাকলে মাইক্রোকন্ট্রোলার কোন বিট রিসিভ করে না।
TB8 bit: মোড-২ এবং মোড-৩ এ যে ৯ বিট আদান-প্রদান হয় তার শেষের বিটটি অর্থাৎ ৯নম্বর বিটটি এই বিট থেকে ট্রান্সমিট করা হয়।
RB8 bit: মোড-২ এবং মোড-৩ এ যে ৯ বিট আদান-প্রদান হয় তার শেষের বিটটি অর্থাৎ ৯নম্বর বিটটি এই বিটে রিসিভ করা হয়।
TI bit: এটা হল Transmit Interrupt Flag. এই বিটটি শুধু তখনই হাই হবে যখন TXD পিন দিয়ে পুরো ১ বাইট ডেটা মাইক্রোকন্ট্রোলার থেকে বের হবে। এই বিটটি সাধারণত ডেটা ঠিকমত ট্রান্সমিট হল কিনা তা যাচাই করার কাজে ব্যবহৃত হয়।
RI bit: এটা হল Receive Interrupt Flag. এই বিটটি শুধু তখনই হাই হবে যখন RXD পিন দিয়ে পুরো ১ বাইট ডেটা মাইক্রোকন্ট্রোলারে প্রবেশ করবে। এই বিটটি সাধারণত ডেটা ঠিকমত রিসিভ হল কিনা তা যাচাই করার কাজে ব্যবহৃত হয়।
ডেটা আদান-প্রদান এর প্রক্রিয়াঃ
8051 মাইক্রোকন্ট্রোলারে, সিরিয়াল পোর্টের মেইন কাজই হল প্যারালাল ডেটাকে সিরিয়াল ডেটায় কনভার্ট করে ট্রান্সমিট করা এবং সিরিয়াল ডেটাকে রিসিভ করে প্যারালাল ডেটায় কনভার্ট করা। বিষয়টা সবার কাছেই একটু অস্পষ্ট থেকে গেলো জানি। নিচের চিত্রটি ভালো মত খেয়াল করা যাক।
8051 মাইক্রোকন্ট্রোলারের সিরিয়াল পোর্টের আর্কিটেকচার অনেকটা উপরের চিত্রটির মতই। ট্রান্সমিটারের জন্যে যে write-only SBUF রেজিস্টার রয়েছে সেটা অনেকটা PISO (Parallel In Serial Out) টাইপের শিফ্ট রেজিস্টারের মত কাজ করে। কেননা ডেটা-বাস থেকে ৮ বিটের ডেটা ডিরেক্ট এই রেজিস্টারে প্রবেশ করে, কিন্তু এই রেজিস্টার থেকে তা বিট প্যাটার্ন আকারে TXD পিনের মাধ্যমে বের হয়। তাহলে write-only SBUF রেজিস্টার প্যারালাল ডেটা কে সিরিয়াল ডেটায় কনভার্ট করে। ঠিক উল্টো প্রসেসটা হয় রিসিভের ক্ষেত্রে। RXD পিন দিয়ে ডেটা সিরিয়ালি প্রবেশ করে আগে শিফ্ট রেজিস্টারে। ৮বিট ডেটা একে একে জমা হয় শিফ্ট রেজিস্টারে এবং তারপর শিফ্ট রেজিস্টার থেকে তা প্যারালাল ভাবে read-only SBUF রেজিস্টারে চলে আসে। অর্থাৎ এক্ষেত্রে শিফ্ট রেজিস্টারটি SIPO (Serial In Parallel Out) শিফ্ট রেজিস্টার হিসেবে কাজ করে। SBUF থেকে ডেটা ডেটা-বাসে আসে এবং সিপিউ এর দরকার হলে তা প্রসেস করে। এভাবেই 8051 মাইক্রোকন্ট্রোলার সিরিয়াল কমিউনিকেশনের মাধ্যমে ডেটা আদান-প্রদান করে।
ডেটা ট্রান্সমিশনঃ
যখনই SBUF (write-only) রেজিস্টারে ডেটা রাইট করা হবে তখনই ডেটা TXD পিন দিয়ে ট্রান্সমিট হওয়া শুরু করবে। সম্পূর্ণ ডেটা বাইট যখন ট্রান্সমিট হয়ে যাবে তখন SCON রেজিস্টারে TI বিট হাই হয়ে যাবে। এটার দ্বারাই বোঝা যায় যে SBUF রেজিস্টার ফাকা হয়ে গিয়েছে এবং নতুন কোন ডেটা এখানে আবার রাইট করা যাবে।
ডেটা রিসিপশনঃ
ডেটা রিসিভ তখনই এনাবেল হবে যখন SCON রেজিস্টারের REN বিট সেট করে দেয়া হবে। সম্পূর্ণ ডেটা বাইট রিসিভ হলে SCON রেজিস্টারের RI বিট সেট হয়ে যাবে। এর দারাই বোঝা যায় যে ডেটা রিসিভ সম্পূর্ণ হয়েছে। এই ডেটা SBUF (read-only) রেজিস্টারে জমা হয় যেখান থেকে তা রিড করা হয়।
কমিউনিকেশনের যে চারটি মোড রয়েছে তা নিয়ে পরবর্তী পোস্টে আলোচনা করা হবে। সেই সাথে UART প্রোটোকলের ডেটা ফ্রেম এবং প্রত্যেক মোডের বড রেট ক্যাল্কুলেশন নিয়েও আলোচনা করা হবে।
মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন