[예제 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)