아두이노 74HC573 Latch 사용방법

Software/Arduino|2023. 4. 17. 16:53
반응형

74HC573 는 TTL 시리즈 중에서 8bits Latch IC 로 원하는 출력값을 다음 변경전까지 유지시키기 위한 용도로 사용합니다. 

제 경우에는 주로 릴레이 On, Off 에 많이 사용했습니다. 

 

그런데 주로 아두이노나노 보드를 사용하다 보니 출력 핀수가 적어서 시리얼로 제어가 가능한 74hc595 를 많이 사용했습니다. 

아두이노 메가 처럼 IO 핀이 많은 경우나 HC245 와 같은 입출력 포트를 같은 라인으로 사용할 경우 적용하면 좋을듯 하여 

코드를 만들어 보았습니다.

 

class HC573Latch 
{
public :
	
	void HC573Latch(uint8_t le, uint8_t enable,							// OE 단자를 사용할 경우 
		       uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
		       uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
			   
	void HC573Latch(uint8_t le, 											// OE 단자를 GND로 묶었을 경우 
		       uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
		       uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);			   
			   
	void latch8bits(uint8_t value) ;

private :
	bool _oe_used ;				// OE 단자의 사용 여부 
	
	uint8_t _output_enable ;  // activated by a LOW 
	uint8_t _latch_pin;       // activated by a HIGH pulse.
	uint8_t _data_pins[8];
  
    void pulseEnable();
} ;
//-----------------------------------------------------------------------	
void HC573Latch(uint8_t le, uint8_t enable,							// OE 단자를 사용할 경우 
		        uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
		        uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
{
	_output_enable = enable ;
	_latch_pin = le ;
	_oe_used = true ;
	
	_data_pins[0] = d0 ;
	_data_pins[1] = d1 ;
	_data_pins[2] = d2 ;
	_data_pins[3] = d3 ;
	_data_pins[4] = d4 ;
	_data_pins[5] = d5 ;
	_data_pins[6] = d6 ;
	_data_pins[7] = d7 ;
	
	digitalWrite(_output_enable, HIGH) ;
}			   
//-----------------------------------------------------------------------			
void HC573Latch(uint8_t le, 							// OE 단자를 GND로 묶었을 경우 
		        uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
		        uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
{
	_latch_pin = le ;
	_oe_used = false ;
	
	_data_pins[0] = d0 ;
	_data_pins[1] = d1 ;
	_data_pins[2] = d2 ;
	_data_pins[3] = d3 ;
	_data_pins[4] = d4 ;
	_data_pins[5] = d5 ;
	_data_pins[6] = d6 ;
	_data_pins[7] = d7 ;
}			   
//-----------------------------------------------------------------------	   
void HC573Latch::latch8bits(uint8_t value) 
{
	if(_oe_used == true) digitalWrite(_output_enable, LOW) ;
	
	for (int i = 0; i < 8; i++) 
	{
		digitalWrite(_data_pins[i], (value >> i) & 0x01);	// 데이타 핀에 데이타를 출력한다. 
	}
  
	pulseEnable();  	// Latch 단자를 on->off 하여 출력을 변경한다.
	
	if(_oe_used == true) digitalWrite(_output_enable, HIGH) ;
}	
//-----------------------------------------------------------------------
void HC573Latch::pulseEnable(void) 
{
	digitalWrite(_latch_pin, HIGH);
	delayMicroseconds(1);   
	digitalWrite(_latch_pin, LOW);	
}
//-----------------------------------------------------------------------
반응형

댓글()