
معرفی شیفت رجیستر:
اگر بخواهید تعداد زیادی از LED ها را کنترل کنید یا تنها به ورودی و خروجی های بیشتری نیاز داشته باشیم چه راهی را پیدا می کنید؟
این آموزش اصول اولیه مورد نیاز را درباره چگونگی انجام این کار را پوشش قرار ی دهد تا بدانید که آن را چگونه انجام دهید ما نیاز به قطعه ای دریم که این کار را برای ما انجام دهید و فقط ما آن قطعه را کنترل خواهیم کرد که به آن شیفت رجیستر (Shift Registers) گفته می شود.
شیفت رجیستر دقیقا چیست؟
چرا باید از شیفت رجیستر ها استفاده کنیم؟
چگونه از آن استفاده کنیم؟
اینها سوالاتی هستند که در این آموزش تلاش خواهیم کرد به آنها پاسخ بدهیم.
شیفت رجیستر چیست؟
شیفت رجیستر قطعه ی الکترونیکی یا آی سی مدار مجتمع است که به شما اجازه میدهد تا بر تعداد ورودی و خروجی های میکروکنترلر خود بیفزایید.
چگونگی انتقال داده در شیفت رجیستر:
تبدیل یا انتقال دیتا بین دو رابط موازی و سریال انجام می شود یک میکرو کنترلر برای ارتباط با شیفت رجیستر از رابط سریال استفاده کرده و اطلاعات را به شیفت رجیستر ارسال می کند ، شیفت رجیستر این اطلاعات را دریافت کرده و آن را به صورت موازی و در یک سیکل در خروجی قرار می دهد.
تعداد زیادی باتن دارید؟می توانید استفاده از شیفت رجیستر را در نظر بگیرید
انواع شیفت رجیستر:
شیفت رجیستر ها در دو نوع متفاوت Serial-In-Parallel-Out سریال به موازی (SIPO) و یا Parallel-In-Serial-Out موازی به سریال (PISO) شناخته می شوند
اگر تعداد زیادی LED دارید و برای وصل این LED ها به پورت میکروکنترلر ، خروجی کم آوردید می توانید از SIPO نظیر شیفت رجیستر ۷۴HC595 استفاده کنید
و اگر تعداد زیادی دکمه کلید یا PUSH-BUTTON دارید و همه باید به پین هایی از میکرو کنترلر وصل شوند در صورتی که پین ورودی کم آوردید می توانید از PISO نظیر شیفت رجیستر ۷۴HC165 استفاده کنید
هدف استفاده از شیفت رجیستر چیست؟
شیفت رجیستر معمولا با هدف کاهش در استفاده از پین های میکرو کنترلر به کاربرده می شود هر میکروکترلر دارای تعداد محدودی از پایه های ورودی و خروجیست ، اگر در پروژه ای نیاز به کنترل ۱۶ عدد LED دارید به طور معمول نیاز به ۱۶ پایه خروجی از میکرو کنترلر دارید در حالی که ۱۶ پایه در دسترس نباشد ، اینجاست که شیفت رجیستر به کمک شما خواهد آمد.
با دو عدد شیفت رجیستر سریال به موازی که به یکدیگر متصل شده اند وظیفه کنترلر این LED ها را تنها با چهار پایه انجام خواهیم داد ، و در واقع شما تنها نیاز به چهار پایه از میکرو کنترلر برای کنترلر همه ۱۶ LED را خواهید داشت و این کاملا با اشغال شدن ۱۶ پایه از میکروکنتر متفاوت است ، بنابراین شما می توانید با استفاده تعداد بیشتری از شیفت رجیستر ها پایه های بیشتری از میکرو کنترلر را ذخیره کنید
یک نمونه عملی که در آن از شیفت رجیستر برای ورودی ها استفاده شده است برد کنترلر Nintendo می باشد میکروکنترلر اصلی نیاز دارد تا وضعیت کلید های کنترلر را بخواند در اینجا برای ذخیره پین های میکروکنترلر از یک شیفت رجیستر موازی به سریال PISO استفاده شده است.
شیفت رجیستر ۷۴hc165:
مثال:
ما از شیفت رجیستر ۷۴HC165 موازی به سریال برای خواندن وضعیت تعدادی از کلید ها در این مثال استفاده خواهیم کرد (توجه داشته باشید که تمامی پایه ها بر اساس دیتاشیت شیفت رجیستر ۷۴HC165 در این مثال نام برده خواهند شد)
نام گذاری پایه ها در دیتاشیت
یک شیفت رجیستر هشت بیتی برای کنترل کلید ها حداقل نیاز به سه پایه از میکرو کنترلر دارد (با صرف نظر از پایه CLOCK ENABLE) ، برای کنترل شیفت رجیستر پایه های ی CP و Q7 و ‘PL باید به میکروکنترلر وصل شوند بنابراین به جای هشت پایه تنها سه پایه از میکرو کنترلر اشغال خواهد شد ، می توانید با استفاده تعداد بیشتری از شیفت رجیستر ها (و مدیریت زمان) تنها با سه پایه اشغال شده میکرو کنترلر ورودی های زیادی داشته باشید.
توضیحات:
در این پروژه به تعداد هشت عدد کلید فشاری به پایه های D0 تا D7 شیفت رجیستر وصل شدند پایه ۱۵ شیفت رجیستر clock enable باید به زمین متصل شود اگر پایه یک شیفت رجیستر (‘parallel load (PL برابر با صفر شود کلید ها یک بار اسکن شده و آماده خواندن از طریق پایه ۹ شیفت رجیستر Q7 خواهد بود با صفر کردن پایه یک شیفت رجیستر (‘parallel load (PL ورودی D7 در خروجی سریال یعنی Q7 قرار میگیرد و باید مقدار D7 خوانده شود با اعمال پالس مثبت به پایه دو شیفت رجیستر CP بیت ها یک واحد شیفت داده شده و ورودی D6 در خروجی Q7 قرار میگیرد و مقدار خوانده می شود و با اعمال مجدد پالس به CP همینطور بیت ها شیفت داده شده و تا D0 این مراحل را تکرار می کنیم و مقدار ورودی ها را می خوانیم
اسکن مجدد:
بعد از اتمام خواندن ورودی ها دوباره باید توسط پایه ‘PL یک بار خروجی ها اسکن شوند تا اماده مرحله دوم خواندن شوند توجه داشته باشید تغذیه شیفت رجیستر را فراموش نکنید و با اعمال ولتاژ ۲ تا ۶ ولت آن را تغذیه کنید.
نمونه کد به زبان بیسیک:
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 |
$regfile="m8def.dat" $crystal=8000000 dim data_read as byte, i as byte clock alias portc.2 load_data alias portc.1 serial_out alias pinC.0 button alias pinc.3 config portb=output config portd=output config clock=output config load_data=output config serial_out=input config button=input PORTb=0 portd=0 do if button=0 then data_read=0 clock=0 load_data=0 waitms 5 load_data=1 for i=0 to 7 step 1 shift data_read , left , 1 data_read=data_read or serial_out clock=1 waitms 5 clock=0 next PORTB=data_read endif loop |
نمونه کد با زبان C:
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 |
#define clock PORTC.2 #define load_data PORTC.1 #define serial_out PINC.0 #define button PINC.3 void main() { unsigned char data_read , i; DDRB=0xFF; DDRD=0xFF; DDRC=0b11110110; while(1){ if(button==0){ data_read=0; clock=0; load_data=0; delay_ms(5); load_data=1; for(i=0;i<8;i++){ data_read<<=1; data_read|=serial_out; clock=1; delay_ms(5); clock=0; } PORTB=data_read; } } } |
اگر یک شیفت رجیستر جوابگو نباشد چه کنیم؟
اگر نیاز باشد که از ۱۶ عدد کلید استفاده کنید باید از دو شیفت رجیستر استفاده کنید در این صورت پایه DS شیفت رجیستر اولی به زمین متصل می شود و پایه خروجی یعنی Q7 شیفت رجیستر اولی هم به پایه DS شیفت رجیستر دومی وصل می شود پایه های CP و ‘PL هر دو شیفت رجیستر به یکدیگر متصل می شوند و پایه ‘CE هر دو هم همچنان به زمین متصل می شوند بعد از این مراحل با ۱۶ بار شیفت می توانید وضعیت هر ۱۶ کلید را بخوانید.
شیفت رجیستر ۷۴HC595:
در این مثال هم سعی می کنیم با شیفت رجیستر ۷۴HC595 سریال به موازی تعداد هشت عدد LED را کنترل کنیم (توجه داشته باشید که تمامی پایه ها بر اساس دیتاشیت شیفت رجیستر ۷۴HC595 در این مثال نام برده خواهند شد)
نام گذاری پایه ها در دیتاشیت
یک شیفت رجیستر هشت بیتی از نوع سریال به موازی حداقل به سه پایه برای برقراری ارتباط با میکرو کنترلر نیاز دارد بنابراین برای کنترل شیفت رجیستر پایه های SHIFT CLOCK و LATCH CLOCK و A باید به میکروکنترلر وصل شوند بنابراین به جای هشت پایه تنها سه پایه از میکرو کنترلر اشغال خواهد شد می توانید با استفاده تعداد بیشتری از شیفت رجیستر ها (و مدیرست زمان) تنها با اشغال شدن سه پایه خروجی های زیادی داشته باشید.
توضیحات:
در این پروژه یک متغیر هشت بیتی با نام value تعریف کرده و آن را مقدار دهی کرده و به شیفت رجیستر ارسال کرده و LED ها را کنترل می کنیم ابتدا پایه LATCH CLOCK را صفر می کنیم سپس مقدار بیت هفتم متغیر value را در پایه A شیفت رجیستر قرار می دهیم با اعمال پالس مثبت به پایه SHIFT CLOCK بیت را یک واحد به پایین شیفت داده و بیت ششم از متغیر value را در پایه A قرار داده و دوباره با اعمال پالس به SHIFT CLOCK هر دو بیت را یک واحد دیگر به پایین شییفت می دهیم و این کار را تا بیت صفرم از متغیر value انجام میدهیم بعد از اینکه بیت صفرم را شیفت دادیم و تمام شد پایه LATCH CLOCK را برابر با یک می کنیم تا مقدار value که به شیفت رجیستر ارسال کردیم بدر خروجی ظاهر شود.
نمونه کد به زبان بیسیک:
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 |
$regfile="m8def.dat" $crystal=8000000 clock alias portb.0 data_in alias portb.1 load_data alias portb.2 config clock = output config data_in = output config load_data = output dim value as byte, i as byte clock=0 data_in=0 load_data=0 do value=167 for i=0 to 7 step 1 data_in= value.7 clock=1 'waitus 10 clock=0 shift value , left ,1 next load_data=1 'waitus 10 load_data=0 loop |
نمونه کد به زبان C:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#define clock PORTB.0 #define data_in PORTB.1 #define load_data PORTB.2 void main() { unsigned char value , i; DDRB=0x0f; clock=0; data_in=0; load_data=0; while(1){ value=167; for(i=0;i<8;i++){ data_in=(value>>(7-i))&0x01; clock=1; //delay_us(10); clock=0; //value>>=1; } load_data=1; //delay_us(10); load_data=0; } } |
اگر یک شیفت رجیستر جوابگو نباشد چه کنیم؟
اگر نیاز باشد که به تعداد ۱۶ عدد LED را کنترل کنید نیاز به دو عدد شیفت رجیستر خواهید داشت برای اینکه هر دو شیفت رجیستر تنها از طریق سه خط عمل کنترل ۱۶ عدد LED را انجام دهند به صورتی که گفته می شود عمل کنید:
پایه SQH یعنی پایه ۹ شیفت رجیستر اولی را به پایه A شیفت رجیستر دومی وصل کنید پایه های SHIFT CLOCK و LATCH CLOCK شیفت رجیستر اولی را به پایه های همنام با خودشان در شیفت رجیستر دومی وصل کنید و پایه های SHIFT CLOCK و LATCH CLOCK هر دو شیفت رجیستر که به یکدیگر متصل شده اند به اضافه پایه A شیفت رجیستر اولی به میکرو کنترلر باید وصل شوند.
تهیه و تنظیم: تیم MCULIBRARY.IR
دیدگاهها (0)