ساخت نمایشگر LED روان یا تابلو روان
در این بخش دانلود پروژه آموزش ساخت نمایشگر LED روان یا تابلو روان با میکروکنترلر AVR, توسط تیم الکترونیک و برنامه نویسی الکترونیک ۹۸ برای شما علاقه مندان به پروژه های میکروکنترلر AVR آماده شده است. از کاربردهای جالب و پرطرفدار ال ای دی LED ها, استفاده از آنها در ساخت تابلوهای تبلیغاتی یا همان تابلو روان LED است. با بهره گیری از ال ای دی LED ها می توانیم پیام دلخواه خود را به آسانی نمایش دهیم یا با طراحی یک نمایشگر ال ای دی LED روان (تابلو روان), یک پیام متحرک را به نمایش در آوریم, همچنین امکان نمایش جلوه های ویژه نیز به سادگی فراهم می شود. در این پروژه با مراحل طراحی و ساخت یک نمایشگر ال ای دی LED روان (تابلو روان) 32*8 که به وسیله ماتریس های 8*8 پیاده سازی شده است, به طور کامل آشنا خواهید شد.
کسب مهارت
در ساخت تابلو روان, با توجه به موارد استفاده ومکانی که باید نصب شوند, نوع نمایشگر متفاوت است, یعنی تعداد ال ای دی LED های استفاده شده, رنگ و نوع آن ها و حتی فاصله بین آن ها در بدنه نمایشگر, فرق می کند. به عنوان مثال, برای نمایش ساعت در اتوبوس ها از یک تابلو روان 24*8 با ال ای دی LED های مات استفاده می شود, در حالی که برای تبلیغات یک مغازه, یک تابلو روان 200*32 با ال ای دی LED های پرنور (High Light / Bright) مورد استفاده قرار می گیرد.
مهمترین نکته در ساخت تابلو روان ها یا تابلوهای تبلیغاتی مذکور این است که هر ال ای دی LED در بدنه نمایشگر باید قابل کنترل باشد. به عبارت دیگر بتوان هر ال ای دی LED را در هر لحظه خاموش و یا روشن کرد. شاید اولین راه حلی که به ذهن می رسد, این باشد که برای هر ال ای دی LED یک پایه از میکروکنترلر را در نظر بگیریم تا بتوانیم در هر لحظه آن را خاموش یا روشن کنیم, ولی بلافاصله متوجه می شویم که این کار عملی نیست, زیرا به عنوان مثال برای ساخت یک تابلو روان 32*8 به 256 عدد ال ای دی LED و به دنبال آن به همین تعداد پایه قابل کنترل توسط میکروکنترلر AVR نیاز داریم. در مورد تابلو روان های بزرگتر, ممکن است تعداد ال ای دی LED ها به چندین هزار عدد هم برسد!
تکنیک جاروب یا اسکن (Scan)
برای حل این مشکل, راه حل بسیار کارآمدتر و کم هزینه تری نیز وجود دارد. این روش جالب از ضعف چشم انسان در دنبال کردن پدیده های سریع استفاده می کند. ساختار چشم انسان به گونه ای است که اگر پدیده ای در حدود 40 بار (یا بیشتر) در ثانیه تکرار شود, دیگر قادر به تشخیص نوسان آن نیست, بنابراین از دید انسان, نور چراغی که با فرکانس بیش از 40Hz, روشن و خاموش می شود, بدون لرزش و ثابت به نظر می رسد. به این ترتیب اگر ما یک ال ای دی LED را که در بدنه تابلو روان به کار رفته است, در هر ثانیه 50 بار خاموش و روشن کنیم, از دید ناظر, روشن به نظر می رسد. بنا به خاصیت گفته شده, ساختار ماتریسی شکل زیر را برای ساخت این نمایشگر ها پیشنهاد می کنیم.
همانطور که در شکل ملاحظه می کنید, در هر سطر آند و در هر ستون کاتد همه ال ای دی LED ها به هم وصل شده اند, در نتیجه برای روشن کردن یک ال ای دی LED به عنوان مثال, برای روشن کردن ال ای دی LED متصل به سطر اول و ستون سوم باید سطر اول را به ولتاژ مثبت و ستون سوم را به زمین وصل کرد. اکنون نوبت آن است که نوشته ای را روی ماتریسی 8*8 شکل بالا نمایش دهیم. برای مثال فرض کنید می خواهید LED9 و LED18 را روشن کنیم و سایر ال ای دی LED ها خاموش باشند. می دانیم که برای روشن شدن ال ای دی LED ها باید سطر مربوط را یک و ستون مربوط را صفر کنیم, بنابراین دو سطر اول و دوم را یک و ستون اول و دوم را صفر می کنیم.
نتیجه مطلوب حاصل نمی شود! چراکه به جای دو LED9 و LED18 انتخابی چهار ال ای دی LED شامل LED9, LED10, LED17 و LED18 روشن شده اند. مشکل پیش آمده را با وضع یک قانون کلی حل می کنیم : (در هر لحظه, فقط باید یکی از ستون های ماتریس فعال صفر باشد). به این ترتیب ابتدا ستون اول را, در حالی که سایر ستون ها یک هستند, صفر می کنیم و در همین حال سطر مربوط را یک قرار می دهیمو پس در این لحظه فقط ال ای دی LED شماره LED9 روشن می شود. همین مراحل را برای روشن کردن ال ای دی LED شماره LED18 انجام می دهیم. برای اینکه هر دو LED9 و LED18 از چشم ناظر روشن به نظر برسند باید مرتبا ستون فعال (Active Column) را در طول ماتریس جابه جا کنیم و در زمان معین, اطلاعات مربوط را روی سطرها قرار دهیم. این عمل را اصطلاحا جاروب (Scan) می گویند.
تابلو روان های بزرگتر
یک روش برای ساخت تابلو روان های دارای بیش از 50 ستون, تقسیم آن به دو یا چند بلوک جدا از هم و جاروب همزمان بلوک های تقسیم شده است. به عنوان مثال, یک نمایشگر 80*16 دارای 80 ستون را به دو قسمت 40*16 تقسیم می کنیم. ستون های دو بلوک به صورت نظیر به نظیر با هم فعال می شوند. برای قرار دادن اطلاعات در سطر ها باید از آی سی های Latch (نگهدارنده اطلاعات) استفاده کرد.
یک آی سی کارآمد و مناسب برای این منظور تراشه 74L373 است که یک Latch هشت بیتی به همراه هشت معکوس کننده سه حالتی داخل یک بسته بندی 20 پایه می باشد. شماتیک کامل پروژه چگونگی اتصال آن ها را به میکروکنترلر نشان داده است.
به این ترتیب, مشکل افزایش تعداد ستون های نمایشگر حل می شود, اما سطرها را تا کجا می توان افزایش داد؟ برای افزایش تعدد سطرها در تابلو روان ها مشکل خاصی وجود ندارد, جز اینکه با افزایش تعداد سطرها, حداکثر جریان عبوری از هر ستون نمایشگر افزایش می یابد و لازم است از نوعی بافر (Buffer) استفاده کنیم که قادر به تامین این جریان باشد.
به عنوان مثال می توان برای یک نمایشگر با 16 سطر, از ترانزیستور BC338 (که حداکثر 800mA جریان را درایو می کند), به عنوان راه انداز هر ستون استفاده کرد. به همین ترتیب, برای سطرهای بیشتر باید ترانزیستورهای قویتری را به کار ببریم. تراشه های بافر جریان بالا نیز می توانند برای این منظور استفاده شوند. به عنوان مثال, آی سی ULN2803 یک بافر هشت بیتی با جریان خروجی 500mA و سازگار با TTL است که گزینه مناسبی به نظر می رسد و می توان به جای ترانزیستورهای منفرد از آن استفاده کرد.
سخت افزار پروژه ساخت نمایشگر LED روان یا تابلو روان
با توجه به مطالب گفته شده, اکنون آماده ایم تا وارد مراحل اصلی طراحی و ساخت تابلو روان شویم. هدف ما در این پروژه ساخت یک تابلو روان 32*8 (8 سطر و 32 ستون) توسط میکروکنترلر AT90S8535 است, بنابراین 256 عدد ال ای دی LED نیاز داریم. البته می توان از ال ای دی LED های ماتریسی که به صورت آماده در بازار وجود دارند نیز استفاده کرد. شکل زیر یک ماتریس 8*8 را نشان می دهد که در بازار می توان انواع تک رنگ و دو رنگ آن را با قیمت مناسب تهیه کرد. این ماتریس ها از ال ای دی LED های مات ساخته شده اند و بیشتر برای مکان هایی با نور کم و یا تابلو روان هایی که در شب استفاده می شوند, مناسبند.
نقشه شماتیک پروژه ساخت نمایشگر LED روان یا تابلو روان
برنامه میکروکنترلر در محیط نرم افزار Bascom-AVR
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
$regfile = "8535def.dat" $crystal = 8000000 'subroutine Declare Sub Show 'configure port-timer-external int Config Porta = Output Config Portc = Output Config Portb = Output Config Pind.6 = Output Config Timer0 = Timer , Prescale = 1024 Config Int0 = Falling Config Int1 = Falling 'interrupts Enable Interrupts Enable Timer0 Enable Ovf0 On Ovf0 Ovf0rut Enable Int0 On Int0 Int0rut Enable Int1 On Int1 Int1rut 'dim variables Dim Index As Integer Dim A As Byte Dim D As Integer Dim Play As Bit Dim V As Byte Dim I As Byte Dim Speed As Byte 'initial value Speed = 2 V = 0 Play = 1 D = 0 '****************** Do index = D Call Show Loop End '****************** Sub Show: Portc = &H7F For I = 0 To 31 Portb = I / 8 A = Lookup(index , Dat) Porta = A Waitus 600 Porta = 0 Rotate Portc , Right Incr index Next End Sub '****************** Ovf0rut: If Play = 1 Then Incr V If V >= Speed Then V = 0 D = D + 1 End If End If Return '****************** Int0rut: Toggle Play Return '****************** Int1rut: V = 0 Speed = Speed + 1 If Speed >= 6 Then Speed = 1 End If Return '******************* Dat: Data 24 , 8 , 9 , 8 , 24 , 40 , 40 , 56 Data 0 , 0 , 24 , 72 , 8 , 8 , 248 , 0 Data 56 , 40 , 56 , 8 , 7 , 0 , 0 , 24 Data 56 , 168 , 40 , 8 , 8 , 24 , 56 , 104 Data 8 , 0 , 248 , 0 , 0 , 0 , 0 , 0 |
شرح برنامه میکروکنترلر به زبان بیسیک
هسته اصلی برنامه از یک ساختار Do…Loop تشکیل شده است. زیر برنامه Show مسئول نمایش قسمتی از نوشته ها روی نمایشگر است که متغیر Index به ابتدای آن اشاره می کند. از آنجا که در این پروژه، نمایشگر دارای 8 سطر و 32 ستون است، نتیجه می گیریم که برای نشان دادن یک صفحه روی این نمایشگر، لازم است که 32 بایت (در هر ستون یک بایت) اطلاعات روی حافظه ذخیره کنیم. در واقع این اطلاعات روشن یا خاموش بودن هر LED در بدنه نمایشگر را شامل می شوند.
این اطلاعات باید قبلا استخراج شوند و در یک جدول لوکاپ (Lookup Table) ذخیره گردند. در این پروژه عبارت “به نام خدا” را برای نمایش در نظر گرفته ایم که کد استخراج شده آن در جدول لوکاپ قرار گرفته است. نحوه استخراج کد نیز بسیار ساده است. به این ترتیب که ما هر ستون را معادل یک بایت در نظر می گیریم و به ازای هر LED روشن، بیت معادل را یک می کنیم.
طبیعتا LED خاموش برابر صفر است. به عنوان مثال فرض کنید می خواهیم کد مربوط به نمایش حرف “ت” را بدست آوریم. کاری که انجام می دهیم این است که هر ستون را در یک بایت ذخیره می کنیم. در هر ستون LED بالایی معادل MSB (Most Significant Bit) است. با توجه به مطالب گفته شده، ستون اول تا سوم نوشته موجود در شکل زیر به ترتیب از راست به چپ برابر با این مقادیر باینری است:
ستون اول: 00110000B = 48 Dec
ستون دوم: 00001000B = 8 Dec
ستون سوم: 00001000B = 8 Dec
به همین ترتیب سایر ستونها را نیز می توان به صورت باینری در حافظه ذخیره کرد.
زیرروال سرریز تایمر به همراه متغیر Speed سرعت حرکت متن را معین می کنند، به این ترتیب که اگر متغیر Play برابر یک باشد، تایمر پس از تعداد دفعات مشخص – که متغیر Speed آنرا تعین می کند – مقدار موجود در متغیر D را یکی افزایش می دهد که این عمل به نوبه خود باعث میی شود متن در حال نمایش در نمایشگر به اندازه یک ستون به سمت راست حرکت کند. تکرار این عمل باعث می شود که نوشته به صورت روان به حرکت درآید. با فشار دادن کلید Speed می توان سرعت حرکت متن را در 5 حالت مختلف تنظیم کرد. همانطور که قبلا نیز اشاره شد توسط کلید Play و Pause نیز می توانیم حرکت متن را متوقف کنیم و با آنرا به حرکت در آوریم.
نرم افزار تابلو روان LED Display Code Creator
در فایل همراه پروژه نرم افزاری با عنوان LED Display Code Creator موجود است که می توانید توسط آن به راحتی نوشته ای را به صورت گرافیکی و با کلیک روی خانه های تیره تولید کنید. پس از ایجاد متن دلخواه, با زدن یک دکمه, کد مربوط به نوشته مورد نظر تولید می شود و می توان آن را در یک فایل Text ذخیره کرد و در قسمت جدول لوکاب میکروکنترلر AVR استفاده نمود. به این ترتیب دیگر مجبور نخواهید بود عمل طاقت فرسای در آوردن کدها را به صورت دستی انجام دهید.
یه سوالی داشتم اونم اینه که این پروژه آیا دارای توضیحات طریقه ساخت و کارکرد رو داره؟؟ چون نمیخوام پیش استادها کم بیارم و نتونم پاسخگوی سوالاتشون باشم
سلام دوست عزیز
توضیحات این پروژه همان توضیحات مندرج در پست می باشد و توضیحات دیگری ندارد.