카운터와 시프트 레지스터
클럭을 셀 때마다 1씩 올라가는 카운터는 MCU 타이머의 원형이고, 비트를 한 칸씩 옮기는 시프트 레지스터는 SPI와 UART의 원형입니다.
카운터
플립플롭 여러 개를 이어 클럭이 들어올 때마다 값이 1씩 증가하게 만든 회로입니다. MCU 타이머의 CNT 레지스터가 바로 이것입니다.
- 분주: 카운터의 최상위 비트는 클럭을 2ⁿ으로 나눈 주파수가 됩니다. 프리스케일러의 원리입니다.
- 비교: 카운터 값이 정해진 수(ARR)에 닿으면 0으로 돌아가고, 다른 수(CCR)와 같을 때 출력을 뒤집으면 PWM이 됩니다.
시프트 레지스터
클럭마다 저장된 비트가 한 칸씩 옆으로 이동합니다.
- 직렬 → 병렬: 한 줄로 들어온 비트 8개를 모아 한 바이트로 만듭니다. SPI와 UART 수신기가 이렇게 동작합니다.
- 병렬 → 직렬: 한 바이트를 한 비트씩 내보냅니다. 송신기입니다.
74HC595 같은 시프트 레지스터 칩을 쓰면 MCU 핀 3개로 LED 8개, 16개를 제어할 수 있습니다. SPI 통신 하나로 핀을 늘리는 가장 흔한 방법입니다.