خانه > آموزش > راه اندازی سون سگمنت با LPC1768

راه اندازی سون سگمنت با LPC1768

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

اگر با رجیسترهای GPIO آشنایی ندارید بخوانید: کار با رجیسترهای ورودی خروجی همه منظوره(GPIO) در LPC1768

اگر با پورت های خروجی میکروکنترلر LPC1768 آشنایی ندارید بخوانید: اتصال LED به LPC1768

 

آشنایی به سون سگمنت

سون سگمنت ها (Seven Segments) یا نمایشگرهای هفت قسمتی امروزه به طور فراگیری در زندگی امروز به کار می روند به طوری که کمتر کسی را می توان یافت که از نزدیک با این نوع نمایشگرها آشنایی نداشته باشد. امروزه این نمایشگرها در آسانسورها، ترازوهای دیجیتال، ساعت های دیجیتال و خیلی موراد دیگر به کار می روند. در شکل زیر یک سون سگمنت واقعی از دو نمای مختلف نشان داده شده است:

connecting-7segment-to-lpc1768-1این نمایشگر همان طور که از نام آن مشخص است از هفت قسمت تشکیل شده است که هر کدام از این هفت قسمت می توانند به طور مستقل خاموش یا روشن باشند. بسته به اینکه کدام یک از قسمت ها روشن و کدام یک خاموش باشند این نمایشگر می تواند یک از اعداد 0 تا 9 انگلیسی(و همچنین برخی چیزهای دیگر!) را نمایش دهد. برای مثال نمایشگر شکل زیر عدد 2 انگلیسی را نمایش می دهد:

connecting-7segment-to-lpc1768-2

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

این نمایشگرها چگونه کار می کنند؟

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

  • سون سگمنت کاتد مشترک:

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

connecting-7segment-to-lpc1768-3همان طور که در شکل مشخص است سر منفی یا کاتد تمام LED ها به هم متصل می شوند و در نهایت به پایه GND نمایشگر متصل می شوند(این اتصالات با رنگ سبز مشخص شده است). توجه کنید که پایه GND در بالا و پایین نمایشگر از داخل به هم متصل هستند و در نهایت کافیست یکی از آن ها  به زمین متصل شود. در عمل با توجه به محل قرارگرفتن سون سگمنت در مدار، هر یک از این پایه ها به زمین نزدیک تر بود همان را به زمین وصل می کنیم. اگر پایه مشترک نمایشگر به زمین وصل شده باشد کافیست پایه مربوط به هر قسمت را به ولتاژ مناسب وصل کنیم تا آن قطعه روشن شود.

چگونه ولتاژ مناسب به پایه ها اعمال کنیم؟

معمولا هر LED برای روشن شدن به ولتاژ حدود 2 ولت نیاز دارد و با این ولتاژ حدودا 10 تا 20 میلی آمپر جریان می کشد(برای LEDهای مختلف فرق می کند). حال اگر بخواهیم سون سگمنت را با میکروکنترلری راه اندازی کنیم که در  پایه های خروجی خود ولتاژ 5 ولت به ما می دهند طبیعی است که اگر پایه خروجی میکرو را به پایه های سون سگمنت متصل نماییم باعث آسیب دیدن LEDهای آن خواهد شد. بنابراین برای اینکه جریان و ولتاژ اعمالی به هر LED را کنترل نماییم باید یک مقاومت با آن سری کنیم:

connecting-7segment-to-lpc1768-4

اما اندازه این مقاومت چقدر باشد؟ اگر جریان LED را به صورت محتاطانه برابر 10 میلی آمپر در نظر بگیریم و ولتاژ مورد نیاز LED را برابر 2 ولت در نظر بگیریم، ولتاژ مقاومت باید 3 ولت باشد. بنابراین با توجه به جریان 10 میلی آمپر مقدار مقاومت برابراست با:

formula1

نزدیک ترین مقاومت استاندارد به این مقدار برابر است با 330 اهم.

اما اگر سون سگمنت را با میکروکنترلرهای خانواده ARM راه اندازی نماییم چون ولتاژ پایه های خروجی این میکروکنترلرها 3.3 ولت می باشد مقدار مناسب برای مقاومت ها برابر است با:

formula2

هر چند برای LED های مختلف این مقدار باید در عمل و با توجه به شدت نور مناسب با آزمایش به دست آید ولی این اعداد مقادیر تقریبی مناسبی به ما می دهد.

برای مثال برای آنکه یک سون سگمنت کاتد مشترک مانند شکل زیر عدد یک را نمایش دهد:

connecting-7segment-to-lpc1768-5

کافیست مانند مدار شکل زیر قسمت های a و b آن را به VCC متصل کنیم:

connecting-7segment-to-lpc1768-6

  • سون سگمنت آند مشترک:

