atmega32의 inteerupt 활용
- 최초 등록일
- 2013.12.10
- 최종 저작일
- 2012.11
- 13페이지/
한컴오피스
- 가격 2,000원
![할인쿠폰받기](/images/v4/document/ico_det_coupon.gif)
목차
1. 설계 과제의 목표 및 제한 조건
1) LED 및 7-segment 점등 과제설명
2. 서론
1) 과제에 사용된 도구 소개
3. 본론
1) FLOW CHART
2) 회로도 사진
3) 설계과제 진행 과정 및 정리
4. 결론
1) 설계과제 결과 중심 토론
5. 부록
1) 프로그램 코드
2) 부록
본문내용
1. 설계과제의 목표 및 제한조건
-목표
● LED 점등
1번 스위치를 누르면 점등된 LED 숫자 증가
2번 스위치를 누르면 점등된 LED 숫자 감소
●LED 또는 7-SEGMENT로의 선택적 점등
1번 스위치를 누를때 마다 LED 혹은 7-SEGMENT로의 출력을 바꾸어 선택
2번 스위치를 누르면 점등된 LED 숫자 감소
-제한조건
●모든 스위치 입력처리는 인터럽트만 사용
●입력 : push 스위치 -2개
●출력 : LED-8개 , 7-SEGMENT - 1개
<중 략>
이번 코드는 배열을 이용하여 LED와 7-SEGMENT를 출력하였다. if문을 이용하여 LED와 7-SEGMENT를 출력한 것은 첫 번째와 두 번째 과제가 같지만, interrupt_count 변수의 개수는 다르다. 두 번째 과제에서는 LED와 7-SEGMENT의 출력이 바뀌었을 때 배열의 개수가 달라지기 때문에 변수 2개를 이용하여 출력하도록 했다. delay 함수에 있어서 (int d1,int d2)의 d1, d2가 값이 300이하가 되었을 때(개략적으로) bounce 현상이 발생하여 출력을 정상적으로 하지 못했다. 또 800 이상이 되면 switch를 누르고 나서 출력까지의 시간이 길게 느껴졌기 때문에 d1 과 d2를 300 의 값이 이상적이라고 판단, 사용하게 되었다.
다만 a의 변수를 이용하여 2번 push switch를 입력할 때에는 1000으로 하였다.
이번 과제의 핵심코드는 GICR, MCUCR, sei() 구문이라고 생각한다. GICR와 sei를 이용하여 INTERRUPT를 사용하기 위한 준비를 하고 MCUCR을 이용하여 Rising Edge를 나타내었다. ATmega32와 연결되는 곳이 PD2, PD3 라는 점 때문에 진법을 나타낼 때 어떻게 해야 할지 몰라서 많이 헤맸지만 GICR=0xc0, MCUCR=0x0f 라는 것을 수업때 배운 내용으로 알게 되었다.
INTERRUPT0을 이용하여 1번으로 지정한 push switch를 받아들이고 INTEERUPT1을 이용하여 2번 push switch를 이용하였다. 또한 이번 코드에서는 7-SEGMENT의 출력을 ~ 기호를 사용하였다. 즉 “1”의 신호에서 불이 꺼졌던 SEGMENT가, LED와 마찬가지로 “1”의 신호에서 불이 켜지게 하였다. 이렇게 함으로써 진법변환시 혼동되었던 것을 없애 진법 작성하는 시간을 단축하였다.
참고 자료
없음