임베디드-05

기타튀김·2025년 5월 20일

임베디드

목록 보기
5/8
post-thumbnail

📘 Lecture 05 — Digital IO 정리 (강의자료 + 교수님 설명 반영)


✅ 1. 디지털 IO란?

임베디드 시스템에서 디지털 IO는 MCU가 외부 환경과 0 또는 1의 논리적 신호로 통신하는 가장 기본적인 수단이다.
여기서 0은 Low 전압 (보통 0V), 1은 **High 전압 (보통 VDD, 예: 3.3V)**를 의미한다.

● 입력 (Digital Input)

  • 스위치, 센서 등 외부 신호의 전기적 상태를 MCU가 읽는 역할을 한다.
  • MCU의 입장에선 "스위치가 눌렸는가?", "빛이 감지되었는가?"와 같은 물음을 해석하는 것과 같다.

● 출력 (Digital Output)

  • MCU가 핀의 전압을 조절하여 LED, 릴레이, 모터 등 외부 장치를 제어한다.
  • "LED를 켜라(1)", "모터를 멈춰라(0)"와 같이 구동 신호를 준다.

교수님 예시:
"스위치를 누르면 입력(0 또는 1)이 감지되고, LED를 켜라 → 출력(1)을 발생시킴"
이를 통해 GPIO 핀은 입력도 되고 출력도 되는 양방향 통신의 물리적 포트임을 알 수 있다.


✅ 2. 디지털 신호의 전압 기준

● 입력 전압 레벨

용어의미
VIL0으로 인식되는 최대 전압 (예: 0~0.8V)
VIH1로 인식되는 최소 전압 (예: 2.0~3.3V)
불확정 영역그 사이 전압 → 동작 보장 불가 (노이즈 발생 가능)

● 출력 전압 레벨

출력 상태설명
0 (Low)GND 또는 0V에 가까운 전압
1 (High)MCU의 공급 전압 VDD 수준 (예: 3.3V 또는 1.8V)

교수님 강조:
1.8V 동작 MCU에 5V 입력 신호를 연결하면 오버볼티지로 칩이 손상될 수 있다.
이때 필요한 것이 바로 **레벨 컨버터(level shifter)**이다.


✅ 3. 회로 설계 관점: 스위치와 LED의 연결

● 기본 회로 예

  • 스위치는 입력: 눌림 여부를 판단
  • LED는 출력: 켜짐 여부를 표시

![회로](강의자료 스위치+LED 회로도 기준)

교수님 설명 요약:
"스위치는 눌렀다(0)/안 눌렀다(1)의 입력 신호를,
LED는 껐다(0)/켰다(1)의 출력 신호를 의미한다.
MCU는 이 양방향 디지털 신호를 입출력 핀을 통해 처리한다."


✅ 4. Pull-up / Pull-down 저항

핀을 floating 상태로 두면 신호가 불안정해진다. 이를 방지하기 위해 내부 또는 외부 풀업/풀다운 저항을 사용한다.

방식설명입력 상태
Pull-upVDD 쪽으로 저항 연결기본값 High
Pull-downGND 쪽으로 저항 연결기본값 Low

교수님 예시:
"스위치가 안 눌렸을 때는 풀업 저항을 통해 High로 유지,
스위치를 누르면 GND로 연결되어 Low로 바뀐다."


✅ 5. 출력 회로에서 저항의 필요성

● LED 보호용 저항

LED는 동작 전압이 제한적이다. 예: 빨간 LED 1.8V, 파란 LED 2.7V
MCU가 3.3V 출력을 하면 저항이 없을 경우 과전류로 LED가 타버릴 수 있다.

● 저항 계산식

R=VDDVLEDILEDR = \frac{V_{\text{DD}} - V_{\text{LED}}}{I_{\text{LED}}}

예:

  • VDD = 3.3V
  • VLED = 1.8V
  • ILED = 20mA
