roboforum.ru

Технический форум по робототехнике.
Текущее время: 18 фев 2025, 18:31

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Помогите разобраться с сдвиговыми регистрами 74HC595
СообщениеДобавлено: 08 окт 2015, 12:42 
Не в сети

Зарегистрирован: 10 май 2015, 14:09
Сообщения: 1
Здравствуйте! Появился такой вопрос. У меня проект по сути являющийся бегущим огоньком. В этом проекте у меня будет подключено 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 и последующие светодиоды а мне нужно чтобы с первого начинал загорать светодиод. Помогите доработать скетч

Добавлено спустя 1 час 12 минут 6 секунд:
хочу сделать шкалутку виде такой http://vk.com/video-42128136_164506984 или такой http://www.youtube.com/watch?v=B_itSC3oGpg


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с сдвиговыми регистрами 74HC595
СообщениеДобавлено: 17 окт 2015, 21:44 
Не в сети
Аватара пользователя

Зарегистрирован: 01 ноя 2014, 00:50
Сообщения: 1728
Откуда: Ставрополье
ФИО: Александр
Я по скетчу не помогу, но на втором видео явно без всяких программ сделано. Такой простой эффект можно на паре транзисторов сделать (я как-то делал мигалку подобно такому эффекту).
А вот первое видео.. там программа в чипе, и там более интересно.
Кстати по сдвиговым резисторам буквально вчера увидел ссылку на сайте "кота" (не знаю, запрещена ли на форуме выдача ссылок.. сделаю не активной? вместо подчёркивания вставьте h) __ttp://easyelectronics.ru/sdvigovyj-registr.html

_________________
Наружная реклама, сувениры, шелкотрафаретная печать (пакеты, шары, футболки и т.п.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с сдвиговыми регистрами 74HC595
СообщениеДобавлено: 18 окт 2015, 12:59 
Не в сети
Аватара пользователя

Зарегистрирован: 20 янв 2014, 22:44
Сообщения: 431
Откуда: 21RU
прог. языки: Assembler, Basic, Arduino IDE, PHP и др.
ФИО: Андрей С
Самое простое сделать 2 цикла, а гашение просто убирается гашение предыдущего светодиода. А на счет 9-ого не понял, может просто светодиоды поменять местами? Или стробирующие импульсы подавать в другую микросхему?
Код:
void loop() {
// 2 Цикла обхода 16 светодиодов (1 зажигает, 2 гасит)
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);
//}
//}
}
for (int i = 0; i < 16; i++) {
// Запись в регистр
registerWrite(i, LOW);
// Задержка 0.5 с.
delay(500);
}

_________________
3D Expo 2014 Moskow 23-25.10.2014


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO