2018년 8월 19일 일요일

마프실험 레포트

마프실험 레포트
마프실험 레포트.hwp


본문
- 목 차 -

L E D 순 차 점 등

실 험 조 건

실 험 과 정

실 험 결 과

7-s e g m e n t 순 차 점 등

실 험 조 건

실 험 과 정

실 험 결 과

결 론 및 고 찰
□ LED 순차점등
○ 실험조건
- 스위치 입력:1개, LED 출력:8개
- 스위치 입력이 0 일때 : 1초마다 점등된 LED가 오른쪽으로 이동
- 스위치 입력이 1 일 때 : 1초마다 점등된 LED가 왼쪽으로 이동
○ 실험과정
- 실험재료 : BreadBoard, ATmega32, LED, 저항Array, 스위치, 저항 등
- 소스파일
- C포트에 LED를, A포트에 스위치 입력을 연결하였다. 스위치 입력을 받았을
경우(전류가 흘러 PINA값이 0x01) 첫 번째 if문을 실행하여 점등된 LED가
왼쪽으로 이동하도록 되어있으며, 만약 끝으로 다 이동하여 소등될 경우, 다시
초기값을 출력하여 가장 오른쪽에 LED가 켜지도록 되어있다.
스위치 입력을 받지 않았을 경우(전류가 흐르지 않으므로 PINA값은 0x01이 아님)
두 번째 if문을 실행하여 점등된 LED가 오른쪽으로 이동하게 되어 있으며, 만약
가장 오른쪽으로 다 이동하여 점등된 LED가 없을 경우, 즉 모두 소등될 경우
가장 왼쪽 LED가 켜지도록 설계되었다. delay함수를 주어 1초간격으로 켜지도록
하였으며, for문을 이용하여 무한루프를 생성하게 되어있다.
여기서, PORTC 출력 초기값이 ∼led로 되어있는데 이는 Vcc in을 저항을 거쳐
다이오드쪽에서 들어가게 되어있는데 초기값을 반대로 생각하여 설정하였기에
Tild값을 이용하여 역으로 출력할 수 있도록 하였다.
즉,
마이크로컴
다이오드
저항Array
5V
VCC
GND
저항이 5V의 전압이 들어오고 있고
마이컴이 0V일 때 전류가 흐르므로
LED에 불이 들어오고,
마이컴이 똑같이 5V일 때는
LED에 불이 들어오지 않는다.
초기값이 0x01로 되어있는데 이를 2진수로 나타내면 00000001으로,
마이컴의 각 단자가 0일때 전류가 흘러 불이 들어오도록 초기값 설정이
잘못되어 이를 Tild를 써서 반대값, 즉 1일때 불이 들어오도록 설계하였다.
- 스위치 회로구성 : 각 스위치는 저항을 통하여 전류를 흘러보냄
Vcc
M-com
○ 실험결과
- 아래 사진과 같이 BreadBoard에 회로를 구성하여 A포트에서 스위치 입력값을
받아서 C포트에서 LED값이 출력 되도록 완성 하였다.
오른쪽의 검은 스위치를 눌렸을 경우, 스위치 입력이 "1 이 되어 1초마다 왼쪽으로
이동하도록, 스위치 입력값이 없을 경우 오른쪽으로 1초마다 이동하도록 수행
하였다.
□ 7-segment 순차점등
○ 실험조건
- 0∼9까지의 숫자를 2초마다 순차적으로 표시
- 1번 스위치 입력이 "1"이면 증가
- 1번 스위치 입력이 "0"이면 감소
- 2번 스위치 입력이 "1"이면 0.5초마다 깜빡임(동시에 증가 혹은 감소)
○ 실험과정
- 실험재료 : BreadBoard, ATmega32, 7-segment, 스위치(2), 저항 등
- 7-segment의 포트 연결 및 숫자구성
1
2
3
4
5
6
7
8
9
10
a
g
d
b
f
e
c
D.P
a
b
c
d
e
f
g

핀번호 ⇒
핀번호 ⇒






