LED 실습 1

Download Report

Transcript LED 실습 1

마이크로프로세서설계 - 3
ATmega128 마이크로컨트롤러의 특징
LED 실습 1
시스템및센서네트워크연구실
1
ATmega128 마이크로컨트롤러의 특징
시스템및센서네트워크연구실
2
ATmega128의 특징
 고성능의 저전력 RISC 구조
 133개 명령어 (대부분 한 사이클로 실행)
 32*8 비트 범용 작업 레지스터
 16MHz에서 16MIPS 명령 처리 속도, 곱셈기 2사이클 실행
 데이터 및 비휘발성 메모리
 128K 바이트 ISP 방식 프로그램용 플래시 메모리
 4K 바이트 SRAM, 4K 바이트 EEPROM
 64K 바이트 메모리
 주변장치
 ISP 기능을 갖는 SPI 인터페이스
 JTAG 인터페이스
 53개의 IO핀
 리셋을 포함한 35개의 인터럽트 소스
시스템및센서네트워크연구실
3
 프리스케일러를 갖는 2개의 8비트 타이머/카운터, 2개의 16비트 타이머/
카운터
 8채널 10비트 AD 컨버터와 아날로그 비교기
 TWI, SPI 인터페이스, 2개의 USART
 독립적인 내장 발진기에 의한 워치독 타이머
 특수 기능
 6개의 슬립 모드
 내부 RC 오실레이터와 외부 크리스탈을 연결하기 위한 발진회로 내장
 외부, 내부 인터럽트 소스
 동작 전압
 2.7-5.5V (128L), 4.5-5.5V (128)
 동작 클럭
 0-8MHz (128L), 0-16MHz (128)
시스템및센서네트워크연구실
4
ATmega128 마이크로컨트롤러의 특징
 AVR 8비트 RISC Mega 시리즈 비교
시스템및센서네트워크연구실
5
명령 실행 타이밍의 특징
 특징
 하버드 아키텍처 : 데이터버스와 어드레스버스 분리
 파이프라인 개념 : 병렬 방식의 명령 패치와 명령 실행
 1MHZ에서 1MIPS 이상의 속도 가능
 단일 클럭에 레지스터 오퍼랜드 패치, ALU 연산 실행, 결과 저장이 이루
어짐
시스템및센서네트워크연구실
6
ATmega128의 메모리 구조
 Flash program memory
 application flash section
 64K * 16 bit
 instruction (명령어) – 16비트 또는 32비트
 SPI 통신을 이용한 ISP, JTAG, 병렬 프로그래밍 방식
 10,000번의 쓰기 및 삭제 가능
 SRAM
 32 registers
 64 IO registers
 160 Extended IO registers
 4096 internal SRAM : 내부 데이터 메모리
 64K external SRAM
 EEPROM data memory
 4K byte data EEPROM
시스템및센서네트워크연구실
7
주요 레지스터
 상태 레지스터(1개)
 I (global interrupt enable)
 H (half carry flag)
 V (2’s complement overflow flag)
 N (negative flag)
 Z (zero flag)
 C (carry flag)
 범용 레지스터 (32개)
 R0 – R31
 X, Y, Z 레지스터 (X:R26-27,Y:R28-29,Z:R30-31)
 스택 포인터 (16비트)
 IO register 영역내에 존재
시스템및센서네트워크연구실
8
 IO 레지스터 (p71 Table 3-1, Table 3-2)
 IO 레지스터를 이용하여 마이크로컨트롤러의 주변장치, 특수기능 등을
사용
 IO 레지스터의 설정에 따라, 마이크로컨트롤러의 핀이 규정된 기능으로
동작함
• DDRB = 0b11111111;
// PORTB 출력 설정
• PORTB = 0b11111111; // PORTB high 출력
시스템및센서네트워크연구실
9
시스템및센서네트워크연구실
10
LED 출력 연습 1
- LED 부품
- sink 전류, source 전류
- LED 실습 회로
- PORT 관련 레지스터
- LED 실습
시스템및센서네트워크연구실
11
LED 부품
 LED 데이터 시트
 Vf (forward voltage) : 2.2V(Typ.) / 2.8V(Max.) at 20mA
• 순방향 전압강하 : LED를 지나면서 발생하는 전압강하
(LED 양단에 걸리는 전압)
 Vr (reverse voltage) : 5V
 LED를 켜기 위한 저항 계산
 LED에 걸리는 전압 : 2.2V
 저항에 걸리는 전압 : Vcc – 2.2 V
 I = VR/R = 2.8 / 470 = 6mA
+5V
470Ω
시스템및센서네트워크연구실
12
sink 전류, source 전류
 sink 전류
 uC나 IC의 출력 단자의 능력을 평가할 때 사용되는 용어로, 들어갈 수 있
는 전류량
 전원(+5V)에서 부하를 거쳐 출력(low)으로 흐를 때, 출력은 외부 전류를
받아들이는 입장이 되는 데, 이 때를 싱크라 하고, 여기서 흘릴 수 있는 최
대 전류가 싱크전류
AVR
+5V
 source 전류
 uC나 IC에서 꺼집어 낼 수 있는 전류량
 출력이 +5V가 나와서 부하를 거쳐 GND로 전류가 흐를 때 출력에서 낼
수 있는 최대 전류값
AVR
시스템및센서네트워크연구실
13
sink/source 전류 회로의 선택
 uC나 IC의 소스 전류가 작은 경우
 74LS14 TTL IC : sink 8mA, source 0.4mA
 10mA 또는 20mA를 요구하는 LED를 source 전류 회로로 구동하는 것은
