راه اندازی صفحه نمایش۸رقمی با استفاده ازSeven Segment

راه اندازی صفحه نمایش۸رقمی با استفاده ازSeven Segment

شاید به نظر با ورود LCD ها و صفحات نمایشی مدرن، دیگر نیازی به سیستم های قدیمی و نمایش دهنده های دیجیتالی Seven-Segment (سون سگمنت) دار نباشد.
اما هنوز هم در بسیاری از کارخانه ها و کارگاه ها از این نمایش دهنده ها در ابعاد بزرگ و کوچک برای مقاصد مختلفی از جمله تایمر و شمارنده استفاده می شود.
یک Seven-Segment از هفت LED تشکیل می شود که همگی یک پایه مشترک دارند، که با روشن کردن LED ها، می توان اعداد و برخی از حروف را بر روی آنها نمایش داد.
پایه مشترک Seven-Segment ها، در هر دو مدل Anode مشترک و Cathode مشترک موجود می باشد.
زمانی که تعداد Seven-Segment ها زیاد می شود، برای روشن کردن آنها به صورت مستقیم، به تعداد زیادی خروجی نیاز داریم که البته مقرون به صرفه نیست.
اما از روش دیگری نیز می توان استفاده نمود که به آن Multiplex می گویند و طرز کار آن بدین شکل است که تمامی پایه های a تا z را متناظرا به هم متصل می کنیم و برای نمایش کاراکترها بر روی هر Seven-Segment، ابتدا پایه مشترک LED های آن Seven Segment خاص را فعال کرده و سپس دیتا را بر روی شبکه a تا z قرار می دهیم.
چنانچه این عمل با سرعت اجرا شود، می توانیم متون دلخواه خود را بر روی تعداد زیادی از Seven-Segment ها نمایش دهیم.
البته باید توجه داشت که در این روش زمان روشن بودن هر Seven-Segment، معادل ۱ سهم از کل زمان روشن بودن مجموع آنها خواهد بود و این موضوع باعث کم نور شدن آنها خواهد شد. برای جبران این نقیصه می توان از ولتاژ بالاتری برای تحریک Seven-Segment ها استفاده نمود. این جبران سازی اگر با سرعت مناسب انجام شود، آسیبی به LED ها وارد نخواهد کرد.
شرح مثال:
در مثالی که مشروح آن را دراین بخش آورده ایم، می خواهیم ۸ عدد Seven-Segment را درایو کرده و اعداد را بر روی آن نمایش دهیم.
برای این منظور صرفا از یک PAC 5110 استفاده خواهیم نمود.
۱۶ خروجی این دستگاه می توانند برای درایو کردن ۸ عدد Seven-Segment به روش Multiplex کافی باشند. در صورتیکه اگر به صورت مستقیم می خواستیم عمل کنیم فقط می توانستیم ۲ عدد از آنها را درایو نماییم.
۸ خروجی اول این دستگاه، یعنی DQ1 الی DQ8 را به پایه های a تا z و ۸ خروجی دیگر را به پایه های مشترک Seven-Segment ها وصل می کنیم.
خروجی های دستگاه PAC 5110 همگی ترانزیستور بوده و به راحتی می توانند ولتاژهای بالا تا ۴۸ ولت با جریان ۲۵۰ میلی آمپر را تامین کنند.
ما در اینجا از Seven-Segment های Anode مشترک استفاده نموده ایم و چون خروجی ها صرفا PNP هستند، نیاز است تا یک سری مقاومت به صورت موازی با آنها به خط منفی تغذیه وصل شود.