همان طور که از نام آن مشخص است در این نوع سون سگمنت ها آندها یا پایه های مثبت LEDها به هم متصل می شوند:

connecting-7segment-to-lpc1768-7در این نوع سون سگمنت پایه مشترک به ولتاژ مناسب متصل شده و برای روشن کردن هر کدام از قسمت ها باید پایه مورد نظر را به زمین متصل نمود. برای مثال برای اینکه یک سون سگمنت آند مشترک عدد 1 را نمایش دهد کافیست مداری مانند شکل زیر را متصل نماییم:

connecting-7segment-to-lpc1768-8

راه اندازی سون سگمنت با LPC1768

فرض کنید می خواهیم یک سون سگمنت کاتد مشترک را با استفاده از میکروکنترلر LPC1768 راه اندازی نماییم. برای این کار کافیست پایه مشترک سون سگمنت را به زمین متصل کرده و پایه های a، b….g را به پایه های خروجی میکروکنترلر وصل کنیم. در اینجا فرض کنید که نحوه اتصال سون سگمنت به میکرو مانند شکل زیر باشد:

connecting-7segment-to-lpc1768-9

مقدار R را هم با توجه به مطالب گفته شده در بالا برابر 130 اهم انتخاب می کنیم. می خواهیم برنامه ای بنویسیم که روی سون سگمنت اعداد از 0 تا 9 به صورت متوالی و با یک فاصله زمانی شمارش شوند. کاری که باید انجام دهیم این است که مقادیر مناسب را برای نمایش اعداد 0 تا 9 به پورت 2 میکروکنترلر بفرستیم. برای محاسبه این مقادیر از طریق شکل زیر ابتدا به دست می آوریم که در حالت نمایش هر یک از اعداد کدام یک از قطعه های سون سگمنت روشن و کدام خاموش اند:

connecting-7segment-to-lpc1768-10

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

connecting-7segment-to-lpc1768-11

بنابراین برای شمارش اعداد روی سون سگمنت کافیست اعداد ستون آخر(کد هگز) را به طور متوالی به پورت 2 میکروکنترلر بفرستیم. در برنامه زیر شمارش اعداد از 0 تا 9 روی سون سگمنت انجام می شود:

اگر با نحوه ساخت پروژه در Keil آشنایی ندارید بخوانید: نحوه ساخت پروژه جدید در کامپایلر KEIL µvision 5

در این برنامه به طور خیلی ساده کدهای هگز مربوط به اعداد 0 تا 9 را با یک تاخیر 1 ثانیه ای به خروجی پورت 2 می فرستیم. اما این برنامه را می توان به صورت بهینه تری با استفاده از حلقه for و آرایه ها نوشت. به این صورت که کدهای هگز را به صورت یکجا در یک آرایه ذخیره کرده و با استفاده از حلقه هر بار یک عضو از این آرایه را فراخوانی کرده و به پورت 2 می فرستیم:

 

در این برنامه یک آرایه با 10 درایه از نوع 8 بیتی بدون علامت (uint8_t) به نام pattern تعریف کرده و کدهای هگز را در آن ذخیره می کنیم. همچنین یک متغیر 8 بیتی دیگر به نام counter برای شمارش. در داخل حلقه اصلی برنامه، یک حلقه for وجود دارد که شمارنده آن متغیر counter  است. و هر بار که این متغیر افزایش می یابد یک درایه از آرایه pattern را به پورت 2 می فرستیم.

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

اگر با نحوه اتصال سوئیچ به LPC1768 آشنایی ندارید بخوانید: کنترل LED توسط سوئیچ با LPC1768

مثال: برنامه­ای بنویسید که با استفاده از دو سوئیچ بتوان شمارش سون سگمنت قبلی را کنترل نمود. به این صورت که در ابتدا سون سگمنت عدد صفر را نمایش دهد. با فشردن یکی از سوئیچ ها عدد روی سون سگمنت یک واحد افزایش یابد و با فشردن دیگری یک واحد کاهش یابد. در هیچ صورت شمارنده از صفر کمتر و از 9 بیشتر نشود. سوئیچ ها به پایه های P2.8 و P2.9 متصل شده اند. برای سوئیچ ها از مقاومت بالاگذر داخلی استفاده کنید.

حل: برنامه نوشته شده در Keil به صورت زیر است:

اگر مطلب کنترل LED توسط سوئیچ با LPC1768 را با دقت مطالعه کرده باشید درک این مثال کار ساده ای است. دو دستور شرطی هر کدام برای یک سوئیچ و دستورات تاخیر و while داخل دستورات شرطی هم برای رفع پرش سوئیچ است. دو دستور شرطی if دیگر هم وجود دارد که برای جلوگیری از رد شدن شمارنده از 0 و 9 می باشد.

 

 

 

درباره ی مدیر سایت

پاسخ دهید

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