অসিলোস্কোপ থেকে সিরিয়াল ডেটা কীভাবে পড়বেন


21

আমার কাছে একটি মাইক্রোকন্ট্রোলার (পিকাএক্স 20 এক্স 2) এবং একটি পাত্র মিটার রয়েছে। আমি মাইক্রোটিকে প্রোগ্রাম করেছিলাম যাতে এটি পট মিটারের কোনও পরিবর্তন পিসির সিরিয়াল বন্দরে প্রেরণ করে। স্পষ্টতই এটি একটি 8 বিট এডিসি। এখন আমার জন্য আকর্ষণীয় জিনিসটি অসিস্কলকে এই সিরিয়াল ডেটাটি ডিকোড করতে সক্ষম হচ্ছে।

এখানে দুটি ছবি রয়েছে, প্রথমটি যখন মাইক্রো পিসিতে "0" প্রেরণ করে এবং পরেরটি যখন এটি "255" প্রেরণ করে। ডেটা 9600 বুড ব্যবহার করে প্রেরণ করা হচ্ছে এবং আমি সেগুলি পিসি টার্মিনালে গ্রহণ করতে পারি।

প্রথম ছবি এখানে চিত্র বর্ণনা লিখুন

দ্বিতীয় ছবি এখানে চিত্র বর্ণনা লিখুন

সুতরাং আমার প্রশ্নটি হ'ল, আমি কি আমার সুযোগের সঠিক ডেটাটি ক্যাপচার করেছি এবং দ্বিতীয়টি কীভাবে এই ডালগুলি হেক্স বা এসসিআই ফর্ম্যাটে পড়তে এবং ডিকোড করতে পারে। আমি বুঝি কীভাবে এই উঠতি এবং পড়ন্ত ডাল পড়তে হবে (0/1)।

ধন্যবাদ।


3
যৌক্তিক লাইনগুলি যৌক্তিক '1' অবস্থায় নিষ্ক্রিয় থাকে, সুতরাং আপনার নীচের দিকে 1 এবং শীর্ষে 0 রয়েছে সে সম্পর্কে সচেতন হন। আমি জানি লোকেরা এরই মধ্যে লক করে ফেলেছে। আমার মন্তব্যটি সিরিয়াল ডেটার ভবিষ্যতের স্কোপ-গ্র্যাবকে গাইড করার উদ্দেশ্যে; নিষ্ক্রিয় অবস্থা উচ্চতর যাতে আপনি বিষয়গুলি অনুসন্ধান করতে পারেন।
জাস্টজেফ 16

উত্তর:


14

প্রথমে অলিনও লক্ষ্য করেছেন: স্তরগুলি একটি মাইক্রোকন্টোলার সাধারণত আউটপুট যা দেয় তার বিপরীত হয়:

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

চিন্তার কিছু নেই, আমরা দেখতে পাব যে আমরা এটিও এভাবে পড়তে পারি। আমাদের কেবল মনে রাখতে হবে যে সুযোগে একটি শুরু বিট একটি 1এবং স্টপ বিট হবে 0

μμμ1μ0

স্ক্রিনের ডেটা প্রেরিতের সাথে মিলছে বলে মনে হচ্ছে না 0x00। আপনি একটি সংকীর্ণ 1বিট দেখতে হবে (আরম্ভ বিট) একটি দীর্ঘ নিম্ন স্তরের (936 ) এর পরেμ
0xFFμ

guesstimates:

0b11001111 = 0xCF
0b11110010 = 0xF2

0b11001101 = 0xCD
0b11001010 = 0xCA
0b11001010 = 0xCA
0b11110010 = 0xF2

সম্পাদন করা
ওলিন করা একেবারে ঠিক, এটি ASCII এর মতো কিছু। প্রকৃতপক্ষে এটি 1 এর ASCII এর পরিপূরক

0xCF ~ 0x30 = '0'
0xCE ~ 0x31 = '1'
0xCD ~ 0x32 = '2'
0xCC ~ 0x33 = '3'
0xCB ~ 0x34 = '4'
0xCA ~ 0x35 = '5'

0xF2 ~ 0x0D = [সিআর]

এটি নিশ্চিত করে যে আমার স্ক্রিনশটগুলির ব্যাখ্যাটি সঠিক।


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

