همراه ما باشید تا راه اندازی آی سی شیفت رجیستر 74HC595 با آردوینو را بهطور کامل فرا بگیرید.
آیا تا به حال به این فکر کردهاید که تعداد زیادی LED را کنترل کنید؟ یا تا به حال برایتان پیش آمده که به پایههای ورودی/خروجی (I/O) بیشتری برای کنترل همزمان کلیدهای فشاری، سنسورها و سروو موتورها نیاز داشته باشید؟ درست است که شما میتوانید برخی از سنسورهای خود را به پایههای آردوینو متصل کنید، اما اگر تعداد این سنسورها زیاد شوند، دیگر پایهای بر روی آردوینو نخواهید داشت.
راه حل این موضوع استفاده از آی سی شیفت رجیستر است. شیف رجیستر پایههای ورودی/خروجی بیشتری را هنگام استفاده از آردوینو یا هر میکروکنترلر دیگری در اختیار شما قرار میدهد. آی سی شیفت رجیستر 74HC595 یک نمونه پرکاربرد و معروف شیفت رجیستر است که به اختصار 595 نیز نامیده میشود.
با آی سی 595 میتوانید 8 پایه خروجی مجزا را تنها با استفاده از 3 پایه ورودی کنترل کنید . اما اگر به بیش از 8 خط I/O نیاز داشته باشید، میتوانید با اتصال این آی سی به تعداد دلخواه، بهصورت زنجیری به تعداد زیادی خط I/O دست پیدا کنید. همه اینها بهوسیله عملی که bit-shifting یا عملیات بیتی نامیده میشود، انجام میگردد.
چه موقع از شیفت رجیستر استفاده کنیم؟
از آنجا که میکروکنترلرها تعداد محدودی پایه I/O (GPIO) دارند، شیفت رجیسترها اغلب برای صرفهجویی در پایههای میکروکنترلر مورد استفاده قرار میگیرند.
در حالت معمول، اگر در پروژهی شما نیاز به کنترل 16 عدد LED مجزا باشد، 16 پایه آردوینو درگیر خواهد شد. اما در صورتیکه 16 پایه I/O در دسترس نباشد، این شیفت رجیسترها هستند که به کمک شما میآیند. به عنوان مثال، برای کنترل 16 عدد LED، میتوانید دو شیفت رجیستر را بهصورت سری به یکدیگر متصل کنید. در این صورت تنها با 3 پایه I/O، 16 خروجی برای کنترل 16 LED در دسترس خواهد بود. علاوه بر این، با اتصال شیفت رجیسترهای بیشتر به یکدیگر میتوانید پایههای کمتری را از آردوینو درگیر کنید.
دسته بازی Nintendo، یک مثال واقعی از دستگاهی است که از آی سی شیفت رجیستر استفاده میکند. کنترلکننده اصلی سیستم سرگرمی Nintendo باید همه کلیدهایی را که بهصورت سری فشرده میشوند، دریافت نماید. این کنترل کننده برای انجام این کار از شیفت رجیستر استفاده میکند.
شیفت رجیسترهای SIPO در مقایسه با PISO
شیفت رجیسترها دو نوع هستند. SIPO(Serial-In-Parallel-Out) ورودی سریال – خروجی موازی و PISO (Parallel-In-Serial-Out) ورودی موازی – خروجی سریال. نمونه معروف SIPO، تراشه 74HC595 است و مثال معروف PISO، تراشه 74HC165 میباشد.
نوع اول شیفت ریجسترها یعنی SIPO، برای کنترل تعداد زیادی خروجی مانند LEDها مناسب هستند و نوع دوم آنها یعنی PISO، برای دریافت تعداد زیادی ورودی مانند کلیدهای فشاری مانند دکمهای که در Original Nintendo Controller استفاده شده است، مناسباند.
آی سی شیفت رجیستر 74HC595 چگونه کار میکند؟
آی سی 595 دو رجیستر دارد (که میتوان آن را مانند خانههای حافظه در نظر گرفت). هر کدام از آنها، 8 بیت داده در خود جای میدهد. رجیستر اول، نقش شیفت رجیستر را دارد که ورودی آی سی را دریافت میکند و رجیستر دوم، رجیستر Latch یا Storage نامیده میشود.
با اعمال کلاک به آی سی 595، دو پدیده رخ میدهد:
- بیتهای شیفت رجیستر یک گام به چپ شیفت پیدا میکنند. به عنوان مثال، بیت 7، مقداری را که در بیت 6 بوده است، دریافت میکند و مقدار بیت 6 با مقداری که در بیت 5 بوده جایگزین میشود.
- بیت 0 شیفت رجیستر، مقدار فعلی پایه DATA را دریافت میکند. در لبه بالا رونده پالس اگر پایه DATA در وضعیت HIGH باشد، 1 وارد شیفت رجیستر و در غیر این صورت 0 وارد میشود.
وقتی پایه Latch فعال است، محتویات شیفت رجیستر به رجیستر Latch یا Storage کپی میشود. هر بیت از رجیستر Storage نیز به یکی از پایههای خروجی QA–QH آی سی متصل میگردد. بنابراین، بهطور کلی با تغییر مقدار رجیستر Storage، خروجیها هم تغییر خواهند کرد.
شکل زیر به شما کمک میکند تا این موضوع را بهتر بفهمید.
پایههای آی سی شیفت رجیستر 74HC595
آی سی 595 در شکلها و مدلهای مختلفی در بازار عرضه شده است. در اینجا در مورد SN74HC595N نمونه در دسترس که ساخت شرکت Texas Instruments است، صحبت میکنیم. اگر مدل دیگری در اختیار دارید، دیتاشیت آن را با دقت مطالعه کنید و به تفاوتهای آن با این نمونه توجه نمایید.
بیایید ابتدا نگاهی به پایههای خروجی شیفت رجیستر 74HC595 داشته باشیم. همانطور که در تصویر زیر میبینید، در بالای اسم دو پایه، خطی قرار داده شده است. این خط به این معنا است که این دو پایه با منطق صفر یا “negative logic” کار میکنند. در ادامه، در مورد این موضوع بیشتر صحبت خواهیم کرد.
GND به زمین آردوینو وصل میشود.
VCC پایه تغذیه شیفت رجیستر 74HC595 است و به ولتاژ 5V آردوینو وصل میشود.
SER (Serial Input) از طریق این پایه، داده وارد شیفت رجیستر میشود.
SRCLK (Shift Register Clock) این پایه نقش کلاک شیفت رجیستر را دارد. یعنی برای انتقال بیت به داخل شیفت رجیستر، کلاک باید HIGH باشد و بیتها با لبه بالارونده کلاک در شیفت رجیستر شیفت پیدا میکنند.
RCLK (Register Clock / Latch) این پایه، پایه بسیار مهمی است. با HIGH شدن این پایه، محتویات شیفت رجیستر به داخل رجیستر storage، کپی و سرانجام در خروجی ظاهر میشوند. بنابراین، پایه Latch را میتوان به عنوان گام نهایی در فرایند نمایش نتایج در خروجی (در اینجا LED) دانست.
SRCLR (Shift Register Clear) با این پایه، شیفت رجیستر ریست و همه بیتها همزمان 0 میشوند. این پایه “active low” است به این معنی که برای ریست کردن شیفت رجیستر، این پایه باید LOW شود و زمانیکه به ریست کردن نیازی نیست، باید HIGH شود.
OE (Output Enable) این پایه نیز مانند SRCLR با منطق صفر کار میکند و “active low” است. وقتی این پایه در وضعیت HIGH قرار دارد، خروجیها غیر فعال میشوند و در حالت امپدانس بالا قرار میگیرند. به علاوه، جریانی نیز برقرار نمیشود. اما وقتی این پایه در وضعیت LOW قرار بگیرد، خروجیها به حالت معمول خود برمیگردند.
QA–QH (Output Enable) پایههای خروجی هستند و باید به خروجیهایی مانند LED یا سون سگمنت و غیره متصل شوند.
’QH بیت 7 خروجی شیفت رجیستر است. برای اتصال چند آی سی 595 به یکدیگر، پایه ’QH از یک آی سی 595، به پایه SER از آی سی 595 دیگر وصل میشود و به هر دو آی سی یک کلاک داده میشود. در این صورت، این آی سیها مانند یک آی سی با 16 خروجی عمل میکنند. البته این روش محدود به تنها دو آی سی نیست. شما میتوانید تعداد دلخواهی از آنها را بههم متصل کنید که در این شرایط باید تغذیه برای همه آی سیها کافی باشد.
سیمکشی- راه اندازی آی سی شیفت رجیستر 74HC595 با آردوینو
اکنون که درک خوبی از نحوه کار 74HC595 دارید، زمان آن است که راه اندازی آی سی شیفت رجیستر 74HC595 را با آردوینو آغاز کنیم! اما برای شروع به قطعات زیر نیاز خواهید داشت:
- آی سی شیفت رجیستر 74HC595
- ماژول Arduino UNO
- ال ای دی 5 میلی متر
- برد بورد GL
- سیم برد برد
- مقاومت 220 اهمی
- کابل USB نری به نری
اول از همه، شیفت رجیستر را بر روی برد بورد قرار دهید. اگر شکاف یا notch آی سی را بالا در نظر بگیریم، پایههای سمت چپ از بالا به پایین، پایههای 1 تا 8 و پایههای سمت راست از پایین به بالا، پایههای 9 تا 16 هستند.
اکنون، سیمکشی را آغاز میکنیم!
پایههای 16(VCC) و 10(SRCLR) آی سی را به پایه 5V آردوینو و پایههای 8 (GND) و 13 (OE) را به زمین آردوینو وصل کنید. با این اتصالات، آی سی در حالت عملکرد نرمال خواهد بود.
سپس، نوبت اتصالات سه پایهای است که بهوسیله آنها شیفت رجیستر کنترل میشود:
- پایه 11 (SRCLK) شیفت رجیستر به پایه 6 آردوینو
- پایه 12 (RCLK) شیفت رجیستر به پایه 5 آردوینو
- پایه 14 (SER) شیفت رجیستر به پایه 4 آردوینو
پس از این کار، باید همه پایههای خروجی را به LEDها متصل کنید. برای کاهش جریان مقاومت 220Ω باید قبل از LEDها قرار بگیرد و کاتد LEDها به زمین متصل شود. پس از اتمام اتصالات، مدار نهایی شما باید مشابه شکل زیر باشد:
کد آردوینو
همه چیز برای بارگذاری کد آماده است. آردوینو را به کامپیوتر وصل کنید و نمونه کد زیر را بارگذاری نمایید. در ادامه برخی از جزییات کد را برای شما توضیح خواهیم داد.
int latchPin = 5; // Latch pin of 74HC595 is connected to Digital pin 5
int clockPin = 6; // Clock pin of 74HC595 is connected to Digital pin 6
int dataPin = 4; // Data pin of 74HC595 is connected to Digital pin 4
byte leds = 0; // Variable to hold the pattern of which LEDs are currently turned on or off
/*
* setup() - this function runs once when you turn your Arduino on
* We initialize the serial connection with the computer
*/
void setup()
{
// Set all the pins of 74HC595 as OUTPUT
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
/*
* loop() - this function runs over and over again
*/
void loop()
{
leds = 0; // Initially turns all the LEDs off, by giving the variable 'leds' the value 0
updateShiftRegister();
delay(500);
for (int i = 0; i < 8; i++) // Turn all the LEDs ON one by one.
{
bitSet(leds, i); // Set the bit that controls that LED in the variable 'leds'
updateShiftRegister();
delay(500);
}
}
/*
* updateShiftRegister() - This function sets the latchPin to low, then calls the Arduino function 'shiftOut' to shift out contents of variable 'leds' in the shift register before putting the 'latchPin' high again.
*/
void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}
وقتی کد بالا را بر روی آردوینو بارگذاری کردید، خروجی مشابه شکل زیر خواهید دید:
اگر بخواهید LEDها به جای روشن شدن به نوبت خاموش شوند، باید از تابع ()bitClear برای متغیر leds استفاده کنید. این تابع یک بیت خاص از متغیر leds را 0 میکند. پس از این، تنها کافی است برای بهروز شدن LEDها، تابع ()updateShiftRegister را فراخوانی کنید.
توضیحات کد:
اما برای درک بهتر، در این بخش میخواهیم کدی را که بارگذاری کردید، با هم بررسی کنیم. در کد بالا، اولین کاری که انجام میدهیم، تعریف سه پایه کنترل است. پایههای data, clock, Latch از 74HC595 را به ترتیب به پایههای دیجیتال شماره 5، 6 و 4 آردوینو متصل میکنیم.
int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
سپس در بخش بعدی کد، یک متغیر به نام leds تعریف میشود. با این متغیر وضعیت روشن یا خاموش بودن LEDها مشخص خواهد شد. همانطور که میدانید، داده از نوع byte شامل 8 بیت است که در این جا صفر یا یک بودن این 8 بیت، خاموش یا روشن بودن 8 LED را مشخص میکند.
// Variable to hold the pattern of which LEDs are currently turned on or off
byte leds = 0;
اما میرسیم به تابع setup. در این تابع، سه پایه کنترلی را به صورت خروجی تعریف میکنیم.
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
در تابع Loop، ابتدا با 0 کردن همه بیتهای متغیر leds، همه LEDها را خاموش میکنیم. سپس، تابع ()updateShiftRegister که الگوی متغیر leds را به شیفت رجیستر ارسال میکند، فراخوانی میکنیم. بنابراین همه LEDها خاموش میشود. در ادامه خواهیم دید که تابع ()updateShiftRegister چگونه کار میکند.
برنامه، پس از یک تاخیر نیم ثانیهای وارد یک حلقه for میشود که متغیر i را از 0 تا 7 تغییر میدهد. این حلقه در هر بار تکرار، از تابع ()bitSet آردوینو برای یک کردن بیت متناظر با LED موردنظر از متغیر leds استفاده میکند. سپس با فراخوانی تابع ()updateShiftRegister، وضعیت LEDها مطابق با متغیر leds تغییر خواهد کرد. پس از آن، از یک تاخیر نیم ثانیهای مقدار i تغییر میکند و LED بعدی روشن میشود.
void loop()
{
leds = 0;
updateShiftRegister();
delay(500);
for (int i = 0; i < 8; i++)
{
bitSet(leds, i);
updateShiftRegister();
delay(500);
}
}
تابع ()updateShiftRegister ابتدا پایه Latch را LOW میکند و سپس، قبل از اینکه پایه Latch دوباره HIGH شود، تابع ()shiftOut را فراخوانی میکند. تابع ()shiftOut، تابع کمکی شیف ریجسترها است که توسط آردوینو فراهم شده است و به ما این امکان را میدهد تا با یک فراخوانی، بیتها را شیفت دهیم.
تابع ()shiftOut، چهار پارامتر در ورودی خود میگیرد. دو پارامتر اول پایههایی هستند که به ترتیب برای Data و Clock بهکار میروند. سومین پارامتر مشخص میکند که از کدام بیت انتهایی داده، بیت پر ارزش یا بیت کم ارزش، عمل شیفت آغاز شود. در اینجا از سمت راستترین بیت یا Least Significant Bit (LSB) عمل شیفت را شروع میکنیم. آخرین پارامتر دادهای است که در شیفت رجیستر، شیفت پیدا میکند که در اینجا متغیر leds است.
void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}
کنترل روشنایی با استفاده از PWM
در اینجا می خواهیم پروژه دیگری را با هم انجام دهیم. این پروژه مشابه پروژه قبلی است، تنها با این تفاوت که در این جا از پایه OE برای تنظیم شدت روشنایی LEDها استفاده میکنیم.
در پروژه قبلی یاد گرفتید که پایه OE رفتاری مشابه کلید دارد و همانطور که گفته شد، این پایه با منطق صفر کار میکند. به این معنا که زمانیکه این پایه HIGH باشد، خروجیها غیرفعال است و با LOW شدن آن، خروجیها به حالت نرمال برمیگردد. در مثال قبلی این پایه را به زمین وصل کردید. در نتیجه، خروجیها همیشه فعال بودند. اگر این پایه را به یکی از پایههای دیجیتال آردوینو وصل نمایید و در طول برنامه وضعیت آن را 0 یا 1 کنید، میتوانید به خروجی مشابه شکل زیر دست پیدا کنید:
اما به جای این کار، میتوانید با تابع ()analogWrite یک سیگنال PWM به این پایه اعمال کنید و روشنایی LEDها را کنترل نمایید. تا در نهایت نتیجهای همانند تصویر زیر داشته باشید:
در واقع بخشهای HIGH سیگنال PWM باعث میشود پایه OE، بهصورت موقت خروجیهای آی سی را غیرفعال کند. اما این تغییر سریعتر از آن است که توسط چشم انسان تشخیص داده شود. اما به هر حال ما تغییری را در روشنایی حس خواهیم کرد. برای این پروژه، تنها لازم است که پایه 13 آی سی 74HC595 را به جای زمین به پایه 3 آردوینو متصل کنید و باقی اتصالات را مانند پروژه قبل انجام دهید.
با دستورات زیر، LEDها به نوبت روشن میشوند و بهتدریج روشنایی آنها کم و در نهایت خاموش خواهند شد.
int latchPin = 5; // Latch pin of 74HC595 is connected to Digital pin 5
int clockPin = 6; // Clock pin of 74HC595 is connected to Digital pin 6
int dataPin = 4; // Data pin of 74HC595 is connected to Digital pin 4
int outputEnablePin = 3; // OE pin of 74HC595 is connected to PWM pin 3
byte leds = 0; // Variable to hold the pattern of which LEDs are currently turned on or off
/*
* setup() - this function runs once when you turn your Arduino on
* We initialize the serial connection with the computer
*/
void setup()
{
// Set all the pins of 74HC595 as OUTPUT
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(outputEnablePin, OUTPUT);
}
/*
* loop() - this function runs over and over again
*/
void loop()
{
setBrightness(255);
leds = 0; // Initially turns all the LEDs off, by giving the variable 'leds' the value 0
updateShiftRegister();
delay(500);
for (int i = 0; i < 8; i++) // Turn all the LEDs ON one by one.
{
bitSet(leds, i); // Set the bit that controls that LED in the variable 'leds'
updateShiftRegister();
delay(500);
}
for (byte b = 255; b > 0; b--) // Gradually fade all the LEDs back to off
{
setBrightness(b);
delay(50);
}
}
/*
* updateShiftRegister() - This function sets the latchPin to low, then calls the Arduino function 'shiftOut' to shift out contents of variable 'leds' in the shift register before putting the 'latchPin' high again.
*/
void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}
/*
* setBrightness() - Generates PWM signal and writes it to OE pin.
*/
void setBrightness(byte brightness) // 0 to 255
{
analogWrite(outputEnablePin, 255-brightness);
}
با بارگذاری نمونه کد بالا بر روی آردوینو، LEDها مانند شکل زیر روشن و خاموش میشوند:
خلاصه
همانطور که گفتیم، به دلیل اینکه میکروکنترلرها پایههای محدودی دارند و نمیتوانند جوابگوی نیاز افراد باشند، از شیفت رجیسترها استفاده میشود. هدف ما این بود که راه اندازی آی سی شیفت رجیستر 74HC595 را با آردوینو یاد بگیرید و بتوانید دو پروژه مجزا را که در این مطلب مطرح کردیم، انجام دهید. امیدواریم که مقاله برایتان مفید واقع شود.
در کلام آخر باید گفت که شما میتوانید سوالات خود را برای ما بنویسید و پاسخ خود را در اسرع وقت دریافت کنید.
۱۲ دیدگاه. Leave new
با سلام خدمت شما یه سوال دارم راهنمای میکنید ممنون
سلام وقت بخیر،
بله حتما بفرمایید.
با سلام و خسته نباشید خدمت شما . سوالم این بود که ای سی شیفت ریجستر ۵۹۵۹ را با بورد اردینو به ۸ ال ای دی طبق توضیحات وصل کردم به خروجی ای سی و کدشو آپلود کردم شبیه رقص نور و جابجایی بیتها هست سرجای خودش قفل نمیشه میخواستم رقص نور و جابجایی نباشه مثلا ال ای دی شماره ۴،۶،۳ روشن باقی و بقیه خاموش باشند و دیگه حرکت نکنه فرمان روشن یا خاموش را بگیره ال ای دی مد نظر چکار کنم کدشو چطوری تغییر یا اضافه کنم ممنونم میشم کمک کنید سر در نیاوردم دو ماه که فکرم مشغول کرده با تشکر
سلام مصطفی عزیز ممنون از شما،
برای توقف حرکت، کافیه هرجا نیاز به توقف هست پایه latch رو بذارید صفر بمونه و بهش پالس ندید. یا اینکه با پایه کلاک این کارو بکنید (یعنی پالس بهش ندید). برای اینکه مثلا یک LED رو روشن یا خاموش کنید، باید یک عدد ۸ بیتی جدید که وضعیت LEDها رو به شکل مورد نظرتون در میاره (مثلا ۰۱۰۰۱۱۱۱) رو از پایه دیتا و با ۸ کلاک به شیفت رجیستر بدید و بعد از اینکه هر ۸ بیت کد وارد شد، به پایه latch پالس بدید تا رجیستر آپدیت بشه و وضعیت LEDها تغییر کنه.
با سلام خیلی ممنونم ببخشید این مطالب را خواندم تو سایت برنامه تون دستی با کلید درست در میاد با کد که که هست تو آموزش درست در نمیاد کجای کد هست ال ای دی مورد نظر را روشن با خاموش کرد جابجایی نباشه بنده تغییر دادم کد بالا رو زمان تاخیررا صفر کردم همه ال ای دی ها روشن باقی ماندن یا حلقه for آمدم مقدار اضافه کردن بیت را ++i را صفر کردم حرکت نکرد بیتها ولی ال ای مورد نظر کنترل نداشتم سر در گم ماندم کجای کد هست بعد میگید به دیتا مثلا ۱۱۱۰۰۱ بدید ال ای مورد نظر روشن میشه در کد این عدد وجود نداره به پایه دیتا بدیم عوض کرد کد دیگه وجود داره اگه ممکنه کد را بفرستید ممنونم خدا خیرتون بده
سلام، خواهش میکنم،
فرض کنید ال ای دی سوم خاموشه و میخواید روشنش کنید. پس عددی که توی شیفت رجیستره، بیت سومش ۰ هست و میخواید ۱ بشه. برای این کار باید این عدد جدید که بیت سومش تغییر کرده رو وارد شیفت رجیستر کنید که روش وارد کردنش رو در کامنت قبلی گفتیم. در حقیقت برای عوض کردن حتی یک بیت هم، باید کل مقدار شیفت رجیستر رو آپدیت کنید، چون ورودی شیفت رجیستر به صورت سریاله.
سلام
فرض کنید از چندتا ۷۴HC595 استفاده کنیم و بخوایم ۲۴ تا led را روشن کنیم مشکلی نداره منبع تغذیه ای که به ای سی میدیم ۲ یا ۳ امپر باشه؟
سلام جواد عزیز،
خیر. جریان زیاد مشکلی ایجاد نمیکنه.
در حقیقت مصرف کننده به اندازه نیازش از منبع تغذیه جریان میکشه.
با سلام اگه دوتا شیفت ریحستر استفاده کنم چطور میشه ۱۶ تا ال آیدی را کنترل کرد یعنی تو حلقه فور ۱۶ را بنویسیم که به جای ۸ بار ۱۶ بار تکرار بشه من هرکاری کردم دیتا به ریحستر دومی وارد نمیشه با اگه وارد بشه درست نیست دیتای اولی وارد میشه چطور هست کدنویسی ۱۶ بیتی با دو شیفت ریجستر همه سیم کشی هم درست زدم ممنون که جواب بدین فقط اینو لازم دارم بازم تشکر
سلام و درود به شما،
شیفت رجیستر دوم رو چطور متصل میکنی؟ ورودی رو به آردوینو متصل میکنی یا خروجی شیفت رجیستر اول؟
چه کدی استفاده میکنی؟ دقیقا چه عملکردی مدنظرت هست؟ اگر این سوالات رو جواب بدی بهتر میتونیم راهنماییت کنیم.
با سلام و خسته نباشید ممنون از شما ، بنده دوتا شیفت ریحستررا بهم متصل میکنم و سه تا پایه اولین شیفت ریجستر را به اردینو متصل میکنم و از این لحاظ مشکلی ندارم فقط کدنویسی دومین شیفت ریحستر هست ، برای دات ماتریس میخواستم شیفت ریجستر به ستونها وصل میکنم یکی یکی روشن کنه یعنی هر لحظه فقط یک خروجی بده که قاطی نکنه همه ستونهارو یکجا روشن نکنه ، برای اولین شیفت ریحستر دات ماتریس خوب جواب میده وقتی میخواهم ستونها رو به تعداد ۱۶ ستون اضافه کنم میان شیفت ریحستر دوم هم رو اضافه میکنم به اولی ولی مشکل تو کدنویسی دو تا شیفت ریحستر دارم به ترتیب زمین کنه ستونها رو که نمیکنه،و کارکتر فقط رو اولین دات ماتریس درست هست دومی درست نمیاد ایراد کار فقط کدنویسی دوتا شسبفن ریحستر هست با این کد میفرستم که یکی یکی ستونها رو روشن و خاموش میکنه ولی برای دوتا این کد درست نیست ،B01111111,B10111111,B11011111,B11101111,B11110111,B11111011,B11111101,B11111110
سلام مجدد به شما، تشکر،
امیدواریم که با این نکات بتونی جوابتو بگیری. نکته اول اینکه پایههای لچ و کلاک شیفت رجیستر دوم رو هم باید مثل اولی به آردوینو متصل کنی.
داخل برنامه هم طبیعتا ۱۶ بیت باید ارسال بشه. برای این کار یه راه ساده این هست که دو تا متغیر یک بیتی leds1 و leds2 تعریف کنی و داخل تابع updateShiftRegister()، دو بار از shiftOut() استفاده کنی و به ترتیب leds1 و leds2 رو وارد شیفت رجیستر کنی.