Использование сдвигового регистра для мультиплексирования (или демультиплексирования, в зависимости от вашей точки зрения) входов / выходов очень распространено в цифровой электронике.
По сути, вы торгуете сберегающими булавками на вашем контроллере за то, что в дизайн нужно добавить еще одну микросхему (сдвиговый регистр).
В этом случае регистр работает как последовательно-параллельный преобразователь; у него есть строка последовательного ввода, которая питается битами от вашего процессора. Он также имеет 8 параллельных выходов, подключенных к 8-битной памяти, которая загружается последовательно из ЦП. Используя это, вы можете «сдвинуть» 8 бит данных на одном выводе (плюс один вывод, как правило, для тактирования), которые затем сохраняются в регистре сдвига и могут управлять 8 светодиодами параллельно.
В этом конкретном случае вам необходимо выяснить, к какому порту AVR подключены регистры сдвига (драйверы приемника постоянного тока MBI5168 содержат здесь регистры сдвига). Они должны быть привязаны к паре выходов, один для данных и один для часов. Как только вы узнаете эти контакты, вы сможете сами управлять ими, используя команду ShiftOut .
Копаем немного дальше, этот пример "эскиза" содержит следующие определения в файле "Rainbow.h":
//MBI5168
#define SH_DIR_OE DDRC
#define SH_DIR_SDI DDRC
#define SH_DIR_CLK DDRC
#define SH_DIR_LE DDRC
#define SH_BIT_OE 0x08
#define SH_BIT_SDI 0x01
#define SH_BIT_CLK 0x02
#define SH_BIT_LE 0x04
#define SH_PORT_OE PORTC
#define SH_PORT_SDI PORTC
#define SH_PORT_CLK PORTC
#define SH_PORT_LE PORTC
Это, конечно, полный цифровой «слух» (я не являюсь владельцем устройства, я никогда не программировал ни на одном из типов * duino), но я бы сказал, что это система доставки пули, испускающей частицы, вы ». ищем.
Я интерпретирую это так:
- PORTC - это тот, который подключен к сдвиговым регистрам, все контакты управления находятся в PORTC.
- Четыре пина выделены (а не два оптимистичных, о которых я упоминал выше).
- Часы - это PORTC: 2, а данные - PORTC: 1.