ক্রমিক যোগাযোগের জন্য আরডুইনোর উপর উচ্চ নির্ভুলতার সময়


11

আমি সিরিয়াল বন্দর থেকে সময় এবং ভোল্টেজের তথ্য পাইথনে প্লট করার জন্য পাঠাতে একটি আরডুইনো ইউনো ব্যবহার করছি। তবে ধারাবাহিক সময়ের স্ট্যাম্পগুলির মধ্যে ব্যবধানের সময়গুলি সময়ের সাথে সাথে আমার চক্রান্তকে প্রভাবিত করে বলে মনে হচ্ছে। এটি বিশেষত সত্য যখন বাউডের হারটি 9600 এ সেট করা থাকে, যেখানে আমার প্রাথমিক সময়ের পার্থক্য হতে পারে 1320 এবং তুলনামূলকভাবে স্বল্প সময়ের পরে বেড়ে 16400 হয়ে যায়। এই হারটি সর্বাধিক 115200 বিপিএসে রাখলে পরিবর্তনটি ধীরে ধীরে এবং কম লক্ষণীয় হয়, প্রায় 1340 থেকে 1500 প্রেরণের তুলনামূলক দীর্ঘ সময় পরেও। সমস্ত সময় মাইক্রোসেকেন্ডে দেওয়া হয়।

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

  1. আমি কি সময়টিতে আরও নির্ভুলতা পেতে পারি?
  2. সময় পরিবর্তনের ফলে কী ঘটে?

আমার কাছে বর্তমানে যা আছে তা এখানে:

#include <eHealth.h>

extern volatile unsigned long timer0_overflow_count;
float fanalog0;
int analog0;
unsigned long time;    

byte serialByte;
void setup() {
  Serial.begin(9600);
}

void loop() { 
  while (Serial.available()>0){  
    serialByte=Serial.read();
    if (serialByte=='S'){        
      while(1){
        fanalog0=eHealth.getECG();  
        // Use the timer0 => 1 tick every 4 us
        time=(timer0_overflow_count << 8) + TCNT0;        
        // Microseconds conversion.
        time=(time*4);   
        //Print in a file for simulation
        //Serial.print(time);
        //Serial.print(" ");
        Serial.print(fanalog0,5);
        Serial.print("\n");

        if (Serial.available()>0){
          serialByte=Serial.read();
          if (serialByte=='F')  break;
        }
      }
    }
  }
}

"সুনির্দিষ্ট" বলতে কী বোঝ? কাউন্টার দ্বারা প্রদত্ত সময়গুলি মোটামুটি নির্ভুল, নির্ভুল এবং একটি ভাল রেজোলিউশনের সাথে হতে চলেছে। আপনি কি সময়গুলি নির্মাতিক হতে চান (অর্থাত্ সর্বদা একই)?
সাইবারবিবোনস

দুঃখিত, হ্যাঁ আমি অনুমান করি যে এটাই আমি বোঝাতে চেয়েছিলাম, তাদের মধ্যে পার্থক্যটি সামঞ্জস্যপূর্ণ হওয়ার জন্য এবং যদি তা না হয় তবে তারা কেন না
ব্যবহারকারী 3284376

আরডুইনো প্রান্তের চেয়ে পিসি প্রান্তে টাইমস্ট্যাম্প যুক্ত করুন বা একটি আরটিসি (রিয়েল টাইম ক্লক) মডিউলটি ব্যবহার করুন। আরটিসি মডিউলগুলি বিভিন্ন ওয়েবস্টোরগুলিতে সন্ধান করা বেশ সস্তা, কেবলমাত্র এটি নিশ্চিত করে যে স্টোরটি ডেটাশিটের সাথে লিঙ্ক করেছে। অন্য পদ্ধতিটি হ'ল একটি টাইমার প্রোগ্রাম করা এবং যুক্তিযুক্ত যথাযথ সময় পাওয়ার জন্য একটি বিঘ্নিত পরিষেবা রুটিন ব্যবহার করা।
জিপ্পি

কি করে eHealth.getECG()? সেই কলটি কি সর্বদা একই পরিমাণে স্থায়ী হয়?
jfpoil ব্যাখ্যা

