입력·출력과 전압 조건
85분 안팎
학습 목표
가상 핀의 방향·풀업·활성 레벨·전압 허용 범위를 연결표로 제출합니다.
개념
논리 레벨을 배선 의미로 바꿉니다
센서 기록기에 버튼을 붙이기 전에 연결표를 작성합니다. 핀 번호 하나를 정하는 일에도 방향, 해제 상태, 눌림 상태, 허용 전압, 출력 부하라는 서로 다른 결정이 들어 있습니다. 앞 모듈의 PC HAL은 핀 0을 입력으로, 핀 1을 출력으로 고정했습니다. 이 숫자는 칩 패키지의 물리 핀 번호가 아니라 프로젝트 안의 논리 번호입니다. 같은 0을 보드 커넥터 번호로 받아 적지 않도록 연결표 제목에 PC 모형이라고 표시합니다.
이번 모듈은 Python 3 브라우저 시간표와 로컬 C 실습을 사용합니다. C 압축 파일은 각각 독립 폴더에 풀고 Makefile이 있는 위치에서 make test를 실행합니다. gcc 명령을 제공하는 컴파일러, make, Python 3 표준 라이브러리만 필요합니다. 맥에서는 gcc가 Apple Clang일 수 있으므로 gcc --version으로 확인해 기록합니다. starter는 기능 검사가 일부 실패하고 solution은 통과하는 구조입니다. 테스트 기대값을 바꾸지 않고 구현을 고칩니다.
따라하기의 출력은 Python 또는 solution의 C 실행을 직접 확인한 값입니다. PC에서는 RAM의 가짜 입력·출력 레지스터와 가상 밀리초를 사용하며 실제 MCU 주소를 역참조하지 않습니다. 핀 전압·전류·접점 파형은 계산하지 않습니다. 연결표는 실물 제작 완료 증거가 아니라 논리 계약과 추가 확인 항목을 정리한 산출물입니다. 코드 결과와 전기 검증의 범위를 분리해 설명하는 습관을 여기서 시작합니다.
방향과 활성 레벨을 따로 정합니다
입력은 외부에서 정한 신호를 읽는 방향이고 출력은 장치 쪽으로 레벨을 요청하는 방향입니다. 버튼 핀을 출력으로 두면 접점을 읽는다는 의도와 어긋납니다. 실제 배선에서는 출력 구동과 스위치 연결이 충돌할 가능성도 검토해야 합니다. 모형은 입력 핀에 쓰기와 출력 핀 읽기를 거부합니다. 실물 HAL을 작성할 때는 핀 mux와 방향 설정이 해당 칩 문서에 맞는지도 확인해야 합니다.
활성 레벨은 어떤 숫자를 동작으로 해석하는지 정한 약속입니다. 이번 버튼은 active-high라서 레벨 1을 눌림, 레벨 0을 해제로 해석합니다. LED도 active-high로 모델링해 1 요청을 점등으로 정합니다. 두 약속이 같다고 버튼 레벨을 LED에 곧바로 복사하지는 않습니다. LED는 이후 기록 모드를 나타내므로 버튼을 놓아도 기록 중이면 켜져 있어야 합니다. 전기 레벨과 사용자 상태를 분리합니다.
기본 설계의 버튼은 풀다운으로 해제 상태를 0에 둡니다. 스위치가 닫히면 같은 전원 영역의 높은 레벨에 연결되는 배선을 상정합니다. 풀다운 저항은 스위치가 열렸을 때 입력 전위를 낮은 쪽에 정하는 역할입니다. PC에서는 저항을 계산하는 API 대신 fixture가 0을 주입합니다. 이 값을 주입했다고 실제 보드 내부 풀다운 비트까지 설정한 것은 아닙니다. 구현된 부분과 배선 가정을 서로 다른 칸에 씁니다.
풀업을 쓰는 대안도 연결표에 한 줄 넣습니다. 해제일 때 높은 레벨이고 스위치를 누르면 GND에 연결되어 낮은 레벨이 되는 구성이면 active-low입니다. 이때 풀업만 바꾸고 눌림 비교를 1로 유지하면 버튼을 놓은 순간을 눌림으로 인식합니다. 보드 전용 계층에서 물리 값을 논리 눌림으로 정규화하거나 디바운서의 활성 정책을 바꾸어야 합니다. fixture와 문서도 같은 약속으로 바꿉니다.
입력 임계와 허용 범위를 구분합니다
연습 연결표에는 가상 전압 계약을 명시합니다. 전원은 3.3V, 허용 입력 범위는 0~3.3V, 낮음 판정은 0.8V 이하, 높음 판정은 2.0V 이상으로 가정합니다. 두 임계 사이 전압은 이번 설계에서 미정입니다. 이 수치는 특정 MCU의 정격이 아니라 판단 연습을 위해 정한 조건입니다. 실제 hal_sim.c는 정수 0·1을 받아 비트만 추출하며 전압을 분류하지 않습니다.
1.2V 입력을 그냥 0이라고 설명하면 디지털 정수가 두 개뿐이라는 사실을 아날로그 입력 보증에 잘못 적용한 것입니다. 이번 가상 표에서는 1.2V가 낮음과 높음 어느 쪽으로도 보장되지 않습니다. 반대로 5V를 높은 숫자라서 1이라고만 기록하면 허용 입력 범위를 놓칩니다. 먼저 허용 범위를 검토하고 그 안에서 임계값으로 논리 수준을 판단합니다. 범위 위반을 올바른 디지털 신호로 간주하지 않습니다.
실물 문서에서는 VIL의 최대와 VIH의 최소를 읽고 해당 전원·온도·핀 종류 조건을 함께 적습니다. Microchip I/O DC 표도 입력 임계와 출력 전류를 조건별로 나눕니다. 이 표의 숫자를 우리 가상 계약으로 복사하지 않습니다. 실제 부품을 고르면 그 부품의 최신 PDF와 핀별 조건을 근거로 연결표를 다시 작성합니다.
절대 최대 정격은 정상 동작을 보증하는 사용 목표와 다릅니다. 권장 동작 조건, 입력 판정 임계, 손상 위험을 제한하는 정격을 서로 다른 항목으로 읽습니다. 어떤 핀이 높은 전압을 허용하는지도 이름이나 보드 전원 표시만으로 추측하지 않습니다. 전원이 꺼진 상태의 입력 조건도 별도 확인 항목입니다. 이번 제출물에는 실물 부품 미선정이라고 적고, 확인되지 않은 정격을 임의 숫자로 채우지 않습니다.
출력 요청과 LED 회로를 분리합니다
이번 LED는 핀 1의 출력 bit1로 표현합니다. 출력 초기값 0xA0에서 점등 요청은 0xA2, 소등 요청은 0xA0입니다. 다른 출력 비트는 앞 모듈의 HAL이 보존합니다. 이는 출력 레지스터의 논리 관찰이며 LED에 실제 전류가 흘렀다는 측정은 아닙니다. 실물 연결표에서는 LED의 방향, 직렬 저항, 구동 가능한 전류, 핀의 소스·싱크 조건을 추가로 표시합니다.
푸시풀은 높은 쪽과 낮은 쪽을 능동적으로 구동하는 출력 방식이고 오픈드레인은 낮은 쪽 구동과 해제 상태를 구분하는 방식입니다. 오픈드레인에서 1 요청을 곧 높은 전압이라고 단정하면 외부 풀업 조건을 놓칠 수 있습니다. 이번 출력 모형은 active-high 표시만 다루며 두 출력 회로를 전기적으로 시뮬레이션하지 않습니다. 상세한 출력 회로 비교는 더 읽기 장에서 보충하고 연결표에 선택 근거만 적습니다.
동일한 출력 핀에 두 구동원을 연결하거나 LED를 저항 없이 직접 연결하는 가정은 코드 통과로 정당화하지 않습니다. 출력 정격은 핀당 조건뿐 아니라 포트·장치 전체 조건도 확인해야 합니다. 현재는 부품과 부하가 없으므로 연결표의 실물 전류 칸을 미확인으로 표시합니다. 시니어 검토에서는 빈 칸을 숨기는 것보다 무엇을 측정하고 어떤 문서를 봐야 채울 수 있는지 설명하는 것을 평가합니다.
연결표를 리뷰 가능한 문서로 완성합니다
제출 표에는 신호 이름, 논리 핀, 방향, 기본값, 활성값, 풀 저항, 전압 계약, 검증 방법을 넣습니다. 버튼 기본 행은 입력·0·1·풀다운, 대안 행은 입력·1·0·풀업으로 적습니다. LED 행은 출력·초기 0·점등 1이며 기록 모드가 표시 목적이라고 적습니다. VDD와 GND 기준을 공유한다고 표시하고 PC 값 주입과 실물 전압 측정을 구분합니다. 같은 표를 다음 미션 README의 핀 설명과 대조합니다.
오류를 읽을 때는 숫자와 상태 반환을 구별합니다. hal_gpio_read가 반환한 0은 읽기 실패이고 성공한 호출이 out에 넣은 0은 정상 해제 레벨입니다. 둘을 하나의 if 조건으로 처리하면 장치 오류를 해제로 숨깁니다. 연결표 옆에 성공 상태 1과 데이터 레벨 0·1을 적습니다. 잘못된 방향 요청이 거부된다는 API 동작과 실제 배선이 적합하다는 판단은 별도의 검토라는 점도 기록합니다.
따라하기
핀과 표시 목적을 표로 적기
연결표에 기본 버튼·풀업 대안·LED 세 행을 만들고 논리 번호와 실물 번호 미정 칸을 분리합니다.
가상 전압 경계 분류
아래 코드는 연결 검토용 가상 계약을 계산합니다. 실제 HAL의 전압 측정 기능이 아닙니다.
for v in (0.0, 0.8, 1.2, 2.0, 3.3, 5.0):
if not 0 <= v <= 3.3:
result = "OUTSIDE"
elif v <= 0.8:
result = "LOW"
elif v >= 2.0:
result = "HIGH"
else:
result = "UNDEFINED"
print(f"{v:.1f}V {result}")실행 결과
0.0V LOW 0.8V LOW 1.2V UNDEFINED 2.0V HIGH 3.3V HIGH 5.0V OUTSIDE
연결표의 검증 칸 완성
버튼 out=0과 상태 반환 0의 뜻을 따로 적고 실물 VIH/VIL·전류·저항·전원 차단 상태를 어떤 문서나 측정으로 확인할지 씁니다.
확인 문제
실습
연결표를 제출합니다. 버튼 기본 풀다운 active-high·풀업 active-low 대안·LED 출력 세 행에 논리 핀, 방향, 기본/활성 레벨, 전압 계약, 검증 방법을 넣습니다. 0.8V·1.2V·2.0V·5.0V 판단과 실물 핀 문서에서 추가 확인할 항목을 적습니다. 전압 수치는 가상 계약이며 실제 부품 정격으로 제시하지 않습니다.
더 읽기
면접 질문
- 버튼을 한 번 눌렀는데 여러 번 감지되는 이유를 설명해 주시면 됩니다.