উদাহরণ: 2 টি সরু ডাল দিয়ে শুরু করে 1 ম স্ক্রিনশটে দ্বিতীয় বাইট। আমি দ্বিতীয় বাইটটি উদ্দেশ্য নিয়ে শুরু করি কারণ প্রথম বাইটের চেয়ে আরও বেশি প্রান্ত রয়েছে তাই এটি সঠিকভাবে পাওয়া সহজ হবে। সরু ডালের প্রত্যেকটি বিভাগের প্রায় 1/10 তম হয়, সুতরাং এটির মধ্যে কম বিট সহ প্রতিটি 1 বিট বেশি হতে পারে। আমি এর থেকে আরও সংকীর্ণ কিছুই দেখতে পাচ্ছি না, তাই আমি অনুমান করি এটি একটুখানি। এটা আমাদের রেফারেন্স।
তারপরে, 101নিম্ন স্তরে একটি দীর্ঘ সময় পরে । পূর্ববর্তীগুলির চেয়ে দ্বিগুণ প্রশস্ত দেখায়, তাই হতে পারে 00। উচ্চ অনুসরণ যে আবার দ্বিগুণ প্রশস্ত, তাই হবে 1111। আমাদের কাছে এখন 9 টি বিট রয়েছে: একটি স্টার্ট বিট ( 1) প্লাস 8 ডেটা বিট। পরবর্তী বিট স্টপ বিট হবে, কিন্তু এটি কারণ0এটি তাত্ক্ষণিকভাবে দৃশ্যমান নয়। সুতরাং এটি সমস্ত একসাথে রাখা 1010011110, শুরু এবং স্টপ বিট সহ। স্টপ বিটটি যদি শূন্য না হয় তবে আমি কোথাও একটি খারাপ ধারণা তৈরি করতাম!
মনে রাখবেন যে একটি ইউআরটি প্রথমে এলএসবি (কমপক্ষে উল্লেখযোগ্য বিট) প্রেরণ করে, তাই আমাদের 8 টি ডাটা বিটগুলি বিপরীত করতে হবে: 11110010= 0xF2

আমরা এখন একক বিটের প্রস্থ, একটি ডাবল বিট এবং 4 বিটের ক্রম জানি এবং আমাদের প্রথম বাইটটি দেখুন। প্রথম হাই পিরিয়ড (প্রশস্ত ডাল) 1111দ্বিতীয় বাইটের চেয়ে কিছুটা প্রশস্ত , সুতরাং এটি 5 বিট প্রস্থ হবে। নিম্নে এবং এর পরে চলমান প্রতিটি উচ্চ বর্ধমানটি অন্য বাইটে ডাবল বিটের মতো প্রশস্ত, তাই আমরা পাই 111110011। আবার 9 টি বিট, সুতরাং পরেরটিটি একটি বিট হওয়া উচিত, স্টপ বিট। এটি ঠিক আছে, সুতরাং আমাদের অনুমানটি সঠিক হলে আমরা আবার ডেটা বিটগুলি বিপরীত করতে পারি: 11001111= 0xCF

তারপরে আমরা ওলিনের কাছ থেকে একটি ইঙ্গিত পেয়েছি। প্রথম যোগাযোগটি 2 বাইট দীর্ঘ, দ্বিতীয়টির চেয়ে 2 বাইট কম। এবং "0" এছাড়াও "255" এর চেয়ে 2 বাইট কম। সুতরাং এটি সম্ভবত ASCII এর মতো কিছু, যদিও ঠিক না। আমি আরও লক্ষ করি যে "255" এর দ্বিতীয় এবং তৃতীয় বাইটটি একই are দুর্দান্ত, এটি ডাবল "5" হবে। আমরা ভাল করছি! (আপনাকে সময়ে সময়ে নিজেকে উত্সাহিত করতে হবে।) "0", "2" এবং "5" ডিকোড করার পরে আমি লক্ষ্য করেছি যে প্রথম দুটিটির কোডগুলির মধ্যে 2 এর পার্থক্য রয়েছে এবং শেষের মধ্যে 3 টির মধ্যে পার্থক্য রয়েছে দুই। এবং পরিশেষে আমি লক্ষ্য করেছি যে 0xC_এটি পরিপূরক 0x3_, এটি ASCII এর অঙ্কগুলির নিদর্শন।


