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

소개글

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

목차

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

본문내용

onfig(void): Timer/Counter1 설정 함수를 정의한다.
TCCR1A=0xC3;: Timer/Counter1 Control Register A(TCCR1A)를 설정한다. 비교 일치 시 1로 Set하고, Top에서 0으로 Clear하도록 구성한다.
TCCR1B=0x0B;: Timer/Counter1 Control Register B(TCCR1B)를 설정한다. 10비트 Fast PWM 모드를 선택하고 분주비를 32로 설정한다.
OCR1A=200;: Output Compare Register 1A(OCR1A) 값을 200으로 설정한다.
void Interrupt_init(void): 인터럽트 설정 함수를 정의한다.
EICRA=0x0A;: External Interrupt Control Register A(EICRA)를 설정한다. INT0와 INT1을 Falling edge에서 인터럽트를 발생시키도록 설정한다.
EIMSK=0x03;: External Interrupt Mask Register(EIMSK)를 설정한다. INT0와 INT1 인터럽트를 개별적으로 허용한다.
SREG|=0x80;: Global Interrupt Enable 비트를 설정하여 전역 인터럽트를 활성화한다.
void lcd_show(void): CLCD 출력 함수를 정의한다.
lcd_gotoxy(0,0);: CLCD 출력 좌표를 (0,0)으로 설정한다.
sprintf(lcd, \"OCR1A = %05d\", OCR1A);: 문자열 lcd에 OCR1A 값을 문자열로 변환하여 저장한다.
lcd_puts(lcd);: 설정한 CLCD 출력 좌표에 문자열 lcd를 출력한다.
interrupt[EXT_INT0]void ext_int0_isr(void): INT0 외부 인터럽트가 발생했을 때 실행되는 인터럽트 서비스 루틴을 정의한다. OCR1A 값을 증가시킨다.
interrupt[EXT_INT1]void ext_int1_isr(void): INT1 외부 인터럽트가 발생했을 때 실행되는 인터럽트 서비스 루틴을 정의한다. OCR1A 값을 감소시킨다.
void main(): main 함수의 정의를 시작한다.
lcd_init(16);: 16자리 CLCD를 초기화한다.
lcd_clear();: CLCD를 지운다.
DDRB=0x20;: PORTB의 5번 비트(PB5)를 출력 핀으로 설정하여 오실로스코프 측정을 수행한다.
Timer1_config();: Timer/Counter1 설정 함수를 호출한다.
Interrupt_init();: 인터럽트 설정 함수를 호출한다.
while(1): 무한 루프를 생성한다.
lcd_show();: CLCD 출력 함수를 호출하여 현재 OCR1A 값을 표시한다.
3-6 실습 결과
3-6 과제 결과 ( 듀티 사이클 50으로 맞추기)
3-6 과제 결과 ( 듀티 사이클 50으로 맞추기) 코드 분석
#include : ATmega128 관련 헤더 파일을 포함한다.
#include : printf() 함수를 사용하기 위한 표준 C 라이브러리 헤더 파일을 포함한다. (주석에서는 printf() 함수를 사용하지 않지만, 헤더 파일이 여전히 포함됨)
void Timer1(void): Timer1 함수를 정의한다.
TCCR1A = 0x82;: Timer/Counter1 Control Register A(TCCR1A)를 설정한다. 이 코드에서는 0x82 (이진수로 10000010)를 사용하여 비교 일치 시 OC1A 핀을 Clear (비트 7)하고, WGM11 비트를 설정한다.
TCCR1B = 0x1B;: Timer/Counter1 Control Register B(TCCR1B)를 설정한다. 이 코드에서는 0x1B (이진수로 00011011)를 사용하여 ICNC1 비트와 WGM12 비트를 설정한다.
ICR1 = 999;: Input Capture Register 1(ICR1) 값을 999로 설정한다. 이 레지스터는 TOP 값을 설정하며, 타이머가 1000까지 센 후 오버플로우를 발생시킨다.
OCR1A = 499;: Output Compare Register 1A(OCR1A) 값을 499로 설정한다. 이 레지스터는 비교 일치 패턴을 설정하며, OC1A 핀의 출력을 제어한다.
void main(): main 함수의 정의를 시작한다.
DDRB = 0xff;: PORTB 레지스터를 모두 출력 핀으로 설정한다. 이 코드는 PORTB의 8개 핀을 모두 출력으로 설정한다.
Timer1();: Timer1 함수를 호출하여 Timer1을 설정한다.
while(1) { }: 무한 루프를 생성한다. 프로그램은 여기서 멈추고 계속 실행된다.
4. 오차 및 분석
- 이번 실험에서는 오차가 일어나지 않았다. 실험 결과가 예상대로 완벽하게 나왔다.
나머지는 내가 생각한 다른 가능성들이다.
- 첫째로, 소자의 불확실성이다. 이번 강의에 사용한 소자는 우리 학교 랩실 인원들이 하나하나 직접 기판에 납땜을 한 소자로서, 그 과정에서 소자가 손상됐을 가능성이 존재한다.
(실제로, 첫 시간에 저항과 전구 등을 납땜하고 노트북과 연결하여 작동을 확인 할 당시, 8개의 전구 중 하나가 계속 불이 들어오지 않아 당황했었는데, 2시간의 피드백 끝에, ATmega128 소자 불량으로 파악되었다. 자세하게는, 49번 핀인 PA2 부분이 제대로 납땜이 되어 있지 않았던 것이다. 그 부분을 인두기로 다시 제대로 납땜하니, 전구는 정상적으로 들어왔다.)
- 둘째로, 점퍼선(와이어)에서도 저항은 존재한다는 것이다. 그러므로 전류가 그 점퍼선(와이어)을 이동하면서 자연스럽게 그 점퍼선 상에 있는 자그마한 저항의 영향을 받기 때문에 시뮬레이션의 결과처럼 이상적이론적 결과는 현실적으로는 불가능하기 때문에 오차가 생긴 것이라고 생각한다.
- 셋째로는, 점퍼선(와이어)의 결함이라고 생각한다.
소자와 소자 사이를 이을 때, 우린 보통 래핑 와이어를 사용하는데, 절연 소자로 감싸져있는 와이어 속이 미세하게 끊어져 있을 수도 있고, 또는 납땜하는 과정에서 미세하게 전류가 통하지 않게 납땜을 했을 가능성 또한 배제할 수 없다고 생각한다.
  • 가격3,000
  • 페이지수20페이지
  • 등록일2024.11.04
  • 저작시기2023.11
  • 파일형식한글(hwp)
  • 자료번호#1527851
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니