راه اندازی سون سگمنت با میکروکنترلر AVR

با سلام خدمت دوستان عزیز، با پروژه ای دیگه از مجموعه پروژه های آموزشی در خدمتتون هستم. این بار میخوایم با AVR سون سگمنت راه اندازی کنیم. شاید بپرسید سون سگمنت چیه؟ خب جوابتون رو در ادامه دادم. شاید بپرسید چطوره میشه این کار رو کرد؟ باز هم در ادامه ی مطلب به جواب سوالتون خواهید رسید. پس بیشتر از این منتظرتون نمیذارم.

فقط یه چیز دیگه بگم و اون هم این که مطالبی که باید از قبل بلد باشین رو قبلا توی پست برنامه ریزی پورت ها و همچنین پست منابع وقفه یاد دادیم.

 

سون سگمنت چیست؟

امروزه سون سگمنت جزء رایج ترین نمایشگرهای موجود در بازار است چرا که ارزان است ؛ برنامه ریزی آن آسان بوده و از لحاظ اندازه هم قطعه ای کوچک می باشد. سون سگمنت ها در ساعت های دیجیتال، شمارنده ها و دیگر وسایل الکترونیکی جهت نمایش اطلاعات عددی مورد استفاده قرار می گیرند. همانطور که از اسم آن پیداست سون سگمنت دارای هفت قطعه دیود نوری می باشد که به فرمی مستطیلی مانند چیده شده اند. هر LED یک سگمنت یا قطعه نامیده می شود چون با روشن شدن هر قطعه، آن قطعه در تشکیل شکل عدد مورد نمایش شرکت می کند. یک قطعه ی دیود نوری هشتم هم وجود دارد که نقطه اعشاری را معین می کند.

سون سگمنت

دیود نوری به زبان ساده

LED یا دیود نوری یک قطعه ی ساده ی الکترونیکی است که هنگامی که جریان الکتریکی از آن می گذرد از خودش نور ساطع می کند. دیود نوری نیز مانند همه ی دیودهای دیگر دارای دو سر آند (مثبت) و کاتد (منفی) است. به طوری که فقط جریانی را هدایت می کند که طرف مثبت ولتاژ به سمت آند و جهت منفی ولتاژ به سمت کاتد متصل باشد.  یعنی جریان از آند به سمت کاتد جاری شود. LED هایی که برای کاربردهای عمومی مورد استفاده قرار می گیرند برای روشن شدن نیاز به جریانی در حدود ۷۵ میلی آمپر و یا کمتر دارند تا روشن شوند. به همین دلیل برای محدود کردن جریان از مقاومت هم استفاده می شود. در میکروکنترلر AVR جریانی که هر پین پشتیبانی می کند در حدود ۲۰ میلی آمپر است. پس می توان با حذف مقاومت یک LED را به طور مستقیم توسط میکروکنترلر روشن کرد. در واقع اگر مقاومتی اضافه شود شدت نور LED کم می شود. در شکل زیر یک LED به طور صحیح راه اندازی شده است.

LED

چیدمان سون سگمنت

همانطور که در شکل زیر نمایش داده شده است هفت LED موجود در سون سگمنت با حروف A، B، C، D، E، F و G برچسب گذاری می شوند. البته بعضی از سون سگمنت ها دارای یک  LED دیگر نیز برای نمایش ممیز اعشاری (dp) هستند که در شکل با حرف H نمایش داده شده است.

چیدمان سون سگمنت

سون سگمنت ها برای نمایش ارقام عددی مورد استفاده قرار می گیرند. شکل زیر نشان می دهد که برای نمایش اعداد ۱ و ۲ و ۳ و ۴ و ۵ و ۶ کدام LEDها باید روشن شوند. رقم های دیگر (۷ و ۸ و ۹ و ۰) نیز با روشن کردن LEDهای مناسب قابل نمایش می باشند:

سون سگمنت

یک سون سگمنت همچنین برای نمایش بعضی از حروف انگلیسی نیز قابل استفاده است. شکل زیر نشان می دهد که برای نمایش حروف A، F، H، L و P کدام LEDها باید روشن شوند:

۷seg- LtoP

 در انیمیشن زیر نحوه ی نمایش اعداد و حروف بهتر نشان داده شده است:

۷seg-animation

 

انواع سون‌سگمنت

در بازار دو نوع سون سگمنت وجود دارد:

