تبلیغات
مرجع تخصصی برق و الکترونیک - بررسی اولین مدار عملی تابلو روان - برنامه نویسی
مرجع تخصصی برق و الکترونیک
Electronic And Power Community Reference

حال نوبت به توضیح برنامه هست. من برنامه این میکرو را به زبان بیسیک نوشتم و از نرم افزار 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، پنج است فقط از پنج بیت اول هر بایت استفاده شده و سه بیت با ارزش آن صفر شده‌اند. شما بنابر نیاز خود میتوانید با تغییر دادن وضعیت بیتها به نمایش هر شکل و یا کاراکتری بپردازید.

برای تولید کدهای گلایف دلخواه خود بر روی آدرس زیر کلیک کنید :

http://www.hlachini.com/text2hex.wiz

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 مقدار دهی اولیه شده تا برای جاروب مجدد آماده گردد. بله به همین سادگی شما یک نمونه ساده از تابلو روان را ساختید!

متن کامل برنامه را بصورت یکجا در زیر آورده شده است.


$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

آرشیو مطالب
نظر سنجی
رشته ی شما چیست؟








صفحات جانبی
پیوند های روزانه





در صورتی که مایل به دریافت مطالب جدید در ایمیلتان هستید میتوانید با ثبت نام در فرم بالا از مقالات و پروژه های رایگان هر هفته بهرمند شوید. current.mihanblog.com