Vcc
표시 숫자
점등될 LED번호
핀번호별 입 출력값(2진수)
0
a b c d e f
0 1 0 0
0 0 0 0
1
b c
0 1 1 1
0 0 1 1
2
a b g e d
0 0 1 0
0 1 0 0
3
a b g c d
0 0 1 0
0 0 0 1
4
f g b c
0 0 0 1
0 0 1 1
5
a f g c d
0 0 0 0
1 0 0 1
6
a f e d c g
0 0 0 0
1 0 0 0
7
f a b c
0 1 0 0
0 0 1 1
8
a b c d e f g
0 0 0 0
0 0 0 0
9
f a b g c d
0 0 0 0
0 0 0 1
※ 5번단자 사용 안함(핀 1∼7까지만 사용)
※ '0'일 때 불 들어옴
- C포트에 segment를, A포트에 2개의 스위치를 연결하였다. 어떠한 스위치의
입력도 없을 경우 숫자가 0부터 시작하여 9,8,7 .순으로 2초마다 감소하도록
세그먼트 값을 설정하였으며, 1번 스위치 입력시 첫 번째 if문이 실행되어
숫자가 2초마다 증가하도록 하였다. 2번 스위치 입력시 if문 내의 if문이 실행
되어 스위치 입력이 있는 동안은 세그먼트가 소등과 점등을 딜레이로 인해
0.5초마다 깜빡임과 동시에 숫자는 증가 또는 감소하도록 설계하였다.
두 스위치는 각각 독립적으로 시행되도록 하여 1번스위치만 혹은 2번스위치만
혹은 1번과 2번 스위치를 동시에 실행시킬 수 있도록 설계 하였다.
- 소스파일
⇒char seg배열의 초기값을 이와 같이 0부터 9까지의 순서로 선언하였다.
위 소스가 최초 파일인데, 앞서 설명한 것과 같이 A포트로 스위치 입력을
받아 C포트로 출력을 하였고, 각 스위치 별 작동도 원활하였다. 하지만,
2번 스위치 if문을 보면 for루프를 이용하여 본디 2초마다 바뀌는 숫자를
0.5초마다 깜빡이고 표시하도록 하기위해 for루프를 4번 나누어 반복하도록 하였다.
하지만 의도하였던 것과는 다르게 0.5초마다 깜빡이지만 숫자가 증가 또는 감소한
후 본디의 2초간의 딜레이가 그대로 실행되는 결과를 가져왔다.
이를 보완하기 위해 for루프가 아닌 do-while문을 사용하여 점등과 소등을 순차적으로
입력하여 주고 while조건에 스위치값이 들어오는 동안 실행하도록 수정 변경하였다.
수정 한 소스파일은 아래와 같다.
○ 실험결과
- 아래 사진과 같이 회로를 구성하여, 1번 스위치(왼쪽)를 눌렀을 때(입력"1")
증가하도록, 누르지 않았을 때(입력"0") 숫자가 2초마다 감소하도록 하였으며,
2번 스위치(오른쪽)를 눌렀을 때(입력"1") 0.5초마다 깜빡이면서 증가 또는 감소가
독립적으로 실행될 수 있도록 완성하였다.
□ 결론 및 고찰
ATmega32 마이크로컴을 처음 이용하여 실험을 수행해 보았다. 첫 과제인
LED의 순차적 점등을 할때는 아직 회로와 프로그램에 익숙하지가 않아 입력과
출력포트에 대해 잘못 생각하여, BreadBoard내의 회로 Vcc방향을 반대로 다시
세팅해야할 지경까지 갔었다. 하지만 교수님의 도움을 받아 tild라는 연산자를
알게 되어 하드웨어적인 부분이 아니라 소프트웨어적으로 비교적 쉽게 소스자체
내에서 조정하여 실험을 무사히 끝마칠 수 있었다.
두 번째 과제인 7-segment 숫자의 순차적 점등 실험은, 우선 각 핀마다 선을
따로 연결해야 하고, 스위치가 2개여서 판에 회로를 구성하는데에도 상당한
시간이 걸렸었다. 하지만 매 시간마다 반복하다 보니 익숙하게 되었고, 중요한
것은 소스를 어떻게 프로그래밍 하는가였는데, 초기에 설계한 프로그래밍이 거의
완벽하다고 생각하고 실행해 보았다. 숫자가 2초마다 증가 또는 감소하는 부분은
성공한 반면, 0.5초마다 깜빡이는 프로그램은 숫자의 증감과 상관없이 별개로
0.5초만 깜박이면 되는 줄로 알고 있었다. 하지만 검사시 2초마다 숫자는 증감을
해야하고 0.5초마다 깜빡임, 즉 0.5초마다 깜빡이면서 2초간격으로 숫자가 증감
해야 하는 것이었다. 완전 독립적으로 두 입력값을 수행해야 하는 프로그램을
완성하기 위해 여러번 수정하다가 결국 do-while문을 통하여 while문에 조건을
넣어주므로 인해 설계조건을 완벽히 수행할 수 있었다. 다만 실습시간이 다 마쳤을
때 완료되어서 시간초과로 인해 검사에 통과 못한 점이 아쉬웠다.
비록 축제기간에 모여서 연습하고 많은 실습시간을 소비하였지만, 이로 인해
LED 순차점등 실험과제와 7-segment 순차점등 실험과제 모두 조건에 부합하는
프로그래밍을 완성할 수 있었다.

하고 싶은 말
좀 더 업그레이드하여 자료를 보완하여,
과제물을 꼼꼼하게 정성을 들어 작성했습니다.

위 자료 요약정리 잘되어 있으니 잘 참고하시어
학업에 나날이 발전이 있기를 기원합니다 ^^
구입자 분의 앞날에 항상 무궁한 발전과 행복과 행운이 깃들기를 홧팅

키워드
스위치, 숫자, 실험, 경우, if문, 하지

댓글 없음:

댓글 쓰기