بلوک دیاگرام یک تابلو دیجیتال
همانطور که در تصویر مشاهده میکنید، این تابلوها از بلوکهای :
– ماتریس LED
– درایورهای سطر و ستون
– پردازنده
– تجهیزات ورود اطلاعات
– حافظه
تشکیل شدهاند.
در واقع یک تابلوی نمایشگر دیجیتالی، متن مورد نظر خود را از طریق تجهیزات ورودی همچون کیبورد و یا پورت سریال دریافت میکند. و این اطلاعات را در اختیار پردازنده قرار میدهد. سپس پردازنده پس از آنالیز اطلاعات آن را در حافظه تابلو ذخیره نموده. علاوه بر آن حافظه موجود در تابلو میتواند کدهای برنامه را در خود نگهداری نماید. از طرفی پردازنده با توجه به اطلاعات ذخیره شده، سیگنالهای لازم را جهت نمایش تولید کرده و در اختیار درایورها قرار میدهد. با توجه به اینکه نحوه چیدمان LED ها در نمایشگر بنا به دلایلی که بعدا توضیح داده خواهد شد به صورت ماتریسی می باشد، لذا دو دسته درایور برای راه اندازی ماتریس نیاز است که شامل داریورهای سطر و داریورهای ستون مییاشند. این درایورها با توجه به فرامین دریافتی از سوی پردازنده، با روشن و خاموش نگاه داشتن LED های موجود در ماتریس، باعث به نمایش در آمدن مطالب (اعم از متن و یا تصویر) بر روی ماتریس خواهند شد.
به این تصویر نگاه کنید، تصویر صورتک خندان !
در نگاه اول تصویر فوق به صورت یک تصویر کامل و یکپارچه به نظر میرسد. اما اگر کمی با دقت بیشتر به آن دقت کنید و تا حد امکان آنرا بزرگ نمایید متوجه خواهید شد که در واقع آن تصویر از نقاط ( pixel ) متعددی تشکیل شده. پس تصویر فوق را میتوان مجموعه نقاطی دانست که دارای رنگهای متفاوتیاند. هر یک از این نقاط را یک جزء تصویر (Picture Element) و این خاصیت را خاصیت موزائیکی تصویر مینامند. من جهت کمک به درک مطلب تصویر فوق را با بزرگ نمایی بیشتر در زیر قرار دادهام. به آن دقت کنید.
هرچه تعداد اجزاء تصویر در واحد سطح بیشتر باشد، وضوح تصویر بیشتر میباشد. به عبارت دیگر تصویر به واقعیت نزدیکتر بوده، جزئیات آن بهتر دیده میشود. در تابلوهای دیجیتالی نیز خاصیت موزائیکی وجود دارد. تصویر تابلو توسط ماتریسی از LED ها ایجاد میگردد. در اینجا ابعاد یک جزء تصویر به اندازه قطر یک LED است. که از یک فاصله معین چشم بیننده قادر به تمایز نقاط تصویر ایجاد شده نبوده و یک تصویر را یکپارچه احساس میکند.
جهت تشکیل تصویر بر روی پانل تابلو، نیاز به روشن و خاموش نگه داشتن LED های موجود بر روی تابلو متناسب با تصویر مورد نظر است. بنابراین نیاز به کنترل تک تک LED های موجود در تابلو میباشد. از طرفی هر LED دارای دو پایه است ( با فرض تک رنگ بودن ) و در صورتی که ما یک پانل LED با ماتریس 10x10 داشته باشیم، دویست پایه و یا دویست سیم جهت کنترل داریم. مسلما استفاده از این تعداد سیم مقرون به صرفه نخواهد و باعث پیچیدگی مدار خواهد شد. جهت بر طرف کردن مشکل فوق میتوان پایه های یکسان در LED ها را به صورت سطری و ستونی به یکدیگر متصل نمود. به تصویر زیر دقت کنید :
همانطور که در تصویر مشاهده نمودید، در این آرایش آند تمامی LED های موجود در یک سطر یکسان به هم متصل شدند، همچنین کاتد LED های موجود در یک ستون نیز به هم اتصال داده شدهاند.
حال ببینیم نحوه عملکرد این روش چگونه است. شما در این حالت جهت روشن کردن هر LED کافیست که سطری که آن LED در آنجا قرار دارد را به سطح ولتاز مثبت اتصال داده و سپس ستون مربوط به همان LED را به زمین مدار وصل کنید.
با این روش ما توانستیم از تعداد سیمهای مورد نیاز جهت کنترل LED ها بکاهیم ولی در مقابل امکان کنترل همزمان تمامی سطرها را از دست دادیم و در هر لحظه فقط و فقط میتوان LED های موجود در یک سطر و یا یک ستون را کنترل نمود.
نگران نباشید، در ادامه همین بحث خواهید دید که جهت نمایش نیازی هم به تمامی LED ها نبوده و میتوان توسط جاروب نمودن سطرها و یا ستونها نیز به نمایش تصویر در تابلو روان پرداخت.
به هر حال در صورت عدم استفاده از روش فوق شما مدار پیچیدهای خواهید داشت، مثلا برای کنترل LED ها موجود در تصویر روبرو شما حداقل باید از طریق 41 سیم ماتریس را کنترل میکردید. در حالی که با استفاده از روش ماتریسی شما فقط به 13 سیم نیاز دارید. فقط در این حالت برنامه شما کمی پیچیده خواهد شد. که البته به نظر من شما یک بار برنامه مینویسید از آن تا ابد استفاده میکنید ولی سخت افزار را باید تا ابد مونتاژ کنید و هزینه آن را پرداخت کنید.
روش جاروب ساده به دو صورت بکار برده میشود :
– جاروب سطرها
– جاروب ستونها
در جاروب سطرها شما LED های موجود در سطر اول را روشن میکنید، سپس LED های سطر دوم و . . . تا به سطر آخر برسیم. دوباره همین کار را دوباره انجام میدهیم.
در جاروب ستونها شما LED های موجود در ستون اول را روشن میکنید، سپس LED های ستون دوم و . . . تا به ستون آخر برسیم. دوباره همین کار را دوباره انجام میدهیم.
به یکبار جاروب کامل (خواه سطرها و خواه ستونها) تازه سازی (Refresh) میگویند.
جهت کمک به درک مطلب، به انیمیشنی از جاروب سطری که در زیر آورده شده نگاه کنید.
انیمیشن فوق جهت ساخت تصویر زیر است.
توجه داشته باشین که جاروب کردن علاوه بر کاهش سیم بندی و کم شدن پیچیدگی آن میشود، باعث خواهد شد که شما در هر لحظه تعداد کمتری از LED های تابلو را روشن کنید و در نتیجه میزان مصرف جریان الکتریکی تابلو به میزان قابل توجهای کاهش پیدا خواهد نمود.
اثر نور در چشم انسان برای مدت کوتاهی باقی میماند. این خاصیت را اثر پس ماند نور (Flicker) مینامند. برمبنای همین خاصیت است که در سینما و تلویزیون احساس پیوستگی تصویر بوجود میآید.
چنانچه تصاویری که از یک حرکت مثلا راه رفتن انسان عکس برداری شود و سپس با سرعت 16 بار در ثانیه به نمایش درآید، چشم انسان منقطع بودن تصاویر را احساس نکرده و تصاویر را بطور پیوسته حس میکند. بر مبنای این خاصیت بود که صنعت سینما بوجود آمد.
ترتیب کار به این صورت است که توسط یک دوربین فیلمبرداری مخصوص که قادر است در هر ثانیه 16 تصویر از یک صحنه عکس برداری نماید، تصاویر تهیه شده سپس با همان سرعت به نمایش در میآیند. البته به علت اینکه با 16 تصویر در ثانیه حرکات نرم و طبیعی نداریم، فرکانس مزبور بعدا به 24 تصویر در ثانیه افزایش داده شد. در این فرکانس برای بیش از 90 درصد حرکات، پیوستگی طبیعی بوجود میآید. به همین علت به فرکانس مزبور حد پیوستگی گفته میشود. مشکل دیگر مسئله چشمک زدن تصویر است.
در فرکانس 24 تصویر در ثانیه اگر چه مسئله پیوستگی تصاویر حل میشود اما تصاویر چشمک میزنند و این بخاطر این است که چشم اگرچه در این فرکانس، تصاویر را پیوسته میبیند و حرکات را طبیعی احساس میکند اما خاموش شدن صحنه در حین تعویض یک تصویر به تصویر بعدی بوجود میآید را بصورت چشمک زدن تصویر احساس میکند. این پدیده بخصوص برای تصاویری با نور بیشتر محسوستر است.
برای رفع این مشکل باید حداقل 48 تصویر در ثانیه به نمایش درآید تا اثر چشمک زدن از بین رود. در سینما چون نمایش 48 تصویر در ثانیه، اشکالات عملی بوجود میآورد، مسئله را به طریق دیگری حل نمودهاند. به این ترتیب که سرعت حرکت نوار فیلم از مقابل لامپ پروژکتور همان 24 تصویر در ثانیه است منتهی به کمک یک دیافراگم گردان به هنگام تعویض یک فریم به فریم بعدی و همچنین در زمان نمایش فریم و درست در وسط زمان مزبور نور لامپ پروژکتور به فیلم قطع میشود. با اینکار هر فریم دو بار روشن و خاموش میشود.
با این تدبیر که هر تصویر دو بار روشن میشود و سرعت حرکت نوار 24 تصویر در هر ثانیه است، از نظر چشم 48 تصویر در ثانیه احساس میشود و مشکل چشمک زدن از بین میرود. در تابلوهای روان هم مسائل پیوستگی تصاویر و همچنین چشمک زدن، عوامل تعیین کننده سیستم جاروب و زمانهای مربوطه هستند.
جاروب یک در میان
همانطور که گفته شد، جهت نمایش مناسب تصاویر متحرک باید حداقل 24 تصویر در ثانیه نمایش داده شود. حال فرض کنید شما یک تابلو با 32 سطر میخواهید طراحی کنید و از جاروب سطری هم استفاده میکنید در این حالت زمان نمایش هر فریم تصویر برابر با 41.6 میلی ثانیه خواهد بود و در هر فریم 32 سطر جهت جاروب داریم پس زمان روشن بودن هر سطر برابر با 1.3 میلی ثانیه خواهد بود.
خوب شما مدار را طراحی و میسازید اما در پایان متوجه میشوید که نور LED ها بسیار کم تر از حالت معمولی است و حسابی متعجب خواهید شد که چرا با وجود استفاده از LED های مرغوب نور تابلو روان تا این حد کم است؟!
نکته اینجاست که شما هر LED را فقط به مدت 1.3 میلی ثانیه روشن نگاه میدارید و سپس به مدت 31 برابر این مدت خاموش نگاه میدارید( به خاطر جاروب 31 سطر بعدی ) یعنی 1.3 میلی ثانیه روشن و 40.3 میلی ثانیه خاموش است. ودر واقع اثر نور LED در چشم به میزان قابل توجهای کاهش مییابد.
جهت کم کردن این اثر و افزایش نور تابلو روان چند کار را میتوان انجام داد :
1- افزایش ولتاژ اعمالی به LED ها که معمولا این کار خطر سوختن LED ها در اثر هنگ کردن تابلو افزایش داده و همچنین از عمر مفید آن نیز خواهد کاست.
2- تقسیم تابلو به سگمنت های جداگانه مثلا برای مثال فوق تقسیم تابلو به 4 سگمنت 8 سطری. این روش مناسبی است ولی به پیچدگی نرمافزار و سختافزار خواهد افزود و در تابلو های کوچک توصیه نمیشود.
3- جاروب یک در میان، این روش راه حل مناسبی در بر طرف نمودن مشکل فوق است. در عین حال که به پیچیدگی مدار منجر نخواهد شد و همچنین با تغییر سادهای در الگوریتم برنامه میتوان از آن بهره برد.
ترتیب کار به این صورت است که ما هر فریم کامل را که در مثال فوق برابر با 32 سطر است به دو نیم فریم تقسیم میکنیم. فریم اول شامل سطرهای فرد (1،3،5،7،9،11،13،15،17،19،21،23،25،27،29،31) و فریم دوم شامل سطرهای زوج (2،4،6،8،10،12،14،16،18،20،22،24،26،28،30،32) است. حال در هر جاروب فقط یکی از دو نیم فریم زوج ویا فرد را جاروب میکنیم. بدین ترتیب که یکبار نیم فریم فرد و بار بعد نیم فریم زوج و دوباره نیم فریم فرد و … در این حالت چون در هر بار فقط 16 سطر جاروب میشوند لذا زمان روشن بودن هر LED بیشتر خواهد شد. البته حتما شما خواننده تیز بین این مقاله متوجه شدید که در این حالت در ثانیه فقط ما 12 تصویر (فریم کامل) نمایش دادهایم پس احتمالا بخاطر این کاهش مجددا مشکل لرزش تصویر را داشته باشیم!
البته شما کاملا حق دارید ولی نکته ظریفی هم این بین وجود دارد و آن هم این است که تعداد نیم فریم های نمایش داده شده در یک ثانیه همان 24 عدد است. در نتیجه لرزش تصویر منتفی خواهد بود.
جهت کمک به درک بهتر این مطلب نحوه جاروب در یک تابلو روان 8 سری بصورت انیمیشن در زیر نمایش داده شده است.
انیمیشن فوق با سرعت بالاتر :
متن مورد نمایش :
جدول گلایف
قبل از اینکه ادامه بحث در مورد تابلو های روان را شروع کنم از استقبال شما دوستان عزیز که از طریق تلفن و یا ایمیل به من، مرا مورد لطف خود قرار دادن تشکر کنم. این تماس ها باعث گشته تا بنده بیشتر به ادامه بحث علاقمند شده و تصمیم دارم که این مجموعه مقالات همچنان ادامه داده و مطالبی را فراتر از آنچه که در ابتدا تصمیم به ارائه داشتم در اختیار شما عزیزان قرار دهم. باشد که مورد توجه شما قرار بگیرد. من تلفن خودم را برای آن دسته از دوستانی که علاقمند هستند تا سئوالات خود را به صورت مستقیم ارائه کنند در اختیار قرار میدهم :
09123812060 ایمیل من جهت تماس شما : eLachini@Gmail.Com
در مباحث قبل به این نکته اشاره شد که برای نمایش هر تصویر ویا متنی در تابلو روان ما نیاز به این داریم که ابتدا آنرا به نقاط تشکیل دهنده تقسیم کنیم. در مورد حروف نیز بدین شکل عمل میکنیم و به ازای هر حرف یک جدول درست میکنیم، به مجموعه این جداول که شامل تمامی حروف میشود اصطلاحا جدول گلایف میگویند. جهت روشن شدن مطلب به تصویر زیر دقت نمایید.
همانطور که مشاهده میکنید در تصویر فوق من نمونه ای از جدول گلایف را برای حرف A و صورتک خندان ترسیم کردم و در ستون سمت چپ هر تصویر کد هگز(Hex) مربوط به هر سطر را درج کردم. که با فرض این بوده که پهنای هر کاراکتر هشت پیکسل بوده و به ازای هر پیکسل فعال بیت مرتبط با آن یک در نظر گرفته شده. در نتیجه در دو مثال فوق که ارتفاع هر کاراکتر 12 سطر است، برای ذخیره اطلاعات هر کاراکتر به 12 بایت نیاز داریم. حال بسته به زبان برنامه نویسی که شما از آن استفاده میکنید نحوه ذخیره بازیابی این جدول متفاوت خواهد بود. البته نرمافزارهایی نیز جهت طراحی فونت نیز در این زمینه وجود دارد. من از نرم افزاری که استفاده میکنم اجازه میدهد مستقیما یک جدول گلایف کامل را طراحی کنم و از طرفی خروجی فونت های طراحی شده به فرمت مختلف میباشد که اجازه استفاده در زبانهای مختلف را میدهد. که من با استفاده از همین نرم افزار فونت های مختلف فارسی را طراحی کردم که شامل 16 فونت مختلف میباشد که دارای ارتفاع 16 سطری میباشند و همچنین دو مدل فونت انگلیسی 8 و 12 سطری را شامل میشود.
جهت تهیه فونت های فوق به همراه نرم افزار طراحی، اینجا کلیک کنید.
در ادامه بحث شما با نمونه های عملی ساخته شده توسط من آشنا شده و به بررسی مدارات و برنامه های هریک می پردازیم. تا نکاتی که تا به حال به صورت تئوری بازگو شد به صورت عملی در اختیار شما عزیزان قرار گیرد. در مقاله بعدی شما با یک مدار عملی که با استفاده از میکرو کنترلر ATmega8 ساخته شده آشنا میشوید من فیلم این مدار را جهت مشاهده در اینجا قرار دادم. فرمت فیلم فوق فلش می باشد و سایز آن 314 کیلو بایت است. لذا بسته به سرعت اتصال شما به اینترنت بین چند ثانیه تا 2 دقیقه زمان جهت بار گذاری فیلم و مشاهده آن توسط شما زمان نیاز هست. پس لطفا چند لحظه صبر نمایید.
27CDB6E-AE6D-11CF-96B8-444553540000">
بررسی اولین مدار عملی تابلو روان
در این جلسه نخستین مدار عملی تابلو روان را برای شما توضیح میدهم. البته قبل از شروع این بحث باید عنوان کنم که من در طراحی این مدارات سعی کردم که از حداقل قطعات ممکن استفاده کنم تا مدار از نظر سخت افزاری تا حد امکان ساده و ارزان باشد، در عین حال اینکه شما با ساخت هر یک از این مدارات با نکات مهم در طراحی تابلو روان آشنا میشوید. تا در پایان ساخت این مدارات به یک طراح حرفهای در زمینه ساخت تابلو روان تبدیل خواهید شد. از آنجایی که تمامی مطالب درج شده در این مجموعه مقالات حاصل تجربیات شخصی من در این زمینه هست، از شما دوستان عزیزی که مایل هستند از این مقالات در سایت و یا وبلاگ خود استفاده نمایند، میخواهم که حتما منبع را ذکر نمایند.
در جهت ارائه مناسب تر مطالب در کنار هر مدار من شماتیک آن مدار را که در نرم افزار Proteus طراحی نمودهام را که قابلیت شبیه سازی را نیز دارا میباشد، جهت دانلود در اختیار شما علاقمندان قرار دادم.
– LED قرمز 35 عدد
– مقاومت 330 اهمی 5 عدد
– سوکت 28 پین جهت میکرو ATmega8
– برد هزار سوراخ 15 در 10 سانتی متر
٭ قطعاتی که تعداد آنها مشخص نشده، مقدار آن یک عدد است.
٭جهت تهیه میکرو پروگرم شده اینجا کلیک کنید.
بله تمامی قطعات مورد نیاز جهت ساخت این مدار همین چند قطعه ذکر شده در لیست فوق میباشد. حال برای ساخت مدار بهتر است ابتدا ماتریس LED را بسازید. نقشه این ماتریس در تصویر زیر آورده شده :
همانطور که مشاهده میکنید در تصویر فوق من تمامی کاتد های LED های موجود در یک سطر را به هم و آندهای LED های موجود در یک ستون را به یکدیگر متصل کردهام. حتما بعد از ساخت ماتریس و قبل از ادامه مونتاژ سایر قطعات ماتریس LED را توسط اعمال یک ولتاژ بین 3 تا 9 ولت به سطرها و ستون ها تست کنید تا از اتصال صحیح آن اطمینان حاصل کنید.
حال نوبت به نصب سوکت 28 پین میرسد، دلیل استفاده از سوکت، جلوگیری از صدمه دیدن میکرو کنترولر در حین لحیم کاری است و در عین حال به شما اجازه میدهد که از میکرو در پروژه های دیگر هم استفاده کنید. بعد از نصب سوکت به سراغ مقاومت های 330 اهمی رفته و آنها را به پین های صفر تا پنج Portd وصل نمایید و سر دیگر مقاومت ها را به ستون های ماتریس LED متصل نمایید. به نقشه زیر دقت کنید.
همانطور که در نقشه نیز مشاهده میکنید. مقاومت R1 به ستون 1 و مقاومت R2 به ستون 2 و … مقاومت R5 به ستون 5 ماتریس LED متصل میشود. حالا مدار شما کامل شده!!! و شما صاحب یک تابلو روان واقعی هستید! و پس پروگرم کردن میکرو میتوانید نتیجه کار خود را ببینید و لذت ببرید. البته این مدار جهت کار به ولتاژی بین 4.5 الی 5 ولت نیازمند است. در صورتی که از باطری کتابی و یا سایر منابع تغذیه که دارای ولتاژ بالاتر هستند و یا خروجی آنها تثبیت شده نیست استفاده میکنید. بهتر است تا از یک مدار رگولاتور ولتاژ استفاده نمایید. جهت ساخت مدار رگولاتور ولتاژ قطعات زیر را تهیه نمایید.
– خازن 470 میکروفاراد 16 ولت 2 عدد
٭ قطعاتی که تعداد آنها مشخص نشده، مقدار آن یک عدد است.
نقشه مدار رگولاتور ولتاژ را نیز در تصویر بالا مشاهده میکنید. من به شما توصیه میکنم که ابتدا مدار را موتتاژ کنید ولی خروجی آنرا به میکرو متصل نکنید. بلکه با اعمال یک ولتاژ بالای 8 ولت به ورودی های آن از و تست ولتاژ خروجی(که بایستی در حدود 5 ولت باشد) از عملکرد صحیح آن اطمینان حاصل نموده و سپس آنرا به پایه های میکرو کنترولر متصل نمایید.
اگر تابحال تمامی مراحل فوق را بدرستی انجام داده باشید اکنون مدار شما، مثل مدار من که در تصویر زیر نشان دادهام در آمده است.
البته همانطور که متوجه شدید در تصویر بالا یک کانکتور مادگی در سمت راست ماتریس LED من نصب کردم. دلیل وجود این کانکتور برنامه ریزی مستقیم میکرو کنترلر در حین کار مدار است. با این کار من دیگر نیازی به جابجا کردن میکروکنترلر و قرار دادن آن در پروگرمر نداشتم و مراحل تست برنامه را به سرعت انجام میدهم.
در صورتی که تمایل دارید مدار فوق را بصورت آماده تهیه نمایید از لینک زیر استفاده کنید.
بررسی اولین مدار عملی تابلو روان – برنامه نویسی
جهت تهیه نرم افزار BASCOM-AVR، اینجا کلیک کنید.
$regfile = "m8def.dat"
$crystal = 8000000
همانطور که میدانید، دستوراتی که با علامت "$" در BASCOM آغاز میشوند، جزو دستورات کمپایلر به حساب میآیند. و در زمان کمپایل کدی را تولید نمیکنند. دو دستور فوق نیز همینگونه هستند. در دستور اول نوع میکرو برای کمپایلر تعریف میشود که در اینجا ATmega8 میباشد و در دستور بعدی فرکانس کریستال بر حسب هرتز مشخص میشود.در این برنامه مقدار فرکانس تعریفی هشت مگاهرتز است. توجه داشته باشید که من در مدار تابلو روان خود، از کریستال خارجی استفاده نکردم. لذا این دستور تعیین کننده فرکانس اسیلاتور داخلی میکروکنترلر میباشد.
Config Portb = Output
Config Portd = Output
در دو دستور فوق پورت های B,D بعنوان خروجی پیکربندی گشتهاند. من در این مدار تابلو روان از پورت B برای راه اندازی و کنترل سطرها و از پورت D جهت راهاندازی ستونها استفاده کردهام.
Dim Row As Byte
Dim Scan As Byte
در این دو دستور من دو متغییر از نوع بایت تعریف کردم. متغییر Row جهت شمارش سطرها و متغییر Scan جهت تهیه سیگنال جاروب در سطرها استفاده میشود.
بعد از موارد فوق در برنامه، به حلقه اصلی برنامه میرسیم. جهت ساخت این حلقه از دستور Do-Loop استفاده شده و بدلیل عدم ذکر هیچگونه شرطی در این دستور، دستورات موجود در بدنه این حلقه به تعداد بینهایت بار اجرا میگردند.
Scan = &B11111110
در ابتدای حلقه Do-Loop متغییر Scan، مقدار دهی اولیه میشود تا سیگنال مورد نیاز جهت فعال نمودن سطر نخست تولید گردد. با توجه به ساختار ماتریس LED مورد استفاده در این تابلو روان ( اتصال کاتد LED های موجود در یک سطر به یکدیگر ) جهت فعال سازی یک سطر باید پین مربوط به آن سطر در میکرو صفر شود و سایر پین های مربوط به دیگر سطرها، یک شوند. همانطور نیز که مشاهده کردید در دستور فوق نیز بیت نخست متغییر Scan نیز صفر شده که مربوط به سطر اول ماتریس است و سایر بیتها نیز یک شدهاند. در نتیجه فقط سطر اول فعال خواهد شد و سایر سطرها غیر فعال هستند.
در ادامه برنامه به حلقه For-Next میرسیم. متغییر Row در این حلقه با صفر مقدار دهی اولیه میشود و اجرای دستورات حلقه تا رسیدن این متغییر به عدد 6 تعریف شده. لذا تعداد دفعات اجرای دستورات درون حلقه 7 بار خواهد بود. درواقع ما در درون این حلقه یک بار کامل کل سطرهای ماتریس را که هفت عدد میباشد جاروب میکنیم.
For Row = 0 To 6
Portb = Scan
Rotate Scan , Left
Portd = Lookup(row , Gelayof)
Waitus 20
Portd = 0
Next Row
در اولین دستور در حلقه For-Next مقدار متغییر Scan در پورت B میکروکنترلر قرار میگیرد. تا سطر مورد نظر در ماتریس فعال شود. در دستور بعدی متغییر Scan به اندازه یک بیت به سمت چپ شیفت چرخشی داده میشود. با این شیفت صفر موجود در این متغییر به سمت چپ منتقل شده و جای آنرا یک بیت یک پر میکند. بعنوان مثال در نخستین بار اجرای این دستور متغییر Scan از مقدار 11111110 به مقدار 11111101 تغییر میکند و در شیفت بعدی به 11111011 تا اینکه بعد از هفتمین شیفت بصورت 10111111 در میآید. که در هفتمین مرحله در واقع بیت هفتم، صفر شده است که باعث فعال گشتن سطر هفتم ماتریس خواهد شد.
در این برنامه من قصد نمایش حرف A را داشتم، لذا جدولی با نام Gelayof در برنامه تعریف کردم .همانطور نیز که در زیر مشاهده میکنید، جهت ذخیره اطلاعات مربوط به حرف A من از هفت بایت استفاده نمودم و اطلاعات مربوط به هر سطر را در یک بایت قرار دادهام. از طرفی چون در این مدار پهنای ماتریس LED، پنج است فقط از پنج بیت اول هر بایت استفاده شده و سه بیت با ارزش آن صفر شدهاند. شما بنابر نیاز خود میتوانید با تغییر دادن وضعیت بیتها به نمایش هر شکل و یا کاراکتری بپردازید.
Gelayof:
Data &B00000100
Data &B00001010
Data &B00010001
Data &B00010001
Data &B00011111
Data &B00010001
Data &B00010001
حال اطلاعات این جدول مرحله به مرحله و سطر به سطر خوانده شده و در پورت D قرار میگیرد.این عمل توسط دستور Lookup در برنامه صورت میگیرد. در این دستور بایت مورد نظر ( اطلاعات سطر مورد نظر ) توسط متغییر Row تعیین میشود. بعد از قرار دادن اطلاعات مربوط هر سطر در پورت D به اندازه 20 میکرو ثانیه این اطلاعات در پورت نگاه داشته میشود تا LED های موجود در آن سطر روشن بمانند و اثر آن در چشم بیننده باقی بماند. سپس پورت D صفر میشود و اعمال فوق مجددا جهت سطر بعدی تکرار میگردد.
بعد از هر بار جاروب کامل تمامی سطرها، کنترل برنامه از حلقه For-Next خارج شده و مجددا متغییر Scan مقدار دهی اولیه شده تا برای جاروب مجدد آماده گردد. بله به همین سادگی شما یک نمونه ساده از تابلو روان را ساختید!
متن کامل برنامه را بصورت یکجا در زیر آورده شده است.
‘*********************************************
‘* This Program Writing By : Hossein Lachini *
‘* This, Displyed "A" on the Signe Board *
‘* For to get more details visit : *
‘* www.HLachini.com *
‘* Contact to me by : eLachini@Gmail.com *
‘*********************************************
$regfile = "m8def.dat"
$crystal = 8000000
Config Portb = Output
Config Portd = Output
Dim Row As Byte
Dim Scan As Byte
Do
Scan = &B11111110
For Row = 0 To 6
Portb = Scan
Rotate Scan , Left
Portd = Lookup(row , Gelayof)
Waitus 20
Portd = 0
Next Row
Loop
End ‘end program
Gelayof:
Data &B00000100
Data &B00001010
Data &B00010001
Data &B00010001
Data &B00011111
Data &B00010001
Data &B00010001
در این بخش من فایل های مورد نیاز شما را جهت، ساخت تابلو روان برای دانلود قرار دادم. این فایلها به صورت یک فایل واحد با فرمت Zip فشرده سازی شدهاند و عبارتند از :
– فایل شماتیک طراحی شده در نرم افزار Proteus : این شماتیک در دو برگه (Sheet) طراحی شده در برگه نخست شماتیک مربوط به مدار میکروکنترلر ATmega8 قرار دارد و در برگه دوم شماتیک ماتریس LED قرار گرفته است.
جهت تهیه نرم افزار Proteus ، اینجا کلیک کنید.
فایل برنامه تابلو روان، که در نرم افزار BASCOM نوشته شده است.
جهت تهیه نرم افزار BASCOM-AVR ، اینجا کلیک کنید.
فایل هگز (Hex) برنامه تابلو روان جهت پروگرم کردن میکروکنترلر ATmega8.
Íجهت تهیه نرم افزار BASCOM-AVR، اینجا کلیک کنید.www.HLachini.com *
‘* Contact to me by : eLachini@Gmail.com *
‘*********************************************
$regfile = "m8def.dat"
$crystal = 8000000
Config Portb = Output
Config Portd = Output
Dim Col As Byte
Dim Scan As Byte
Do
Scan = &B00000001
For Col = 0 To 4
Portd = Scan
Rotate Scan , Left
Portb = Lookup(col , Gelayof)
Waitus 20
Portb = &B11111111
Next Col
Loop
End ‘end program
Gelayof:
Data &B10000011
Data &B11110101
Data &B11110110
Data &B11110101
Data &B10000011
جهت دانلود فایلهای فوق اینجا کلیک کنید.
حجم فایل : 10.8 کیلوبایت
فرمت فایل Zip
بررسی جاروب ستونی مدار عملی تابلو روان – برنامه نویسی
در برنامه قبلی ما از روش جاروب سطری در برنامه نویسی تابلو روان استفاده کردیم. حال من تصمیم به توضیح روش جاروب ستونی در تابلو روان را دارم. و از همان مدار قبلی برای تست این روش استفاده میکنیم و فقط برنامه میکروکنترلر تغییر میکند.
در جاروب ستونی ما ابتدا نخستین ستون را فعال میکنیم و سپس ستون دوم فعال میشود و این روال ادامه پیدا میکند تا به ستون آخر برسیم. اگر به مدار ماتریس LED دقت کنید میبینید که ما آند LED های هر ستون را به هم متصل نمودهایم، پس جهت فعال نمودن هر سطر باستی آنرا به سطح ولتاژ مثبت متصل کنیم، از طرفی بدلیل اینکه در ماتریس LED، کاتد LED های هر سطر به هم متصل هستند، جهت روشن نمودن هر LED سطر متناظر با آن LED بایستی به سطح ولتاژ صفر متصل گردد. از همین جا روشن میشود که در طراحی جدول گلایف بایستی بر خلاف برنامه قبلی به ازای نقاطی که میخواهیم LED در آنجا روشن باشد، بایستی عدد صفر را قرار دهیم. به تصویر زیر دقت کنید.
در تصویر فوق من نحوه طراحی جدول گلایف را برای جاروب ستونی در تابلو روان نشان دادهام، که باعث به نمایش در آمدن کاراکتر A در ماتریس LED تابلو روان خواهد شد. همانطور که مشاهده میکنید به ازای نقاط فعال ( نقاطی که LED در آنجا روشن خواهد بود ) من مقدار بیت متانظر با آنرا صفر در نظر گرفتم و بالعکس در نقاط غیر فعال بیت متناظر را صفر در نظر گرفتهام. از طرفی اگر به یاد داشته باشد در برنامه قبلی تعداد بایت های مورد نیاز جهت نمایش کاراکتر A، هفت بایت بود ولی در اینجا ما فقط با استفاده از پنج بایت توانستیم همین کار را انجام دهیم!!!
اما برنامه این روش، من برنامه را مجددا به زبان بیسیک نوشتم و از نرم افزار BASCOM-AVR استفاده کردم.
من در اینجا صرفا بخش هایی از برنامه را بررسی میکنم که با برنامه قبلی تفاوت کرده است.
Dim Col As Byte
Dim Scan As Byte
در این دو دستور من دو متغییر از نوع بایت تعریف کردم. متغییر Col جهت شمارش ستونها و متغییر Scan جهت تهیه سیگنال جاروب در ستونها استفاده میشود.
بعد از موارد فوق در برنامه، به حلقه اصلی برنامه میرسیم. جهت ساخت این حلقه از دستور Do-Loop استفاده شده و بدلیل عدم ذکر هیچگونه شرطی در این دستور، دستورات موجود در بدنه این حلقه به تعداد بینهایت بار اجرا میگردند.
Scan = &B00000001
در ابتدای حلقه Do-Loop متغییر Scan، مقدار دهی اولیه میشود تا سیگنال مورد نیاز جهت فعال نمودن سطر نخست تولید گردد. با توجه به ساختار ماتریس LED مورد استفاده در این تابلو روان ( اتصال آند LED های موجود در یک ستون به یکدیگر ) جهت فعال سازی یک ستون باید پین مربوط به آن ستون در میکرو یک شود و سایر پین های مربوط به دیگر ستونها، صفر شوند. همانطور نیز که مشاهده کردید در دستور فوق نیز بیت نخست متغییر Scan نیز یک شده که مربوط به ستون اول ماتریس است و سایر بیتها نیز صفر شدهاند. در نتیجه فقط ستون اول فعال خواهد شد و سایر ستونها غیر فعال هستند.
در ادامه برنامه به حلقه For-Next میرسیم. متغییر Col در این حلقه با صفر مقدار دهی اولیه میشود و اجرای دستورات حلقه تا رسیدن این متغییر به عدد 4 تعریف شده. لذا تعداد دفعات اجرای دستورات درون حلقه 5 بار خواهد بود. در واقع ما در درون این حلقه یک بار کامل کل ستونهای ماتریس را که پنج عدد میباشد جاروب میکنیم.
For Col = 0 To 4
Portd = Scan
Rotate Scan , Left
Portb = Lookup(col , Gelayof)
Waitus 20
Portb = &B11111111
Next Col
در اولین دستور در حلقه For-Next مقدار متغییر Scan در پورت D میکروکنترلر قرار میگیرد. تا ستون مورد نظر در ماتریس فعال شود. در دستور بعدی متغییر Scan به اندازه یک بیت به سمت چپ شیفت چرخشی داده میشود. با این شیفت بیت 1 موجود در این متغییر به سمت چپ منتقل شده و جای آنرا یک بیت صفر پر میکند. بعنوان مثال در نخستین بار اجرای این دستور متغییر Scan از مقدار 00000001 به مقدار 00000010 تغییر میکند و در شیفت بعدی به 00000100 تا اینکه بعد از پنجمین شیفت بصورت 00010000 در میآید. که در پنجمین مرحله در واقع بیت پنجم، یک شده است که باعث فعال گشتن ستون پنجم ماتریس خواهد شد.