به نام خدا : آموزش گام به گام ساخت تابلو روان جلسه ۵؛ این جلسه بیشتر مربوط به قطعه ای است که کارش مدیریت چند چند پایه با تعداد کمی پایه(!) … هستش؛ (البته این قطعه رو با دیکودر و مولتی پلکسر اشتباه نگیرید یه وقت.)؛ (حالا این قطعه جریان رو هم تقویت میکنه یا نه سواله برا خودم.)
نحوه کار با قطعه ۷۴HC573 (این اسمش تو پروتئوس هستش) :
یکی از پایه های این قطعه به زمین و یه سری ورودی و خروجی داره.
یه پایه هم داره برا فعال سازی این قطعه ، یعنی تا زمانی که این پایه رو فعال نکنی این IC غیر فعال خواهد بود و ما از این ویژگی تو تابلو روان استفاده میکنیم.
ما اول این قطعه رو فعال میکنیم (با استفاده از پایه فعال ساز) بعد به ورودی اطلاعات میدیم و اونم همون طوری اطلاعات رو میده به خروجی.
مثلا فرض کنید پایه های ورودی این قطعه به PORTA وصل است و ما میایم و به این پورت مثلا مقدار (به واحد باینری) ۰B00001111 (به واحد دسیمال میشه ۰X0F) رو به ورودی میدیم و این قطعه هم همین مقدار رو تو خروجی قرار میده.
همون طور که تو این پروژه میبینید PORTD به این ۴ تا قطعه وصل هستش (یا همه ی این ۴ تا قطعه به این پورت وصل هستش) و در واقع ما با ۱۲ تا پایه میکرو
(۸ تا PORTD که به ورودی این قطعات وصل هست + ۴ تا پایه PORTA که برا فعال سازی این قطعه ها استفاده میشه = ۱۲ تا پایه)
میاییم و ۳۲ تا پایه رو کنترل میکنیم.(با ۱۲ تا پایه>> 32 تا پایه رو کنترل میکنیم)
همون طور که در عکس بالا میبینید به ازای هر MATRX_LED یه بافر(اون ۴ تا مستطیل های پایین عکس بالا – ۷۴HC573 ) گزاشتم .
گیت نات(اون مثلث ها که جلوش دایره کوچیکی هستش) هم تو جلسه قبل حسابی در موردش صحبت کردیم.
عکس زیر مربوط به این بافر هستش ؛ البته بافر از این گنده تر هم داره (از نظر تعداد پایه) و بازم البته قطعاتی هم داریم که تو این بحث همچین کارایی و بعضا از این بهتر انجام میدن که فعلا کاری باهاشون ندارم.
کد های پروژه این جلسه-فایل دانلود کد-شبیه ساز و… در فایلی که در ته همین مطلب برا دانلود گزاشتم موجوده.
۱) SCAN رو که جلسه قبل گفتم برا چی هستش.
۲) نرم افزاری هم که متن DMF313 (متنی که در پروژه این جلسه در تابلو روان ما نمایش داده میشود.) رو به کد تبدیل میکنه هم تو جلسه قبل تو فایلی که ته ته مطلب هست گزاشتم.
۳) PORTA هم برا فعال/غیر فعال کردن بافر ها هستش. ( ما بافر اول رو روشن میکنیم و اطلاعات رو به ماتریس میدیم و بعد بافر دوم و اطلاعات رو به ماتریس دوم میدیم و… )
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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
#include <mega16.h> #include<delay.h> //////////////////////////////////////////////// flash char column[32]= { ۰xFF, // 0001 # # # # # # # # ۰x81, // 0002 # . . . . . . # ۰x81, // 0003 # . . . . . . # ۰x42, // 0004 . # . . . . # . ۰x3C, // 0005 . . # # # # . . ۰x00, // 0006 . . . . . . . . ۰xFF, // 0007 # # # # # # # # ۰x01, // 0008 . . . . . . . # ۰x02, // 0009 . . . . . . # . ۰x04, // 000A . . . . . # . . ۰x02, // 000B . . . . . . # . ۰x01, // 000C . . . . . . . # ۰xFF, // 000D # # # # # # # # ۰x00, // 000E . . . . . . . . ۰xFF, // 000F # # # # # # # # ۰x09, // 0010 . . . . # . . # ۰x09, // 0011 . . . . # . . # ۰x01, // 0012 . . . . . . . # ۰x01, // 0013 . . . . . . . # ۰x00, // 0014 . . . . . . . . ۰x91, // 0015 # . . # . . . # ۰x91, // 0016 # . . # . . . # ۰xFF, // 0017 # # # # # # # # ۰x00, // 0018 . . . . . . . . ۰x82, // 0019 # . . . . . # . ۰xFF, // 001A # # # # # # # # ۰x80, // 001B # . . . . . . . ۰x00, // 001C . . . . . . . . ۰x91, // 001D # . . # . . . # ۰x91, // ۰۰۱E # . . # . . . # ۰xFF,// ۰۰۱F # # # # # # # # ۰x00 // ۰۰۲۰ . . . . . . . . }; char i,scan=0x01; //////////////////////////////////////////////// void main(void) { //////////////////////////////////////////////// DDRA=0xFF; DDRC=0xFF; DDRD=0xFF; //////////////////////////////////////////////// while (1) { PORTA=0x01; for(i=0 ; i<=7 ; i++) { PORTD = scan; PORTC = column[i]; delay_us(50); scan=scan<<1; } scan=0x01; ////////////////////////////////////////////////////// // دو خط زیر و دوخط های بعدی برای از بین //بردن حافظه هستش-برشدار تا ببینی که چه مشکلی پیش میاد. PORTD =0x00; PORTC = 0x00; ////////////////////////////////////////////////////// PORTA=0x02; for(i=8 ; i<=15 ; i++) { PORTD = scan; PORTC = column[i]; delay_us(50); scan=scan<<1; } scan=0x01; PORTD =0x00; PORTC = 0x00; PORTA=0x04; for(i=16 ; i<=23 ; i++) { PORTD = scan; PORTC = column[i]; delay_us(50); scan=scan<<1; } scan=0x01; PORTD =0x00; PORTC = 0x00; PORTA=0x08; for(i=24 ; i<=31 ; i++) { PORTD = scan; PORTC = column[i]; delay_us(50); scan=scan<<1; } scan=0x01; PORTD =0x00; PORTC = 0x00; }; } |
تمرین این جلسه : شما دونه دونه ماتریس های LED رو افزایش بدید و کد ها رو هم تغیییر بدید ، بعد میبینید که وقتی تعداد ماتریس ها از یه مقدار معینی عبور میکنه اتفاق جالبی میوفته که انشاالله بعدا بهش اشاره میکنم.
اگه مشکلی پیش اومد یا سوالی بود در خدمتیم.
مهمان
سلام
ممنون از مطالب اموزنده تون اگر بخواهیم با ای سی لچ یه کانتر درست کنیم کدش به چه صورت خواهد بود میشه یه راهنمایی بفرمایید
مهمان
با سلام
مهندس چرا فایلاتونو نمیشه دانلود کرد وقتی هم دانلود میشه بخوای از حالت فشرده خارج کنی هیچ چیزی نداره یعنی خالیه
نویسنده این مطلب
سلام-نمیدونم – الان تست کردم موردی نبود.
مهمان
آموزشی برای RTX ندارین؟
نویسنده این مطلب
نمیدونم چی هستش اصلا.
مهمان
فقط میتونم بگم خدا بهت هر چی میخای بده که بدون هیچ انتظاری علمت رو در اختیار دیگران قرار میدی
مهمان
سلام من شش تا ییش کردم هر چی مقدار delay بیشتر کردم نشد برنامه هنگ میکنه یعنی کلمه اول رو درست نشون میده ولی کلمه های بعدی رو بهم ریخته نشون میده یعنی اشکال ازخو پروتیوس هست
مهمان
سلام
میخواستم بدونم آیا میشه اون پایه فعال ساز به جایی وصل نباشه
مهمان
مرسی از توضیحات خوبتون
اما چرا فایل پروتئوسش عمل نمیده
یعنی از طریق پروتئوس open folder رو میزنیم هیچ فایل قابل اجرایی واسه پروتئوس تو اون فولدر ذکر شده نیست
اگه میشه راهنمایی کنید
نویسنده این مطلب
عکس بدید.
مهمان
والا من بیشتر که میکنم ماتریس هارو به جای اینکه میکرو زورش نرسه روشن کنه برعکس یه سری ال ای دی های اضافی روشن میشه که حروفاتو یه کم نا مفهوم میکنه!!!!
جل الخاق!!!
چجوریاس؟؟؟؟؟؟؟
نویسنده این مطلب
طبیعی هستش.
اگه دیتای سالم نشون داد برا برنامه ای که ما ننوشتیم اون موقع باید بگی جل الخالق (*&^%$#@$#%^&*((&^%$#@
مهمان
توی eca ‘گذاشته 900 تومن
مهمان
فک کنم برا پیائده سازیش به 5 تا برد بورد نیاز باشه؟:))
راستی این بافر تو بازار پیدا میشه؟
نویسنده این مطلب
تو سایت های خرید قطعه سرچ کن
در ضمن از مطالب جلسات بعدی استفاده کن و اینو ول کن
مهمان
اگر قرار باشه یه ردیف دیگه ال ای دی بالای این اضافه شه داستان چی میشه
یعنی بشه 16*32
نویسنده این مطلب
سلام
مطالب بعدی رو ببین
مهمان
// دو خط زير و دوخط هاي بعدي براي از بين
//بردن حافظه هستش-برشدار تا ببيني که چه مشکلي پيش مياد.
PORTD =0x00;
PORTC = 0x00;
میشه دقیقا اینو توضیح بدی چرا اینو گزاشتی متوجه نشدم
حذفشونم کردم ولی تغییری نکرد
نویسنده این مطلب
سلام
اگه حذف کردی و تغییری نکرد پس زیاد مهم نیست
والا تا اونجایی که یادم میاد گزاشتم تا مقدارش صفر بشه و چیزی نمایش داده نشه و کار خراب نشه