Switch 실습 1

Download Report

Transcript Switch 실습 1

마이크로프로세서설계 – 5
시스템 관련 회로
스위치 입력 실습 1
시스템및센서네트워크연구실
1
ATmega128
시스템및센서네트워크연구실
2
LED sink 회로
PC0
+5V
PC1
…..
PC7
시스템및센서네트워크연구실
3
시스템및센서네트워크연구실
4
시스템 관련 회로
- 시스템 클럭 / 클럭 발생 회로
- 전원 회로
- 리셋 회로
시스템및센서네트워크연구실
5
시스템 클럭
 시스템 클럭
 마이크로컨트롤러의 기능들은 일정한 클럭 신호에 따라서 동작을 하는
데, 이러한 클럭을 시스템 클럭이라 함
 어셈블리 명령어 한 개가 1 시스템 클럭에 동작
 시스템 클럭은 다양한 클럭 소스를 이용하여 발생시킴
• 외부 크리스탈/세라믹 레조네이터 사용 – 주로 사용
• 외부 저주파 크리스탈 사용
• 외부 RC 오실레이터 사용
• 내부 RC 오실레이터 사용
• 외부 클럭
시스템및센서네트워크연구실
6
클럭 발생
 클럭 발생 회로 (p14 Fig. 1-1)
 16MHz 크리스탈/세라믹 레조네이터 발진기
 XTAL1, XTAL2에 연결
 콘덴서 c1, c2 권장값 (table 3-13)
• 16MHz 클럭에서 12-22 (20)pF 사용
 16MHz 크리스탈 또는 세라믹 레조네이터 사용시
• Fuse byte 중 CKOPT -> 1, CKSLE3..1 -> 101, 110, 111로 설정
• 퓨즈 비트는 컴파일러에서 클럭 선택시 자동으로 설정됨
XTAL2
c1
20p
시스템및센서네트워크연구실
16MHz
XTAL1
c2
20p
7
전원 및 리셋
 전원 관련 회로 (p14 Fig. 1-1)
 관련 핀 : VCC,GND, AVCC, AGND, /RESET
 VCC – 5V 전원, 충분한 전원 공급을 위하여 모든 VCC 연결
 GND – 접지
 AGND – GND와 접지
 AVCC – ADC의 전원, ADC 사용을 위하여 VCC 연결
 리셋 회로 (p14 Fig. 1-1)
 1.5us 이상의 low 신호 인가시 리셋
5V
 리셋시 프로그램이 처음부터 다시 시작됨
10K
/RESET
시스템및센서네트워크연구실
8
스위치 입력 연습
- 풀업저항, 풀다운저항
- 스위치 실습 회로
- PORT 입력 관련 레지스터
- 스위치 실습
시스템및센서네트워크연구실
9
풀업 저항, 풀다운 저항
 풀업 저항(pullup resistor), 풀다운 저항(pulldown resistor)
 논리적으로 H레벨 상태를 유지하기 위하여 신호의 입력 또는 출력단자
와 전원 단자 사이에 접속하는 저항을 풀업 저항이라 함
 논리적으로 L레벨 상태를 유지하기 위하여 신호의 입력 또는 출력 단자
와 접지 단자 사이에 접속하는 저항을 풀다운 저항이라 함
풀업 저항
시스템및센서네트워크연구실
풀다운 저항
10
풀업/풀다운 저항의 사용 이유
 풀업/풀다운 저항의 사용 이유
 입력단 회로에서의 풀업/풀다운 저항
• 입력 논리값을 H, L로 올바르게 인가하려는 경우
• 현재는 입력 신호를 사용하지 않으나 나중에 사용할지도 모르는 경우
 출력단 회로에서의 풀업/풀다운 저항
• 출력 전류를 증대시키려는 경우
 초기값을 정확하게 부여하기 위한 풀업/풀다운 저항
시스템및센서네트워크연구실
11
L 스위치 입력과 풀업 저항
 입력 논리값을 H, L로 올바르게 인가하려는 경우
 그림 1의 (a)
