(দশম অধ্যায়)Understand 8051 Serial communication

দশম অধ্যায়


10.1 Define serial and parallel communication


সিরিয়াল এবং প্যারালাল ডাটা কমিউনিকেশন

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

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

যেমন আমরা যদি কোন ডাটা সেট ১০১১১০ কে একস্থান থেকে অন্যস্থানে প্রেরন করতে চাই তবে, সিরিয়াল ডাটা ট্রান্সফার মোডে প্রথমে ১ যাবে এরপর যাবে ০, এরপর যাবে ১ এবং এভাবে যেতে থাকবে। এভাবে একটি তার ব্যবহার করেই সব ডাটা প্রেরন করা সম্ভব।

অন্যদিকে প্যারালাল ডাটা কমিউনিকেশন জন্য একতারের বদলে অনেক গুলো তার ব্যবহার করা হয়। অনেকগুলো তারের সাহায্য ১০১১১০ কে একসাথে প্রেরন করা সম্ভব।

প্যারালাল ডাটা কমিউনিকেশন অবশ্যই সিরিয়াল ডাটা থেকে দ্রুত কাজ করে। কারন সিরিয়াল ডাটা সিষ্টেমে এক এক বিট একবারে যায় এবং প্যারালাল ডাটা সিষ্টেমে একসাথে সবগুলো বিট যায় [১০১১১০ তে, ১ হচ্ছে এক বিট, ০ হচ্ছে আরেক বিট, আবার ১ হচ্ছে তৃতীয় বিট ইত্যাদি]।মাইক্রোপ্রসেসর সিষ্টেমে প্যারালাল ডাটা ট্রান্সমিশন দেখা যায়।


10.2 Explain Specification the RS232 9-pin D type connector.

আরএস -2২3

আরএস -২3২ ইআইএ (ইলেক্ট্রনিক ইন্ডাস্ট্রি এসোসিয়েশন) দ্বারা তৈরি একটি সিরিয়াল শারীরিক ইন্টারফেস মান। আরএস ইংরেজি "সংক্ষিপ্ত প্রস্তাবিত" একটি সংক্ষেপে এবং 232 একটি সনাক্তকরণ নম্বর। আরএস -২3২ বৈদ্যুতিক এবং শারীরিক বৈশিষ্ট্যগুলির একটি স্পেসিফিকেশন যা শুধুমাত্র ডেটা ট্রান্সমিশন পাথে কাজ করে। এটি তথ্য প্রক্রিয়া করা হয় না থাকে না। ব্যাখ্যা করার প্রয়োজন, অনেক লোক প্রায়ই RS-232, RS-422, RS-485 ভুল করে যোগাযোগ প্রোটোকল হিসাবে ভুল করে, যা খুবই অনুপযুক্ত, আসলে তারা শুধুমাত্র ইউআরএটি যোগাযোগের জন্য একটি যান্ত্রিক এবং বৈদ্যুতিক ইন্টারফেস মানক (সর্বাধিক শারীরিক স্তর) নেটওয়ার্ক প্রোটোকল মধ্যে)।




মান 25-পিন ডিবি -25 সংযোজকটি নির্দিষ্ট করে যা সংযোজকের প্রতিটি পিনের সংকেত সামগ্রী নির্দিষ্ট করে এবং প্রতিটি সংকেতের স্তর নির্দিষ্ট করে। আইবিএম এর পিসিগুলি পরে আরএস -২3২ কে ডিবি-9 সংযোজনে পরিণত করে, এটি আজকের মানকে পরিণত করে। শিল্প নিয়ন্ত্রণ RS-232 পোর্ট সাধারণত RXD (2), TXD (3), GND ব্যবহার করে

10.3 Describe the pins and connections of line driver (Such as MAX232).


সিরিয়াল কমিউনিকেশনের মাধ্যমে মাইক্রোকন্ট্রোলার থেকে কম্পিউটারের সিরিয়াল পোর্টে এবং সিরিয়াল পোর্ট থেকে মাইক্রোকন্ট্রোলারে ডেটা পাঠানো যায়। বেশিরভাগ মাইক্রোকন্ট্রোলারের ইন বিল্ট ইউজার্ট থাকে যা সিরিয়াল কমিউনিকেশনের মাধ্যমে ডেটা গ্রহন ও প্রেরণ করতে পারে। ইউজার্ট একটি নির্দিষ্ট বড রেইটে (যেমন ৯৬০০ বিপিএস,১১৫২০০বিপিএস ইত্যাদি) একটি একটি করে বিট প্রেরণ করে।সিরিয়াল কমিউনিকেশনের এই পদ্ধতিকে টিটিএল(ট্রাঞ্জিস্টর,ট্রাঞ্জিস্টর লজিক) সিরিয়াল বলে। টিটিএল লেভেলের সিরিয়াল কমিউনিকেশন সবসময় ০ ভোল্ট থেকে VCC এর মধ্যে থাকে। VCC সাধারনত ৫ ভোল্ট অথবা ৩.৩ ভোল্ট হয়। VCC দিয়ে লজিক লেভেল হাই এবং ০ ভোল্ট দিয়ে লজিক লেভেল লো বুঝায়। আপনার কম্পিউটারের সিরিয়াল পোর্ট RS-232 টেলিকমিউনিকেশন স্ট্যান্ডার্ড অনুসরন করে। মাইক্রোকন্ট্রোলারের সিরিয়াল সিগন্যালের মতো RS-232 সিগন্যালও একটি নির্দিষ্ট বড রেইটে এক এক বিট করে ট্রান্সফার হয়। প্যারিটি এবং স্টার্ট/স্টপ বিট থাকতেও পারে আবার না-ও থাকতে পারে। দুইটির পার্থক্য সম্পূর্ন হার্ডওয়্যার লেভেলে। RS-232 স্ট্যান্ডার্ডে লজিক হাই বোঝায় -৩ থেকে -২৫ ভোল্ট পর্যন্ত কোনো নেগেটিভ ভোল্টেজ দ্বারা। লজিক লো বোঝায় +৩ থেকে +২৫ ভোল্ট পর্যন্ত যেকোনো ভোল্টেজ দ্বারা। বেশিরভাগ কম্পিউটারে -১৩ থেকে +১৩ ভোল্টের মধ্যে ভোল্টেজ ওঠানামা করে।


