본문 바로가기

개발자/부품

4-digit 7-segment display with two 74HC595 using CPLD

반응형

 

 

설계는 다음과 같아야 합니다:

 

숫자 생성기 -> 숫자 선택기 -> 멀티플렉서 -> BCD 변환기 -> 비트 역직렬화기 -> 레지스터 업데이터(74xx595) 순으로 설계해야 합니다.

 

 

 

 

 

 

 

사이즈가 맞는 파트넘버를 확인한다.

 

 

 

 

Display

  • Digit Size: 0.36"
  • Material: GaAlAs/GaAs
  • Emitted Color: Red
  • Dominant Wavelength: 660 nm

 

Absolute Maximum Ratings

  • Reverse Voltage(Vr): 5 V
  • Reverse Leakage Current (Ir): 50 µA
  • Forward Current (If): 30 mA
  • Peak Forward Current (Ifp): 150 mA
  • Power Dissipation (P): 80 mW per Segment
  • Operating Temperature (Topr): -40°C to +80°C
  • Storage Temperature (Ttsg): -40°C to +85°C
  • Lead Soldering Temperature : 260°C

 

Electro-Optical Data (@ 20mA)

  • Forward Voltage - Typical: 2.2V
  • Forward Voltage - Maximum: 2.5V
  • Luminous Intensity - Minimum per Segment: 56 mcd
  • Luminous Intensity - Typical per Segment: 88 mcd
  • RoHS Compliant: Yes

 

 

4 dot는 없는데.... 일단 사이즈 정보는 확인 

https://diyables.io/products/4-digit-7-segment-display-led-74hc595-driver-with-4-dots

 

 

숫자 생성기:

 

어떤 숫자를 먼저 생성할지, 어떤 순서로 생성할지, 각 숫자마다 개별적으로 생성해야 하는지를 결정합니다.

 

숫자 선택기:

 

기본적으로 숫자를 라운드 로빈하는 간단한 카운터입니다.

 

멀티플렉서:

 

숫자 선택기의 정보를 가져와서 생성된 숫자 중 올바른 숫자를 선택합니다.

 

BCD 변환기:

 

실제 자릿수를 BCD 로직으로 변환하여 7세그에 숫자를 표시할 수 있도록 합니다.

 

비트 역직렬화기:

 

74xx 장치는 8비트 시프트 레지스터이므로 BCD 값을 가져와서 각 클록 사이클에 대해 비트를 하나씩 출력하면 됩니다.

 

레지스터 업데이터

 

이것은 BCD 값을 출력하기 위해 ~oe 입력에 대한 신호를 어설트하는 간단한 로직입니다.

 

이 작업은 BCD 값의 모든 비트를 전송한 후에만 수행할 수 있습니다.

 

플래그를 올리는 로직은 간단합니다. 클럭 사이클을 세기만 하면 됩니다(귀하의 경우 8번(8비트)).

 

비트 시리얼라이저의 로직을 가져와서 아웃스트림된 모든 비트를 세고 플래그를 생성하기만 하면 되기 때문에 로직은 이미 주어져 있습니다.

 

마지막으로, 모든 모듈/엔티티를 포함/인스턴스하는 최상위 파일입니다.

 

이제 작성해야 할 디자인 코드만 남았습니다. 모든 로직을 포함하는 최상위 파일에는 핀 플래너 또는 FPGA 공급업체의 디자인 파일(*.xdc - Xikinx, *.qsf - Intel)에서 지정할 수 있는 각 FPGA 핀에 연결해야 하는 인터페이스(VHDL의 엔티티 포트)가 있습니다. 저는 디자인 파일을 사용하는 것을 추천합니다.

 

설계 프로세스가 명확하게 이해되셨기를 바랍니다. 행복한 코딩이 되시길 바랍니다!

 

 

참고 이미지와 코드는 아래를 참고하세요. 맨 아래 코드 있습니다.

 

