본문 바로가기
카테고리 없음

예제 4.4 ~

by erase-jeong 2023. 10. 22.

[예제 4.4 ] FND 제어

 

1. FND (Flexible Numeric Display)

1) LED의 조합으로 숫자를 표시하는 장치

2) 7개의 LED를 사용하기 떄문에 7-segmet라고도 함

3) 숫자뿐만 아니라 간단한 기호나 16진수까지 표현 가능

 

 

<Common Cathode FND 표시>


<실습 목표>

CommonCathodeFND를이용하여0~9의숫자를표시해보자.

 

 

<H/W>

1.CommonCathode형 FND는 그림4.2의 (a)와 같이3번과8번핀이Cathode핀으로함께 연결되어있다.

즉FND의3번과8번핀을GND에연결하고나머지핀들에HIGH신호를주어 FND에 숫자를표시한다.

 

2.GND에 연결되는3번과8번핀을제외한나머지핀들에는FND내의LED의전류를제한하기 위해 330Ω저항을연결한다.

 

3.원하는숫자를표시하기위해선2~9번핀에표

 

4.1을참고하여신호를출력한다.

 

 

<회로도>

 

<명령어>

1) void 함수 (변수1, 변수2, .... ) {     };

‘함수(변수1,변수2)’를 이용하여‘{ }’내의명령을호출하여사용한다. ‘변수1’과‘변수2’등을함께 선언하면함수내에서그변수를사용할수있다.반복되는구문을설정해놓고호출하여사용하면 편리하다.

 

2) pinMode(핀번호, 설정)

핀의입출력모드를설정한다.

‘핀번호’에는설정하고자하는핀의번호와 ‘설정’에는입력으로 사용하기위해선‘INPUT’,

출력으로사용하기위해선‘OUTPUT’,

입력이며풀업사용시 ‘INPUT_PULLUP’을 적는다.

 

3) digitalWrite(핀번호, 값)

핀에 디지털 출력 (High or Low)을 한다.

'핀번호' 에는 출력하고자 하는 핀의 번호를, 

'값' 에는 'High' 혹은 'Low' 를 설정하여 High 혹은 Low 출력을 한다.

 

4) for (변수 = 시작 값; 조건; 변수의 증분){ }

   변수의 시작 값부터 조건이 만족하는 경우 '{ }' 내의 명령을 수행한다.

   '변수의 증분'에서는 1회 명령이 수행될 떄 마다 변수를 증가 혹은 감소시킨다.

 

<Sketch구성>

1.FND에숫자를표시할때어떤LED를켤지에대한정보를담은상수를설정한다.

2.FND동작에필요한핀을출력으로설정한다.

3.FND를 동작시키는‘fndDisplay(int displayValue)’라는 함수를 만든다.

4.함수를이용하여1초간격으로FND에숫자를표시한다

 

< 실습결과 >

FND의숫자가0~9까지약1초간격으로변화한다.

 

(이거 안함)

 


[4.4.2] 74595를이용한FND제어

* 74595 IC

1) 직렬 신호로 입력된 데이터를 병렬 신호로 변환

2) FND 의 8개의 LED를 켜기 위한 신호를 3개의 신호선으로 입력받아 FND 신호로 출려

3) shiftout( ) 명령어로 구현

4) 앞의 예제 회로도와 스케치를 비교해보자

<실습목표>

Common CathodeFND를 이용하여 0~9의 숫자를 표시해보자.

 

<H/W>

1.예제4.4.1과 동일한동작을하지만 Arduino의입출력핀을절약하기위해 74595IC를 중간에연결한다.

2.Arduino에서는 2,3,4세 개의 핀을이용하여74595IC로 신호를출력한다. 각핀을Arduino에 연결한다.

3.74595IC의 (MR)핀과 Vcc 핀에는5V를 연결하고(OE)와GND핀은Arduino의 GND에연결한다.

4.74595IC에서는 DS,SHCP,STCP핀으로부터 입력된신호를이용하여Q0~Q7핀에 신호를출력한다.Q0~Q7핀을FND의Anode핀에연결한다.

5.FND의 Cathode핀인 3번과8번핀은GND에연결한다

 

 

<명령어>

•shiftOut(데이터 핀,클럭 핀,출력비트 순서,출력 값)

데이터핀으로는비트단위로출력될핀번호를써준다.클럭핀에는데이터가출력될때토글되는 클럭출력에사용할핀번호를써준다.출력비트순서는비트데이터의맨왼쪽부터순차적으로 출력하고자하면‘MSBFIRST’,맨 오른쪽부터순차적으로출력하고자하면‘LSBFIRST’를써분다. 출력값에는실제출력할데이터를써준다.이때데이터는8비트즉2진수8자리의숫자를갖는다.

 

<Sketch 구성>

1.FND에숫자를표시할때 어떤LED를켤지에대한정보를담은상수를설정한다.

2.FND동작에필요한핀을출력으로설정한다.

3.FND를 동작시키는‘fndDisplay74595(int displayValue)’라는 함수를 만든다. 4. ‘fndDisplay74595(int displayValue)’에는 ‘shiftOut()’명령어를 이용한 FND동작 스케치를 넣는다.

5.함수를이용하여1초간격으로FND에숫자를표시한다.

 

< 실습결과>

FND의숫자가0~9까지약1초간격으로변화한다.

 

//0 ~ 9 까지 LED 표시를 위한 상수 설정

const byte number[10]={
//dot gfedcba
	B0011111111, //0
    //1
    //...
    
    
    //9
}

void setup(){
	//2~9번 핀을 a b c d e f g dot 의 순서로 사용한다
    //2~9번 핀을 출력으로 초기화 시킨다.
    for(int i=2; i<=9; ++i){
    	pinMode(i,OUTPUT);
    };
    digitalWrite(9,LOW); //점은 표시하지 않는다.
}

void loop()
{
	//k값을 0~9로 변화시킨다.
    for(int k=0; k<=9;++k){
    	fndDisplay(k); //k값을 출력한다.
        delay(1000);
       };
 }
 
 //LED 점등
 
 void fndDisplay(int displayValue){
 	//bitValue 변수를 선언한다.
    boolean bitValue;
    
    for(int i=2; i<=0;++i){
    //2~9번 핀에 모두 LOW 신호를 줘서 소등시킨다.
    digitalWrite(i, LOW);
   	};
    
    for(int i=0;i<=7;++i){
    //number 상수의 하나의 비트값을 읽는다.
    bitValue=bitRead(number[displayValue],i);
    //앞서 읽은 비트값을 2~9번핀에 출력시킨다.
    digitalWrite(i+2, bitValue);
    };
    
 }

 

(4.5 ~ 4.7 x)