কি বিট বেজিং হয়


26

আমি মাইক্রোকন্ট্রোলার প্রোগ্রামিংয়ে নতুন। আমি এটিমেগা 32-এ নিয়ামক এবং কোডভিশনএভিআর সংকলক ব্যবহার করছি। আমি এসপিআই যোগাযোগ ব্যবহার করে একটি সাইনওয়েভ সংকেত তৈরি করতে তরঙ্গরূপ জেনারেটর (AD9833) ব্যবহার করছি। আমি সাইনওয়েভ সফলভাবে উত্পন্ন করতে সক্ষম। এখন আমি সেন্সরে সেই সংকেতটি দিয়ে যাচ্ছি। সেন্সর আউটপুট মাল্টিপ্লেক্সারের মাধ্যমে নির্বাচিত হয় এবং এডিসিতে প্রেরণ করা হয়। এখন আমি এসপিআই যোগাযোগ ব্যবহার করে এডিসি মানগুলি পড়তে চাই। আমি এডিসির রেজিস্টার সেটআপ করার জন্য অনেক চেষ্টা করেছি। তবুও কাজ হচ্ছে না। এসপিআই যোগাযোগের কোডটি দেখতে আমার পূর্ববর্তী পোস্টের এডিসি রেজিস্টারস স্পি যোগাযোগ ব্যবহার করে নিবন্ধগুলি দেখুন । আমি পিসিতে (পুটিটিওয়াই) মুদ্রণ করতে ইউএসআর্ট (আরএস 232) যোগাযোগ ব্যবহার করছি।

কেউ আমাকে বিট-বিং ব্যবহার করার পরামর্শ দিয়েছেন। আমি সেই ধারণায় নতুন। এসপিআই যোগাযোগের বিট বিংয়ের একটি উদাহরণ কোড আমাকে সরবরাহ করতে পারে যে কেউ? কীভাবে সেই প্রক্রিয়া শুরু করবেন? যে কেউ আমাকে একটি ভাল উপাদান সরবরাহ করতে পারে? আমার কি কোনও বাহ্যিক হার্ডওয়্যার দরকার?

আমি পিন সংযোগ সহ এটি লিখেছি:

#define ADC_CS PORTB.3
#define MOSI PORTB.5
#define MISO PINB.6
#define SCK PORTB.7

void send_8bit_serial_data(unsigned char data)
{
    int i;  
    ADC_CS=0;
    for (i = 0; i < 8; i++)
    {
        // consider leftmost bit
        // set line high if bit is 1, low if bit is 0
        if (data & 0x80)
            output_high(PORTB.5);
        else
            output_low(PORTB.5);

        // pulse clock to indicate that bit value should be read
        output_low(PORTB.7);
        output_high(PORTB.7);

        // shift byte left so next bit will be leftmost
        data <<= 1;
    }

    // deselect device
    ADC_CS=1;
}


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

@ অলিগ্লাসার আমি কি সাধারণ এসপিআই কোডের পরিবর্তে এই কোডগুলি সরাসরি ব্যবহার করতে পারি যা নিবন্ধগুলি সেটআপ করতে পারে।
ভেরেন্দ্র

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

উত্তর:


25

বিট বিংিং মাইক্রোকন্ট্রোলারের অভ্যন্তরে একটি টুকরো হার্ডওয়ারের উপর নির্ভর না করে সফটওয়্যারটিতে ডালের পুরো সিরিজ তৈরি করছে।

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

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

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

সুতরাং যখন কোনও ডেডিকেটেড এসপিআই নিয়ন্ত্রক সমস্ত ডাল, ডেটা শিফটিং এবং টাইমিংয়ের যত্ন নেয়, তখন বিট-বিং করার সময় আপনাকে নিজের প্রতিটি পদক্ষেপ নিতে হবে:

