الفرق بين المراجعتين لصفحة: «Arduino/advanced io/shiftout»

من موسوعة حسوب
أنشأ الصفحة ب'تزيح الدالة <code>shiftOut()‎</code> بايتًا من البيانات إلى رجل محدَّدة مقدار بتٍّ واحدٍ في كل مرة تتغي...'
 
ط تعديل المثال.
 
(2 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الدالة <code>shiftOut()‎</code> في  أردوينو}}</noinclude>
تزيح الدالة <code>shiftOut()‎</code> بايتًا من البيانات إلى رجل محدَّدة مقدار بتٍّ واحدٍ في كل مرة تتغير فيها حالة النبضة على رجل أخرى إلى <code>HIGH</code>. يمكن ترتيب عملية إزاحة البتات وكتابتها على الرجل إمَّا بدءًا من البت الأكثر أهمية (أقصى اليسار) أو من البت الأقل أهمية (أقصى اليمين).
تزيح الدالة <code>shiftOut()‎</code> بايتًا من البيانات إلى رجل محدَّدة مقدار بتٍّ واحدٍ في كل مرة تتغير فيها حالة النبضة على رجل أخرى إلى <code>HIGH</code>. يمكن ترتيب عملية إزاحة البتات وكتابتها على الرجل إمَّا بدءًا من البت الأكثر أهمية (أقصى اليسار) أو من البت الأقل أهمية (أقصى اليمين).
 
==البنية العامة==
== البنية العامة ==
<syntaxhighlight lang="arduino">
<syntaxhighlight lang="arduino">
shiftOut(dataPin, clockPin, bitOrder, value)
shiftOut(dataPin, clockPin, bitOrder, value)
سطر 9: سطر 9:


'''ملاحظة''': هذه العملية التي تجريها الدالة هي تنفيذٌ برمجيٌّ؛ توفر أردوينو المكتبة SPI التي تستعمل التنفيذ العتادي لهذه العملية التي تتميز بسرعتها سوى أنَّها تعمل على أرجل معيَّنة فقط.
'''ملاحظة''': هذه العملية التي تجريها الدالة هي تنفيذٌ برمجيٌّ؛ توفر أردوينو المكتبة SPI التي تستعمل التنفيذ العتادي لهذه العملية التي تتميز بسرعتها سوى أنَّها تعمل على أرجل معيَّنة فقط.
 
==المعاملات==
== المعاملات ==
===<code>dataPin</code>===
 
=== <code>dataPin</code> ===
عددٌ صحيح يشير إلى الرجل التي سيُظهَر عليها كل بت من بتات القيمة <code>value</code> تباعًا.
عددٌ صحيح يشير إلى الرجل التي سيُظهَر عليها كل بت من بتات القيمة <code>value</code> تباعًا.
 
===<code>clockPin</code>===
=== <code>clockPin</code> ===
عددٌ صحيح يشير إلى الرجل التي تمثِّل نبضات الساعة التي تقدح (عند الجبهة الصاعدة) عملية كتابة بتٍّ واحدٍ على الرجل <code>dataPin</code>.
عددٌ صحيح يشير إلى الرجل التي تمثِّل نبضات الساعة التي تقدح (عند الجبهة الصاعدة) عملية كتابة بتٍّ واحدٍ على الرجل <code>dataPin</code>.
 
===<code>bitOrder</code>===
=== <code>bitOrder</code> ===
يحدِّد هذا المعامل ترتيب عملية إزاحة البتات المكتوبة على الرجل <code>dataPin</code> عند كل جبهة صاعدة لنبضات الرجل <code>clockPin</code>. يأخذ هذا المعامل القيمة <code>MSBFIRST</code> إن كان أول بت يراد إزاحته وكتابته هو البت الأكثر أهمية أو القيمة <code>LSBFIRST</code> إن كان أول بت يراد إزاحته وكتابته هو البت الأقل أهمية.
يحدِّد هذا المعامل ترتيب عملية إزاحة البتات المكتوبة على الرجل <code>dataPin</code> عند كل جبهة صاعدة لنبضات الرجل <code>clockPin</code>. يأخذ هذا المعامل القيمة <code>MSBFIRST</code> إن كان أول بت يراد إزاحته وكتابته هو البت الأكثر أهمية أو القيمة <code>LSBFIRST</code> إن كان أول بت يراد إزاحته وكتابته هو البت الأقل أهمية.
 
