قطعا برای همه ی ما پیش آمده است که در حال اجرای یک پروژه هستیم و ناگهان با اتمام پایه های GPIO I/O در برد آردوینو رو به رو میشویم! شاید برد آردوینو مگا Mega2560 در ذهن شما تداعی شود اما در حال حاضر متداولترین برذ آردوینو که هر کسی این روزها دارد، برد آردوینو UNO و Nano است. پس همچنان مشکل پابرجاست! ازران ترین راه حل برای افزایش پایه استفاده از شیفت رجیستر Shift register است. شیفت رجیستر امکان افزایش پایه های ورودی – خروجی دیجیتال را برای هر میکروکنترلر فراهم کرده و همیشه در دسترس است. در ادامه معرفی شیفت رجیستر و راه اندازی با آردوینو Arduino با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
شیفت رجیستر Shift register
شیفت رجیستر از تراشه SN74HC595N مشهور به ۵۹۵ طراحی شده است. تراشه ۵۹۵ به ترییب ۸ پایه خروجی را به صورت جداگانه کنترل کرده و فقط از سه پایه ورودی استفاده میکند. در این حالت اگر به بیش از ۸ خط ورودی خروجی Input – Output اضافی نیاز دارید، به راحتی میتوانید هر تعداد شیفت ریجیستری را به میکروکنترلر متصل کرده و تعداد بسیار زیادی ورودی و خروجی I/O را ایجاد کنید. از شیفت رجیستر در جهت کمترین استفاده از پایه های ورودی – خروجی میکروکنترلر استفاده میشود و به عبارتی در پایه های استفاده شده صرفه جویی میشود. به عنوان مثال برای کنترل چندین ال ای دی LED توسط پایه های آردوینو عملا با کاهش پایه ها رو به رو میشویم. پس بهترین کار سری شدن چندین شیفت رجیستر در مسیر یک دیگر است. هر شیفت رجیستر سه پایه از ورودی – خروجی I/O را درگیر کرده و میتوانید با استفاده از سری شدن بیشترین بهره برداری را کنید. شیفت رجیستر در یک تعریف کلی آرایه ای از فلیپ فلیپ ها Latch هستند که برای ذخیره سازی و انتقال دیتا در سیستم های دیجیتال استفاده میشود.
عملکرد شیفت رجیستر Shift Registor
تراشه ۵۹۵ از دو شیفت رجیستر ۸ بیتی حافظه تشکیل شده است که ورودی ها را دریافت کرده و در مسیر مدار قرار میگیرد. زمانی که یک پالس ساعت را به تراشه ۵۹۵ اعمال کنیم، بیت های شیفت رجیستر یک به یک به سمت چپ حرکت کرده و مقادیر یکدیگر را دریافت میکنند. به این صورت که اگر یک بلوک ۸ خانه ای را در نظر بگیرید، بیت شماره ۷ مقادیری که در بیت شماره ۶ بوده است را دریافت کرده و به همین ترتیب بیت شماره ۶ مقادیر بیت شماره ۵، بیت شماره ۵ مقادیر بیت شماره ۴، بیت شماره ۴ مقادیر بیت شماره ۳، بیت شماره ۳ مقادیر بیت شماره ۲ و بیت شماره ۲ مقادیر بیت شماره ۱ را دریافت میکند. در این حالت بیت شماره صفر در شیف رجیستر مقادیری که در پایه های دیتا پین Data pin شیفت رجیستر است را در لحظه دریافت میکند. طبق قواننی الکترونیک در لبه بالا رونده پالس اگر پایه دیتا High باشد، ۱ وارد شیفت رجیستر می شود و در غیر اینصورت عدد صفر وارد شیفت رجیستر میشود. لچ Latch سطح مدار منطقی است که دارای دو ورودی و یک خروحی است. یکی از ورودی ها SET و دیگری Reset است. با فعال سازی پین لچ Latch در فاصله بسیار کمی تغییراتی که در ورودی اعمال میشود، در خروجی قابل مشاهده است. لچ در زمانیکه ورودی Set باشد، خروجی را یک کرده و در زمانیکه ورودی Reset باشد، خروجی را صفر میکند. در ساحتار شیفت رجیسترها از فیلپ فلاپ D استفاده میشود که دارای یک ورودی دیتا و یک سیگنال کلاک و خروجی است. در صورتیکه دیتا برابر با یک منطقی باشد و در سیگنال کلاک لبه بالارونده ایجاد شود، خروجی هم یک منطقی خواهد شد. در مقابل در صورتیکه دیتا برابر با یک باشد و لبه بالا رونده در سیگنال کلاک باشد خروجی برابر با صفر خواهد شد.
بررسی پایه های ۷۴HC595
آی سی شیفت رجیستر ۷۴HC595 طبق ظاهر و اطلاعات درج شده در دیتاشیت دارای ۱۶ پایه است. برای اتصال آی سی به آردوینو از دیتاشیت برای تحلیل پایه های تراشه کمک میگیریم. با توجه به اینکه هدف اصلی از این آموزش برطرف شدن دغدغه ی افزایش پایه های ورودی خروجی در بردهای میکروکنترلر است، ابتدا پایه ها را بررسی و سپس روش اتصال به برد آردوینو را بررسی خواهیم کرد. در تصویر پایه های تراشه با نام آن ها مشخص شده است.
- پایه GND و VCC به ترتیب برای تغذیه استفاده میشود.
- پایه SER یا همان پایه Serial Input برای تغذیه همزمان دیتا در شیفت رجیستر استفاده میشود.
- پایه SRCLK با همان Shift Register Clock پایه کلاک شیفت رجیستر است و برای جابه جایی بیت در شیفت رجیستر بایستی سیگنال کلاک در لبه بالارونده ایجاد شود.
- پایه RCLK یا همان Register Clock/Latch است که پایه فعال ساز است. زمانیکه دیتا در یک منطقی است، محتوای شیفت رجیستر در رجیستر لچ ذخیره شده و همزمان در خروجی نمایش داده میشود.
- پایه SRCLR یا همان Shift Register Clear پایه تنظیم شیفت رجیستر است که تمامی پایه ها را صفر میکند. این پایه منطقی منفی است و برای ریست شدن ابتدا باید پین SRCLR غیرفعال شود. در صورتیکه ریست در مدار اتفاق نیفتد، این پایه بایستی فعال باشد.
- پایه OE پایه Output Enable است که در زمان افزایش ولتاژ جریان در مدار را کنترل کرده و خروجی ها را غیرفعال میکند.
- پایه QA – QH به ترتیب تصویر پایه های خروجی هستند که به ترتیب به خروجی های مورد نظر متصل میشود.
اتصال شیفت رجیستر به آردوینو
دو پایه ۱۶ و ۱۰ به ترتیب برای تغذیه VCC مدار استفاده میشود که به ۵ ولت برد میکروکنترلر متصل میشود. پین ۸ و پین ۱۳ پایه های GND هستند که به پایه GND برد میکروکنترلر متصل میشود. با توجه به اینکه در هر آردوینو تعداد پایه های دیجیتال I/O متفاوت است به دلخواه از یکی از پایه های دیجیتال برای پایه شیفت رجیستر کلاک، پایه ریست شیفت رجیستر و پایه سریال ورودی انتخاب کنید.
کد آردوینو Arduino
در این آموزش از متداول ترین برد آردوینو که در بین ۹۰ درصد کاربران مشترک است استفاده میکنیم. آردوینو Arduino UNO دارای ۱۴ پایه دیجیتال و ۶ پایه آنالوگ است. از ۱۴ پایه فقط سه پایه برای شیفت رجیستر درگیر خواهد شد. برای درک عملکرد شیفت رجیستر ۷۴HC595 از چند ال ای دی استفاده میکنیم. تمامی ال ای دی ها به شیفت رجیستر متصل شده و فقط سه پایه اصلی به برد آردوینو متصل میشود. در ادامه یک نمونه کد برای تست و راه اندازی ضمیمه شده است. ابتدا اتصالات را انجام داده و سپس کد را به نرم افزار آردوینو Arduino انتقال دهید.
int latchPin = 5; int clockPin = 6; int dataPin = 4; byte leds = 0; void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { leds = 0; updateShiftRegister(); delay(500); for (int i = 0; i < 8; i++) { bitSet(leds, i); updateShiftRegister(); delay(500); } } void updateShiftRegister() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); }
کد را کپی و به نرم افزار آردوینو Arduino انتقال دهید.
تحلیل کد آردوینو شیفت رجیستر
اولین مرحله برای تحلیل کد تعریف ۳ پایه برای شیفت رجیستر است. این سه پایه مربوط به پایه لچ Latch هستند که به ترتیب Latch pin , Clock Pin, Data Pin هستند. به دلخواه از سه پایه ۴،۵ و ۶ دیجیتال آردوینو برای اتصال به پایه های شیفت رجیستر استفاده شده است.
int latchPin = 5; // پایه لچ همان پایه RCLK است. int clockPin = 6; //پایه SRCLK است. int dataPin = 4; // پایه دیتا پایه SER است
متغیر بعدی مربوط به ال ای دی ها است. در این متغیر مقادیر ال ای دی به ترتیب ذخیره شده و طی شرط خاصی تغییر میکند. نوع داده بیت است که اعداد را با هشت بیت ذخیره کرده و هر بیت میتواند روشن و یا خاموش باشد و جهت بررسی اینکه کدام بیت از ال ای دی ها روشن و یا خاموش است، انتخاب نوع داده byte بسیار مناسب است. از این داده برای ذخیره سازی اعداد بین بازه ۰ تا ۲۵۵ است.
byte leds = 0; // مقدار اولیه برای ال ای ها صفر است
تعریف تابع اصلی برنامه با Void Setup
در Voidsetup توابع اصلی برنامه تعریف میشود که در این بخش ورودی و خروجی ها مشخص شده است.
void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); }
تعریف حلقه برنامه Void Loop
نوبت به اجرای دستورات است!
void loop() { leds = 0; updateShiftRegister(); delay(500); for (int i = 0; i < 8; i++) { bitSet(leds, i); updateShiftRegister(); delay(500); } }
در ابتدا مقدار اولیه متغیر ال ای دی Leds را صفر در نظر گرفته و سپس تابع شیفت رجیستر را فراخوانی میکنیم.
تابع شیفت رجیستر به صورت زیر تعریف میشود.
void updateShiftRegister() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); }
استفاده از تابع For برای ساختار تکرار
به صورت پیش فرض در برنامه نویسی آردوینو، دستورات برنامه از اولین دستور به آخرین دستور اجرا شده و تحت شرایط خاصی دستورات را اجرا میکنند که به عبارتی تحت کنترل هستند. یکی از ساختار های کنترلی ساختار تکرار است که تحت شرایط خاصی یک یا چند دستور چندین بار متوالی اجرا و تکرار میشوند. یکی از این ساختارهای تکرار پرکاربرد ساختار تکرار for است. از ساختار تکرار for در زمانیکه تعداد دفعات تکرار حلقه از قبل مشخص باشد، استفاده میشود. توسط متغیری که در این ساختار تعریف میشود، تعداد دفعات تکرار حلقه در برنامه کنترل میشود. در ساختار for یک مقدار اولیه تعریفش شده و در هر بار اجرای دستورات حلقه مقداری به آن اضافه میشود و سپس این مقدار به گام حرکت اضافه میشود. در نهایت نوبت به شرط حلقه میرسد. شرط حلقه مشخص میکند که دستورات نوشته شده در حلقه تا کی اجرا شود.
ساختار for یکی از امکانات ایجاد حلقه است و در حالتی که تعداد دفعات تکرار حلقه از قبل مشخص است، به کار میرود:
- متغیر شمارنده ( اندیس حلقه تکرار ) تعداد دفعات تکرار حلقه را کنترل میکند.
- شمارنده دارای یک مقدار اولیه است و در هر بار اجرای دستورات حلقه، مقداری به آن اضافه میشود.
- مقداری که پس از هر بار اجرای حلقه به شمارنده اضافه میشود، گام حرکت گفته میشود.
- گام حرکت میتواند عددی صحیح، اعشاری، مثبت یا منفی و یا کاراکتری باشد.
- شرط حلقه مشخص میکند که دستورات داخل حلقه تا کی باید اجرا شوند.
for (int i = 0; i < 8; i++) { bitSet(leds, i);
در ابتدا حلقه با اعمال عدد صفر به متغیر leds تمام ال ای دی ها را خاموش میکند. سپس updateshiftregistor فراخوانی کرده تا متغیر Leds را به شیفت رجیستر انتقال دهد. سپس حلقه برنامه به مدت نیم ثانیه توقف کرده و سپس با استفاده از حلقه For و متغیر i در برنامه شروع به شمارش هشت بیت از ۰ تا ۷ میکند. همپچنین از تابع bitset برای تغییر مقادیر بیت ال ای دی ها با متغیر i استفاده شده است. در تابع شیفت رجیستر Updateshiftregistor پایه لچ پین غیرفعال شده و Low میشود. سپس در خروجی شیفت رجیستر که به ترتیب پایه های دیتا، پایه کلاک و پایه ریست است فعال میشود. سپس پایه لچ فعال میشود.
استفاده از پایه PWM
جهت کنترل شدت نور ال ای دی ها از پایه OE پایه فعال خروجی استفاده میکنیم. در بخش اول پایه OE مسقیم به GND منصل شد اما در این بخش از این پایه برای PWM استفاده میکنیم.پایه OE همانند سوییچ عمل کرده و زمانیکه فعال باشد پین های خروجی غیرفعال میشود و زمانیکه این پایه غیرفعال باشد، خروجی ها عمل میکند. به همین دلیل در بخش اول با اتصال این پایه به زمین GND که به معنی غیرفعال بودن است، خروجی ها طبق روال و عادی فعال است. با اتصال این پایه به یکی از پایه های دیجیتال میکروکنترلر وضعیت تمامی خانه های حافظه رجیستر به صورت یک خواهد بود و همیشه مقدار در آن ذخیره میشود. برای استفاده از PWM از دستور برنامه نویسی Analogwrite استفاده میکنیم. در این خصوص از ADC مخفف Analog to Digital Converter است که به معنی مبدل آنالوگ به دیجیتال بوده و ولتاژهای ورودی آنالوگ که بر روی پایه را به اعداد دیجیتال تبدیل میکند. با تبدیل اعداد آنالوگ به اعداد دیجیتال ارتباط با آنالوگ ها را خواهیم داشت. ADC که در برد آردوینو۱۰ بیتی میباشد، یعنی میتواند یه ولتاژ آنالوگ را با با دقت ۲۱۰ (۱۰۲۴) بخواند. منظور از این جمله این است که که هر ولتاژ آنالوگ که روی پایه است به آن یک عدد از ۰ تا ۱۰۲۳ نسبت میدهد و هر چه این ولتاژ بالاتر باشد عدده نمایش داده شده نیز بالا تر است. به عنوان مثال ولتاژ صفر بباشد عدد ۰ رو خوانده و اگه ولتاژ ۵ باشد عدد ۱۰۲۳ را خواهد خواند.
کد آردوینو شیفت رجیستر PWM
در مرحله دوم یک تب جدید در نرم افزار آردوینو Arduino باز کنید. سپس کد را کپی و به نرم افزار آردوینو انتقال دهید.
int latchPin = 5; int clockPin = 6; int dataPin = 4; int outputEnablePin = 3; byte leds = 0; void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(outputEnablePin, OUTPUT); } void loop() { setBrightness(255); leds = 0; updateShiftRegister(); delay(500); for (int i = 0; i < 8; i++) { bitSet(leds, i); updateShiftRegister(); delay(500); } for (byte b = 255; b > 0; b--) { setBrightness(b); delay(50); } } void updateShiftRegister() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); } void setBrightness(byte brightness) { analogWrite(outputEnablePin, 255-brightness); }
تحلیل کد آردوینو
در ابتدا طبق کد قبل ۳ پایه برای شیفت رجیستر shiftregistor است. این سه پایه مربوط به پایه لچ Latch هستند که به ترتیب Latch pin , Clock Pin, Data Pin هستند. به دلخواه از سه پایه ۴،۵ و ۶ دیجیتال آردوینو برای اتصال به پایه های شیفت رجیستر استفاده شده است. پایه OE برای پایه PWM استفاده میشود.
int latchPin = 5; int clockPin = 6; int dataPin = 4; int outputEnablePin = 3;
انتخاب یک متغیر برای Brightness
در ابتدا مقدار اولیه برای شدت نور Brightness بیشترین مقدار یعنی ۲۵۵ را در نظر میگیریم. سپس برای تغییر مقادیر بین ۰ تا ۲۵۵ از تایع شرطی for استفاده میکنیم.
setBrightness(255);
استفاده از تابع for دیگر برای شدت نور
یکی از این ساختارهای تکرار پرکاربرد ساختار تکرار for است. از ساختار تکرار for در زمانیکه تعداد دفعات تکرار حلقه از قبل مشخص باشد، استفاده میشود. توسط متغیری که در این ساختار تعریف میشود، تعداد دفعات تکرار حلقه در برنامه کنترل میشود. در ساختار for یک مقدار اولیه تعریفش شده و در هر بار اجرای دستورات حلقه مقداری به آن اضافه میشود و سپس این مقدار به گام حرکت اضافه میشود. در نهایت نوبت به شرط حلقه میرسد. شرط حلقه مشخص میکند که دستورات نوشته شده در حلقه تا کی اجرا شود.
for (byte b = 255; b > 0; b--) { setBrightness(b); delay(50); }
استفاده از دستور AnalogWrite
برای ذخیره مقادیر ورودی از تایع AnalogWrite استفاده میکنیم. این تابع مقادیر دریافتی را از پین خوانده و در خروجی رایت میکند.
با توجه به اینکه خروجی دیجیتال بین ۰ تا ۲۵۵ قابل تغییر است و شدت نور ال ای دی بر بازه ی ۰ تا ۲۵۵ است.
void setBrightness(byte brightness) { analogWrite(outputEnablePin, 255-brightness); }
جمع بندی لیدی پای
اگر نمیخواهید تمامی پایه های برد آردوینو برای خروجی ال ای دی ها استفاده شود، کافیست از شیفت رجیستر استفاده کنید و برای اتصال ۸ ال ای دی به آردوینو فقط ۳ پایه را درگیر کنید. قطعا با این روش در استفاده از تعداد پایه ها صرفه جویی کرده و اتصالات بسیار منظم تر از قبل خواهد بود. با اتصال چندین شیفت رجیستر Shift Registor در مسیر یکدیگر بی نهایت ال ای دی را به آردوینو متصل کنید. قبل از اتصال تغذیه مطابق با دیتاشیت پایه ها را شناسایی کنید. ال ای دی در این آموزش فقط برای مثال و درک موضوع انتخاب شده است. این خروجی میتواند هر سنسور دیجیتالی باشد.
وسایل مورد نیاز
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام
با اینکه در سطح وب راجع بهش زیاد پرداخته شده اما هیچ جا برنامه نویسی یاد ندادن!
این که سطح دیجی اسپارک مشخص کرده واقعا خسته نباشید و دمتون گرم
با سلام
کاربر گرامی ضمن تشکر از شما، امیدوارم مفید واقع شده باشد.
با سلام
در صورت استفاده از ۱۶ تا یا بیشتر بایسیتی چه کاری انجام دهم؟
سلام
از دو شیفت رجیستر همزمان استفاده کنید.
سلام
اگر بخوایم ال ای دی ها افزایشی و کاهشی نباشه باید چیکار کنم
با سلام
در حلقه برنامه این مورد کاملا اختیاری است و میتوانید برنامه ی دیگری برای ال ای دی بنویسید.
سلام
در صورت استفاده از فقط سه ال ای دی باید چیکار کنم؟ پایه های دیگه خالی باشه؟
با سلام
این مورد کاملا دلخواه است و تاثیری در عملکرد تراشه و برنامه نخواهد داشت.
سلام
در مقایسه به ماژول های آماده و این تراشه کدام یک را پیشنهاد میکنید>
با سلام
در این خصوص بسته به نیاز پروژه و فضای مورد نیاز برای پروتوتایپ اولیه این مورد مشخص خواهد شد.
سلام
عجب آموزش کامل و درجه یکی، واقعا توی وب چنین آموزشی ندیده بودم. دمتون گرمخسته نباشید
با سلام
کاربر گرامی ضمن تشکر از همراهی شما، امیدوارم مفید واقع شده باشد.
با عرض سلام و احترام،
همه جا نمونه کد برای خروجی گفته شده. اگر خواسته باشیم به عنوان ورودی باشه باید چیکار کنیم؟ مثلا ۸ تا سنسور حرکت وصل کنیم؟
با تشکر
با سلام
برای استفاده از سنسور pir نیازی به ۷۴hc595 نیست.
اگربخوام از ۷ پایه خروجی ایسی استفاده کنم چه تغغیری باید در برنامه بدم
خروجی ها را در برنامه میتوانید تعریف کنید. به عنوان مثال به رله وصل کنید. اتصاالات بسیار ساده است.
با سلام سوالی داشتم
با سلام
کاربر گرامی سوالات خود را از همین طریق بپرسید تا راهنمایی شود.
با سلام خسته نباشید ببخشید من شیفت ریجستر ۷۴ اچ سی ۵۹۵ را به ۸ ال ای دی از طریق اردینو وصل کردم رقص نور هست میخام رقص نور نباشه ساکن هر کدام از ال ای دی خاستم روشن کنم مثلاً ۷ . ۴ .۶ روشن بشه و بقیه خاموش . چطوری کدشو تغییر بدم ممنون اگه راهنمای بفرمایید
با سلام
این مورد کاملا وابسته به کدنویسی و تعریف کاندیشن های مختلف مانند if else است و هیچ ارتباطی با آی سی ندارد.
باسلام خسته نباشید من شیفت ریجستر ۵۹۵ را به ۸ ال ای دی وصل کردم و به اردینو همچنین وصل کردم کد برنامه رقص نور هست اگه بخوام به هر ال ای دی کنترل داشته باشم و هرکدام را خاستم روشن کنم طوری رقص نور نباشه ساکن بیتها منتقل بشن چطوری کد را تغییر بدم ممنون میشم
با سلام
در کامنت قبلی توضیح داده شد و این مورد وابسته به برنامه نویسی و از استفاده از کاندیشن if else است.
با سلام خدمت خانم مهندس خیلی ممنون از راهنمایی و جوابتون ،ببخشید بنده تحصیلات دانشگاهی ندارم فقط از سایت شما در مورد کد نویسی استفاده میکنم تا جای که بتوانم قبل از اینکه شما جواب سوالم بدین برای متوقف کردن جابجایی بیتها در شیفت ریجستر به ذهنم رسید از حلقه فور بین پایه لچ کلاک و دیتا حلقه فور استفاده کنم ولی وارد نیستم آیا درست در بیاد و خطا نشه و شما هم گفتید از ایف الس استفاده بکنید میشه از شما خواهش کنم برای من کدشو بنویسید و بفرستید البته یه شماره حساب هم بفرستید من برای شما مبلغی ناقابل پرداخت کنم چونکه اگه خود من بخواهم کدشو بنویسیم و تغییرات ایجاد کنم وقت میبره ، با تشکر و ممنون از زحمات شما عزیزان
با سلام
سپاس از همراهی شما کاربر گرامی، در حال حاضر امکان قبول پروژه و درخواست جنابعالی فراهم نیست.
با سلام خانم مهندس پروژه نیست برای یاد گرفتن هست حداقل راهنمای بکنید چطوری دیتا را مثلا ۱۱۱۰۰۱۱۱ را وارد شیفت ریحستر کنم بدون رقص نور و حرکت منتقل بشه همین این پروژه نمیشه که به قرآن خودم نتوانستم کدشو بنویسیم تور خدا کمک کنید به غیر شما کسی نیست خسته شدم ممنون
با سلام
دقت داشته باشید موردی که میفرمایید وابسته به کدنویسی است و بایستی یک کد مجزا نوشته شود که این امکان در کامنت ها فراهم نیست.
لیدی سلام،اگه بخوام ده تا led رو کنترل کنم صراحتا باید دوتا از این ایسی ها رو باهم سری کنم،سوالم اینکه اگه این کارو کردم و از پایه اول ایسی اول ،ریجستر شروع به شیفت دادن کرد،وقتی به پایه Q1 ایسی دوم رسید،چجوری بهش بفهمونم ،که ده تا led رو روشن کردی دیگه نمیخواد بری تا پایه Q7 تت ، شیفت بدی ،و بعد یک کردن پایه Q1 ت، بیا دوباره پایه Q0 ایسی اول ،یعنی led شماره یکو، روشن کن؟
با تشکر…!
با سلام
سوال شما کامل نیست. در این خصوص از دستورات شیفت رجیستر shiftout میتوانید برای فرمان به خروجی ها استفاده کنید.
سلام خدا قوت
عالی و گویا و کاربردی بود و واقعا مجموعه دیجی اسپارک در زمینه آموزش عالی عمل کرده برعکس خیلی ها ویترین نساخته و خود بزرگ بینی نداره و فخر نمیفروشه مثل همون شخص متوهم اینستاگرامی س-ک و مجموعه عالی دیجی اسپارک در زمینه آموزش قوی عمل کرده
با سلام
کاربر گرامی ضمن تشکر از شما امیدواریم آموزش ها مفید واقع شده باشد.
با تشکر از همراهی شما
با سلام ضمن تشکر از آموزش کاربردیتون مسئله ای که هست اینه که اگر ما بخوایم این ال ای دی ها رو به صورت جداگانه و سینگل روشن کنیم( مثلا ۷ و ۳ روشن شود) بدون اینکه به ترتیب روشن بشن چطور میتونیم به صورت انفرادی(با آدرس های جداگانه) هشت خروجی رو تفکیک و روشن کنیم
با سلام
این مورد را بایستی در کدنویسی برنامه انجام دهید.
با سلام و خسته نباشید اگه دوتا شیفت ریحستر استفاده کنم برای دوتا و بیشتر قابل استفاده هست این کد ، یا که باید تغییر کنه کد برای دوتا شیفت ریحستر ، با تشکر
با سلام
خیر بایستی کد را بهینه کنید.
با سلام خسته نباشید ببخشید نحوه برنامه نویسی شیفت ریحستر با ارایه دوبعدی چگونه هست ، با ارایه تک بعدی بلدم ولی با دوبعدی کار سخت میشه چجوری وارد شیفت ریجستر کنم دیتا رو هرکاری کردم وارد نشد ، مثلا ارایه دوبعدی تعریف کردم با متغییر کارکتر ، بعد چطور وارد شیفت ریحستر کنم آخه این ارایه به صورت دوتای هست ، مثلا,{۱,۱,۰,۰,۰,۰,۱,۱۱,۱,۱,۱,},{۱,۱,۱,۱,۱,۱,۱,۱,۰,۱,۱,۱}= char [8][12]
با سلام
در این خصوص بایستی آموزش جداگانه منتشر شود. بررسی خواهیم کرد.
با سلام و خسته نباشید ببخشید اگه میشه برنامه نویسی ارایه دو بعدی با شیفت ریحستر را بگویید مثلا تا ۸تا هست چطور وارد شیفت ریجستر کنم تک بعدی راحت هست ممنون
۱,۱,۱,۱,۱,۱,۰,۱,۱,۱,=[char A[8][10
با سلام
در آینده به این موضوع خواهیم پرداخت.
باسمه تعالی
با سلام و احترام فراوان
از این که آموزشهای خود را در اختیار قرار میدهید سپاس گزارم. برای تشکر و قدردانی از حضرتعالی شماره کارت ارسال نمایید با توجه به شرایط خود و انشاء الله راضی بودن حضرتعالی بعنوان قدردانی واریزی داشته باشم. بازهم تشکر
با سلام
کاربر گرامی سپاس از همراهی شما
امیدواریم آموزش ها مفید واقع شده باشد.
در این خصوص با خرید اشتراک سایت میتوانید از تیم دیجی اسپارک حمایت کرده و به تمامی آموزش های سایت دسترسی داشته باشید.
سلام وقتتون بخیر باشه اگه بخواهیم دو یا چند شیفت رجیستر رو سری بکنیم آیا دستورات تغییر میکنه ؟ ممنونم از راهنماییها تون