۱) کاتد مشترک: در سون‌سگمنت کاتد مشترک سر منفی یا کاتد تمامی LED ها از داخل به پایه ی مشترک متصل شده اند که  باید به زمین وصل شود. به منظور روشن کردن LED مورد نظر نیاز است تا  ولتاژ +۵ ولت به قطب مثبت و یا آند آن LED اعمال شود، و در صورت نیاز یک مقاومت محدودکننده ی جریان نیز به قطب مثبت متصل گردد.

۲) آند مشترک: در سون سگمنت آند مشترک سرهای مثبت یا آند همه ی LEDها از داخل به پایه ی مشترک سون سگمنت متصل شده اند که باید به منبع ولتاژ +۵ ولت وصل گردد. جهت روشن کردن یک LED باید پین مربوط به کاتد آن را به زمین متصل نمود.

common anode/cathode

سون سگمنت ها در اندازه های مختلف ۰٫۲۸ ، ۰٫۳، ۰٫۳۲، ۰٫۳۶، ۰٫۳۹، ۰٫۴، ۰٫۵، ۰٫۵۶، ۰٫۶، ۰٫۸، ۱٫۰، ۱٫۲، ۱٫۵، ۱٫۸، ۲٫۰، ۲٫۳، ۳٫۰، ۴٫۰، ۵٫۰ و ۷٫۰ اینچی در بازار موجود هستند. همچنین در رنگ های مختلف قرمز، سبز، زرد، نارنجی، آبی و سفید عرضه می گردند.

پیکربندی پایه های سون سگمنت:

برای استفاده کردن از سون سگمنت نیاز است تا نحوه ی چیدمان پایه های آن را دانست. همانطور که احتمالا حدس زده اید این نمایشگرها باید ۹ پین داشته باشند (یکی برای هر قطعه LED، ممیز اعشار و پایه ی مشترک) اما ماژول های موجود در بازار دارای دو پایه ی مشترک هستند که از داخل هم به هم متصل می باشند. بنابراین در نهایت هر سون سگمنت دارای ۱۰ پایه می باشد. شکل زیر چینش پایه های یک سون سگمنت را نشان می دهد.

سون سگمنت

راه اندازی سون‌سگمنت با میکروکنترلر AVR:

۱) راه اندازی مستقیم: در راه اندازی مستقیم ۸ پایهی سون سگمنت را به هشت پایه ی خروجی از میکروکنترلر متصل می کنیم. همچنین باید بدانیم که مثلا برای نمایش عدد ۵ کدام LEDها باید روشن شوند و سپس پایه های مربوط به آن LEDها را یک کنیم. به همین دلیل نیاز به یک جدول درستی داریم.

جدول درستی برای نمایش ارقام ۰ تا ۹ و حروف قابل نمایش:

برای نمایش اعداد صفر تا ۹ بر روی یک سون‌سگمنت کافی است تا هفت پین مربوط به اعداد و یک پین نقطه ی اعشاری را برنامه نویسی کنیم. برای این کار از جدول زیر استفاده می شود. این جدول مربوط به سون سگمنت کاتد مشترک است. برای سون سگمنت آند مشترک کافی است همه ی صفرها را به یک و همه ی یک ها را به صفر تغییر دهیم. سون سگمنت

نحوه ی اتصال به میکروکنترلر:

بسته به این که جدول درستی چگونه تنظیم شده باشد نحوه ی اتصال به میکروکنترلر هم متفاوت خواهد بود. اگر کدهای هگز جدول درستی برای ترتیب ABCDEFGH پایه های سون سگمنت نوشته شده باشند، پایه ی A به PIN.7 پورت میکرو و به همین ترتیب پایه ی H  به PIN.0 پورت میکرو متصل می شود. ولی اگر جدول درستی برای ترتیب HGFEDCBA نوشته شده باشد باید PIN.0 پورت به پایه ی A متصل گردد و به همین ترتیب PIN.7 به پایه ی H وصل شود. در این جا حالت دوم به کار گرفته شده است.

برنامه ریزی میکرکنترلر برای شمارنده ی تک رقمی سون‌سگمنت:

