실습 8. 래치와 플립플롭 결과보고서201xxxxx 홍길동6조 : 홍길동 xxx xxx실험날짜 : 20191031제출날짜 : 20191107요약 : 이번실습에서는 RS latch와 RS flip-flop 회로를 구성해보고 입력에 따른 출력을 확인해봤다. RS latch를 NAND gate(74HC00)을 이용해 구성했고 정상 동작함을 확인했다. RS flip-flop을 NAND gate(TTL 7400), INVERTER(74HC04)을 이용해 구성했고 정상 동작함을 확인했다.사용장비 :OscilloscopePower SupplyFunction generatorBread Board1. 서론RS latch와 RS flip-flop 회로를 구성하여 동작해봄으로써 동작조건과 입력에 따른 출력을 확인했다.2. 설계실습 결과(1) RS latchNAND gate를 이용해 구성한 RS latch 회로는 다음과 같다.CLK, S, R 값에 따른 출력 Q, Q’값을 DMM을 이용해 측정하였고, 이 결과를 바탕으로 작성한 진리표는 다음과 같다.참고로 여기서 0은 0V(LOW), 1은 5V(HIGH)를 의미한다.CLKSRQQ’비고0XXQ _{0}Q _{0} 'hold100Q _{0}Q _{0} 'hold10101Reset11010Set11111사용불가이 진리표를 이용해 RS latch의 상태도를 그리면 다음과 같다.(CLK = 1 일 때)예비보고서에서 작성한 상태도와 일치함을 확인 할 수 있다.다음으로 PSPICE를 사용하여 RS latch 회로를 구현하여 동작시켜본 결과는 다음과 같다.(CLK = 1 일 때)CLK=1, S=0, R=1 인 경우 출력이 Q=0 Q’=1 이다.CLK=1, S=1, R=0 인 경우 출력이 Q=1 Q’=0 이다.Simulation 결과와 실제 실험결과가 같음을 확인할 수 있다.(1) RS flip-flopNAND gate와 INVERTER를 이용해 구성한 RS flip-flop 회로는 다음과 같다.CLK, S, R 값에 따른 출력 Q, Q’값을 DMM을 이용해 측정하였고, 이 결과를 바탕으로 작성한 진리표는 다음과 같다.CLKSRS1R1QQ’비고0XXSRQ _{0}Q _{0} 'hold1XX00Q _{0}Q _{0} 'hold↑0000Q _{0}Q _{0} 'hold↑010101Reset↑101010Set↑111111사용불가이 회로는 CLK 신호가 0->1로 바뀌는 순간에 입력이 출력에 반영되므로 Positive edge-triggered flip-flop임을 알 수 있다.진리표에서 확인할 수 있듯이 CLK 신호가 0이거나 5V로 고정되어 있을 때는 출력이 변화가 없고 그대로 유지되므로 입력변화를 무시함을 알 수 있다. CLK 신호가 0->1로 바뀌는 순간에만 입력변화를 반영한다.8-5-(B)의 타이밍차트는 실험실의 장비 특성상 CLK, S, R의 입력 펄스파를 동시에 인가해줄 수 없기 때문에 실제 실험을 통해 확인해 볼 수는 없었다.3. 결론
이번실습에서는 led와 dot matrix 두가지를 제어하기 위한 프로그램에서 main.c와 dot.c의 함수들을 이해하고 미완성인 코드를 완성해보았다. 그리고 makefile을 통해 ximulator 실행파일을 만들어 ximulator를 통해 실제로 어떤 결과가 나오는지 확인해보았다. 3. dot.c 의 화면의 숫자가 50ms 마다 내려가는 함수 void dot_down_shift(int decimal)을 완성하고, 결과화면과 코드를 설명하시오. (void dot_up_shift(int decimal)을 참고하시면 작성 하시는데 도움 될 것 같습니다) 위 코드에서 for 루프는 *dot[i] = dot_decimal[decimal][i] 이라는 작업을 수행하는데 shift=0 일때는 입력인 decimal에 해당하는 숫자가 dot matrix에 입력되고, shift=1 일때는 각 열의 7bit data인 *dot[i]가 한비트씩 right shift된다. 이렇게 shift가 7까지 증가하면서 50ms 마다 한비트씩 right shift되어 내려가는 작업을 수행한다. 입력을 ‘25’로 했을 때 결과 화면은 다음과 같다.4. dot.c의 화면을 0.3초 간격으로 흑백 반전하고 지우는 함수 void dot_inverse(int decimal) 을 완성하고, 결과화면과 코드를 설명하시오. 위 코드에서 shift=0일 때 먼저 입력 decimal에 해당하는 숫자가 dot matrix에 입력되고 0.3초 후에 ~연산을 이용하여 입력되었던 숫자에서 흑백반전이 일어난다. 다시 0.3초 후에 shift=1이 되어 이 작업을 반복한다. shift=3이되면 for루프를 빠져나오고 dot_clear를 이용해 dot matrix의 내용을 지운다.입력을 ‘30’으로 했을 때 결과화면은 다음과 같다.
결과 보고서(설계실습 9. Keypad)마이크로 프로세서 응용회로 설계실습홍xx 교수님 수요일학번: xxxxxxxx홍길동1. Ghost Key 란 무엇이며, 어떻게 해결하는가? (교재 참조) 또한 소프트웨어적으로 해결법을 간단히 설명하시오.다음과 같은 상황에서 KEY_OUT1에 5V가 인가되면, PUSH_SW11을 통해 KEY_IN2에 5V가 감지되고, 또한 이는 PUSH_SW10을 통해 KEY_OUT2로 전해진다. 따라서 PUSH_SW6을 통해 KEY_IN1에도 5V가 감지되어 PUSH_SW7을 누르지않았지만 누른 것으로 감지한다. 이러한 효과를 Ghost key라고 한다.하드웨어적으로 해결하는 방법은 각 키마다 다이오드를 달아주는 방법이 있다.소프트웨어적으로 해결하는 방법은 키가 동시에 눌리는 것을 방지하기위해 프로그램을코딩할 때 키를 동시에 누르면 함수를 실행하지 않도록 설정해주는 방법이 있다.(ex) main.c에서 else if( key_count >1){sel.all = 0;}2. 실습 동영상을 참조하여 소스코드를 동작하도록 수정하고, 그 결과 화면을 캡처하여 설명하시오. (전체 소스코드를 압축하여 eclass에 보고서와 같이 올려주세요)‘l’를 선택하고 ‘4’키를 입력했을 때 결과‘ldf’를 선택하고 ‘4’키를 입력했을 때 결과3. 선택 모드 에서 dc, cd, dcd, ccddcd 를 입력하였을 때 각각 어떤 장치가 선택되는가?4경우 모두 dot matrix와 clcd가 선택된다. 왜냐하면 select_mode()에서 문자열 buf[100]을 스캔하여 장치를 선택하는데, 4경우 모두 buf[]에 c와 d만 존재하므로 sel.dot과 sel.clcd만 1이되기 때문이다.ccddcd를 입력한 결과.
결과 보고서(설계실습 6. main함수 인자 받기, FND 제어)마이크로 프로세서 응용회로 설계실습홍xx 교수님 수요일학번: xxxxxxxx홍길동1. argument.c 를 argument 이름으로 컴파일 하고 (gcc 이용하여)$ ./argument 123 abc으로 실행시킨 뒤 출력결과를 첨부하고, 결과를 설명하시오.(argument.c 파일에서 다음과 같은 오타를 수정했다.printf(‘argc[%d] : %s n”, i, argv[i]) ; -> printf(‘argv[%d] : %s n”, i, argv[i]) ; )gcc -o argument argument.c -> argument.c 를 compile하여 argument 라는 실행파일을 생성argument.c 에서 int main(int argc, char*argv[]) 이므로./argument 123 abc에서 인자의 개수 3을 argc로 받고, 인자의 문자열을 받는 argv[]는 다음과 같다. ./argument = argv[0], 123 = argv[1], abc = argv[2]2. 다음 그림을 참조하여 fnd.c 파일의 static unsigned short fnd_hexadecimal[16] 을 완성하시오.static unsigned short fnd_hexadecimal[16] = {0x3F, // 00x06, // 10x5B, // 20x4F, // 30x66, // 40x6D, // 50x7D, // 60x07, // 70x7F, // 80x67, // 90x77, // A0x7C, // b0x39, // C0x5E, // d0x79, // E0x71 // F};3. fnd.c의 fnd_up() 함수를 참조하여 20~29 번호를 눌렀을 때 99 부터 0 까지 감소하는 fnd_down 소스코드 만들기다음과 같이 99부터 00까지 감소하는 fnd_down( ) 함수를 만들어 보았다.fnd.c를 저장한 후 Makefile을 통해 ximulator 실행파일을 만들어 simulation 결과를 확인해보니 다음과 같은 결과가 나왔다.‘25’입력 -> down mode99부터00까지 감소
결과 보고서(설계실습 4. LED 제어)마이크로 프로세서 응용회로 설계실습홍xx 교수님 수요일학번: xxxxxxxx홍길동1. 실습절차 및 내용 (목적, 과정, 사용 명령어 등 사진 첨부하여 설명)목적 : X-Hyper320TKU에서 실제로 실행되는 실행파일 'led’와 컴퓨터에서 Simulation 해볼수 있는 Ximulator 실행파일 ‘xim_led’를 makefile을 통해 생성과정-make -> led 실행파일 생성-make_xim -> xim_led 실행파일 생성-./xim_led ->Ximulator 실행2. 홀수, 짝수 번째 LED가 번갈아 점등되도록 코드를 수정하고, 결과 첨부 (* void led_x에 대한 코드만 작성하시면 됩니다.)void led_x() {int i;for( i=1; i Ximulator 실행 결과 다음과 같이 홀수, 짝수 번째 LED가 번갈아 점등되는 Menu가 추가된것을 확인했다.3. 결과 및 고찰실습을 통해 Ximulator에 대해 학습할 수 있었고, 새로운 기능(함수)을 추가하기 위해 header파일과 .c파일 모두를 꼼꼼히 수정해야 한다는 것을 알 수 있었다. 온라인 강의라는 한계 때문에 simulation에서 그치고 실제 X-Hyper320TKU에서 실행파일을 구동해보지 못한 것이 아쉬웠다.