28
29/49 ATmega128 I/O 핀의 구조 ATmega128의 디지털 입출력을 위한 핀 구조 Section 04 ATmega128의 포트 구성과 레지스터를 이용한 인터페이스

레지스터를 이용한 인터페이스 - KOCWelearning.kocw.net/contents4/document/lec/2013/Mokwon/... · 2014-03-25 · • 스위치 S0, S1, S2가 눌릴 때 led D0, D1, D2가

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

29/49

ATmega128 I/O 핀의 구조

ATmega128의 디지털 입출력을 위한 핀 구조

Section 04 ATmega128의 포트 구성과 레지스터를 이용한 인터페이스

풀업(Pull-up) 저항

풀다운(Pull-down) 저항

35/49

ATmega128 I/O 핀의 구조

ATmega128의 디지털 입출력을 위한 핀 구조

Section 04 ATmega128의 포트 구성과 레지스터를 이용한 인터페이스

36/49

Pxn 핀 방향 설정을 위한 레지스터 비트명과 신호

Pxn 핀 출력 설정

• DDxn(x는 A~G, n은 0~7) 플립플롭에 1을 기록

• Three-state Buffer는 정상적으로 동작

• PORTxn(x는 A~ G, n은 0~7) 플립플롭 값이 Pxn 핀으로 출력

Section 04 ATmega128의 포트 구성과 레지스터를 이용한 인터페이스

37/49

Pxn 핀 입력 설정

• DDxn(x는 A~G, n은 0~7) 플립플롭에 0을 기록

• Three-state Buffer는 고저항(High-impedance) 상태

• Pxn 핀의 디지털 전압레벨은 슈미트 트리거 버퍼를 통해 잡음에 둔감

• PINx 레지스터의 PINxn 비트를 읽는 순간, 내부 데이터 버스로 입력

• 내부 풀업저항 연결

» PUD는 0이고, PORTxn이 1이면 내부 풀업용 스위칭 트랜지스터가 ON되어 내부 풀업저항 연결

• 내부 풀업저항 개방

» PUD는 1 혹은 PORTxn이 0이면 내부 풀업용 스위칭 트랜지스터가 OFF되어 풀업저항이 연결되지 않음

Section 04 ATmega128의 포트 구성과 레지스터를 이용한 인터페이스

38/49

ATmega128 디지털 I/O 레지스터 역할과 포트 구성

DDRx 레지스터

• 데이터 방향 레지스터(Data Direction Register)로서, 포트에 포함된 핀의 입출력 방향 결정

PORTx 레지스터

• 포트에 대한 데이터 레지스터(Data Register)

• 출력 방향일 때, 논리값을 디지털 전압레벨로 출력

• 0이 되어 핀이 입력 방향일 때, PORTxn 값이 1로 설정되면 ATmega128 내부에서 Pxn 핀에 풀업저항 연결

PINx 레지스터

• 입력 핀 레지스터

• 핀이 입력 방향일 때, 핀의 디지털 전압레벨을 논리값으로 읽음

Section 04 ATmega128의 포트 구성과 레지스터를 이용한 인터페이스

39/49

레지스터와 포트 구성

• 53개 Pxn과 연결된 DDRx, PORTx, PINx 레지스터가 8비트 버스와 연결

• A포트에서 F포트까지는 DDRx 레지스터, PORTx 레지스터, PINx 레지스터가 8비트로 구성

• G포트는 하위 5비트만 사용할 수 있게 구성

Section 04 ATmega128의 포트 구성과 레지스터를 이용한 인터페이스

40/49

DDRx, PORTx, PINx 레지스터

• DDRx 레지스터의 초깃값이 0이므로 최초 설정은 모두 입력

• 입력인 상황에서 PORTx 레지스터의 초깃값이 0

• Pxn 핀은 풀업저항이 연결되지 않은 고저항(High-impedance)인 입력 핀

• Pxn 핀에 인가되는 초기 전압은 예측할 수 없어 PINx 초깃값이 N/A

Section 04 ATmega128의 포트 구성과 레지스터를 이용한 인터페이스

41/49

입출력 방향 설정과 논리값 출력 방법

출력 핀 설정과 논리값을 디지털 전압레벨로 출력

Section 05 논리값과 I/O 핀의 디지털 전압레벨과 변환

42/49

입력 핀 설정과 I/O 핀의 디지털 전압레벨을 논리값으로 입력

• PINxn 입력 핀의 전압레벨 검사

» HIGH 디지털 전압레벨 : 0이 아닌 값(TRUE) » LOW 디지털 전압레벨 : 0(FALSE)

Section 05 논리값과 I/O 핀의 디지털 전압레벨과 변환

43/49

#include <avr/io.h> 문장을 프로그램 앞에 넣어 정의된 레이블 사용

• DDxn, Pxn, PINxn 모두 같은 상수로 정의 되어 있음