در این پروژه قصد داریم یک شمارنده ی تک رقمی با سون سگمنت طراحی، برنامه نویسی و شبیه سازی کنیم. هشت پایه از پورت A میکروکنترلر ATmega16 را به هشت پایه ی سون سگمنت متصل می نماییم. با توجه به این که از جدولی استفاده می کنیم که قبلا نیز آمد، باید پایه ی PINA.0 را به پایه ی A از سون سگمنت و به همین ترتیب پایه ی PINA.7 میکرو را به پایه ی H وصل کنیم. البته در این جا نقطه ی اعشار همیشه خاموش می ماند. یک میکروسوئیچ به پایه ی INT0 وصل می شود. در ابتدا سون‌سگمنت عدد ۰ را به حالت چشمک زن نشان می دهد. در صورتی که میکروسوئیچ فشرده شود شمارنده از ۰ تا ۹ را شمرده و دوباره به حالت چشمک زن برمی گردد.

برنامه ی این پروژه را به زبان C و در محیط کدویژن می نویسیم:

 

همان طور که مشاهده می شود جدول درستی را به صورت یک آرایه به نام x تعریف کرده ایم. که خانه ی صفر آن کد هگز مربوط به نمایش عدد ۰، خانه ی ۱ آن کد هگز مربوط به نمایش عدد ۱ و …. را در خود جا داده است. با توجه به این که می خواهیم برای کار با کلید از وقفه ی خارجی INT0 استفاده کنیم، ابتدا پرچم وقفه ی عمومی و وقفه ی خارجی INT0 را فعال می نماییم. با توجه به این که سطح حساس این وقفه به طور پیش فرض سطح صفر است کلید را به نحوی قرار می دهیم که با فشرده شدن آن به پایه ی INT0 مقدار صفر اعمال شود. تابع اصلی شامل یک حلقه ی while است که در آن کد هگز مربوط به عدد صفر بر روی پورت A قرار داده می شود تا سون‌سگمنت صفر را نشان دهد. پس از ۵۰ میلی ثانیه تاخیر مقدار صفر را بر روی پورت A قرار می دهیم تا سون سگمنت خاموش شود و باز هم به مدت ۵۰ میلی ثانیه صبر می کنیم. با تکرار حلقه ی While سون سگمنت عدد صفر را به صورت چشمک زن نمایش می دهد. با فشرده شدن کلید برنامه وارد زیر روال وقفه ی INT0 می شود که در آن اعداد ۰ تا ۹ با فاصله های زمانی ۵۰ میلی ثانیه ای در یک حلقه ی for بر روی  سون سگمنت نمایش داده می شود. پس از آن برنامه از روال خارج گشته و باز هم سون سگمنت به حالت چشمک زن در می آید.

شبیه سازی این برنامه در محیط Proteus انجام شده است و در عکس زیر قابل مشاهده می باشد:

سون سگمنت

۲) راه اندازی با استفاده از آی سی های راه انداز:

استفاده از آس سی های راه انداز مبدل BCD به سون سگمنت کار را ساده تر می کند؛ تعداد خطوط برنامه نویسی را کاهش می دهد؛ تعداد پایه های مورد نیاز در میکرو را کاهش می دهد و نیاز به کد کردن به صورت دستی را رفع می نماید.

کد BCD چیست؟

در نمایش اعداد دهدهی برای هر رقم یک کد بایری ۴ بیتی در نظر می گیریم که به صورت جدول زیر است:

BCD

مزیت bcd آن است که همان عدد مبنای ده خودمان است که با یک و صفر بیان شده است (از یک طرف مبنای ده است از یک طرف باینری) مثلاً عدد ۵۹۶۴ به bcd می شود: ۰۱۰۰-۰۱۱۰-۱۰۰۱-۰۱۰۱ نتیجتاً در ورودی کلیدها و یا خروجی صفحه نمایش مدارات میکروپروسسوری و جایی که میخواهیم با کاربر انسانی تعامل داشته باشیم از BCD استفاده می کنیم.

مبدل های BCD به ۷-segment آی سی های ۷۴۴۷ (برای سون سگمنت آند مشترک) و ۷۴۴۸ (برای سون سگمنت کاتد مشترک) می باشند، که عدد ۰ تا ۹ را به صورت کد BCD دریافت نموده و پس از کد کردن آن ها هفت بیت مورد نظر را به سون سگمنت می دهند تا عدد دریافت شده را نمایش دهد.

برنامه ی زیر اصلاح شده ی برنامه ی قبل است که برای راه اندازی سون سگمنت آند مشترک با استفاده از آی سی ۷۴۴۷ نوشته شده است:

