강의자료 · 마이크로프로세서응용설계

GPIO

한 번 누른 버튼에서 여러 신호가 들어오는 현상을 시간 기록으로 읽고, 입력 처리 규칙을 정합니다.

실습 전에

01 버튼 한 번이 신호 한 번과 같을까요?

설명

접점의 Bounce로 짧은 시간에 여러 변화가 기록될 수 있습니다.

02 Polling 간격과 Debounce 시간은 같은 역할일까요?

설명

Polling은 관측 주기, Debounce는 가까운 변화를 하나로 묶는 규칙입니다.

실행 조건

기준 실습은 기록된 파형으로 수행합니다. 장치 확장에서는 원본 RPi.GPIO 코드의 BCM 번호·입력/출력 설정을 사용한 보드와 대조하세요.

실습

실습용 노트북 미리보기실습용 노트북 다운로드

1. GPIO Edge Detection

시작 조건

(t_ms,level)=[(0,0),(10,1),(12,0),(14,1),(50,0),(80,1)]입니다. 두 기록 사이에는 직전 level이 유지됩니다.

진행 방법

  1. 0~100 ms를 1 ms 간격으로 재구성하고 step plot을 그리세요.
  2. 원 기록에서 rising·falling edge 시점을 각각 찾으세요.
  3. rising edge만 Counter에 반영한 누적 개수를 기록하세요.

남길 결과

기록 항목과 확인할 점
t [ms]
level
edge 종류
누적 rising count

확인할 점

  • 초기 level을 전환으로 잘못 세지 않았는가?
  • 같은 level이 연속으로 읽혀도 새 edge로 세지 않는가?

2. Polling 간격의 영향

시작 조건

같은 파형을 Δt∈{1,10,20}\Delta t\in\{1,10,20\} ms 간격으로 읽습니다. 원본 edge 기록은 바꾸지 않습니다.

진행 방법

  1. 각 Polling 시점에서 직전 event의 level을 찾아 읽으세요.
  2. 읽힌 표본에서 rising edge를 다시 세어 원 기록과 비교하세요.
  3. 어떤 짧은 pulse가 사라졌는지 실제 구간을 지목하세요.

남길 결과

기록 항목과 확인할 점
Polling 간격 [ms]
표본 수
검출 rising 수
놓친 구간

확인할 점

  • 원 파형을 고정한 채 샘플 간격만 바꾸었는가?
  • Event 시각과 Polling으로 발견한 시각을 구분했는가?

3. 접점 튐을 걸러내기

시작 조건

rising edge 사이의 최소 허용 간격을 20 ms로 둡니다. 마지막으로 허용한 edge를 기준으로 판단합니다.

진행 방법

  1. raw rising 목록에서 20 ms 미만 간격의 후속 edge를 무시하세요.
  2. 제한을 5,20,50 ms로 바꾸어 허용된 edge 수를 비교하세요.
  3. Week6-1_GPIO_LED_Test.ipynb의 GPIO.setmode와 time.sleep 인자를 읽고, 핀 번호 체계와 시간 단위를 이 활동의 기록과 연결해 설명하세요. 코드 읽기만으로 수행합니다.

남길 결과

기록 항목과 확인할 점
최소 간격 [ms]
raw count
허용 count
허용 시점 [ms]

확인할 점

  • 버린 edge가 마지막 허용 시각을 갱신하지 않는가?
  • BCM 번호와 보드의 물리 핀 번호를 구분했는가?