আপনি "তুলনামূলকভাবে স্বল্প সময়ের" কত দিন স্থায়ী তা নির্দিষ্ট করতে পারেন? আরডুইনো পুনরায় চালু করার পরে কি সর্বদা একই থাকে?
jfpoil ব্যাখ্যা

উত্তর:


4

সময় আরও সঠিক করার জন্য একটি টাইমার এবং আইএসআর (বিঘ্নিত পরিষেবার রুটিন) ব্যবহার করুন।

আমার 1 মিমি সময়সীমার অন্তরায় বাধার প্রমাণের ধারণাটি দেখুন । ধারণাটি হ'ল সিস্টেমে যুক্তিযুক্ত সঠিক 1 মিমের 'হার্টবিট' রাখা উচিত যা অন্যান্য ইভেন্টগুলি ট্রিগার করতে ব্যবহার করা যেতে পারে। পিওসিতে এটি ½Hz এ একটি এলইডি জ্বলতে ব্যবহার করা হয়, তবে নতুন ভেরিয়েবলের অ্যাক্সেস থাকা millisecondCounterএবং secondCounterআপনাকে মূল লুপে নির্বিচারে (তবে সঠিকভাবে সময়সীমা) মুহুর্তগুলিতে ইভেন্টগুলি ট্রিগার করতে সক্ষম করে।


2
আপনার পিওসিটি খুব আকর্ষণীয় তবে এটিতে একটি ত্রুটি (সমাধান করা সহজ) রয়েছে যাতে এটি একটি 2-বাইট মান পড়ে যখন বিঘ্ন সক্ষম হয় (ইন loop()) হয়, এই মানটি একটি আইএসআর দ্বারা সংশোধিত হচ্ছে। এটি ঘটতে পারে যা loop()খারাপ মান পড়ে (ISR দ্বারা সংশোধন করার মাঝামাঝি)। আমি আপনার ব্লগে এটি সম্পর্কে একটি মন্তব্য পোস্ট করেছি।
jfpoil ব্যাখ্যা

@ জেফপোইলে আপনার আকর্ষণীয় বিন্দুটি ব্যাখ্যা করুন, র‍্যাম থেকে মূল্য পুনরুদ্ধার করার জন্য কোনও বিঘ্ন ঘটবে বলে মনে করেননি। আমি এই সন্ধ্যায় বিচ্ছিন্নতা পরীক্ষা করতে এবং নিবন্ধটি আপডেট করতে যাচ্ছি। অন্য আর্টিকেলটিও লেখার জন্য সম্ভবত কোনও ভাল কারণ: ও)
জিপ্পি

আমি আপনার পিওসি থেকে একটি নমুনা তৈরি করেছি এবং আমার ইউএনওতে প্রতি 10 সেকেন্ডে কমপক্ষে একবার সমস্যাটি দেখতে পেয়েছি। তবে অবশ্যই বাস্তবে এটি আপনার ক্ষেত্রে আপনার উপর নির্ভর করে loop(): আমার নমুনাটি সবেমাত্র মিলি সেকেন্ডের মান পেয়েছে, এটি পূর্ববর্তী পড়ার মানের সাথে তুলনা করে এবং পার্থক্য> 0 (0-এ রিসেটের পরিবর্তে অন্য যদি) থাকে তবে একটি বার্তা প্রদর্শন করুন।
jfpoil ব্যাখ্যা

@ jfpoil ব্যাখ্যা কখনই এটি সত্যই লক্ষ্য করে নি। আমি আমার বিড়ালের খাবারের বালতিগুলি পর্যবেক্ষণ করতে এবং একটি এলইডি ফ্ল্যাশ তৈরি করার জন্য এটি কেবল হৃদস্পন্দক হিসাবে ব্যবহার করি যখন আমার বিড়ালগুলি সম্ভাব্য হতাশ হবে ...; ও) ভবিষ্যতে আমি কীভাবে আইএসআর ব্যবহার করব তা অবশ্যই পরিবর্তিত হবে।
জিপ্পি

