বাইনারি কোনও ইনপুট এবং একটি শূন্য মধ্যে বিভ্রান্তি এড়ানো?


10

ধরুন আমি এফএম এর মাধ্যমে ডেটা প্রেরণ করছি যেখানে 0 2Hz এবং 1 4Hz H কোনও ইনপুট না থাকলে ট্রান্সমিটার 2Hz স্থানান্তর করে। যদি আমি একটি মাইক্রোকন্ট্রোলারের একটি ইউআরটি বন্দরে প্রাপ্ত বাইনারিটি খাওয়াতাম তবে মাইক্রোকন্ট্রোলার কীভাবে কোনও ডেটা এবং 0 এর মধ্যে পার্থক্য করতে পারে?

উদাহরণস্বরূপ ASCII অক্ষর প্রেরণ করার সময় এটি প্রাসঙ্গিক হয়ে ওঠে। মনে করুন নিম্নলিখিত স্ট্রিং:

01000110 01101111 01101111 01100010 01100001 01110010

যেহেতু আমি স্পেস যুক্ত করেছি, আমরা এটি অনুবাদ করতে পারলাম:

FOOBAR

তবে কোনও মেশিনের কাছে স্ট্রিংটি দেখতে এই রকম হবে:

010001100110111101101111011000100110000101110010

আপনি কীভাবে সেই "স্পেস" তৈরি করবেন যাতে আপনি বাইনারি গ্রহণ করার সময় ASCII অক্ষরগুলি গণ্ডগোল না পান?


5
ইউআআআরটি কীভাবে এটি সমাধান করে তা এখানে লিঙ্ক । বিটগুলি থামান এবং শুরু করুন, যেহেতু চিড়িয়াখানা এটি কোনও ইউআর্ট বন্দরকে খাওয়ায় zou তাদেরও প্রেরণ করা উচিত।
বেনস কৌলিক্স

আমি ভীত আমি আপনার চিত্রটি বেশ বুঝতে পারি না। দেখা যাচ্ছে যে "স্টার্ট বিট" কেবল শূন্য, যা আমার সমস্যার পুনঃস্থাপন করে। উদাহরণস্বরূপ, স্ট্রিং 0 01111000 000 হলে এটি 01111000 এবং 00111100 এর মধ্যে পার্থক্যটি কীভাবে জানতে পারে?
অ্যালেন্ফ

2
@ অ্যালেন্ফ, আপনি যখন বাসটি প্রেরণ করবেন না তখন অলস থাকে এবং এটি যৌক্তিকভাবে উচ্চ অবস্থায় রাখা হয়। আপনি যখন কোনও প্যাকেজটির সঞ্চালন শুরু করছেন তখন প্রথম বিটটি সর্বদা যুক্তিযুক্তভাবে কম থাকে। এটি শুরু বিট। তারপরে আটটি ডাটা বিট এবং তারপরে স্টপ বিট যা যৌক্তিকভাবে বেশি। মাইক্রোপ্রসেসর পরবর্তী বিট কখন আসবে তা জানেন কারণ এটি আপনার কনফিগার করা বাসের গতিটি জানেন। মাইক্রোপ্রসেসর এবং মাইক্রোপ্রসেসরে প্রেরণকারী ইউনিট উভয়কে একই সংক্রমণ গতির সাথে কনফিগার করা দরকার।
ম্যাটিয়াস জোহানসন

উত্তর:


16

আপনি যদি কোনও মাইক্রোপ্রসেসরের একটি ইউআরটি বন্দরে কিছু খাওয়ান তবে আপনি অবশ্যই মাইক্রোপ্রসেসরটি এটি কী খাওয়ান তা বোঝার জন্য ইউআরটি যোগাযোগ প্রোটোকলটি অনুসরণ করতে হবে। আপনাকে প্রতিটি ASCI অক্ষরটি একটি ইউআরটি প্যাকেজে এম্বেড করতে হবে যার মধ্যে একটি স্টার্ট বিট, একটি স্টপ বিট এবং সম্ভবত প্যারিটি বিট রয়েছে, আরও অনেক তথ্য ইউআরটি উইকিপিডিয়া পৃষ্ঠায় উপলভ্য ।

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


2
একটি মূল বিষয় হ'ল স্টপ বিটের কনফিগার করা সংখ্যা হ'ল সর্বনিম্ন, সর্বোচ্চ নয়। অ্যাসিঙ্ক সিরিয়াল লাইনের নিষ্ক্রিয় অবস্থা একটি বর্ধিত স্টপ বিট। সুতরাং রেডিওটি যদি 0 এ অলস হওয়া আবশ্যক , তবে সহজ উত্তরটি হ'ল ইউআরআউট আউটপুটটি এটির সাথে চালানোর আগে বিপরীত করা যাতে এটি 0 ও 1 এ অলস হয়। তারপরে প্রাপ্ত ইউটিআরটিটি ইউআআআআআআরটির সাথে পরিচালনা করার আগে এটি উল্টিয়ে দিন।
RBerteig

