(A+) 마이크로프로세서응용 ATmega128 8bit Timer, Counter 보고서
본 자료는 5페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
해당 자료는 5페이지 까지만 미리보기를 제공합니다.
5페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

(A+) 마이크로프로세서응용 ATmega128 8bit Timer, Counter 보고서에 대한 보고서 자료입니다.

목차

1. 실험목표
2. 관련이론
3. 데이터시트
4. 실험
5. 실험결과
6. 오차 및 분석

본문내용

)
- 레지스터 TCNTn의 카운트 동작이 항상 0x00 - 0xFF의 범위에서 증가하는 방향으로만 반복적으로 수행된다.
- TCNTn의 값은 항상 출력비교 레지스터 OCRn의 값과 비교
- COM01과 COM00을 각각 1과 0으로 설정하면 OC0 단자는 이와 같이 정상 PWM 출력으로 동작하지만, COM01과 COM00을 각각 1과 1로 설정하면 OC0단자는 반전 PWM 출력으로 동작한다.
※ 타이머/카운터 0의 고속 PWM 모드 ※
- 출력신호의 주파수는 다음과 같이 표시되며, 이는 위상교정 PWM 모드의 경우에 비하여 약 2배 높은 주파수가 된다.
④ Phase Correct PWM Mode (위상교정 PWM MODE)
- 레지스터 TCNTn의 카운트 동작이 상향 카운터로서 0x00 - 0xFF의 범위에서 업 카운트 하였다가 다시 다운 카운터로서 0xFF - 0x00으로 감소하는 동작을 반복적으로 수행한다.
3-1. 전체 회로도
3-2. 실습 코드
3-4. 실습 코드 분석
1. 헤더 및 라이브러리 포함:
- #include : ATmega128 마이크로컨트롤러에 관련된 헤더 파일을 포함한다.
- #include : 사용자 정의 LCD (CLCD) 라이브러리를 사용하기 위한 헤더 파일을 포함한다.
- #include : sprintf() 함수를 사용하기 위한 표준 C 라이브러리 헤더 파일을 포함한다.
- #asm 및 #endasm는 어셈블리 코드를 삽입하기 위한 지시문이다.
2. 전역 변수 선언:
- unsigned char lcd[16]; 및 unsigned char lcd2[16];는 각각 16개 문자를 저장하는 문자열 배열을 선언한다.
- int count;는 타이머 오버플로우 횟수를 저장하는 변수이다.
3. 인터럽트 루틴:
- interrupt [EXT_INT0] void ext_int0_isr(void)와 interrupt [EXT_INT1] void ext_int1_isr(void)는 외부 인터럽트 0과 1을 처리하는 루틴이다.
- TCCR0=0x07; 및 TCCR0=0x00;는 타이머/카운터 0를 시작 및 정지시키는 코드이다.
interrupt [TIM0_OVF] void timer0_overflow(void)는 타이머 0의 오버플로우 인터럽트를 처리하는 루틴으로, count 변수를 증가시킨다.
4. 메인 함수:
- void main(void) 함수는 프로그램의 진입점이다.
- TCCR0=0x00;은 타이머/카운터 0를 초기 상태로 정지시킨다.
- TIMSK=0x01;은 타이머/카운터 0 오버플로우 인터럽트를 허용한다.
- EICRA=0x0a;와 EIMSK=0x03;은 외부 인터럽트 0 및 1을 Falling Edge에 대해 설정하고 허용한다.
- lcd_init(16);은 16글자 짜리 CLCD를 초기화한다.
- lcd_clear();는 CLCD를 지운다.
- SREG=0x80;는 전체 인터럽트를 허용한다.
5. 메인 루프:
- while(1)은 무한 루프를 나타낸다.
- lcd_gotoxy(0,0);은 CLCD의 출력 위치를 설정한다.
- sprintf(lcd, \"TCNT0 : %03d\", TCNT0);은 TCNT0 레지스터의 값을 문자열로 변환하여 lcd 배열에 저장한다.
- lcd_puts(lcd);은 lcd 배열의 내용을 CLCD에 출력한다.
- 이어서 lcd_gotoxy(0,1);과 sprintf(lcd2, \"OVF CNT : %d\", count);는 두 번째 줄에 오버플로우 카운트를 출력하는 비슷한 작업을 수행한다.
3-5. 실습 문제 : Timer를 이용한 1초 점등 LED 구현
3-5-1. 실습 문제의 코드
CTC 모드 원리
① TCNT0 = OCR0이면 그 다음 클럭 사이클에서 TCNT0 값은 0으로 클리어한다.
② 항상 0x00 ~ OCR0의 값으로 계수 동작이 반복하여 수행한다.
③ TCNT0 레지스터의 카운트 값이 증가하다가 OCR0의 값과 일치한 후 다음 클록에서 0x00으로 바뀌는 순간 출력 비교 인터럽트가 발생한다.
1초를 구하는 방법
① 16MHz / 256분주 = 62.5KHz
② 62.5KHz를 250분주를 위해 OCR0 값을 249으로 저장해두면,
62.5KHz / (249+1)분주 = 250
③ 즉 1초당 250회 출력 비교 인터럽트가 발생하게 된다.
초기화
① CTC 모드는 WGM00 : WGM01 = 0 : 1으로 설정
② OC0핀으로 출력 않음 : COM01 : COM00 = 0 : 0으로 설정
③ 분주비 256 : CS02 : CS01 : CS00 = 1 : 1 : 0
④ OCR0 값 설정 : 249
4. 오차 및 분석
- 이번 실험에서는 오차가 일어나지 않았다. 실험 결과가 예상대로 완벽하게 나왔다.
나머지는 내가 생각한 다른 가능성들이다.
- 첫째로, 소자의 불확실성이다. 이번 강의에 사용한 소자는 우리 학교 랩실 인원들이 하나하나 직접 기판에 납땜을 한 소자로서, 그 과정에서 소자가 손상됐을 가능성이 존재한다.
(실제로, 첫 시간에 저항과 전구 등을 납땜하고 노트북과 연결하여 작동을 확인 할 당시, 8개의 전구 중 하나가 계속 불이 들어오지 않아 당황했었는데, 2시간의 피드백 끝에, ATmega128 소자 불량으로 파악되었다. 자세하게는, 49번 핀인 PA2 부분이 제대로 납땜이 되어 있지 않았던 것이다. 그 부분을 인두기로 다시 제대로 납땜하니, 전구는 정상적으로 들어왔다.)
- 둘째로, 점퍼선(와이어)에서도 저항은 존재한다는 것이다. 그러므로 전류가 그 점퍼선(와이어)을 이동하면서 자연스럽게 그 점퍼선 상에 있는 자그마한 저항의 영향을 받기 때문에 시뮬레이션의 결과처럼 이상적이론적 결과는 현실적으로는 불가능하기 때문에 오차가 생긴 것이라고 생각한다.
- 셋째로는, 점퍼선(와이어)의 결함이라고 생각한다.
소자와 소자 사이를 이을 때, 우린 보통 래핑 와이어를 사용하는데, 절연 소자로 감싸져있는 와이어 속이 미세하게 끊어져 있을 수도 있고, 또는 납땜하는 과정에서 미세하게 전류가 통하지 않게 납땜을 했을 가능성 또한 배제할 수 없다고 생각한다.
  • 가격3,000
  • 페이지수17페이지
  • 등록일2024.11.04
  • 저작시기2023.11
  • 파일형식한글(hwp)
  • 자료번호#1527852
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니