আমাদের Max232 module একটি MAX232 IC ব্যাবহার করে যা RS-232 ভোল্টেজকে টিটিএল ভোল্টেজে কনভার্ট করে। আধুনিক কম্পিউটারের সিরিয়াল পোর্ট নেই, বরঙ সেগুলতে রয়েছে ইউএসবি পোর্ট। অপরদিকে মাইক্রোকন্ট্রোলারের ইউএসবি পোর্ট নেই, সেগুলোর আছে সিরিয়াল পোর্ট। কাজেই আপনার কম্পিউটারের যদি সিরিয়াল পোর্ট না থাকে তাহলে কোনো RS-232 ডিভাইসের সাথে সেটিকে ইন্টারফেস করাতে আপনার একটি USB to RS-232 ক্যাবলের দরকার হবে।

10.4 Describe the function of each bit of 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 পিন দিয়ে পুরো ১ বাইট ডেটা মাইক্রোকন্ট্রোলারে প্রবেশ করবে। এই বিটটি সাধারণত ডেটা ঠিকমত রিসিভ হল কিনা তা যাচাই করার কাজে ব্যবহৃত হয়।

10.5 Explain the modes of serial communication of the 8051.


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. কানেক্টিং ওয়্যার মাত্র দুটি লাগে জন্যেই এই প্রোটোকল প্রিফারেবল।


10.7 Mention the purpose of SBUF register.


SBUF Register :
প্রথমেই আমরা এই রেজিস্টারটি নিয়ে আলোচনা করব। এর বিট নিয়ে আলোচনার দরকার নেই। কেনান এই রেজিস্টারটি 8051 মাইক্রোকন্ট্রোলার মূলত ইউজ করে ডেটা জমা রাখতে। যে ডেটা আমরা মাইক্রোকন্ট্রোলার থেকে বাইরের জগতে ট্রান্সমিট করতে চাই সেটাকে আগে এই রেজিস্টারে নিয়ে আসা হয়। এক্ষেত্রে রেজিস্টারটি write-only রেজিস্টার হিসেবে কাজ করে। আবার বাইরের জগত থেকে যে ডেটা আমাদের মাইক্রোকন্ট্রোলার রিসিভ করে সেটাও আগে এই রেজিস্টারে জমা করে এবং তারপর সেই ডেটা প্রসেস করে। এক্ষেত্রে এই রেজিস্টারটি read-only রেজিস্টার হিসেবে কাজ করে। ডেটা ট্রান্সমিট এবং রিসিভের জন্যে ফিজিকাল-ই ভিন্ন ভিন্ন দুটি SBUF রেজিস্টার ইউজ হলেও এদের মেমোরি লোকেশন কিন্তু একই (99H).

10.8 Write program to transmit and receive data through serial port


#include<reg52.h>         //header file for at89c52 or at89s52 microcontroller  
 
 sbit led = P2^0;          //declare P2.0 pin as led pin  
 
 void uart_init()  
 {  
      SCON = 0x50;                        //uart on mode 1 (16 bit mode) and receive enable bit set  
      TMOD = 0x20;                        //timer1 on auto reload mode  
      TH1 = 0xFD;                         //load 253 value in TH1  
      TR1 = 1;                            //start the Timer1  
 }  
 unsigned char serial_read()  
 {  
      while(!RI);                         //wait for RI bit in SCON register to be set, set means character is received  
      RI = 0;                             //make RI bit clear  
      return SBUF;                        //return the value of SBUF (read-only) register. here character is received  
 }  
 void serial_send(unsigned char ch)       //pass what character you want to send  
 {  
      SBUF = ch;                          //put the character to the SBUF (write-only) rejister  
      while(!TI);                         //wait for TI bit in SCON register to be set, set means character transmissiom is complete  
      TI = 0;                             //make TI bit clear  
 }  
 void send_string(const char *s)          //this function takes string as argument and use serial_send(ch) function  
 {  
      while(*s)  
           serial_send(*s++);  
 }  
 void main()  
 {  
      char a = '0';                              //declare a char type variable named a  
      led = 1;                                   //at first make the led turn off  
      uart_init();                               //uart setup is done very begining of the code  
      while(1)  
      {  
           a = serial_read();                    //read the serial buffer register with a variable  
           
           serial_send('\r');                    //send carriage retun to show something in new line  
           
           if(a == '1')                          //check the value of varible a to glow the led  
           {  
                led = 0;                         //make the led glow  
                send_string("LED is on\n\r");    //see the operation printed on computer screen  
           }  
           else if(a == '0')                     //check the value of variable a to turn off the led   
           {  
                led = 1;                         //turn off the led   
                send_string("LED is off\n\r");   //see the operation printed on computer screen  
           }  
      }  
 }  


No comments

Theme images by Dizzo. Powered by Blogger.