کتابخانه شیفت رجیستر 74HC595
کتابخانه شیفت رجیستر 74HC595
حتما برای شما هم پیش آمده تعداد مصرف کننده ها یا فرمان هایی که باید با میکروکنترلر کنترل کنید از تعداد پایه های میکروکنترلر بیشتر باشد در این حالت دو راه وجود دارد:
1- استفاده از میکروکنترلر با پایه های بیشتر
2- استفاده از شیفت رجیستر (مثل 74HC595 یا 74HC164)
شیفت رجیستر چیست؟
شیفت رجیستر (Shift Register) یک مدار دیجیتال است که به منظور انتقال دادهها به صورت متوالی (سریال) یا همزمان (موازی) در یک سیستم الکترونیکی استفاده میشود. این مدار به شکل یک زنجیره از فلیپفلاپها (Flip-Flops) تشکیل شده و دادهها را در خود نگه میدارد تا بتواند آنها را به صورت ترتیبی یا همزمان منتقل کند.
اجزای اصلی یک شیفت رجیستر:
- فلیپفلاپها:
- هر سلول درون یک شیفت رجیستر معمولاً یک فلیپفلاپ است که داده را در خود ذخیره میکند.
- ورودی (Input) و خروجی (Output):
- ورودیهای دیتا (Data In) و کلاک (Clock) برای ورود داده و تعیین زمان شیفت داده، و خروجیهای دیتا (Data Out) برای خروجی داده از شیفت رجیستر.
- پین شیفت (Shift):
- یک پین که برای تحریک شیفت داده به فلیپفلاپها استفاده میشود.
انواع شیفت رجیستر:
شیفت رجیستر SIPO (Serial-In, Parallel-Out):
در یک شیفت رجیستر SIPO، دادهها به صورت سریال (یک بیت در هر لحظه) وارد و در خروجی به صورت پارالل (همزمان) قرار میگیرند. این نوع شیفت رجیستر به ویژه در مواقعی که نیاز به تبدیل دادههای سریال به شکل پارالل داریم، مفید است. به عنوان مثال، در میکروکنترلرها یا مواردی که اطلاعات از یک سنسور سریال دریافت میشود و سپس به صورت همزمان به سیستم ارسال میشود و یا برای توسعه تعداد خروجی ها.
کاربردهای SIPO:
- تبدیل دادههای سنسورهای سریال به پارالل.
- کنترل واسطهای نمایشی (Display Interfaces).
- استفاده در مدارهای شیفت داده.
شیفت رجیستر PISO (Parallel-In, Serial-Out):
در مقابل، شیفت رجیستر PISO دادهها به صورت پارالل (همزمان) در ورودی دریافت میشوند و به صورت سریال (یک بیت در هر لحظه) از خروجی خارج میشوند. این نوع شیفت رجیستر در مواقعی که نیاز به ارسال دادههای پارالل به صورت سریال داریم، کارآمد است. به عنوان مثال، در ارتباط با دیگر دستگاهها یا مواقعی که دادهها به صورت سریال از یک میکروکنترلر به یک ماژول دیگر ارسال میشوند.
کاربردهای PISO:
- انتقال دادههای پارالل به صورت سریال.
- ارتباط با سایر سیستمها با ساختارهای ارتباطی سریال.
- استفاده در انتقال دادهها به صورت سریال از میکروکنترلر به سایر دستگاهها.
شیفت رجیسترهای SIPO و PISO هرکدام ویژگیها و کاربردهای خاص خود را دارند. این اجزا مهم در طراحی مدارهای دیجیتال، ارتباطات سریال، و کنترل دادهها به صورت پارالل یا سریال، نقش مهمی ایفا میکنند. با استفاده از این شیفت رجیسترها، انتقال دادهها به سادگی و با کارآیی بیشتر انجام میشود.
توابع کتابخانه شیفت رجیستر 74HC595
تابع HC595_set_bus:
با استفاده از این تابع میتوانید پایه هایی از میکروکنترلر که به شیفت رجیستر متصل شده را تعریف کنید. مزیت این تابع این هست که در حین برنامه میتوان پایه های تعریف شده را به راحتی تغییر داد و چند شیفت رجیستر را به پایه های مختلف میکروکنترلر متصل کرد.
روش استفاده:
1 2 3 4 5 6 7 8 9 10 11 | #define SEVEN_SEG_DATA_PIN PORTC0 #define SEVEN_SEG_DATA_PORT PORTC #define SEVEN_SEG_DATA_DDR DDRC #define SEVEN_SEG_CLK_PIN PORTC1 #define SEVEN_SEG_CLK_PORT PORTC #define SEVEN_SEG_CLK_DDR DDRC #define SEVEN_SEG_EN_PIN PORTC2 #define SEVEN_SEG_EN_PORT PORTC #define SEVEN_SEG_EN_DDR DDRC HC595_set_bus(&SEVEN_SEG_DATA_PORT,&SEVEN_SEG_CLK_PORT,&SEVEN_SEG_EN_PORT,&SEVEN_SEG_DATA_DDR,&SEVEN_SEG_CLK_DDR,&SEVEN_SEG_EN_DDR,SEVEN_SEG_DATA_PIN,SEVEN_SEG_CLK_PIN,SEVEN_SEG_EN_PIN); |
تابع send_to_74hc595_byte:
1 | void send_to_74hc595_byte(char data_s, int s_c, char invert, char revers) |
این تابع جهت انتقال یک بایت دیتا به شیفت رجیستر میباشد.
ورودی های تابع:
1- data_s: دیتای انتقالی
2- s_c: تعداد دفعات شیفت دیتا (اگر یک آی سی شیفت رجیستر استفاده شده 0 باشد.)
3- invert: اگر 1 باشد دیتا معکوس میشود.
4- revers: اگر یک باشد جهت دیتا معکوس میشود. (LSB OR MSB)
تابع send_to_74hc595_arry:
1 | void send_to_74hc595_arry(char *data_s, int s_c, char invert, char revers) |
این تابع جهت انتقال یک آرایه از دیتا به تعداد مشخصی شیفت رجیستر میباشد.
ورودی اول تابع، متغییر آرایه ای میباشد.
ورودی دوم طول آرایه میباشد.