مدار كامل تابلو روان - توسط ميكرومنترلر ATmega8 - توضيح برنامه

اين برنامه براي نمايش دو تصوير و دو متن طراحي شده است. بنابراين برنامه به چهار بخش تقسيم شده است كه هر بخش وظيفه نمايش يك مورد را دارد من جهت خواناتر شدن برنامه هريك از اين بخشها را در برنامه با قرار دادن توضيح قبل از شروع هر قسمت مشخص كردم.

در بخش اول نمايش تصوير قلب است كه ضمن نمايش اين تصوير را به سمت بالا هم شيفت ميدهد. در بخش دوم كلمه Lachini نمايش داده ميشود كه بر روي تابلو روان سمت چپ حركت ميكند. در بخش سوم تصوير آدمك خندان به سمت پايين حركت داده ميشود و در نهايت در بخش چهارم برنامه متن (--==**==--) به سمت راست حركت داده ميشود.

شما در مقالات قبلي به حركت متن و تصوير در چهار جهت اصلي آشنا شديد و من در اين مقاله فقط به توضيح چگونگي نمايش و گسترش تابلو قبلي اكتفا ميكنم، مطلبي كه شما در اين مقاله به دنبال آموختن آن هستيد.

البته من در ساير بخشهاي اين مقاله هم اشاره به اين موضوع كردم كه در اينجا بيشتر تمركز ما بر روي اعمال اين تغييرات بر روي برنامه است. و فقط به توضيح قسمت اول برنامه كه مربوط به نمايش قلب بر روي تابلو روان است مي‌پردازم. و ساير قسمتها مشابه همين بخش هستند و تحليل آن را بر عهده شما خواننده تيزبين و  با هوش ميگذارم (;

هر يك از بخشها برنامه شامل 3 حلقه تو در تو For-Next است. حلقه داخلي شامل دستورات خواندن اطلاعات از جداول گلايف و توليد سيگنالهاي مورد نياز جهت نمايش است. كه اين قسمت نيز خود از پنج قسمت تشكيل شده است. چهار قسمت اول براي ارسال اطلاعات مورد نياز براي لچ ها هستند و قسمت آخر وظيفه فعال كردن ستونهاي تابلو را بر غهده دارد.

پس در اينجا من به توضيح يكي از چهار قسمت اول ميپردازم.ما در اين قسمت با دو متغيير A ، S و Index سر و كار داريم. متغيير اول آدرس مكاني از جدول را كه اطلاعات آن بايد نمايش داده شود را در خود نگهداري ميكند. و همين طور كه در برنامه مشاهده ميكنيد ، در مقدار در قسمت اول برابر Index در نظر گرفته شده است و دليل آن هم اين است كه قسمت اول برنامه ماتريس 5 در 7 سمت چپ تابلو روان را كنترل ميكند و اطلاعات اين بخش از تابلو روان در ابتداي جداول گلايف قرار گرفته است.در قسمتهاي ديگر نيز چون هر يك به ترتيب كنترل پنج ستون ديگر تابلو روان را برعهده دارند لذا متغيير A به ميزان 5 تا نسبت به مقدار قسمت قبلي به آن اضافه ميشود.

 

                A = Index
                Portd = Lookup(A , Heart)
                Shift Portd , Left , S
                Portc = 1
                Portc = 0

در سطر بعدي برنامه پورت D با مقدار خوانده شده از جداول گلايف مربوط به تصوير قلب مقدار دهي مي‌شود و اين  مقدار در ورودي چهار لچ 74573 قرا ميگيرد. در سطر بعدي مقدار پورت D به اندازه S مرتبه به سمت چپ شيفت داده ميشود تا اين تصوير به سمت بالا بر روي تابلو روان حركت كند.از طرف ديگر به علت اينكه ما ميخواهيم اين اطلاعات فقط بر روي 5 ستون اول (از سمت چپ تابلو) نمايش داده شود و اين بخش از برنامه هم اين وظيه را بر عهده دارد. لذا بايستي فقط لچ اول اين اطلاعات را از ورودي خود برداشته و در خروجي خود قرار دهد. براي اين منظور من پايه هاي LE هر لچ را به يك پين از پورت C متصل كردم و لچ اول به پين صفر اين پورت متصل است پس با قرار دادن مقدار يك وسپس صفر بر روي اين پورت، لچ اول فعال شده و اطلاعات را از ورودي خود خوانده و در خروجي خود ثبت ميكند و مجدداً غير فعال ميشود تا اطلاعات خروجي آن تغيير نكند.

 

اين مراحل براي سه بخش بعدي نيز تكرار ميگردند با اين تفاوت كه در هر بخش فقط از طريق پورت C لچ مربوط به همان بخش كنترل ميشود. و اطلاعات مورد نياز همان بخش از جدول خوانده ميشود.

در قسمت آخر ستونهاي مورد نظر از طريق پورت B فعال ميشوند تا اطلاعات قرار گرفته توسط  چهار لچ 74573 بر روي چهار ستون نمايش داده شود.

 

                Portb = Scan
                Rotate Scan , Left , 1
                Waitus 250
                Portb = &H00

 

البته ميكروكنترولر به جهت اينكه همزمان بايد در اينجا چهار ستون مختلف را فعال كند و  تامين جريان مورد نياز براي LED هاي اين ستون‌ها از عهده ميكرو ساخته نيست لذا من در ايم مدار از آي سي ULN2803 استفاده كردم. همانطور در برنامه نيز مشاهده ميكنيد. در سطر اول برنامه ستون مورد نظر بر روي ماتريس LED توسط متغيير Scan انتخاب شده و بر روي پورت B قرار ميگيرد و سپس اين متغيير جهت استفاده بعدي به ميزان يك واحد به سمت چپ شيفت داده مي شود. حال براي اينكه اثر نور LEDها بر روي تابلو توسط چشم ديده شود به اندازه 250 ميكرو ثانيه LEDها در اين وضعيت روشن نگه داشته ميشوند و پس از آن توسط صفر كردن پورت C خاموش ميشوند.

در انيميشن زير شما ميتوانيد كل اجراي روند فوق را براي اجراي اولين بار حلقه داخلي مشاهده كنيد. به انيميشن توجه كنيد.

 

آموزش ساخت تابلو روان توسط مهندس حسين لاچيني | www.HLachini.Com

 

در انيميشن فوق من جهت درك بهتر موضوع مقادير خوانده شده از جداول گلايف در هر بار اجراي حلقه داخلي نمايش داده‌ام. البته باز هم براي درك بهتر موضوع اين مقادير را دقيقا زير لچ مربوط به مقدار خود در كادر مشكي مشخص كردم.

از آنجايي كه اين دستورات با سرعت بالايي در ميكرو اجرا ميشود در نتيجه چشم شما در عمل متوجه اين موضوع نخواهد شد و تصوير قلب را به صورت كامل همانند تصوير زير مشاهده خواهد كرد.

 

آموزش ساخت تابلو روان توسط مهندس حسين لاچيني | www.HLachini.Com

 

من در اينجا عكس واقعي اين مدار را هنگام نمايش تصوير قلب گذاشتم كه ميتوانيد آنرا در زير مشاهده كنيد.حيرت انگيز و جالب است. نه؟!

 

آموزش ساخت تابلو روان توسط مهندس حسين لاچيني | www.HLachini.Com

البته شما ميتوانيد فيلم كامل تابلو روان را از طريق كليك بر روي لينك زير مشاهده كنيد.

 

¸جهت دیدن فیلم تابلو روان اینجا کلیک کنید.

 

همانطور كه در كدهاي برنامه نيز مي‌بينيد شما جهت نمايش متن و علامات مختلف نياز به محاسبه كدهاي مربوط به جداول گلايف داريد. و اگر از قبل اين دسته از مقالات را دنبال كرده باشيد. مي‌دانيد كه من جهت راحتي شما دوستان علاقمند دو نرم افزار  زير را طراحي كردم:

- نرم افزار LTG كه جهت تبديل متن به كد هاي مورد نباز در تابلو روان است.(كليك كنيد)

- نرم افزار طراحي فونت و تصوير كه كد لازم را نيز خود توليد ميكند.(كليك كنيد)

 - مبدل آنلاین متن به کدهای هگز تابلوروان

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

 - مبدل آنلاین انیمیشن GIF به کدهای هگز تابلوروان

 - ماشین حساب آنلاین محاسبه مقاومت و مدارات LED

 جهت كسب اطلاعات بيشتر در اين مورد و همچنين دريافت آنها بر روي دو لينك بالا كليك كنيد.

 

كد كامل برنامه :

 

'*********************************************
'* This Program Writing By : Hossein Lachini *
'* The LED 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 Portc = Output
Config Portd = Output

Dim Scan As Byte
Dim Refresh As Byte
Dim Index As Byte
Dim S As Byte

Dim M As Byte
Dim E As Byte
Dim A As Byte

Do

' +-------------------------------------------+
' | Scrolling "Heart" sign to Up              |
' +-------------------------------------------+

    For S = 0 To 6
        M = 15
        If S = 0 Then M = 50
        For Refresh = 1 To M
            Scan = &H01
            For Index = 0 To 4

                A = Index
                Portd = Lookup(A , Heart)
                Shift Portd , Left , S
                Portc = 1
                Portc = 0

                A = Index + 5
                Portd = Lookup(A , Heart)
                Shift Portd , Left , S
                Portc = 2
                Portc = 0

                A = Index + 10
                Portd = Lookup(A , Heart)
                Shift Portd , Left , S
                Portc = 4
                Portc = 0

                A = Index + 15
                Portd = Lookup(A , Heart)
                Shift Portd , Left , S
                Portc = 8
                Portc = 0

                Portb = Scan
                Rotate Scan , Left , 1
                Waitus 250
                Portb = &H00

            Next Index
        Next Refresh
    Next S

' +-------------------------------------------+
' | Scrolling "Lachini" text to Left          |
' +-------------------------------------------+

    For S = 0 To 79
        E = S + 4
        For Refresh = 1 To 7
            Scan = &H01
            For Index = S To E

                A = Index
                Portd = Lookup(A , Lachini)
                Portc = 1
                Portc = 0

                A = Index + 5
                Portd = Lookup(A , Lachini)
                Portc = 2
                Portc = 0

                A = Index + 10
                Portd = Lookup(A , Lachini)
                Portc = 4
                Portc = 0

                A = Index + 15
                Portd = Lookup(A , Lachini)
                Portc = 8
                Portc = 0

                Portb = Scan
                Rotate Scan , Left , 1
                Waitus 250
                Portb = &H00

            Next Index
        Next Refresh
    Next S

' +-------------------------------------------+
' | Scrolling "Smilly" sign to Downe          |
' +-------------------------------------------+

    For S = 0 To 6
        M = 15
        If S = 0 Then M = 50
        For Refresh = 1 To M
            Scan = &H01
            For Index = 0 To 4

                A = Index
                Portd = Lookup(A , Smilly)
                Shift Portd , Right , S
                Portc = 1
                Portc = 0

                A = Index + 5
                Portd = Lookup(A , Smilly)
                Shift Portd , Right , S
                Portc = 2
                Portc = 0

                A = Index + 10
                Portd = Lookup(A , Smilly)
                Shift Portd , Right , S
                Portc = 4
                Portc = 0

                A = Index + 15
                Portd = Lookup(A , Smilly)
                Shift Portd , Right , S
                Portc = 8
                Portc = 0

                Portb = Scan
                Rotate Scan , Left , 1
                Waitus 250
                Portb = &H00

            Next Index
        Next Refresh
    Next S

' +-------------------------------------------+
' | Scrolling "(--==**==--)" text to Right    |
' +-------------------------------------------+

    For S = 0 To 79
        M = 79 - S
        E = M + 4
        For Refresh = 1 To 7
            Scan = &H01
            For Index = M To E

                A = Index
                Portd = Lookup(A , Star)
                Portc = 1
                Portc = 0

                A = Index + 5
                Portd = Lookup(A , Star)
                Portc = 2
                Portc = 0

                A = Index + 10
                Portd = Lookup(A , Star)
                Portc = 4
                Portc = 0

                A = Index + 15
                Portd = Lookup(A , Star)
                Portc = 8
                Portc = 0

                Portb = Scan
                Rotate Scan , Left , 1
                Waitus 250
                Portb = &H00

            Next Index
        Next Refresh
    Next S

Loop
End 'end program

Heart:
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H30 , &H78 , &H7C , &H7C , &H3E
Data &H1F , &H3E , &H7C , &H7C , &H78
Data &H30 , &H00 , &H00 , &H00 , &H00

Lachini:
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H7F , &H01 , &H01 , &H01 , &H01 ' "L"
Data &H02 , &H15 , &H15 , &H15 , &H0F ' "a"
Data &H0E , &H11 , &H11 , &H11 , &H02 ' "c"
Data &H7F , &H08 , &H10 , &H10 , &H0F ' "h"
Data &H00 , &H11 , &H5F , &H01 , &H00 ' "i"
Data &H1F , &H08 , &H10 , &H10 , &H0F ' "n"
Data &H00 , &H11 , &H5F , &H01 , &H30 ' "i"
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00

Smilly:
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H1C , &H3E , &H77 , &H5B
Data &H7B , &H5B , &H77 , &H3E , &H1C
Data &H00 , &H00 , &H00 , &H00 , &H00

Star:
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H1C , &H22 , &H41 , &H00 ' "("
Data &H08 , &H08 , &H08 , &H08 , &H08 ' "-"
Data &H08 , &H08 , &H08 , &H08 , &H08 ' "-"
Data &H14 , &H14 , &H14 , &H14 , &H14 ' "="
Data &H14 , &H14 , &H14 , &H14 , &H14 ' "="
Data &H14 , &H08 , &H3E , &H08 , &H14 ' "*"
Data &H14 , &H08 , &H3E , &H08 , &H14 ' "*"
Data &H14 , &H14 , &H14 , &H14 , &H14 ' "="
Data &H14 , &H14 , &H14 , &H14 , &H14 ' "="
Data &H08 , &H08 , &H08 , &H08 , &H08 ' "-"
Data &H08 , &H08 , &H08 , &H08 , &H08 ' "-"
Data &H00 , &H41 , &H22 , &H1C , &H00 ' ")"
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
 

 

من جهت سهولت کار شما کدهای فوق به همراه فایل Hex برنامه را جهت دانلود در سایت قرار دادم.

 

Í

جهت دانلود فایلهای فوق اینجا کلیک کنید.

حجم فایل : 5.74 کیلو بایت

فرمت فایل Zip

 

 

البته شايد برخي از دوستان از اين كه در اين برنامه از توابع جهت نوشتن برنامه استفاده نكردم و همچنين برنامه بشكل ساخت يافته نوشته نشده ايراد بگيرند كه من در اينجا بايد اين نكته را يادآوري كنم كه هدف من آموزش اصول ساخت تابلوهاي روان به همه كساني است كه حتي شايد اين اولين تجربه آنها در طراحي و برنامه نويسي مدارات الكترونيكي است. پس تا حد امكان برنامه را ساده نوشتم كه البته در عين سادگي كامل نيز هست.

 

در صورتي كه شما دوستان علاقمند نيز تجربياتي در اين زمينه داريد و اين مدار را چه در سخت افزار آن و چه در نرم‌افزار آن تغيير ايجاد كرده‌ايد و آن را كامل تر كرديد مي‌توانيد اطلاعات آنرا از طريق ايميل eLachini@Gmail.Com براي من ارسال كنيد تا با نام شما در اين سايت قرار بگيرد و ساير دوستان علاقمند هم بتوانند از تجربيات شما استفاده كنند.

جهت مطالعه ادامه مطالب اينجا كليك كنيد.