• 스위치를 누른 상태에서는 L 상태
• 오픈 상태에서는 L도 H도 아닌 상태가 되어 불안한 동작 상태가 됨
 그림 1의 (b)와 같이 풀업 저항을 달아주면,
• 스위치를 누르면 확실한 L 상태
• 스위치를 놓으면 확실한 H 상태
 수 mA 이내로 전류가 흐르도록 수 K옴의 저항 선정
시스템및센서네트워크연구실
12
H 스위치 입력과 풀다운 저항
 입력 논리값을 H, L로 올바르게 인가하려는 경우
 그림 2의 (a)
• 스위치를 누른 상태에서는 H 상태
• 오픈 상태에서는 L도 H도 아닌 상태가 되어 불안한 동작 상태가 됨
 그림 2의 (b)와 같이 풀다운 저항을 달아주면,
• 스위치를 누르면 확실한 H 상태
• 스위치를 놓으면 확실한 L 상태
 수 mA 이내로 전류가 흐르도록 수 K옴의 저항 선정
시스템및센서네트워크연구실
13
나중에 입력신호가 사용될 것을 고려한 풀업 저항
 (a)와 같이 설계하는 경우
 (c)와 같이 스위치를 추가하는 경우 (c)는 전원이 숏트가 되어 쓸 수 없음
 (b)와 같이 풀업 저항을 추가하여 설계하는 경우
 (d)와 같이 스위치를 추가하면, L 스위치 입력 회로가 됨
시스템및센서네트워크연구실
14
출력 전류를 증대시키는 풀업 저항
 H 상태 출력시의 동작
 부하 전류(출력 전류)를 증가시키기 위한 목적
 소자의 전류 + 저항전류가 외부 소자로 출력됨
시스템및센서네트워크연구실
15
초기값을 정확히 부여하기 위한 풀다운 저항
 초기 출력 데이터를 0x00로 지정하기 위한 풀다운 저항
 전원을 투입하는 초기에는 모든 IC의 내부 동작이 불안한 영역이 발생할
수도 있음
 D/A 입력 조건은 확실한 H 신호가 들어올 때까지는 L로 유지하고 있으라
는 의미
 수 mA 이내로 전류가 흐르도록 수 K옴의 저항 선정
시스템및센서네트워크연구실
16
스위치 실습 회로
5V
10K
PD2
104 (0.1uF)
시스템및센서네트워크연구실
17
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 출력 회로)
 DDRx – 0, PINx – 0 : 입력, low 입력 (풀업 저항)
 DDRx – 0, PINx – 1 : 입력, high 입력 (풀다운 저항)
시스템및센서네트워크연구실
18
실습 1
// PD2를 이용하여 스위치 입력
// PC0를 이용하여 LED를 스위치 입력값에 따라 점등
// 풀업 저항과 풀다운 저항 방식으로 연결하면, 스위치를 누를 때 어떻게 변하는가?
// LED는 소스 회로 연결
#include <mega128.h>
// mega128 마이크로콘트롤러 관련 헤더 파일
void main(void)
{
char key;
DDRD = 0b00000000;
DDRC = 0b00000001;
// PD2 입력 설정
// PC0 출력 설정
while(1){
key = PIND & 0b00000100;
key >>= 2;
PORTC = key;
// while(1) : 무한 루프
// PD2 값 읽어오기 – 비트 마스킹 기능
// 풀업 저항에서 누르면 00000000, 누르지 않으면 00000100
// 풀다운 저항에서 누르면 00000100, 누르지 않으면 00000000
// 2번 비트가 0번 비트 자리에 오도록 쉬프트 연산
// PORTC 출력
// 풀업 저항에서 01과 XOR
}
}
시스템및센서네트워크연구실
19
실습 2
// PD2를 이용하여 스위치 입력
// PC0를 이용하여 LED를 스위치 입력값에 따라 점등
// 풀업 저항과 풀다운 저항 방식으로 연결하면, 스위치를 누를 때 어떻게 변하는가?
// LED는 싱크 회로 연결
#include <mega128.h>
// mega128 마이크로콘트롤러 관련 헤더 파일
void main(void)
{
char key;
DDRD = 0b00000000;
DDRC = 0b11111111;
// PD2입력 설정
// PORTC 출력 설정
while(1){
key = PIND & 0b00000100;
key >>= 2;
PORTC = key ^ 0xFE;
// while(1) : 무한 루프
// PD2 값 읽어오기 – 비트 마스킹 기능
// 2번 비트가 0번 비트 자리에 오도록 쉬프트 연산
// 풀업 저항에서 누르면 00000000, 누르지 않으면 000000001
// 풀다운 저항에서 누르면 00000001, 누르지 않으면 000000000
// PORTC 출력 – 반전시켜 출력
// 풀업 저항에서 FE와 XOR
// 풀다운 저항에서 FF와 XOR
}
}
시스템및센서네트워크연구실
20
실습 3
// PD1(SW1), PD2(SW2)를 이용하여 스위치 입력
// PORTC의 0, 1번 비트에 SW1, SW2의 값을 출력
// 스위치는 풀업 저항, LED는 싱크 회로 연결
#include <mega128.h>
// mega128 마이크로콘트롤러 관련 헤더 파일
void main(void)
{
char key;
DDRD = 0b00000000;
DDRC = 0b00000011;
// PD1, 2 입력 설정
// PORTC 출력 설정
while(1){
key = PIND & 0b00000110;
key >>= 1;
PORTC = key ^ 0b11111100;
// while(1) : 무한 루프
// PD2, PD3 값 읽어오기 – 비트 마스킹 기능
// 2번 비트가 0번 비트 자리에 오도록 쉬프트 연산
// 풀업 저항에서 누르면 00000000, 누르지 않으면 00000011
// PORTC 출력 – 반전시켜 출력
}
}
시스템및센서네트워크연구실
21
실습 4
// PORTC의 LED가 순차 점멸되고 있는 도중에 SW1(PD2)를 누르면 전체 점등, SW1을 누르지 않으면 다시 순차 점멸
char key, led, led_all;
DDRD = 0b00000000;
// PD2 입력 설정
DDRC = 0b11111111;
// PORTC 출력 설정
led_all = 0b11111111;
led = 0b11111110;
PORTC = led;
while(1){
key = PIND & 0b00000100;
if(key != 0) {
led = (led<<1) | 0b00000001;
if(led == 0xFF) led = 0xFE;
PORTC = led;
}
if(key == 0) {
PORTC = led_all;
led_all ^= 0b11111111;
}
delay_ms(500);
}
시스템및센서네트워크연구실
// while(1) : 무한 루프
// PD2 값 읽어오기 - 비트 마스킹 기능
// 키가 눌러지지 않았을 때
// 왼쪽 쉬프트 순차 점멸
// 키가 눌러졌을 때
// led_all값 반전
22
Switch 문
 중첩된 if 문에서 조건식이 정수형의 등호식이라면
시스템및센서네트워크연구실
23
실습 5
// PD1(SW1), PD2(SW2) 값에 따라 PORTC 다른 값 출력
char key;
DDRD = 0b00000000;
DDRC = 0b11111111;
while(1){
key = PIND & 0b00000110;
switch(key) {
case 0b00000100 :
PORTC = 0b00001111;
break;
case 0b00000010 :
PORTC = 0b11110000;
break;
default:
PORTC = 0b11111111;
break;
}
}
시스템및센서네트워크연구실
// PD1, 2 입력 설정
// PORTC 출력 설정
// while(1) : 무한 루프
// PD1, PD2 값 읽어오기 – 비트 마스킹 기능
// SW1이 눌러진 경우, PD1=0, PD2=1
// PORTC의 상위 4비트 on
// SW2가 눌러진 경우, PD1=1, PD2=0
// PORTC의 하위 4비트 on
// 스위치가 눌러지지 않은 경우
// PORTC의 모든 비트 off
24