السبت، 8 ديسمبر، 2012

مسجل الإزاحة Shift Register 74595 الجزء الثاني


  مسجل الإزاحة Shift Register 74595 الجزء الثاني 



  في البوست السابق طرحت هذا التساؤل .. هل بإمكاننا التحكم بمسجلي أزاحة باستخدام نفس عدد المداخل التي استخدمناها للتحكم بمسجل إزاحة واحد ؟ 

الجواب نعم ! هناك مدخل لم نقم بتوصيله , هو المدخل رقم 9 في مسجل الإزاحة , يقوم هذا المدخل بنقل" Shifting " للبيانات الموجودة في المسجل إذا تم تحميل بايت لمسجل الإزاحة , و يحمل البايت الذي تم استبداله للمسجل الإزاحة الآخر المربوط معه.


هذه الطريقة مفيد جداً لو أردنا التحكم بالبواعث الضوئية , المقطّعات السباعية Seven segment , مصفوفات البواعث الضوئية  LED Matrix , الشاشات البلورية الكريستالية LCD , و غيرها الكثير .


لكي نعرف الطريقة التي يمكننا من خلالها نقل أكثر من بايت واحد عبر عدد من مسجلات الإزاحة المربوطة معاً .


سنحتاج لنفس المعدات التي استخدمناها في التجربة السابقة , لكن سنضيف مسجل إزاحة آخر .


مخطط الدارة يكون كما يلي :




  لم يختلف توصيلها عن التوصيل الماضي سوى توصيل المدخل # 9 من مسجل الإزاحة الأول إلى المدخل رقم 14 من مسجل الإزاحة الثاني , و هكذا ....




 كود البرنامج موجود في الأسفل 
..........................................................................................

// انسخ البرنامج من هنا 
//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//You should have received a copy of the GNU General Public License
// along with this program. If not, see http://www.gnu.org/licenses/
//...........................................................................
//this program to show How to use 2 shift register 74HC595 and 
//how to transfer 2 byte by connecting pin 9 of one reg to pin 14 in other register
// the main Idea is how to transfer 1 BYTE each time and how to transfer it to other register
//the number of 2 BYTE in bin written as B0000111100001111
//The MSB of this number must loaded first then load the LSB 
//the main instructor is :
//shiftOut(datapin,clockpin,MSB/LSBFIRST,number);
//this program count from 0 to 2^15-1
//written By :Mohannad Rawashdeh
//Date: 5th july 2012 19:00
// 4 pin will use from arduino to control 2 shift register
//..........................................................
//Pin connected to ST_CP of 74HC595 ""pin12""
int latchPin = 8;
//Pin connected to SH_CP of 74HC595 ""pin11""
int clockPin = 12;
////Pin connected to DS of 74HC595 ""pin14""
int dataPin = 11;
///Output pin cotroller of 74HC595 ""pin13""
int output_pin=10;
//connect pin 9 of first register with pin 14 for other register.
//connect pin 11 for Both register together
//connect pin 12 for Both register together
//connect pin 13 for Both register together

//________________________________________________

void setup() {
  //set pins to output so you can control the shift register
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(output_pin, OUTPUT);
  digitalWrite(output_pin,HIGH);   // set pin 13 for both register So no Output appear.
  Serial.begin(9600);    // optional to show the results on serial port
}
void loop(){
  //...................................................
  for(word i=0;i<32767;i++){ // loop statment 
word z=i;
int x=0;                            // will present High byte order 
int y=0;                            // will present low byte order
x=z>>8;                             // this statment mean shift z by 8 digits so only High byte order saved in x
Serial.print("z = ");
  Serial.println(z, BIN); 
  Serial.print("x = ");
  Serial.println(x);
   y=z&255;                        // this statment make High byte order Becomes Zero and only LOW byte order saved in y
  Serial.print("y = ");
  Serial.println(y);
  //.......................................................
  digitalWrite(latchPin,LOW);          // set latch pin low so allow to register to latch input .
  shiftOut(dataPin,clockPin,MSBFIRST,x);// start from High byte order 
  digitalWrite(latchPin,HIGH); // this allow to shift data into shift register 
  digitalWrite(latchPin,LOW); // set latch pin low so allow to register to latch input .
   shiftOut(dataPin,clockPin,MSBFIRST,y);// Now shift the LOW byte order so it will appear on first reg , and The previous 
   // data transfered to second register
  digitalWrite(latchPin,HIGH);     //this allow to shift data into shift register 
  digitalWrite(output_pin,LOW);    //Enable the Parallel Outputs 
  delay(100); // set delay to see output
    digitalWrite(output_pin,HIGH);//disable the Parallel Outputs 
//program end .    
}
}




//   ----------------------------------------------------------------------



  يمكن أيضاً كتابة البرنامج بطريقة أخرى , يمكن الإطلاع عليه , ستجده في المرفقات في نهاية المقال .

  في الختام , كم يمكن لنا أن نصل مسجل إزاحة مع بعض ؟
  حقيقة لا املك عدد معين يمكن وصله من مسجلات الإزاحة معاً , لكن أنا جربت أن أصل 4 مسجلات إزاحة معاً .

    و الفيديو أدناه يبين كيفية سير البرنامج 
    
  
  تحية للجميع .

0 التعليقات :

إرسال تعليق

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.