6

এর জন্য প্রচুর কৌশল রয়েছে। আপনি ম্যানচেস্টার কোডিং বা এনআরজেড কোডগুলি দেখতে চাইতে পারেন। বা 8 বি / 10 বি কোডিং , যা প্রতি 8 ডেটা বিটকে 10-বিট ক্রমের মানচিত্র দেয় যা ঘড়ির পুনরুদ্ধার, ত্রুটি সংশোধন এবং বিশেষ "কমা" চিহ্নগুলি ব্যবহার করে যা সংক্রমণটির শুরু এবং শেষ সনাক্ত করতে ব্যবহার করা যেতে পারে।


5

সমস্ত ASCII অক্ষর 8 বিট প্রশস্ত, আপনি এটি কোনও ASCII সারণিতে দেখতে পারেন। ASCII অক্ষরের HEX মানগুলি এফএফ ছাড়িয়ে যায় না (1111 1111)

ইউআরটি একসাথে একাধিক ডেটা বাইট (৮ বিট) গ্রহণ করতে পারে না, সেই 8 বিটের ডেটার পাশে স্টপ এবং স্টার্ট বিট, প্যারিটি এবং আরও কয়েকটি রয়েছে, যা আপনি নীচে দেখানো ছবিতে দেখতে পাচ্ছেন এবং যা ইউআরটি যোগাযোগ প্যাকেট গঠন করে।

এখানে চিত্র বর্ণনা লিখুন

সুতরাং আপনি যখন ইউএসটিতে ASCII অক্ষর প্রেরণ করবেন, আপনি সেগুলি একে একে প্রেরণ করছেন এবং স্ট্রিংটি কীভাবে তৈরি হয় তা নির্ধারণ করুন। আপনি ইতিমধ্যে জানেন যে স্ট্রিংটি কেবলমাত্র অক্ষরের একটি অ্যারে।


4
ascii 8 বিট নয়, 8 নয়, তবে এ্যালাইনমেন্টকে তুচ্ছ করতে এটি 8 বিটের কামড়ের মধ্যে রাখা সাধারণ common এটি অন্যান্য অক্ষর সেট এবং utf8 এর অনুমতি দেয়।
hildred

0

ইউটিএআর প্রোটোকল যেমন ম্যাটিয়াস ব্যাখ্যা করেছে, এটি একটি সময় ভিত্তিক অ্যাসিনক্রোনাস প্রোটোকল। বিটের মধ্যে সীমানা নির্ধারণকারীটি হ'ল স্টার্ট বিটের শুরু থেকে নেওয়া সময়। সুতরাং মাইক্রোকন্ট্রোলার (N+half)/baudrateস্টার্ট বিট শুরু হওয়ার পরে বিট সেকেন্ডে "নমুনা" দেবে । অর্ধ বিটটি বিটগুলির মাঝখানে কেবল নমুনা হিসাবে থাকে যাতে এটি রিসিভার এবং ট্রান্সমিটারের মধ্যে সময় নির্ধারণের অর্ধেক পার্থক্য রাখতে পারে (মনে রাখবেন যে পার্থক্যগুলি संचयी এবং প্রতিটি ফ্রেমের শেষ বিটটিতে সবচেয়ে খারাপ ঘটনা ঘটে যা সাধারণত হয়, তবে সর্বদা নয়, কনফিগারেশনের উপর নির্ভর করে 8-বিট প্রশস্ত)। এটিকে কাজ করার মূল চাবিকাঠিটি যতটা সম্ভব কাছাকাছি বাউড্রেটসের সাথে রিসিভার এবং ট্রান্সসিভার থাকা।

সুতরাং, মাইক্রোকন্ট্রোলার প্রতিটি বিট একটি ফ্রেমের ভিতরে থাকে তা জানতে প্রতিটি বিটের মধ্যে সময় গণনা করে। পরবর্তী চরিত্রটি পরবর্তী ফ্রেমে যাবে into যখন প্রতিটি ফ্রেম শেষ হয়, মাইক্রোকন্ট্রোলারটি স্বয়ংক্রিয়ভাবে পরবর্তী ফ্রেম শুনতে শুরু করে, সুতরাং যখন পরবর্তী সূচনা বিট আসে এটি ইতিমধ্যে জানে এটি একটি নতুন ফ্রেম শুরু করা উচিত। চরিত্রগুলি এভাবে আলাদা হয়।

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

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