در بخش برنامه این سیستم، نکات قابل تعمقی را می توان دید که با وجود سادگی باید توجه زیادی به آنها داشت.
مثال هایی که انتخاب می شوند، صرفا برای یک کاربرد مشخص طراحی نشده اند و مهمتر از آن آشنایی کاربران با تکنیک ها و روش های برنامه نویسی می باشد.
برنامه از دو قسمت اصلی تشکیل شده است؛
اول، قسمت Scan کردن Seven-Segment ها و دوم، بخش استخراج کد مورد نظر برای کاراکترها.
در قسمت اول، فانکشن Scan در هر ۲ میلی ثانیه اجرا می شود.
با هر بار اجرای این فانکشن، “Segment” که بایت دوم خروجی های دستگاه است، یک بار شیفت به راست پیدا می کند و بدین ترتیب Seven-Segment مورد نظر انتخاب می شود و سپس با استفاده از تابع “Indirect Assign” کاراکتر Seven-Segment مربوطه در بایت اول خروجی دستگاه، یعنی a تا z قرار می گیرد.
شمارنده “Digit Address” برای اشاره به خانه هایی از حافظه ای که کاراکترهای هر Seven-Segment قرار دارد، تعبیه شده است.
خط دوم این تابع، ریست کردن متغیرها و باز گرداندن آنها به مقادیر اولیه در زمان خاتمه یک دوره تناوب Scan تمام Seven-Segment ها است.
تابع دوم که وظیفه استخراج کدهای لازم برای نمایش بر روی Seven-Segment ها را دارد، از ظرافت و پیچیدگی بیشتری برخوردار است.
اطلاعاتی که قرار است بر روی صفحه، نمایش داده شود از تبدیل متغیر عددی Value به یک String انجام می شود.
کاراکترهای String به سادگی بر روی صفحه قابل نمایش نیستند و باید بر اساس ترتیب LED های a تا z به Code جدیدی تبدیل شوند.
برای این منظور از Data Base استفاده شده است.
می دانیم که هر کاراکتر متنی از جدول Ascii پیروی می کند و کد مشخصی دارد. برای map کردن کد مورد نظر به کد جدید در آدرسی که کاراکتر متنی ما به آن اشاره می کند، کد جدیدی را در Data Base قرار می دهیم.
مثلا عدد ” ۰ ” در جدول Ascii با کد ۴۸ مشخص می شود، پس ما در آدرس ۴۸ خانه حافظه Data Base، کدی که باعث روشن شدن عدد ” ۰ ” بر روی Seven-Segment ها می شود را قرار می دهیم.
تابع ” Integer to String ” برای کاراکتر Space، کد ۳۲ را می سازد. پس برای ایجاد Space عدد ” FF “، که باعث خاموش شدن کل LED ها می شود را در آدرس ۳۲ و البته بقیه آدرس ها قرار می دهیم.
توجه داشته باشید، چون LED ها Anode مشترک هستند و پایه منفی آنها به a تا z وصل است، باید برای خاموش کردن LED ها ترانزیستورهای خروجی به حالت روشن بروند.
Value 1 الی Value 8، کارکترهای متنی هستند که توسط تابع ” Integer to String ” به اعداد تبدیل شده اند. برای دسترسی مستقیم، آنها را در دل String تعریف کرده ایم.
نکته مهمی که وجود دارد این است که، چون Value ها به صورت Byte هستند، برای ورودی ” Add ” در تابع ” Call DB ” مناسب نیستند و برای اینکه نیازی به تبدیل Byte به Word نباشد، در کتابخانه FBD تغییر کوچکی انجام می دهیم.
این تغییر، تعویض عدد ۶ به ۱ در خط Input_2 در قسمت Call DB می باشد.
Name=”Call DB”
SubGroup=”Program Control”
Icon=88
Bitmap=CallDB
HasOwner=1
OwnerGroup=12
CanAdd=0
Input_1=2
InHint_1=EI
InCanFree_1=1
Input_2=1
شما هم می توانید  این خطوط را در فایل کتابخانه FBD خود تغییر دهید. برای این کار فایل FBD.lib موجود در مسیر نصب نرم افزار را در Notepad باز کنید و ” Call DB ” را جستجو کنید. سپس خط Input_2 را به شکل فوق تغییر دهید.
C:\Program Files\Fararo\FBDEditor\FBD.lib
 
————————————————————————————————————————–
** این برنامه با ویرایش ۲٫۴۵ و برای دستگاه PAC 5110 نوشته شده است.
** لطفا نظرات خود را در مورد این مثال به ایمیل شرکت (info@fararopaya.com) ارسال نمایید.
** در ضمن می توانید سوالات خود را در تالار گفتگو مطرح کنید.