টিপসের জন্য ধন্যবাদ, আমি সঠিক তরঙ্গরূপটি ক্যাপচার এবং আমার প্রশ্নটি আপডেট করার চেষ্টা করব।
Sean87

ধন্যবাদ, আপনি কীভাবে এই ডেটাগুলি খুঁজে পান সেভাবে ছবিটি চিহ্নিত করতে আপনি কি আপত্তি করবেন?
Sean87

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

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

7

কিছু যোগ হচ্ছে না। আপনার সিগন্যালগুলি শীর্ষে 3.3V শীর্ষে পৌঁছেছে, যা বোঝায় যে সেগুলি সরাসরি মাইক্রো থেকে বাইরে। তবে মাইক্রোকন্ট্রোলার ইউআআআরটি স্তরগুলি (প্রায়) সর্বদা নিষ্ক্রিয় উচ্চ এবং সক্রিয় নিম্ন। আপনার সিগন্যালগুলি সে থেকে উল্টানো হয়েছে, যা কোনও অর্থবোধ করে না।

এই ডেটাটি শেষ পর্যন্ত পিসিতে রূপান্তর করতে, এটি আরএস -৩৩২ স্তরে রূপান্তর করতে হবে। এটি একটি পিসি সিওএম বন্দরটি দেখার প্রত্যাশা করে। আরএস -232 নিষ্ক্রিয় নিম্ন এবং সক্রিয় উচ্চ, তবে নিম্ন -5 ভি এর নীচে এবং উচ্চতর + 5 ভি এর উপরে। সৌভাগ্যক্রমে এর জন্য এমন চিপস রয়েছে যা সাধারণ মাইক্রোকন্ট্রোলার লজিক স্তর ইউআর্ট সংকেত এবং আরএস -২৩২ এর মধ্যে রূপান্তর করতে সহজ করে। এই চিপগুলিতে আপনার 3.3V পাওয়ার সরবরাহ থেকে আরএস -232 ভোল্টেজগুলি তৈরি করতে চার্জ পাম্প রয়েছে। কখনও কখনও এই চিপগুলি সাধারণভাবে "MAX232" হিসাবে উল্লেখ করা হয় কারণ এটি সেই ধরণের প্রাথমিক এবং জনপ্রিয় চিপের অংশ ছিল number আপনার পৃথক বৈকল্পিক প্রয়োজন কারণ আপনি স্পষ্টতই 5 ভি না করেই 3.3V শক্তি ব্যবহার করছেন। আমরা এমন একটি পণ্য তৈরি করি যা সংযোগকারীগুলির সাথে একটি বোর্ডে মূলত এই চিপগুলির মধ্যে একটি। Http: //www.e એમ્બેડinc.com/products/rslink2 এ যানএবং কীভাবে এই জাতীয় চিপটি হুক করা যায় তার একটি উদাহরণ দেখতে স্কিম্যাটিকটি দেখুন।

আর একটি জিনিস যা যোগ করে না তা হ'ল উভয় ক্রমগুলি একের বেশি বাইট হিসাবে প্রদর্শিত হয়, যদিও আপনি বলে থাকেন যে আপনি কেবল 0 এবং 255 প্রেরণ করছেন This তারপরে একটি স্টপ বিট শুরু বিট সর্বদা লাইন নিষ্ক্রিয় স্তর থেকে বিপরীত মেরুতে থাকে। বেশিরভাগ বিবরণে, রেখাটি নিষ্ক্রিয় স্তরটিকে "স্থান" হিসাবে এবং বিপরীতটিকে "চিহ্ন" হিসাবে উল্লেখ করা হয়। সুতরাং শুরু বিট সর্বদা চিহ্নিত করা হয়। স্টার্ট বিটের উদ্দেশ্যটি হল বাকী বিটগুলির জন্য সময় সিঙ্ক্রোনাইজেশন সরবরাহ করা। যেহেতু উভয় পক্ষই জানেন যে কতক্ষণ দীর্ঘ হয়, তাই বাইট শুরু হওয়ার পরে একমাত্র প্রশ্ন। প্রারম্ভ বিট এই তথ্য সরবরাহ করে। প্রাপকটি প্রাথমিকভাবে স্টার্ট বিটের শীর্ষ প্রান্তে একটি ঘড়ি শুরু করে এবং কখন ডেটা বিটগুলি আসবে তা জানতে এটি ব্যবহার করে।

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