===<code>value</code>===
=== <code>value</code> ===
بايتٌ من البيانات يراد إزاحته وإخراجه على الرجل <code>dataPin</code>.
بايتٌ من البيانات يراد إزاحته وإخراجه على الرجل <code>dataPin</code>.
 
==القيم المعادة==
== القيم المعادة ==
لا يعاد أي شيء.
لا يعاد أي شيء.
 
==أمثلة==
== أمثلة ==
مثالٌ على استخدام مسجل الإزاحة [https://www.onsemi.com/pub/Collateral/MC74HC595-D.PDF 74HC595] والتحكم به:<syntaxhighlight lang="arduino">
مثالٌ على استخدام مسجل الإزاحة 74HC595 والتحكم به:<syntaxhighlight lang="arduino">
//**************************************************************//
//**************************************************************//
//  Name    : shiftOutCode, Hello World                        //
//  Name    : shiftOutCode, Hello World                        //
//  Author  : Carlyn Maw,Tom Igoe                              //
//  Author  : Carlyn Maw,Tom Igoe                              //
//  Date    : 25 Oct, 2006                                      //
//  Date    : 06 Oct, 2006                                      //
//  Version : 1.0                                              //
//  Version : 2.0                                              //
//  Notes  : Code for using a 74HC595 Shift Register          //
//  Notes  : Edited by Hsoub on 06 Nov, 2018.                  //
//          : Code for using a 74HC595 Shift Register          //
//          : to count from 0 to 255                            //
//          : to count from 0 to 255                            //
//****************************************************************
//****************************************************************


//Pin connected to ST_CP of 74HC595
// لمسجل الإزاحة ST_CP وصل الرجل 8 مع الرجل
int latchPin = 8;
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
// لمسجل الإزاحة SH_CP وصل الرجل 12 مع الرجل
int clockPin = 12;
int clockPin = 12;
////Pin connected to DS of 74HC595
//// لمسجل الإزاحة DS وصل الرجل 11 مع الرجل
int dataPin = 11;
int dataPin = 11;


void setup() {
void setup() {
   //set pins to output because they are addressed in the main loop
   // تهيئة الأرجل إلى أرجل خرج
   pinMode(latchPin, OUTPUT);
   pinMode(latchPin, OUTPUT);
   pinMode(clockPin, OUTPUT);
   pinMode(clockPin, OUTPUT);
سطر 53: سطر 47:


void loop() {
void loop() {
   //count up routine
   // استعمال عداد تصاعدي
   for (int j = 0; j < 256; j++) {
   for (int j = 0; j < 256; j++) {
     //ground latchPin and hold low for as long as you are transmitting
     // منخفضة والإبقاء عليها كذلك طالما تجري عملية النقل latchPin جعل جهد الرجل
     digitalWrite(latchPin, LOW);
     digitalWrite(latchPin, LOW);
     shiftOut(dataPin, clockPin, LSBFIRST, j);
     shiftOut(dataPin, clockPin, LSBFIRST, j);
     //return the latch pin high to signal chip that it
     // لإبلاغ شريحة المسجل latchPin إعادة رفع جهد الرجل 
     //no longer needs to listen for information
     // بالتوقف عن انتظار القيمة المراد نقلها وإزاحتها
     digitalWrite(latchPin, HIGH);
     digitalWrite(latchPin, HIGH);
     delay(1000);
     delay(1000);
سطر 65: سطر 59:
}
}
</syntaxhighlight>للاطلاع على كيفية وصل الدارة الإلكترونية المرافقة لهذا المثال، انتقل إلى هذا الدرس.
</syntaxhighlight>للاطلاع على كيفية وصل الدارة الإلكترونية المرافقة لهذا المثال، انتقل إلى هذا الدرس.
 
==ملاحظات وتحذيرات==
== ملاحظات وتحذيرات ==
يجب تهيئة الرجل <code>dataPin</code> والرجل <code>clockPin</code> مسبقًا إلى وضع الإخراج (output) عبر استدعاء الدالة <code>pinMode()‎</code>.
يجب تهيئة الرجل <code>dataPin</code> والرجل <code>clockPin</code> مسبقًا إلى وضع الإخراج (output) عبر استدعاء الدالة <code>pinMode()‎</code>.


سطر 84: سطر 77:
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));
</syntaxhighlight>
</syntaxhighlight>
==انظر أيضًا==
* الدالة <code>[[Arduino/advanced io/notone|noTone()‎]]</code>: توقف توليد موجةٍ مربَّعةٍ على رجل معيَّنة أُنشئَت باستعمال الدالة <code>[[Arduino/advanced io/tone|tone()‎]]</code>.
* الدالة <code>[[Arduino/advanced io/pulsein|pulseIn()‎]]</code>: تحسب طول نبضةٍ (إمَّا <code>HIGH</code> أو <code>LOW</code>) على رجل محدَّدة.
* الدالة <code>[[Arduino/advanced io/pulseinlong|pulseInLong()‎]]</code> هي دالةٌ بديلةٌ محسَّنةٌ للدالة <code>[[Arduino/advanced io/pulsein|pulseIn()‎]]</code>، إذ يمكنها التعامل مع نبضات ومقاطعات طويلة متأثرة بحالات مختلفة.
* الدالة <code>[[Arduino/advanced io/shiftin|shiftIn()‎]]</code>: تزيح بايتًا من البيانات من رجل محدَّدة إلى متغيِّر مقدار بتٍّ واحدٍ في كل مرة تتغير فيها حالة النبضة على رجل أخرى إلى <code>HIGH</code>.
* الدالة <code>[[Arduino/advanced io/tone|tone()‎]]</code>: تولِّد موجةً مربَّعةً بتردد محدَّد (وبنسبة 50% لدورة العمل [duty cycle]) على رجل معيَّنة.


== انظر أيضًا ==
==مصادر==
 
* [https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout/ صفحة الدالة shiftOut()‎ في توثيق أردوينو الرسمي.]
== مصادر ==
[[تصنيف: Arduino]]
[https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout/ صفحة الدالة shiftOut()‎ في توثيق أردوينو الرسمي.]
[[تصنيف: Arduino Function]]
[[تصنيف: Arduino I/O]]
[[تصنيف: Arduino Advanced I/O]]

المراجعة الحالية بتاريخ 12:35، 6 نوفمبر 2018

تزيح الدالة shiftOut()‎ بايتًا من البيانات إلى رجل محدَّدة مقدار بتٍّ واحدٍ في كل مرة تتغير فيها حالة النبضة على رجل أخرى إلى HIGH. يمكن ترتيب عملية إزاحة البتات وكتابتها على الرجل إمَّا بدءًا من البت الأكثر أهمية (أقصى اليسار) أو من البت الأقل أهمية (أقصى اليمين).

البنية العامة

shiftOut(dataPin, clockPin, bitOrder, value)

في كل بت، تقدح الرجل clockPin عملية كتابة البت التالي من القيمة value على الرجل dataPin عند الجبهة الصاعدة للإشارة (أي عندما تنتقل النبضة من LOW إلى HIGH) ثم يجب حينها على الرجل clockPin أن تعود للحالة المنخفضة (LOW) لتشير إلى أنَّ البت كتب على الرجل وأصبح متاحًا.

إن كنت تتعامل مع جهازٍ يعمل أو يولِّد نبضات عند الجبهات الصاعدة، فيجب عليك أن تتأكد أنَّ حالة الرجل clockPin هي LOW قبل استدعاء الدالة shiftOut()‎ عبر استدعاء digitalWrite(clockPin, LOW)‎ مثلًا.

ملاحظة: هذه العملية التي تجريها الدالة هي تنفيذٌ برمجيٌّ؛ توفر أردوينو المكتبة SPI التي تستعمل التنفيذ العتادي لهذه العملية التي تتميز بسرعتها سوى أنَّها تعمل على أرجل معيَّنة فقط.

المعاملات

dataPin

عددٌ صحيح يشير إلى الرجل التي سيُظهَر عليها كل بت من بتات القيمة value تباعًا.

clockPin

عددٌ صحيح يشير إلى الرجل التي تمثِّل نبضات الساعة التي تقدح (عند الجبهة الصاعدة) عملية كتابة بتٍّ واحدٍ على الرجل dataPin.

bitOrder

يحدِّد هذا المعامل ترتيب عملية إزاحة البتات المكتوبة على الرجل dataPin عند كل جبهة صاعدة لنبضات الرجل clockPin. يأخذ هذا المعامل القيمة MSBFIRST إن كان أول بت يراد إزاحته وكتابته هو البت الأكثر أهمية أو القيمة LSBFIRST إن كان أول بت يراد إزاحته وكتابته هو البت الأقل أهمية.

value

بايتٌ من البيانات يراد إزاحته وإخراجه على الرجل dataPin.

القيم المعادة

لا يعاد أي شيء.

أمثلة

مثالٌ على استخدام مسجل الإزاحة 74HC595 والتحكم به:

//**************************************************************//
//  Name    : shiftOutCode, Hello World                         //
//  Author  : Carlyn Maw,Tom Igoe                               //
//  Date    : 06 Oct, 2006                                      //
//  Version : 2.0                                               //
//  Notes   : Edited by Hsoub on 06 Nov, 2018.                  //
//          : Code for using a 74HC595 Shift Register           //
//          : to count from 0 to 255                            //
//****************************************************************

// لمسجل الإزاحة ST_CP وصل الرجل 8 مع الرجل
int latchPin = 8;
// لمسجل الإزاحة SH_CP وصل الرجل 12 مع الرجل
int clockPin = 12;
//// لمسجل الإزاحة DS وصل الرجل 11 مع الرجل
int dataPin = 11;

void setup() {
  // تهيئة الأرجل إلى أرجل خرج
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  // استعمال عداد تصاعدي
  for (int j = 0; j < 256; j++) {
    // منخفضة والإبقاء عليها كذلك طالما تجري عملية النقل latchPin جعل جهد الرجل
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, j);
    // لإبلاغ شريحة المسجل latchPin إعادة رفع جهد الرجل  
    // بالتوقف عن انتظار القيمة المراد نقلها وإزاحتها
    digitalWrite(latchPin, HIGH);
    delay(1000);
  }
}

للاطلاع على كيفية وصل الدارة الإلكترونية المرافقة لهذا المثال، انتقل إلى هذا الدرس.

ملاحظات وتحذيرات

يجب تهيئة الرجل dataPin والرجل clockPin مسبقًا إلى وضع الإخراج (output) عبر استدعاء الدالة pinMode()‎.

كتُبَت الدالة shiftOut()‎ للعمل على إظهار بايتٍ واحدٍ (8 بت) من البيانات فقط، لذا تتطلب عملية إظهار قيم أكبر من 255 إلى تجزئتها إلى مرحلين كما موضح في الشيفرة التالية:

// MSBFIRST إزاحة البت الأكثر أهمية أولًا
int data = 500;
// إزاحة البايت العلوي
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
// إزاحة البايت السفلي
shiftOut(dataPin, clock, MSBFIRST, data);

// LSBFIRST إزاحة البت الأقل أهمية أولًا
data = 500;
// إزاحة البايت السفلي
shiftOut(dataPin, clock, LSBFIRST, data);
// إزاحة البايت العلوي
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));

انظر أيضًا

  • الدالة noTone()‎: توقف توليد موجةٍ مربَّعةٍ على رجل معيَّنة أُنشئَت باستعمال الدالة tone()‎.
  • الدالة pulseIn()‎: تحسب طول نبضةٍ (إمَّا HIGH أو LOW) على رجل محدَّدة.
  • الدالة pulseInLong()‎ هي دالةٌ بديلةٌ محسَّنةٌ للدالة pulseIn()‎، إذ يمكنها التعامل مع نبضات ومقاطعات طويلة متأثرة بحالات مختلفة.
  • الدالة shiftIn()‎: تزيح بايتًا من البيانات من رجل محدَّدة إلى متغيِّر مقدار بتٍّ واحدٍ في كل مرة تتغير فيها حالة النبضة على رجل أخرى إلى HIGH.
  • الدالة tone()‎: تولِّد موجةً مربَّعةً بتردد محدَّد (وبنسبة 50% لدورة العمل [duty cycle]) على رجل معيَّنة.

مصادر