در برنامهای نیاز بود تا بدانیم هر بار ارسال 10 بایت دیتا از طریق UART، چقدر زمان میبرد. میخواستیم با یک حساب سرانگشتی از طریق baud rate – باودریت – تعیین شده، حدود این زمان -چرا حدود؟- را به دست آوریم.
در این برنامه پورت سریال به صورت 8N1 یا به عبارتی هشت بیت دیتا، بدون هیچ پریتی و یک بیت برای پایان تنظیم شده بود. همچنین baud rate هم بر روی 19200 قرار داشت.
اما این اطلاعات چه به ما میدهند و از طریق آنها چگونه میتوانیم زمان مورد نیاز را محاسبه کنیم؟
قبل از اینکه ادامه متن را بخوانید، بهتر است اول بفهمیم که baud rate با bit rate چه تفاوتی دارد؟ آیا این دو معادل هم هستند؟ برای توضیح کامل این موضوع این مطلب از سایت ساختنی را پیشنهاد میکنم که با استعارهای که بکار بردهاند، درک تفاوت این دو مفهوم را بسیار ساده کردهاند.
بطور خلاصه، baud rate به تعداد المانهای ارسالی در هر ثانیه گفته میشود. اما این المانها میتوانند یک بیت یا بیشتر باشند.
در حالیکه bit rate، به تعداد بیتهای ارسالی در هر ثانیه گفته میشود.
با این حساب، اگر المانهای ما یک بیتی باشند، عدد baud rate نشان دهندهی bit rate هم هست. درست همان چیزی که در ارسال UART داریم. به این ترتیب با باود ریت 19200 تنظیم شده، در هر ثانیه میتوان 19200 بیت را انتقال داد.
برگردیم به مسئلهی خودمان، قرار بود زمان ارسال ده بایت یا به عبارتی هشتاد بیت را حساب کنیم. شاید بگویید هر بیت زمانش میشود یک تقسیم بر 19200 که هشتاد برابرش، زمانی است که ما میخواهیم. (80 * (1/19200) = 4.16 میلی ثانیه) اما اشکال این محاسبات در این است که ما بیتهای اضافی که به دیتای خام خود اضافه میکنیم تا بتوانیم طبق پروتکل UART بفرستیم را، در نظر نگرفتهایم. در اینجا طبق تنظیماتی که گفتیم، به هر هشت بیت دادهی ارسالی، دو بیت آغاز و پایان هم اضافه میکنیم. در واقع ما به جای هشتاد بیت، 10*10=100 بیت ارسال میکنیم. پس زمان ارسال ما میشود:
100 * (1/19200) = 5.20 میلی ثانیه
پینوشت 1:
در ابتدای متن گفتم که این زمان، میشود حدود زمانی که برای ارسال داده توسط میکرو صرف میشود. دلیلش این است که ما زمانی را هم صرف آمادهسازی هر بایت، برای ارسال میکنیم که در اینجا با توجه به اینکه تعداد بایت ها در هر بار، زیاد نبود و همچنین ارسال به کمک وقفه انجام شد، از این زمان توانستیم صرف نظر کنیم. اما باید در نظر داشت که اگر این شرایط نبود و مثلاً تعداد زیادی داده برای هر بار ارسال داشتیم، شاید لازم میشد که این زمان را هم در نظر میگرفتیم و یا اینکه روش ارسال خود را به کمک DMA قرار میدادیم تا به این زمان نزدیک شویم.
پینوشت 2:
بار دیگر توضیح کوتاه بالا در خصوص baud rate و bit rate را بخوانید. چگونه میشود المان ارسالی ما بیشتر از یک بیت داده در خود داشته باشد؟
در اینجا با بحثهای مخابراتی در خصوص ارسال اطلاعات مواجه هستیم که از حوصله این مطلب خارج است. اما در حد اشاره بگویم که فرض کنید روش ارسالی ما به این حالت است که صفر ولت یعنی 00، پنج ولت یعنی 01، ده ولت یعنی 10 و پانزده ولت هم معادل 11 است. در واقع ما بر خلاف دیجیتال که دو سطح ولتاژ داشتیم برای نمایش صفر یا یک، در اینجا چهار سطح ولتاژ داریم که به کمک آنها هر بار میتوانیم دو بیت را نمایش دهیم. به عبارتی هر المان ارسالی ما، حاوی دو بیت اطلاعات است.