led matrix 16*16

Muse
Offline
Зарегистрирован: 14.04.2016

В общем есть матрица 16*16 работающая от четырех 74HC595D. Два отвечают за анод и два за катод. Я начинаю писать код по образцам в интернете но вот проблема я не могу запустить все 4. Вот мой код

int latchPin = 6;  //Пин подключен к ST_CP входу 74HC595
int clockPin = 7;  //Пин подключен к SH_CP входу 74HC595
int dataPin2  = 4;
int dataPin  = 13; 

void setup() {
  //устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(dataPin2, OUTPUT);
 }
void loop() {
  digitalWrite(latchPin, LOW);                     
  shiftOut(dataPin, clockPin, LSBFIRST, 1);    
  shiftOut(dataPin2, clockPin, LSBFIRST, 194);
  digitalWrite(latchPin, HIGH);       
}

Этот код зажигает 5 светодиодов. Допустим мне надо зажечь 10 светодиодов то я добавляю строчку  shiftOut(dataPin2, clockPin, LSBFIRST, 194); и они горят но если мне надо зажечь 10*10 то уже не работает путем добавления строчки    shiftOut(dataPin, clockPin, LSBFIRST, 194);   shiftOut(dataPin, clockPin, LSBFIRST, 194); 

что я делаю не так?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

А вы читали это http://arduino.ru/Reference/ShiftOut

От туда:Выводит байт информации на порт вход/выхода последовательно (побитно). 

У вас В общем есть матрица 16*16 работающая от четырех 74HC595D. Два отвечают за анод и два за катод. 

Напоминаю. Байт это 8 бит и 74НС585D тоже 8 бит. А если у вас их две то надо вывести 16 бит. 

int latchPin = 6;  //Пин подключен к ST_CP входу 74HC595
int clockPin = 7;  //Пин подключен к SH_CP входу 74HC595
int dataPin2  = 4;
int dataPin  = 13;

void setup() {
  //устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(dataPin2, OUTPUT);
}
void loop() {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, 1);
  shiftOut(dataPin, clockPin, LSBFIRST, 1);//<-- это вы упустили
  shiftOut(dataPin2, clockPin, LSBFIRST, 194);
  shiftOut(dataPin2, clockPin, LSBFIRST, 194);//<-- это вы упустили
  digitalWrite(latchPin, HIGH);
}

 

Muse
Offline
Зарегистрирован: 14.04.2016

Если использовать этот код то я могу управлять dataPin2 но не dataPin1 вот я и не пойму что не так То есть я не могу управлять всеми 4 только двумя

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

В каком смысле У вас матрица 16х16 , вот ей вы и управляете с помощью 2х (2х74HC595) каскадно сдвоеных . выставили 2 байта по вертикали 2 байта по горизонтали и вывели картинку на матрицу. http://arduino.ru/Tutorial/registr_74HC595

ПС: Разумеется информация в 32 байта не поместится в 4 байтах. Так что могут быть накладки в изображении. Так что надо сканирующий вывод картинки. По строкам или по колонкам.