• 간단히 Pxn으로 사용해도 무방

Section 05 논리값과 I/O 핀의 디지털 전압레벨과 변환

44/49

디지털 I/O 핀의 입출력을 위한 비트 매스킹

DDRx 레지스터, PORTx 레지스터, PINx 레지스터의 비트 설정

상수를 사용한 핀 방향 설정

Section 05 논리값과 I/O 핀의 디지털 전압레벨과 변환

• 출력 방향 설정 핀 : PA7, PA6, PA5, PA4

• 입력 방향 설정 핀 : PA3, PA2, PA1, PA0

• 하나 또는 두 핀만의 방향을 설정하려고 해도 8비트 모두 설정

• 다른 비트들보다 앞서 설정된 정보 추적이 필요

• 가독성이 떨어짐

45/49

비트 명칭과 비트 연산을 사용한 핀 방향 설정

• 다른 비트와 상관없이 비트 7과 비트 6만을 1로 만들 수 있음

• 기존 비트 설정을 추적할 필요가 없음

• C 언어 실행 순서에 따라 연산

Section 05 논리값과 I/O 핀의 디지털 전압레벨과 변환

46/49

Section 05 논리값과 I/O 핀의 디지털 전압레벨과 변환

47/49

출력 포트 설정 값 변경 (하위 4비트는 그대로 둔 채 상위 4비트를 clear, update)

❶ 괄호부터 처리 PORTA와 0xF를 AND시켜 0 위치를 클리어함

Section 05 논리값과 I/O 핀의 디지털 전압레벨과 변환

❷ 1 << PA7

❸ 1 << PA6

48/49

❹ (PORTA & 0xF) | 1 << PA7 | 1 << PA6

• PORTA의 8비트 중 상위 4비트 PA7, PA6, PA5, PA4 핀만 갱신

» 갱신 전압레벨은 HIGH, HIGH, LOW, LOW » PA3, PA2, PA1, PA0는 출력값이 변하지 않음

Section 05 논리값과 I/O 핀의 디지털 전압레벨과 변환

49/49

PINx 레지스터로 특정 핀의 논리값을 변수값으로 받아들이는 방법

• 입력 PA7, PA6 두 핀의 디지털 전압레벨을 value의 하위 두 비트로 입력

❶ DDRA = DDRA & ~(1 << PA7) & ~(1 << PA6);

» A포트의 PA7과 PA6 핀은 입력 방향으로 설정

❷ PINA >> PA6

» >>의 논리 천이 동작이 PA6회, 즉 6회 수행될 때 최상위 비트는 0으로 채워짐 » value 변수는 PA7, PA6 핀의 논리값을 하위 비트로 갖게 됨

Section 05 논리값과 I/O 핀의 디지털 전압레벨과 변환

50/49

PINx 레지스터로 특정 핀의 디지털 전압레벨 판정

• if(조건식) 문에서 조건식이 0이면 거짓, 0이 아니면 참으로 판별

» PA5 핀이 HIGH 전압레벨이면, 조건식이 0이 아니므로 참 » PA5 핀이 HIGH 전압레벨이면, 조건식이 0이므로 거짓

Section 05 논리값과 I/O 핀의 디지털 전압레벨과 변환

51/49

ATmega128에 연결된 회로의 디지털 입출력 설정

상수를 사용한 입출력 핀 방향 설정

비트 명칭을 사용한 핀 방향 설정

Section 05 논리값과 I/O 핀의 디지털 전압레벨과 변환

52/49

실험 목적

B포트에 연결된 스위치와 LED를 이용하여 입출력 동작 수행

• 스위치가 눌릴 때 LED ON

• 스위치 S0 LED D0, D1을 ON/OFF

• 스위치 S1 LED D2를 ON/OFF

• 스위치 S2 LED D3을 ON/OFF

스위치 동작

• 눌리지 않으면 HIGH 전압레벨

• 눌리면 LOW 전압레벨

Section 06 B포트를 이용한 LED 점멸

53/49

Section 06 B포트를 이용한 LED 점멸

<레이블 정의>

출력 핀 결정 (나머지는 입력)

S0 스위치 눌리면 참 D0, D1 LED 켬

D0, D1 LED 끔

54/49

LED 점멸 (video.zip 참고 / 4-6)

Section 06 B포트를 이용한 LED 점멸

55/49

조별 과제 : 프로그램 수정

• 스위치 S0, S1, S2가 눌릴 때 led D0, D1, D2가 각각 ON되도록 한다. 세 스위치가 모두 눌렸을 때는 led D3을 추가로 ON 시키고, 하나도 눌리지 않았을 때는 led D4를 ON 시키는 프로그램을 작성하고, 동작을 보여라.

Section 06 B포트를 이용한 LED 점멸

IT CookBook, 마이크로컨트롤러 AVR ATmega128