불가능
 LED를 sink 전류 회로로 연결
 uC의 소스 전류가 충분한 경우
 AVR : sink 40mA, source 40mA
 source 전류 회로를 이용하여 LED를 직접 구동하는 것이 가능
 다만, 다수의 LED를 구동하는 경우, uC의 발열 등에 의하여 회로의 안전
성을 해칠 우려가 있음
 이에 따라, sink 전류 회로로 연결하는 것이 권장사항임
시스템및센서네트워크연구실
14
LED 실습 회로
+5V
PC0
PC1
…..
PC7
시스템및센서네트워크연구실
15
ATmega128 IO Port 의 특징
 Atmega128 IO port의 특징
 6개의 8비트 양방향 병렬 IO 포트 (A, B, C, D, E, F)
 1개의 5비트 양방향 병렬 IO 포트 (G)
 각 핀은 보호용 다이오드와 20-100kΩ의 내부 풀업 저장을 가짐
 LED를 직접 구동할 수 있는 40mA의 source, sink 출력 능력을 가짐
 IO 포트의 다른 기능
 Port A : ADx - 데이터버스와 어드레스 하위 바이트
 Port B : 타이머/카운터, SPI 직렬 통신
 Port C : Ax – 어드레스 상위 바이트
 Port D : 시리얼 통신, 외부 인터럽트, 타이머/카운트, 외부 메모리
 Port E : 타이머/카운터, 외부 인터럽트, USART0, 외부 메모리
 Port F : A/D 컨버터, JTAG 인터페이스
 Port G : 타이머/카운터, 외부 메모리
시스템및센서네트워크연구실
16
PORT 관련 레지스터
 IO register
 PORTx (port x data register) : 포트 x 데이터 출력 레지스터
• 초기값 0
 DDRx (port x data direction register) : 포트 x 데이터 방향 설정 레지스터
• 초기값 0
 PINx (port x pin input address) : 포트 x 입력 레지스터
• 초기값 N/A
• 읽기만 가능
 포트핀의 동작 상태
 DDRx – 1, PORTx – 0 : 출력, low 출력 (sink 출력)
 DDRx – 1, PORTx – 1 : 출력, high 출력 (source 출력)
시스템및센서네트워크연구실
17
시스템및센서네트워크연구실
18
실습 1
// PORTB를 이용하여 LED 1개 점등
// 소스 전류 회로일 때, LED를 점등하려면 PORTB의 값은 ?
// 싱크 전류 회로일 때, LED를 점등하려면 PORTB의 값은 ?
#include <mega128.h>
// mega128 마이크로콘트롤러 관련 헤더 파일
void main(void)
{
DDRB = 0xFF;
// DDRB : 포트 방향 설정 레지스터
while(1){
PORTB = 0b11111111;
// while(1) : 무한 루프
// PORTB : 포트 입출력 레지스터
// 소스 전류 회로일 때 켜지는가?
// 싱크 전류 회로일 때 켜지는가?
}
}
시스템및센서네트워크연구실
19
실습 2
// PORTD를 이용하여 LED 1개 0.8, 0.2초 간격으로 점멸
// 소스 전류 회로와 싱크 전류 회로로 바꾸어 가면서 실험해 볼 것
// PD0, PD3, PD5번으로 바꾸어 가면서 LED를 연결하고, 해당 비트만 변경해 볼 것
#include <mega128.h>
#include <delay.h>
void main(void)
{
DDRD = 0xFF;
while(1){
PORTD = 0b00000001;
delay_ms(800);
PORTD = 0b00000000;
delay_ms(200);
}
// mega128 마이크로콘트롤러 관련 헤더 파일
// delay 함수 정의 헤더 파일
// DDRD : 포트 방향 설정 레지스터
// DDRD = 0x00 일 때 결과는 ?
// while(1) : 무한 루프
// 해당 비트만 on/off 해 볼 것!
// delay 함수
// 해당 비트만 on/off 해 볼 것!
// delay 함수
}
시스템및센서네트워크연구실
20
실습 3
// PORTC를 이용하여 LED 8개 0.8, 0.2초 간격으로 점멸
#include <mega128.h>
#include <delay.h>
void main(void)
{
DDRC = 0xFF;
// mega128 마이크로콘트롤러 관련 헤더 파일
// delay 함수 정의 헤더 파일
// DDRC : 포트 방향 설정 레지스터
while(1){
PORTC = 0b11111111;
delay_ms(800);
PORTC = 0b00000000;
delay_ms(200);
}
// while(1) : 무한 루프
// PORTC : 포트 입출력 레지스터
// delay 함수
// PORTC : 포트 입출력 레지스터
// delay 함수
}
시스템및센서네트워크연구실
21
실습 4
// PORTC를 이용하여 LED 8개 중 짝수/홀수 LED 0.5초 간격으로 점멸
#include <mega128.h>
#include <delay.h>
// mega128 마이크로콘트롤러 관련 헤더 파일
// delay 함수 정의 헤더 파일
void main(void)
{
DDRC = 0xFF;
// DDRC : 포트 방향 설정 레지스터
while(1){
PORTC = 0b01010101;
delay_ms(500);
PORTC = 0b10101010;
delay_ms(500);
}
// while(1) : 무한 루프
// PORTC : 포트 입출력 레지스터
// delay 함수
// PORTC : 포트 입출력 레지스터
// delay 함수
}
시스템및센서네트워크연구실
22