تابلو روان چگونه کار می کند؟

در پست خروجی کردن GPIO کمی در خصوص اینکه دات ماتریکس چیست و ساختار داخلی آن چگونه است، توضیحات مختصری دادم. دیدیم که تنها با تعداد کمی پایه می توان بر هر LED از دات ماتریکس که می خواهیم کنترل داشت و آن را خاموش یا روشن کرد. کاری که در آنجا مورد نیازمان بود کنترل یک ردیف LED از دات ماتریکس بود اما اگر قرار باشد که هم زمان بر دو ردیف (یا بیشتر) کنترل داشته باشیم. این کار چگونه امکان پذیر خواهد بود؟

بگذارید با مثال صورت مسئله را بیشتر توضیح دهم.  دوباره به ساختار دات ماتریکس نگاهی بیندازید.

ساختار داخلی دات ماتریکس

فرض کنید می‌خواهیم LED[2.3] را روشن کنیم. خب قاعدتاً کار راحت است و کافی است که کاتد ردیف 2 را صفر و سایر ردیف ها را یک کنیم. از طرفی ستون 3 را یک و سایر ستون ها را صفر می کنیم.

اما اگر  علاوه بر این، LED[4,5] را نیز بخواهیم روشن کنیم. این کار چگونه باید صورت گیرد؟ شاید به نظر برسد که در اینجا هم اگر ردیف 4 را صفر و ستون 5 را یک کنیم مشکل حل خواهد شد. اما احتمالاً به این نکته دقت نکرده اید که ما با این کار باعث می‌شویم پیکسل LED[4,3] و LED[2,5] نیز روشن شوند.

در واقع LEDهای ناخواسته‌ای روشن خواهند شد که مطلوب ما نیست. خب چاره کار به نظرتان چیست؟

آیا می‌توان با همین روش ماتریسی کردن LEDها که قطعاً مزیت بالایی در صرفه جویی تعداد پایه‌های مورد نیاز دارد، کار را پیش برد؟ چگونه؟

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

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

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

از این مکانیزم در تابلوهای روان و اغلب نمایشگرهایی که در اطرافمان می بینیم نیز استفاده می شود. (در اینجا توضیحات خوبی در این خصوص مشاهده خواهید کرد.)

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

پی نوشت:

شاید مهمترین نکته‌ی کلیدی که در ساخت بازی snake نیاز داشتیم بدانیم را در این پست یاد گرفتیم. در پست‌های آتی خواهید دید که چگونه از این نکته در عمل استفاده می‌کنیم.

خبرنامه هفتگیِ دیجیلاگیست

سلام

دوشنبه هر هفته، یک ایمیل از طرف دیجیلاگیست برای کسانی که آدرس ایمیل خودشون رو ثبت کردن ارسال میشه و توی اون در خصوص آخرین مطالب و اخبار دیجیلاگیست گزارش داده میشه.

اگه شما هم دوست داری این خبرنامه براتون ارسال بشه، تو کادر زیر آدرس ایمیل خودتون رو وارد کنید و دکمه "مشترک شوید!" را بزنید.

اشتراک شما ایجاد شد

Leave a Reply

  Subscribe  
Notify of