74CH595

Volkidze
Offline
Зарегистрирован: 11.12.2015

Добрый день. Люди добрые скиньте пожалуйста пример скетча для управления последовательно включёнными регистрами 74CH595 в колличестве 24 штуки!!!!! Нужно чтобы на всех выводах поочереди появлялась 1, что то типо бегущей точки или последовательное включение светодиодов на выходах...

Volkidze
Offline
Зарегистрирован: 11.12.2015
/*
 Программа поочередно включается все светодиоды, подключенные к двум
сдвиговым регистрам 74HC595 .Created 22 May 2009
 Modified 23 Mar 2010
 by Tom Igoe
 */

//Пин подключен к ST_CP входу 74HC595
const int latchPin = 8;
//Пин подключен к SH_CP входу 74HC595
const int clockPin = 12;
//Пин подключен к DS входу 74HC595
const int dataPin = 11;

char inputString[2];

void setup() {
   //устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  Serial.begin(9600);
  Serial.println("reset");
}

void loop() {
  // проходим циклом по всем 16 выходам двух регистров
  for (int thisLed = 0; thisLed < 16; thisLed++) {
    // записываем сигнал в регистр для очередного светодиода
    registerWrite(thisLed, HIGH);
    // если это не первый светодиод, то отключаем предыдущий
    if (thisLed > 0) {
      registerWrite(thisLed - 1, LOW);
    } 
    // если это первый светодиод, то отключаем последний
    else {
      registerWrite(15, LOW);
    } 
    // делаем паузу перед следующией итерацией
    delay(250);
  }

}

// этот метод отсылает бит на сдвиговый регистр

void registerWrite(int whichPin, int whichState) {
  // для хранения 16 битов используем unsigned int
  unsigned int bitsToSend = 0;    

  // выключаем светодиоды на время передачи битов
  digitalWrite(latchPin, LOW);

  // устанавливаем HIGH в соответствующий бит 
  bitWrite(bitsToSend, whichPin, whichState);

  // разбиваем наши 16 бит на два байта 
  // для записи в первый и второй регистр
  byte registerOne = highByte(bitsToSend);
  byte registerTwo = lowByte(bitsToSend);

  // "проталкиваем" байты в регистры
  shiftOut(dataPin, clockPin, MSBFIRST, registerTwo);
  shiftOut(dataPin, clockPin, MSBFIRST, registerOne);

  // "защелкиваем" регистр, чтобы биты появились на выходах регистра
  digitalWrite(latchPin, HIGH);
}

Я нашол пример для двух регистров, а что исправить чтобы 24 заработали???

JasKo
Offline
Зарегистрирован: 21.11.2015

Создай массив из 24 байт, а потом в цикле заталкивай элементы массива в регистры - все просто.

Для заталкивания в регистр используй shiftout.
 

Volkidze
Offline
Зарегистрирован: 11.12.2015

А можно по подробней, хотя бы пример скетча?