همان طور که مشاهده می شود اینجا دیگر نیاز به استفاده از جدول نیست و مستقیما مقدار دهدهی مورد نظر را روی پورت می ریزیم. همچنین برای این که سون سگمنت به طور کامل خاموش شود کافی است مقدار F هگز را به آی سی بدهیم.

 شبیه سازی این برنامه در محیط Proteus انجام شده است و در عکس زیر قابل مشاهده می باشد:

سون سگمنت

فایل های هر دو روش راه اندازی شامل فایل C، فایل hex و فایل شبیه سازی پروتئوس را از لینک پایین صفحه دانلود نمایید.

مالتی پلکس کردن سون‌سگمنت ها:

گاهی نیاز داریم که چند سون‌سگمنت را توسط یک پورت مقدار دهی کنیم. به عبارت دیگر با یک پورت یک عدد چند رقمی را با سون سگمنت هایی نمایش دهیم. به این کار مالتی پلکس کردن سون سگمنت ها گفته می شود. یک نمونه از مواردی که در قسمت محصولات سایت قرار داده ایم و در آن از سون سگمنت مالتی پلکس استفاده می شود را در شکل زیر می بینید:

سون سگمنت

برای یادگیری اصول این کار به محصول «تایمر معکوس و مالتی پلکس» مراجعه فرمایید. در این پست با سون سگمنت مالتی پلکس به خوبی آشنا خواهید شد.

فایل های مربوط به راه اندازی سون سگمنت را از طریق لینک زیر دانلود نمایید:
پسورد فایل زیپ: www.microlearn.ir

دانلود فایل پروژه سون سگمنت

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

درباره‌ی مجتبی حکیمیان

Avatar
کارشناس الکترونیک و کارشناس ارشد مخابرات سیستم | زمینه ی تحقیقاتی : پردازش تصویر و تعقیب اشیاء متحرک |‌فعال در حوزه ی الکترونیک مبتنی بر میکروکنترلر | برنامه نویس و طراح بردهای الکترونیکی مبتنی بر میکروکنترلر

۵۴ نظر

  1. Avatar

    باسلام
    وخسته نباشید
    من چطوری میتونم یه برنامه بنویسم که از ۶۰ تا ۰ بشماره با فشار دادن شستی، بعد از رسیدن به ۰ دوباره عدد ۶۰ رو سون سگمنت نشون بده و منتظر باشه تا شستی فشار داده شود و شروع به شمارش کنه.در هر مرحله با فشاردادن شستی reset نمایشگر سون سگمنت عدد ۶۰ رو نشون بده و منتظر استارت باشه که شروع به شمارش منه؟
    ممنون میشم راهنمایی کنید

    • احسان عبداللهی

      سلام دوست عزیز
      کسی نمیتونه به شما بگه از کجا شروع کنید و به کجا برسید. باید اول الگوریتم را خودتون درک کنید و اگه لازم بود روی کاغذ بنویسید. سپس با زبان C مرحله به مرحله پیاده سازی کنید. اگه ضعف در برنامه نویسی یا میکرو دارید اول اون ها رو اصلاح کنید بعد اقدام به برنامه نویسی کنید.

      • Avatar

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

  2. Avatar

    سلام و خسته نباشید
    چگونه میتونم یک سگمنت پایین شمار سه شمارنده که از ۹۹۶ شروع کند تا۰۰۰

  3. Avatar

    لینک مشکل داره

  4. Avatar

    سلام
    ممنون از اطلاعات مفیدتون
    یک سوال
    در واقعیت که بخوایم سون سگمنت راه اندازی کنیم
    خروجی ۷۴۴۷ می تونیم عین مداری که در پروتئوس می بندیم مستقیم به سون سگمنت ببندیم؟
    مقاومت یا ترانزیستور نمی خواد؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

  5. Avatar

    سلام
    خیلی ممنون از آموزش های خوبتون. واقعا مفید هستند و کمک زیادی به یادگیری میکنن
    یه سوال
    با ۷۴۴۷ و یا ۷۴۴۸ چطور میشه اعداد ۱۰ تا ۱۵ (اعداد بیشتر از ۹) رو نشون داد؟

  6. Avatar

    سلام میشه برنامه شمارنده ۰تا۹
    برنامه cشو تو کدویژن برام بفرستین
    بعد چجوری سون سگمنتو تو avr فعال کنیم

  7. Avatar

    سلام خسته نباشی من می خواستم یک شمارنده چهار رقمی راه بندازم ولی هر کار می کنم نمیشه .لطفا اگر می تونید کمکم کنید

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

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