R=3.31.80.02=75 ΩR = \frac{3.3 - 1.8}{0.02} = 75\ \Omega

✅ 6. PWM (Pulse Width Modulation)

디지털 출력의 On/Off 비율을 조절하여 아날로그처럼 동작하게 만드는 방식이다.

용도예시
밝기 조절LED 밝기 30%
속도 제어서보 모터 속도 50%

주기(Cycle) 중 On의 비율을 Duty Cycle이라 하며,
예: 10ms 중 5ms가 On이면 → Duty = 50%

교수님 예시:
“밤에는 LED 밝기를 5%만 주고 싶다면, PWM으로 Duty를 조절하면 된다.”


✅ 7. GPIO 컨트롤러 내부 구조

  • MCU 내부에는 핀을 제어하는 GPIO 컨트롤러가 존재함
  • GPIO는 메모리 주소로 맵핑되어 있으며, 해당 주소에 값을 쓰거나 읽어 동작시킴

● 기본 레지스터

레지스터역할
MODER입출력 방향 설정
ODR출력 데이터 설정
IDR입력 값 읽기
PUPDRPull-up / Pull-down 설정
OSPEEDR출력 속도 설정
OTYPER출력 타입(Open-drain, Push-pull)

✅ 8. MUX (Multiplexer)와 Pin 기능 선택

MCU의 각 핀은 멀티플렉서를 통해 다양한 기능(GPIO, ADC, UART 등)을 선택할 수 있다.

  • 핀 하나에 여러 기능이 할당되어 있으나, 설정에 따라 하나만 사용
  • 기능 설정은 **핀 제어 레지스터(PCR)**를 통해 수행

핀 수를 줄여 칩 크기와 가격을 줄이기 위한 일반적인 설계 기법이다.


✅ 9. 프로그래밍 방식

● 저수준 (레지스터 직접 접근)

#define GPIOD_MODER (*(volatile unsigned long*)0x40020C00)
GPIOD_MODER |= (1 << 24);  // PD12 출력으로 설정

→ 구조체 기반으로도 가능:

typedef struct {
  volatile uint32_t MODER;
  ...
} GPIO_TypeDef;

#define GPIOD ((GPIO_TypeDef *)0x40020C00)
GPIOD->MODER |= (1 << 24);

● 고수준: Mbed API

#include "mbed.h"

DigitalOut led(PA_5);

int main() {
    while (1) {
        led = !led;
        wait(0.5);
    }
}

✅ 10. BusIn / BusOut 클래스 (Mbed)

  • 여러 개의 DigitalIn/Out 핀을 묶어서 병렬 입출력을 할 수 있게 한다.
BusOut myleds(PA_5, PA_6, PA_7, PB_6);
myleds = 0b1010;  // 한 줄에 4개의 LED 출력값 설정
  • BusIn을 사용하면 여러 스위치를 한꺼번에 읽을 수 있음

✅ 11. 7-Segment Display 제어

  • 각 Segment는 하나의 LED처럼 취급됨
  • 총 8개 핀(A~G + 점)
  • BusOut으로 제어하면 숫자 패턴을 손쉽게 출력 가능

예: 숫자 8은 모든 Segment ON (0b1111111),
숫자 1은 B, C만 ON (0b0000110)


🧾 정리 요약

항목설명
Digital IOMCU가 외부 세계와 0/1 신호로 소통
GPIOGeneral-Purpose I/O, 핀을 통해 입출력
입력스위치, 센서 신호를 읽음
출력LED, 릴레이 등을 제어
Pull-up/down핀의 기본 상태를 유지함
PWM디지털로 아날로그처럼 동작 (밝기/속도 제어)
MUX핀에 다양한 기능을 선택적 할당
프로그래밍레지스터 직접 접근 or Mbed API 사용
BusIn/Out병렬 입출력 처리
7-SegmentLED를 디지털 패턴으로 구성된 숫자 표시장치
profile
부산대 정보컴퓨터공학부

0개의 댓글