나만의 4자리 7세그먼트 LED 디스플레이 모듈 제작하기 

 

 

 

 

 

 

 

 

 

 

아두이노와 연결 Pin 테이블을 참고하세요.

 

Arduino Uno Module Header (J1)
5V Pin 1  P16
D4 Pin 2  P12
D7 Pin 3  P11
D8 Pin 4  P14
GND Pin 5  P8

 

 

/*
* DIY 4-Digit 7-Segment LED Display Module
* Hardware: 74HC595x2 & 4-Digit 7-Segment LED Display (CA)x1
* Demo Code Prepared in Arduino IDE 1.6.9
* 74HC595 16-Bit Output Mode
* Arduino Hardware: Arduino Uno (R3)
* Author: T.K.Hareendran
* Website: https://www.Codrey.com

/* 
* DIY 4-자리 7-세그먼트 LED 디스플레이 모듈
* 하드웨어: 74HC595x2 & 4-디지트 7-세그먼트 LED 디스플레이 (CA)x1 
* 데모 코드: 74HC595 16비트 출력 모드 
* 아두이노 IDE 1.6.9에서 준비된 데모 코드 
* 아두이노 하드웨어: 아두이노 우노(R3) 
* 저자: T.K.하렌드란 
* 웹사이트: https://www.Codrey.com */
*/


int LATCHDIOPin = 4; // Pin12 74HC595
int CLKDIOPin = 7; // Pin11 74HC595
int DATADIOPin = 8; // Pin14 74HC595
unsigned int d; // Data to be sent to the Shift Register
int dir = 0; // Running Direction 1
char buf[12]; // GP Buffer

void setup() {

pinMode(LATCHDIOPin, OUTPUT);
pinMode(CLKDIOPin, OUTPUT);
pinMode(DATADIOPin, OUTPUT);

d = 1;
}

void loop() {

delay(200);
digitalWrite(LATCHDIOPin, LOW);
shiftOut(DATADIOPin, CLKDIOPin, MSBFIRST, (0xff00 & d) >> 8);
shiftOut(DATADIOPin, CLKDIOPin, MSBFIRST, 0x00ff & d);
digitalWrite(LATCHDIOPin, HIGH);

if (!dir) d<<=1; else d>>=1; // Shift

if (d&0x8000) dir=1; // Set direction
if (d&0x0001) dir=0;
}

 

 

LED 디스플레이에서 16비트 출력을 얻으려면 16비트를 시프트 레지스터로 보내야 하며, 왼쪽에서 오른쪽으로 비트를 보내는 것이 매우 중요합니다(MSB 먼저): 

 

shiftOut(dataPin, clockPin, MSBFIRST, highByte(numberToDisplay));
shiftOut(dataPin, clockPin, MSBFIRST, lowByte(numberToDisplay));

 

 

시프트 연산을 호출하기 전에 래치 핀을 낮음으로 설정해야 다음 비트가 즉시 처리되지 않아야 함을 장치에 알릴 수 있습니다. shiftOut() 호출이 반환되면 래치 핀 신호가 높음으로 설정되어 시프트 레지스터에 비트가 저장됩니다. 시프트 레지스터와 상호 작용하는 방법에 대한 자세한 내용은 다양한 온라인 튜토리얼을 참조하세요

 

제 데모 코드에서는 시프트 아웃 함수를 두 번 사용하여 비트 시프트를 통해 16비트 값을 두 조각으로 분할하여 출력합니다(시프트 아웃은 바이트 단위로만 작동하므로 한 번에 8비트 데이터만 처리할 수 있습니다). 

 

 

잘 만든 멀티 넘버링 키트 참고

 

Another suggested reading is https://weworkweplay.com/play/practical-guide-to-shift-registers/

 

아래 이미지 설명 부분의 참고 자료는 이 링크를 따라가시면 만날 수 있습니다.

 

절대로 배움을 멈추지 마세요. 매일 읽고 매일 쓰세요. 포기하지 마세요.

 

읽어주셔서 감사합니다.

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^