AVR, PIC, STM32, آردوینو arduino, توصیه شده, کتابخانه برنامه نویسی

روش خلاقانه برای افزایش پورت میکروکنترلر

1shift sisoog

روش خلاقانه برای افزایش پورت میکروکنترلر تنها با یک بیت

ممکن است برای شما هم پیش آمده باشد که به دلیل محدودیت پایه‌های میکروکنترلر مجبور شده باشید که میکروکنترلر را عوض کنید و از میکروکنترلری با تعداد پایه‌های بیشتر استفاده کنید. برای افزایش تعداد پورت‌های میکروکنترلر، راه‌های زیادی وجود دارد؛ یکی از این راه‌ها استفاده از لچ(latch)  است. اما لچ‌ها هم خارج از اشکال نیستند. مشکل اساسی آن‌ها پیچیدگی سیم‌کشی‌شان است.

همان‌طور که در تصویر فوق مشاهده می‌کنید، برای گسترش پورت‌های میکرو به 64 بیت، شما نیازمند 12 پایه بر روی میکروکنترلر خواهید بود. در کنار این نقص، این روش، پرسرعت‌ترین روش ممکن برای گسترش پورت‌های میکروکنترلر است.

با توجه به پیچیدگی زیاد در سیم‌کشی، و همچنین تعداد پایه‌های زیاد برای راه‌اندازی، بیشتر طراح‌ها ترجیح می‌دهند از روش جایگزین دیگری استفاده کنند و آن، استفاده از شیفت رجیستر است. در واقع شیفت رجیستر مجموعه‌ای از فلیپ‌فلاپ‌ها است که در آن خروجی هر فلیپ‌فلاپ به ورودی فلیپ‌فلاپ بعدی در یک زنجیره متصل است. نتیجه اینکه در یک مدار که موقعیت جابه‌جا می‌شود، آرایه‌ای از بیتها در آن ذخیره شده، در هر پالس ساعت، یک بیت که در ورودی حاضر است به داخل رفته و آخرین بیت از آن خارج می‌شود. به صورت خلاصه می‌توان گفت که یک شیفت رجیستر داده‌های ارسال‌شده به‌صورت سریال را به شکل موازی در خروجی ظاهر می‌کند.

ساختار شیفت رجیستر

آی‌سی محبوب 74Hc595  یکی از آی‌سی های پراستفاده برای افزایش پورت‌های میکروکنترلر است. این آی‌سی درواقع یک شیفت رجیستر به همراه یک لچ است. با استفاده از آی‌سی 74Hc595  به‌راحتی و با کم‌ترین سیم‌کشی ممکن، شما خواهید توانست پورت‌های میکروکنترلر خود را افزایش دهید.

همان‌طور که در عکس فوق مشاهده می‌کنید برای گسترش پورت از طریق 74Hc595  شما فقط نیاز به 3 پایه از میکروکنترلر دارید، یک پایه جهت کلاک، یک پایه جهت دیتا و پایه آخر هم برای لود کردن داده ارسال‌شده در خروجی. مطابق نمودار زیر:

با استفاده از این روش می توان هر تعداد پورت جدید که لازم باشد به سیستم اضافه کرد و تنها 3 پایه از میکرو، مورد نیاز است.

افزایش پورت تنها با یک پایه!

حال فرض کنید بعد از طراحی، تنها یک پایه از میکروکنترلر آزاد مانده و قصد دارید یک LCD یا Seven Segment  به مدار خود اضافه کنید. ظاهراً تنها راه موجود تعویض میکروکنترلر است! اما آیا واقعاً راهی است که با استفاده از یک پایه، یک LCD را راه‌اندازی کنیم؟

 

در جواب باید بگویم: بله، همیشه راهی هست! این بار راه‌حل پیچیده نیست و خیلی ساده خواهد بود، برای این کار ما از همان آیسی 74HC595  کمک خواهیم گرفت؛ ولی به شیوه‌ای که بتوانیم با استفاده از یک خط داده، سه سیگنال کنترلی را ایجاد نماییم.

اصول کار خیلی ساده است: ما با قرار دادن یک RC در مسیر داده، سعی می‌کنیم که سیگنال DAT نسبت به CLK دارای یک شیفت زمانی باشد. همان‌گونه که در تصویر فوق مشاده می‌کنید برای اعمال صفر بر روی سیگنال DAT باید با توجه به مقادیر RC استفاده‌شده، سیگنال ورودی مدت‌زمان مناسبی صفر باقی بماند. در غیر این صورت مقدار یک ثبت خواهد شد.

ولی هنوز یک مشکل دیگر وجود دارد: تولید سیگنال Latch.  برای ظاهر شدن داده‌های شیفت داده‌شده در خروجی، باید پایه Latch نیز تحریک شود، برای این منظور نیز از همین تکنیک استفاده می‌کنیم؛ با این تفاوت که RC استفاده‌شده باید زمان متفاوتی نسبت به DAT داشته باشد.

برای جلوگیری از رخ دادن خطا، سعی می‌کنیم که زمان‌های RC تا جای ممکن از هم فاصله داشته باشند. به همین منظور، مقاومت Latch را بیست برابر مقاومت DAT انتخاب می‌کنیم و مقدار خازن‌ها را برابر در نظر می‌گیریم.

 

محاسبه مقادیر RC

آیسی 74HC595  قادر است تا فرکانس 20 مگاهرتز کلاک را تحمل کند. اما محدودیت ما به لحاظ وجود فیلتر پایین گذر (RC) موجود در مدار است. بنابراین سعی می‌کنیم که مقادیر انتخاب‌شده به نحوی باشند که مدار برای طیف وسیعی از میکروکنترلرها قابل‌استفاده باشد. مقدار خازن را ثابت و مساوی 2.2 نانوفارد، ورودی DAT مقاومت را مساوی 1.5 کیلو و ورودی  Latch را بافاصله 20 برابر و مقدار 33 کیلواهم در نظر می‌گیریم.

 