সুতরাং এই সমস্ত থেকে আপনি দেখতে সক্ষম হবেন যে প্রথম ট্রেসটি কমপক্ষে দুটি বাইট প্রেরণ করছে এবং শেষটি সম্ভবত 5 এর মতো দেখাচ্ছে।

আপনি ট্রেসগুলির সময় স্কেল প্রসারিত করলে এটি সহায়তা করবে। এইভাবে আপনি পরিমাপ করতে পারেন কিছুটা সময় আসলে কী। এটি আপনাকে সত্যিকারের 9600 বাউড (104 /s / বিট) রয়েছে তা যাচাই করার অনুমতি দেয় এবং আপনাকে ক্যাপচারের পৃথক বিটগুলি ডিকোড করতে দেয়। এটি এখন যেমন রয়েছে, সেখানে বিটগুলি কোথায় রয়েছে তা দেখার মতো পর্যাপ্ত রেজোলিউশন নেই এবং তাই প্রেরণে কী পাঠানো হচ্ছে তা প্রকৃতপক্ষে ডিকোড করুন।

যোগ করা হয়েছে:

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

যাইহোক, সময় স্কেল প্রসারিত করুন এবং আমরা এটি কী পাঠানো হচ্ছে ঠিক তা ডিকোড করতে পারি।


1
স্টপ বিট (এবং এটি স্টার্ট বিটের বিপরীতে রয়েছে) নতুন ট্রান্সমিশনের শুরুতে একটি কিনারাও জোর করে।
স্টিভেন্ভ

@ স্টেভেন: হ্যাঁ, আমি বুঝতে পেরেছিলাম যে আমার উত্তরটি পুনরায় পড়ার পরে আমি এটি ছেড়ে দিয়েছি এবং এটি সম্পাদনায় যুক্ত করেছি, সম্ভবত একই সময়ে আপনি নিজের মন্তব্য লিখছিলেন।
অলিন ল্যাথ্রপ

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

4
দৃ strongly়ভাবে অসম্মতি করতে যাচ্ছি । এস্কি এমন একটি ক্ষুদ্র পরিমাণের কোড গ্রহণ করে, এমনকি অল্প 8-তিক্ততে খালি ধাতু চালায়। অবশ্যই, আপনি একটি কাস্টম প্রোগ্রাম লিখতে পারেন, তবে এটি হারিয়ে যাওয়ার পরে এখন থেকে 10 বছর পরে কী ঘটে এবং এটি খুঁজে পাওয়া গেলেও এটি চালাতে ভার্চুয়াল মেশিন লাগবে? এবং নিশ্চিত, তার লবণের মূল্যবান যে কোনও প্রোগ্রামার ইঞ্জিনিয়ারকে কিছু বিপরীত করতে বাইনারি টার্মিনাল হ্যাক করতে পারে। তবে মানব পাঠযোগ্য ইন্টারফেসগুলি বেশিরভাগ ক্ষেত্রে ছোট ওভারহেডের পক্ষে যথেষ্ট তবে সবচেয়ে গুরুতর মেমরির সীমিত এবং কার্য সম্পাদন সমালোচনামূলক সিস্টেমগুলির পক্ষে ভাল। এছাড়াও আপনার যদি স্মৃতি থাকে তবে আপনি অন / অফ দিয়ে ডিবাগ আউটপুট এম্বেড করতে পারেন।
ক্রিস স্ট্রাটন 21

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

1

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

যদি রিগল স্কোপটিতে ক্রমিক ডিকোড বিকল্প না থাকে (অনেকগুলি ডিএসও করেন) আপনি ডিকোডিংয়ে সহায়তা করতে এক্স-কার্সার ব্যবহার করতে পারেন। প্রথম কার্সারটি ডেটার অগ্রণী প্রান্তে রাখুন এবং দ্বিতীয় কার্সারটিকে বিটস্ট্রিমের মাধ্যমে সরান। কার্সারগুলির মধ্যে ব-দ্বীপটি বর্তমানে সাধারণ গাণিতিক দ্বারা আপনি কোন 'বিট' ঘুরে বেড়াচ্ছেন তা নির্ধারণ করতে ব্যবহার করা যেতে পারে। স্পষ্টতই / স্টপ / প্যারিটির বিট উপেক্ষা করুন।


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