Помогите понять работу регистра сдвига 74HC595

Samaliani
Offline
Зарегистрирован: 19.06.2013

Купил ардуину, начал разбираться. Подключил  регистр сдвига, все нормально работает - моргает. Теперь  хочу понять принцип работы на уровне сигналов. Никак не могу осилить, подскажите где про это почитать доступно. Смотрел datasheet - как-то ничего не понятно.

Geronimo
Offline
Зарегистрирован: 06.05.2013

http://arduino.ru/Tutorial/registr_74HC595

 

Или Вам интересно как работает микросхема?

Samaliani
Offline
Зарегистрирован: 19.06.2013

Туториал этот проделал, как управлять из программы на arduino я понял. Меня интересует логика работы микросхемы, какие именно сигналы поступают на SH_CP, ST_CP, DS

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

DS - вход данных - последовательный - посылка из 8 бит - начиная с 7, заканчивая 0 битом

SHCP - CLK - на каждый бит данных по импульсу - сдвигает бит - нужно 8 импульсов

MR - перед посылкой данных нужно установить LOW - сброс состояния(можно не использовать)

STCP - после завершения посылки подать импульс - установка состояний в буферные регистры

OE - LOW - включает выходы - можно вообще всегда включенным держать

тоесть на STCP импульс через каждые 8 импульсов на SHCP, a DS - просто меняет состояние.

импульс это

digitalWrite(pin, HIGH);
delay(20);
digitalWrite(pin, LOW);

 

maksim
Offline
Зарегистрирован: 12.02.2012
Samaliani
Offline
Зарегистрирован: 19.06.2013

Спасибо за ответы. Вот нашел исходный код функции shiftOut:

void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
{
	uint8_t i;

	for (i = 0; i < 8; i++)  {
		if (bitOrder == LSBFIRST)
			digitalWrite(dataPin, !!(val & (1 << i)));
		else	
			digitalWrite(dataPin, !!(val & (1 << (7 - i))));
			
		digitalWrite(clockPin, HIGH);
		digitalWrite(clockPin, LOW);		
	}
}

Получается все просто, устанавливаем DS в состоянии с нужным битом, подаем импульс на SH_CP.

А вот картинку из Datasheet 

http://arduino.ru/sites/default/files/projects/74HC595/595_timing_diagram.png

все равно понять не могу.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Картинки такие - это самое сложное. В институте они мне тоже не нравились(несколько лаб и курсовая). Ее можно понять если смоделировать в голове работу микросхемы. Гораздо проще пользоваться логической схемой, которую привел я - там все понятно инверторы, D-тригеры.

pogriban
Offline
Зарегистрирован: 28.12.2014

Добрый вечер, скажите пожалуйста как ограничить работу 

74HC595 одним циклом

///////////////////////////////////
int DS_pin = 9;
int STCP_pin = 10;
int SHCP_pin = 11;
void setup()
{
pinMode(DS_pin,OUTPUT);
pinMode(STCP_pin,OUTPUT);
pinMode(SHCP_pin,OUTPUT);
writereg();
}
boolean registers[8];
void writereg()
{
  registers[8]=HIGH;
registers[1]=HIGH;
digitalWrite(STCP_pin, LOW);
for (int i = 8; i>0; i--)
{
digitalWrite(SHCP_pin, LOW);
digitalWrite(DS_pin, registers[i] );
digitalWrite(SHCP_pin, HIGH);
}
digitalWrite(STCP_pin, HIGH);
delay(100);
 
}
 
void loop()
{
 
  
for(int i = 2; i<8; i++) 
{ registers[i] = HIGH; 
delay(100); writereg();
for(int i = 2; i<8; i++)
 
{
registers[i] = LOW;
delay(100);
writereg();
}
 
delay(100);
}
///////////////////////////////////
 
у меня зажигаются и сзади тухнут но так непрерывно, но мне нужен один цикл
Logik
Offline
Зарегистрирован: 05.08.2014

Плохо если сзади тухнут. Попробуйте перевернуть. Цикл должен біть регулярыім, но с условием.

pogriban
Offline
Зарегистрирован: 28.12.2014

Мне так и нужно но один цикл

Logik
Offline
Зарегистрирован: 05.08.2014

Я заметил, он у Вас всего один. А Вы ничего подозрительного не заметили?