roboforum.ru

Технический форум по робототехнике.

сдвиговые регистры 74сн595

сдвиговые регистры 74сн595

andrys » 05 ноя 2017, 17:27

собрал для практики светодиодную матрицу 8х8 на регистрах 74сн595, то есть на катодах и анодах по регистру.
но не могу никак разобраться с программированием данной матрицы.
весь интернет пересмотрел но по работе с моим вариантом не нашел примеров...
к примеру скетч
int dataPin = 4; //Пин подключен к DS входу 74HC595
int latchPin = 3; //Пин подключен к ST_CP входу 74HC595
int clockPin = 2; //Пин подключен к SH_CP входу 74HC595

void setup() {
//устанавливаем режим OUTPUT
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);


digitalWrite(latchPin, LOW); // устанавливаем синхронизацию "защелки" на LOW
// начинаем "продавливать" данные по цепочке регистров, начиная с последнего
shiftOut(dataPin, clockPin, LSBFIRST, B00111100); // передаем последовательно на dataPin - в первом регистре значение B01001100
shiftOut(dataPin, clockPin, LSBFIRST, B11000011); // "продавливаем" данные в следующий регистр - в первом регистре B10000111, во втором - B01001100

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

void loop() {
}

в итоге у меня загораются
00000000
11000011
00000000
00000000
00000000
00000000
00000000
11000011

что то не пойму я принцип написания скетча с двумя регистрами.
с двумя когда на светодиодах общий минус понял, а здесь не могу разобраться...

Re: сдвиговые регистры 74сн595

Eruman » 06 ноя 2017, 13:16

без схемы как понять? схему давай.

и в принципе, можно же пошагово контролировать после каждого "продавливания". собс-но, ежели что-то не так идет, я бы так делал :)

Re: сдвиговые регистры 74сн595

andrys » 07 ноя 2017, 02:35

нашел ошибку в схеме... перепаял все заработало...
для проверки залил из интернета "рабочий" скетч...
он почему то в зеркальном виде отобразился... то есть буква "b" стала "d"
но это будет уже другой вопрос если не разберусь...

сам скетч который загружал...
Код: Выделить всёРазвернуть
const int latchPin = 8;//Pin connected to ST_CP of 74HC595
const int clockPin = 12;//Pin connected to SH_CP of 74HC595
const int dataPin = 11; //Pin connected to DS of 74HC595
int data[] =

{
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",0*/
  0xFF,0xC1,0xBE,0xBE,0xBE,0xC1,0xFF,0xFF,/*"0",1*/
  0xFF,0xDF,0xDF,0x80,0xFF,0xFF,0xFF,0xFF,/*"1",2*/
  0xFF,0xDC,0xBC,0xBA,0xB6,0xCE,0xFF,0xFF,/*"2",3*/
  0xFF,0xDD,0xBE,0xB6,0xB6,0xC9,0xFF,0xFF,/*"3",4*/
  0xFB,0xF3,0xEB,0xDB,0x80,0xFB,0xFF,0xFF,/*"4",5*/
  0xFF,0x8D,0xAE,0xAE,0xAE,0xB1,0xFF,0xFF,/*"5",6*/
  0xFF,0xC1,0x96,0xB6,0xB6,0xD9,0xFF,0xFF,/*"6",7*/
  0xFF,0xBF,0xBC,0xB3,0xAF,0x9F,0xFF,0xFF,/*"7",8*/
  0xFF,0xC9,0xB6,0xB6,0xB6,0xC9,0xFF,0xFF,/*"8",9*/
  0xFF,0xCD,0xB6,0xB6,0xB4,0xC1,0xFF,0xFF,/*"9",10*/
  0xFC,0xF3,0xCB,0x9B,0xEB,0xF3,0xFC,0xFF,/*"A",11*/
  0xFF,0x80,0xB6,0xB6,0xB6,0xB6,0xC9,0xFF,/*"B",12*/
  0xFF,0xE3,0xDD,0xBE,0xBE,0xBE,0xBE,0xDD,/*"C",13*/
  0xFF,0x80,0xBE,0xBE,0xBE,0xBE,0xDD,0xE3,/*"D",14*/
  0xFF,0x80,0xB6,0xB6,0xB6,0xB6,0xBE,0xFF,/*"E",15*/
  0xFF,0x80,0xB7,0xB7,0xB7,0xB7,0xBF,0xFF,/*"F",16*/
};
void setup ()
{
  //set pins to output
  pinMode(latchPin,OUTPUT);
  pinMode(clockPin,OUTPUT);
  pinMode(dataPin,OUTPUT);
}
void loop()
{

  for(int n = 0; n < 136; n++)//the numbers in data array
  {
    for(int t = 0;t < 10;t ++)//Show repeated 10 times
    {
      int dat = 0x01;//0000 0001 ,control the cols
      for(int num = n; num < 8+n; num++)
      {
        dat = dat<<1; //left shift 1 bit,turn on the cols one by one
        delay(1); //wait for a microsecond
        shiftOut(dataPin,clockPin,MSBFIRST,~data[num]);//invert the data array ,control rows of dot matrix
        shiftOut(dataPin,clockPin,MSBFIRST,~dat); // invert the dat ,control cols
        //return the latch pin high to signal chip that it
        //no longer needs to listen for information
        digitalWrite(latchPin,HIGH); //pull the latchPin to save the data
        //delay(1); //wait for a microsecond
        digitalWrite(latchPin,LOW); //ground latchPin and hold low for as long as you are transmitting
      }
    }
  }
}
Вложения
gff.png

Re: сдвиговые регистры 74сн595

Eruman » 07 ноя 2017, 09:49

shiftOut у тебя байты зеркально выдает, используй:
shiftOut(dataPin,clockPin,LSBFIRST,~data[num]);
shiftOut(dataPin,clockPin,LSBFIRST,~dat);

Re: сдвиговые регистры 74сн595

Madf » 07 ноя 2017, 16:29

А с чего оно вообще работать должно? Схема собрана неправильно, надо так включать хотя бы:
Изображение


Rambler\'s Top100 Mail.ru counter