@artanets1

Как правильно составить код для управления сдвиговым регистром с помощью ардуино?

Как правильно написать код для управления сдвиговыми регистрами, драйверами светодиодов и любыми другими радиодеталями, управление которыми осуществляется с помощью сигналов Clock и data input.

Из того что уже нашел:
1. просто ввести вручную последовательность включений и выключений двух портов ардуино.
void loop() {
   digitalWrite(pin2, HIGH);
   delay(timer);
   digitalWrite(pin2, LOW);
   delay(timer);

   digitalWrite(pin3, HIGH);
   delay(timer);
   digitalWrite(pin3, LOW);
   delay(timer);

   digitalWrite(pin4, HIGH);
   delay(timer);
   digitalWrite(pin4, LOW);
   delay(timer);

   digitalWrite(pin5, HIGH);
   delay(timer);
   digitalWrite(pin5, LOW);
   delay(timer);

   digitalWrite(pin6, HIGH);
   delay(timer);
   digitalWrite(pin6, LOW);
   delay(timer);

   digitalWrite(pin7, HIGH);
   delay(timer);
   digitalWrite(pin7, LOW);
   delay(timer);

   digitalWrite(pin6, HIGH);
   delay(timer);
   digitalWrite(pin6, LOW);
   delay(timer);

   digitalWrite(pin5, HIGH);
   delay(timer);
   digitalWrite(pin5, LOW);
   delay(timer);

   digitalWrite(pin4, HIGH);
   delay(timer);
   digitalWrite(pin4, LOW);
   delay(timer);

   digitalWrite(pin3, HIGH);
   delay(timer);
   digitalWrite(pin3, LOW);
   delay(timer);
}


2. или с помощью массивов.
void loop() {
  for (count=0;count<6;count++) {
   digitalWrite(pinArray[count], HIGH);
   delay(timer);
   digitalWrite(pinArray[count], LOW);
   delay(timer);
  }


Подскажите есть ли более правильный способ управления такими устройствами?
  • Вопрос задан
  • 605 просмотров
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos
Вообще сдвиговые регистры отлично управляются при помощи функции shiftOut.
А ваш код непонятен совсем, особенно первый - сдвиговый регистр подключается к трем портам, а у вас там 6 портов.
Ответ написан
Для обычных сдвиговых регистров, например тут, через ShiftOut: http://wiki.amperka.ru/конспект-arduino:счетчик-нажатий

Если важен сам принцип, то смотрите временные диаграммы, либо расковыряйте данную функцию.
Могу ошибаться, но вроде: выставить уровень на data, по фронту clock забить его в регистр, выставить следующее, снова фронтом clock его задвинуть в регистр, после забивания всех 8ми значений подать необходимый уровень на защелку latch, которая одновременно выставит все забитые значения на выходе регистра.
Ответ написан
@Inkvizitor66
Как чуть более универсальное решение - spi как интерфейс. Через него функциями контроллера писать в регистр.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы