본문 바로가기

스터디 상생플러스 2 - 1 (Atmega328 I/O 방향 설정 이론)

반응형

다음 포스트에서는 I/O 제어 방법을 다룰 예정입니다.(시기상으로 다음 포스트를 먼저 써버렸습니다.)

이번 포스트에서는 I/O 방향 설정하는 방법에 대해 알아볼 것입니다.

 

I/O 방향이란?

입력과 출력입니다.(들어오는 것과 나가는 것)

 

Atmega328에는 많은 핀들이 있습니다.

그 중에서도 PB0 ~ PB7, PD0 ~ PD7, PC0 ~ PC6라고 써있는 핀들은

입력(Input)과 출력(Output)을 할 수 있는 핀들입니다.

 

예를들어 PB0라는 핀은 입력 용도로, PB1이라는 핀은 출력 용도로 이런식으로 설정이 가능합니다.

이렇게 하면 PB0에는 센서들을 연결할 수 있고,

PB1에는 LED나 모터 같은 것들을 연결할 수 있죠.

 

이때 입력(들어오는 방향), 출력(나가는 방향)을 I/O 방향이라고 부르고

각 핀들(PB0, PB1...)에게 방향을 설정하는 것을 I/O 방향 설정이라고 부릅니다.

 

I/O 방향 설정 방법?

I/O 방향 설정은 CPU안에 특정한 레지스터(DDRD, DDRB, DDRC)들에 값을 넣으면 됩니다.

 

특정 레지스터들(DDRD, DDRB, DDRC)에는 PD0 ~ PD7, PB0 ~ PB7, PC0 ~ PC6 핀들의

I/O방향 정보가 들어 있습니다.(데이터를 저장해야합니다.)

더보기

DDRx(x = D, B, C)는 

Data Direction Register의 약자로

8bit의 크기를 가지며, 각 비트에는 Pxn(x = D, B, C)(n = 7 ~ 0)까지의

입/출력 방향에 관한 데이터가 들어 있다.

 

코드를 입력하기 전에는 모두 0값이 들어가 있기 때문에

각 핀들(PD0 ~ 7, PB0 ~7, PC0 ~6)은 입력 모드로 동작한다.

 

DDRD 설명

 

레지스터는 전자 부품의 한 종류이기 때문에 0 또는 1의 데이터를 저장할 수 있겠죠?

그리고 DDRD, DDRB, DDRC각각의 레지스터의 크기는 8bit,

즉 8개의 0 또는 1 값을 각각 저장할 수 있습니다.

 

 MCU에서는 1을 출력 방향, 0을 입력 방향으로 인식합니다.

예를 들어

DDRB에 11001011이라는 값이 들어 있다고 가정하면

PB7은 출력 모드(출력 방향) 1

PB6는 출력 모드(출력 방향) 1

PB5는 입력 모드(입력 방향) 0

PB4는 입력 모드(입력 방향) 0

PB3는 출력 모드(출력 방향) 1

PB2는 입력 모드(입력 방향) 0

PB1은 출력 모드(출력 방향) 1

PB0는 출력 모드(출력 방향) 1

이렇게 설정됩니다.

 

코드로 상으로는

DDRB = 11001011; //(이진수)

이렇게만 작성하면 위의 예시와 동일하게 작동합니다.

 

 

하드웨어적인 측면에서 보면 다음과 같습니다.

AVR CPU(안에 있는 I/O 레지스터)값이 Data Bus를 통해 PORT D, PORT B, PORT C로 이동되고,

각각의 PORT D, PORT B, PORT C는 내부 회로적으로 PD[0..7], PB[0..7], PC[0..6]의 방향을 정합니다.

 

 

 

반응형