нужна помощь в программирование с сдвиговым регистором 74НС595

JinG08
Offline
Зарегистрирован: 08.10.2015

Здравствуйте! Появился такой вопрос. У меня проект по сути являющийся  бегущим огоньком. В этом проекте у меня будет подключено n-количество сдвиговых регистров и к каждой ноге выхода будет подключен светодиод через резистор. Каскадом у меня получилось подключить сдвиговые регистры информацию под черпнул здесь http://asio5.ru/?p=454 и здесь http://arduino.ru/Tutorial/registr_74HC595 скетч более подходящий нашел вот тут http://asio5.ru/?p=454

 

//Пин SH_CP

int SH_CP = 4;

//Пин ST_CP

int ST_CP = 3;

//Пин DS

int DS = 2;

 

void setup() {

// Настраиваем выходы SH_CP, ST_CP, DS

pinMode(SH_CP, OUTPUT);

pinMode(ST_CP, OUTPUT);

pinMode(DS, OUTPUT);

}

 

void loop() {

// Цикл обхода 16 светодиодов

for (int i = 0; i < 16; i++) {

// Запись в регистр

registerWrite(i, HIGH);

// Задержка 0.5 с.

delay(500);

// Отключение предыдущего светодиода

if (i > 0) {

registerWrite(i - 1, LOW);

}

// Отключение последнего светодиода

// ("предыдущий" для первого"

else {

registerWrite(15, LOW);

}

}

}

 

// Метод для отсылки данных в регистры

void registerWrite(int num, int state) {

// Для хранения 16 битов используется unsigned int

unsigned int bitsToSend = 0;

// 0b000000000000000

// Инициализируем начало приема данных

digitalWrite(ST_CP, LOW);

 

// Устанавливаем 1 в соответствующий бит

bitWrite(bitsToSend, num, state);

 

// 16 бит необходимо разделить на два байта:

// И записать каждый байт в соответствующий регистр

byte register1 = highByte(bitsToSend);

byte register2 = lowByte(bitsToSend);

 

// Последовательная передача данных на пин DS

shiftOut(DS, SH_CP, MSBFIRST, register2);

shiftOut(DS, SH_CP, MSBFIRST, register1);

 

// Инициализируем окончание передачи данных.

// Регистры подадут напряжение на указанные выходы

digitalWrite(ST_CP, HIGH);

}

 

 

Этот скетч немного мне не подходит т.к. он зажигает только один светодиод а мне нужно что бы он оставлял гореть и предыдущие светодиоды и второе работать скетч начинает со второго сдвигового регистра при включение т.е. сначала загорается 9 и последующие светодиоды а мне нужно чтобы с первого начинал загорать светодиод. Помогите доработать скетч. Хочу сделать шкалутку виде такой http://vk.com/video-42128136_164506984 или такой http://www.youtube.com/watch?v=B_itSC3oGpg

Нашел на этом форуме похожий скетч но также предыдущие светодиоды гаснут http://arduino.ru/forum/programmirovanie/pomogite-razobratsya-s-74hc595-64bit

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вам лучше переместить пост вот сюда - http://arduino.ru/forumy/ishchu-ispolnitelya

Только код вставляйте правильно - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

JinG08 пишет:

В этом проекте у меня будет подключено n-количество сдвиговых регистров и к каждой ноге выхода будет подключен светодиод через резистор. 

Только не забывайте, что максимальный ток нагрузки одного сдвигового регистра не должен превышать 70mA. Или 8,75mA на один светодиод (70mA / 8 светодиодов). Обычно к сдвиговым регистрам нагрузку напрямую не подключают.

JinG08
Offline
Зарегистрирован: 08.10.2015

Разумеется, у меня хромает реализация в программном коде. Всего будет подключено 7 сдвиговых регистров с 54 светодиодами