сдвиговые регистры 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

что то не пойму я принцип написания скетча с двумя регистрами.
с двумя когда на светодиодах общий минус понял, а здесь не могу разобраться...
andrys
 
Сообщения: 10
Зарегистрирован: 30 мар 2017, 09:35

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

Сообщение Eruman » 06 ноя 2017, 13:16

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

и в принципе, можно же пошагово контролировать после каждого "продавливания". собс-но, ежели что-то не так идет, я бы так делал :)
Соединяй и здравствуй.
Аватара пользователя
Eruman
 
Сообщения: 897
Зарегистрирован: 12 авг 2010, 15:10
Откуда: Астраханская обл.

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
andrys
 
Сообщения: 10
Зарегистрирован: 30 мар 2017, 09:35

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

Сообщение Eruman » 07 ноя 2017, 09:49

shiftOut у тебя байты зеркально выдает, используй:
shiftOut(dataPin,clockPin,LSBFIRST,~data[num]);
shiftOut(dataPin,clockPin,LSBFIRST,~dat);
Соединяй и здравствуй.
Аватара пользователя
Eruman
 
Сообщения: 897
Зарегистрирован: 12 авг 2010, 15:10
Откуда: Астраханская обл.

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

Сообщение Madf » 07 ноя 2017, 16:29

А с чего оно вообще работать должно? Схема собрана неправильно, надо так включать хотя бы:
Изображение
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...


Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

cron