Make Slave Select low  
Short delay
Do 8 times
  Make the SCK (Serial Clock) pin low 
  Make the MOSI (Master-Out-Slave-In) pin high or low depending on bit 7 of the data  
  Add brief delay  
  Make the SCK output high
  Read MISO (Master-In-Slave-Out) pin
  Shift received data left, and shift the bit just read in as bit 0   
  Add brief delay  
  Shift the data byte 1 bit left
Make Slave Select high again  

বিট-ব্যাংিং এসপিআই তুলনামূলকভাবে সহজ, উদাহরণস্বরূপ বিট-ব্যাংিং আই 2 সি এর কোডটি আরও জটিল হবে এবং আপনি যদি ইউআরটি প্রোটোকলটিকে বিট-ব্যাং করতে চান তবে আপনাকে কোনও টাইমার লাগবে।


2
আপনি একটি নমুনা সি কোড সরবরাহ করতে পারেন?
ভেরেন্দ্র

1
@ ভেন্দ্র - আমি একটি সিউডোকোড উদাহরণ যুক্ত করেছি, যা আপনার
সিতে

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

@ স্টিভেন - আপনার প্রদর্শিত চিত্রটি এমএসবি প্রথম, সুতরাং আপনাকে 7 থেকে বাম শিফট এবং বাম শিফটটি 0 থেকে নেওয়া উচিত I আমি জানি কোনও মান নেই তাই এটি প্রথমে এলএসবি হতে পারে তবে আমি মনে করি বেশিরভাগ এসপিআই পেরিফেরিয়াল এটি এভাবে করে ।
অলি গ্লেজার

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

6

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

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

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

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

উদাহরণস্বরূপ, ধরুন যে কোনও প্রসেসরের ইউআরটি-স্টাইলের ডেটা ক্রমিক হারে প্রেরণ করতে চান যা তার ঘড়ির গতির তুলনায় খুব বেশি (যেমন একটি পিআইসি যা সেকেন্ডে 8,192 নির্দেশিকা চলছে 1200 বিপিএসে ডেটা আউটপুট দেওয়ার জন্য) যদি কোনও বাধা সক্ষম না করা হয় তবে এ জাতীয় সংক্রমণটি কঠিন নয় (প্রতি সাতটি নির্দেশ চক্রের এক বিট ঘড়ি)। যদি কোনও পিসি ইনকামিং ১২০০ বিপিএস ডেটা বাইটের জন্য অপেক্ষা করা ব্যতীত অন্য কিছু না করে, তবে এটি স্টার্ট বিটের জন্য অপেক্ষা করে একটি 3-চক্রের লুপটি কার্যকর করতে পারে এবং তারপরে সাত-চক্রের বিরতিতে ডেটাটি ঘড়িতে যেতে পারে। প্রকৃতপক্ষে, যদি কোনও পিকের কাছে উপাত্তের ইনকামিং বাইট আসার সময় পাঠানোর জন্য প্রস্তুত একটি বাইট থাকে, তবে পিআইসির কাছে আগত বাইটগুলি পড়ার সাথে এক সাথে তার ডেটা বাইট প্রেরণে যথেষ্ট সময় লাগত would একইভাবে,যদি এরূপ উত্তরটি মূল সংক্রমণের সাথে সম্পর্কিত সময় নির্ধারণ করে । অন্যদিকে, পিআইসির পক্ষে বিট-ব্যাং যোগাযোগগুলি এমনভাবে পরিচালনা করার গতি নেই যে কোনওভাবেই ডিভাইসটিকে যে কোনও সময় উপযুক্ত দেখা যায় তা সংক্রমণ করার অনুমতি দেওয়া হয়েছিল (কোনও ডিভাইস যা দেখলে প্রেরণ করতে পারে তার বিপরীতে) ফিট করুন এবং সংক্রমণ না করার সময় যা পছন্দ হয়েছিল তা করুন এবং এমন একটি ডিভাইস যা এর বেশিরভাগ সময় ব্যয় করতে হবে প্রথম ডিভাইস থেকে সংক্রমণের জন্য অপেক্ষা করা ছাড়া)।

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