1
এটি একটি ব্লক এটিএমইজিএ 16 ইউ 2 এর সাথে সংযুক্ত একটি স্ফটিক এবং এটিএমইজিএ 328 পি-পিইউতে সংযুক্ত একটি রেজোনেটর দেখায়। 16U2 সিরিয়াল ইন্টারফেসের জন্য 328 পি হ'ল "দ্য আরডিনো"। মজার বিষয় হল 16U2 তার ঘড়িটিকে অন্য চিপে ধাক্কা দিতে সক্ষম করবে, যেমন 328 পি।
উদো ক্লিন

3

সিরিয়াল লেখার সময়গুলিতে "ধারাবাহিকতা" প্রভাবিত করতে পারে এমন কয়েকটি বিষয় আমি ভাবতে পারি:

  • তথ্য আকার মুদ্রণযোগ্য হতে হবে

এটি ভাবতে সবচেয়ে সুস্পষ্ট বিষয় হতে পারে তবে আপনি যত বেশি মুদ্রণ করবেন এটি পরিচালনা করতে তত বেশি সময় লাগবে।

সমাধান: মুদ্রণ ফর্ম্যাটটি পরিচিত দৈর্ঘ্যের একটি স্ট্রিংয়ে ফর্ম্যাট করুন।

  • বাফার সিরিয়াল ব্যবহার

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

সমাধান: আনফারড সিরিয়াল লাইনটি ব্যবহার করুন ( যেমন : ডারউইন / ওএসএক্স এর /dev/cu.usbmodemXXXপরিবর্তে /dev/tty.usbmodemXXX)

  • টাইমারদের অগ্রাধিকার

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

সমাধান: বাধা অগ্রাধিকার সম্পর্কে ডকুমেন্টেশন / ডেটাশিটে আরও সন্ধান করুন এবং প্রয়োজনে টাইমার পরিবর্তন করুন; এবং / অথবা অন্য টাইমারটি না চালিয়ে একটি পরীক্ষা করুন।

  • আপনি যে ডেটাটি পড়ছেন তা সময়ের সাথে সাথে পড়তে আরও সময় নেয়

কিছু ড্রাইভারের পূর্ববর্তী মানগুলির চেয়ে গড় বা কিছু অপারেশন করা দরকার, সুতরাং আপনি যত বেশি মান পরিমাপ করবেন তত বেশি বাফার আর আপনি বাফারের সর্বাধিক আকার না পৌঁছানো পর্যন্ত মান গণনা করতে আরও বেশি সময় লাগবে।

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

  • আরডিনো ফ্রেমওয়ার্ক ওভারহেড এড়ানো

তবে আপনি যদি সত্যিই আরডুইনো থেকে সিরিয়াল আউটপুট অনুকূল করতে চান তবে আপনার আরডুইনো ওভারহেড ব্যবহার করা এড়ানো উচিত ... তবে এটি ব্যবহার করতে কম মার্জিত এবং আরামদায়ক।

আমি নিশ্চিত যে আমি অনুপস্থিত অন্যান্য পয়েন্টগুলি রয়েছে, তবে এটিই প্রথম জিনিস যা আমি আরও খনন করার আগে যাচাই করেছিলাম।

আছে HTH


2

আপনার কোডটি পরবর্তী পরিমাপগুলিতে আউটপুট সময়কাল অন্তর্ভুক্ত করে। সুতরাং আউটপুট দৈর্ঘ্যের উপর নির্ভর করে আপনি বিভিন্ন সময় পরিমাপ করবেন। এটি স্থির দৈর্ঘ্যের আউটপুটটিতে বিন্যাস করে স্থির করা যেতে পারে।

পরের বিষয়টি হ'ল ইউএনওর খুব খারাপ টাইমবেস রয়েছে। ডিসিএফ time77 সময় রেফারেন্স বনাম বিভিন্ন আরডুইনো ধরণের তুলনা করার জন্য এখানে দেখুন

উপসংহার: আপনার যদি সুনির্দিষ্ট সময় প্রয়োজন হয় হয় হয় স্ফটিকের সাথে একটি আরডিনো পান বা আরটিসি-তে যান। আমি DS3231 / DS3232 আরটিসিগুলিকে অত্যন্ত সুপারিশ করতে পারি যেহেতু এগুলি সাধারণত বাক্সের বাইরে 2 পিপিএমের যথার্থতা অর্জন করে।

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