با مقادیر فوق در بدترین حالت، ارسال هر بایت داده 545 میکروثانیه طول خواهد کشید که برای ایجاد نرخ تقریباً 2 کیلوهرتز از داده مناسب خواهد بود.

بدین ترتیب به‌راحتی می‌توان Seven Segment یا LCD یا LED را فقط با استفاده از یک خط داده وصل کرد.

سورس کد

 

تابع Shift_WriteByte یک بایت از طریق یک خط داده منتقل خواهد کرد. دقت داشته باشید قبل از فراخوانی آن حتما یک بار تابع Shift_Init را جهت پیکربندی پورت فراخوانی کرده باشید. مطابق کد زیر:

 

خروجی برنامه :

 

 


 



انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.  همکاری با سیسوگ

 

20 دیدگاه در “روش خلاقانه برای افزایش پورت میکروکنترلر

  1. Avatar محمدحسین گفت:

    سلام مطلب خوبی بود ولی برای این کار تویه کتاب میکروکنترلرهای 8051 دکتر مزیدی یک تراشه از اینتل به نام 8255 معرفی شده است. حتی میشه چندتا از این ها رو به سیستم میکرو وصل کرد و برای راحتی کار سرویس وقفه هم دارد که کار کنترل رو خیلی راحت می کنه

    1. زئوس Zeus زئوس Zeus گفت:

      بله درست می فرمایید ؛ البته خیلی راه های دیگه هم هست ؛ اما دقت کنید این راه تنها نیاز به یک پایه داره ! در صورتی که برای باقیه راه ها چنین چیزی نیست

  2. Avatar سعید گفت:

    ممنون از مطالب ارزشمندتون
    آی سی 74hc595 یه مشکل داره و اونم میزان کم جریان دهی هر پین(6ma) و کل جریانی که میشه از آی سی کشید(35ma) هست.
    لطفا اگر مقدور هست یه آی سی شیفت رجیستر با توان بالاتر برای درایو کردن led معرفی کنید.
    با تشکر

    1. زئوس Zeus زئوس Zeus گفت:

      سلام و درود – بله کاملا درسته ، البته همونطور که اطلاع دارید آیسی 595 آیسی مناسبی برای درایو LED نیست چون محدود کننده جریان روی خروجی ها نداره پس به همین دلیل ممکنه یا خودش یا LED آسیب ببینه !
      برای همین توصیه میکنم برای این کار از آیسی DM135 یا امثال اون استفاده کنید ، این دست آیسی ها دقیقا برای راه اندازی LED در تابلو های LED ساخته شده اند. اگر بخوام قابلیت هاشون رو بگم
      اول این که خروجی 16 بیتی
      دوم کنترل جریان برای هر خروجی (قابل تنظیم به صورت گروهی)
      سوم تشخیص سوختگی LED و گزارش به هاست
      توی پنلی که با استفاده از این آیسی ساخته شد ، بعد از گذشت 6 سال هیچ LED سوخته ای مشاهده نشده.

      1. Avatar سعید گفت:

        ممنون از پاسختون
        این شرکت آی سی 32 بیتی نداره.
        اگر مقدور هست 32 بیتی معرفی کنید.
        من خودم این آی سی رو پیدا کردم که با 3.3v هم کار میکنه.
        R8A66162SP
        ممنون

        1. زئوس Zeus زئوس Zeus گفت:

          خواهش میکنم
          والا ؛ 32 بیت تعداد زیادی هست و فکر میکنم موقع سیم کشی به مشکل بر بخورید مگر این که بخواید RGB کار کنید که هر پیکسل 3 بیت رو مشغول کنه !
          خوبه آیسی که پیدا کردید ولی جریانش قابل تنظیم نیست و البته گزارش پیکسل های سوخته رو هم ظاهرا نداره

  3. Avatar احمد گفت:

    سلام اصطلاح یا تعریف گسترش طول کلمه یا گسترش طول ادرس رو خیلی شنیدم ولی هرچی سرچ کردم نفهمیدم میتونید کمک کنید مرسی .

    1. زئوس Zeus زئوس Zeus گفت:

      ببخشید سوالتون رو متوجه نمیشم ، امکان داره توضیح بیشتری بدید ؟!

      1. Avatar احمد گفت:

        در ادامه توضیحات درس میکروکنترلر ها همیشه حرفی از گسترش طول کلمه و گسترش طول ادرس میزنن حالا این راجب میکروکنترلر هست یا چیز دیگه ایی که از اجزای تشکیل دهندش نمیدونم ?

        1. زئوس Zeus زئوس Zeus گفت:

          ببخشید دوست عزیز ولی متوجه منظورتون نمیشم ! اگه میشه تکه ای از مقاله که این اصطلاحات درش استفاده شده رو معرفی کنید.

      2. Avatar محمد گفت:

        spread address length va
        word length
        منظورش اینهاست

        1. زئوس Zeus زئوس Zeus گفت:

          امم – خوب این کلمات خیلی معنی میتونه داشته باشه !
          پاراگرافی چیزی که متوجه منظورشون بشم وجود نداره آیا ؟
          متشکرم

  4. Avatar ehsanj گفت:

    سلام لطفا منبع این مطب را بیان کنید

  5. Avatar آرین گفت:

    بسیار مطلب کاربردی بود سپاس

  6. Avatar حسین گفت:

    خیلی جالب بود

    1. زئوس Zeus زئوس Zeus گفت:

      خواهش می‌کنم دوست عزیز

  7. مهدی زرکوب مهدی زرکوب گفت:

    سلام
    مطلب جالبی بود.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *