بیت بنگ

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

بیت بنگ روشی برای ارتباطات سریال با پیاده سازی نرم‌افزاری به‌جای سخت افزار اختصاصی می‌باشد. برنامه نرم‌افزاری مستقیماً چگونگی پایه های میکروکنترلر را سامان‌دهی کرده یا نمونه برداری کرده و وظیفه همه پارامترهای سیگنال از جمله زمان بندی، سطوح، هم زمانی و غیره را برعهده دارد. در مقایسه با بیت بنگ، سخت افزار اختصاصی (مانند یک مودم، یوارت و یا شیفت رجیستر) همه این پارامترها را کنترل کرده و یک اینترفیس داده بافر شده در دیگر سیستم ها فراهم می‌کند، به فرمی که نرم‌افزاری برای دمدوله کردن سیگنال مورد نیاز نمی‌باشد. فرایند ببت بنگ را می‌توان با قیمت بسیار پایینی انجام داد و برای نمونه در سیستم های امبدد (توکار) به کار گرفت.[۱] هرچند گاهی بیت بنگ کردن نوعی هک کردن به حساب می‌اید، ولی این امکان را می‌دهد که با کمترین یا بدون هرگونه تغییراتی، از پروتکل های گوناگون برای ارتباط با انوع دستگاه های ارتباط سریال از جمله انواع مودم های وایرلس (بی سیم) FSK و GFSK و FM و PLC (دیتا روی برق شهر) و GSM و پیامک SMS و اینترنت GPRS و مکان یاب GPS و پل یا بریج های USB به سریال و SPI و I2C و شبکه اترنت (Ethernet) و کارت خوان های مغناطیسی و الکترومغناطیسی RFID برای کاربردهای شناسایی و ساعت زنی ، ماژول های اثر انگشت و تشخیص نشت گاز و سنسورهای گوناگون و غیره بهره گرفت.
مشکلاتی هم در این روش وجود دارد. پروسه شبیه سازی نرم‌افزاری توان پردازشی بیشتری نسبت به سخت افزار اختصاصی مصرف می کند. میکروکنترلر نسبت به حجم دیگر وظایفش، بیشتر زمان خود را صرف خواندن یا نوشتن نمونه ها از پایه ورودی یا روی پایه خروجی می‌کند. سیگنال تولید شده شامل جیتر و گلیچ های بیش‌تری خواهد بود، مخصوصا اگر پردازنده در هنگام ارتباط سریال وظایف دیگری را هم پردازش نماید. با این وجود، اگر برنامه بیت بنگ به حالت وقفه(اینتراپت) سیگنال انجام شود، این مشکل کم‌تر نمود پیدا می‌کند مخصوصا اگر سیگنال های کنترلی مانند RTS و CTS و DCD موجود باشند.

نمونه کد به زبان C[ویرایش]

// transmit byte serially, MSB first
void send_8bit_serial_data(unsigned char data)
{
   int i;
 
   // select device
   output_high(SD_CS);
 
   // send bits 7..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(SD_DI);
       else
           output_low(SD_DI);
 
       // pulse clock to indicate that bit value should be read
       output_low(SD_CLK);
       output_high(SD_CLK);
 
       // shift byte left so next bit will be leftmost
       data <<= 1;
   }
 
   // deselect device
   output_low(SD_CS);
}

منابع[ویرایش]

  1. Michael Predko (2000). Programming and customizing PICmicro microcontrollers
    (2nd ed.). McGraw-Hill Professional. p. 10–12. ISBN 978-0-07-136172-9.

پیوند به بیرون[ویرایش]

Asynchronous Serial (RS-232)
I2C Bus
SPI Bus