Atmega 128
- RISC(Reduced Instruction Set Computer) 구조
- 32개의 8비트 범용 레지스터
- 총 53개의 GPIO(General Purpose Input/Output)포트 내장
- 8개의 외부 인터럽트를 포함한 34개의 인터럽트 벡터 내장
🖥️ 메모리구조
- 프로그램 메모리
- 데이터 메모리
- 프로그램 실행시 임시로 데이터를 저장하는 메모리
- 8비트의 레지스터
- 범용레지스터(General Purpose Register) : ALU연산시 필요한 데이터 임시 저장
- 특수기능 레지스터(Special Function Register) : 칩의 I/O 제어나 상태보고 등의 특별 기능들을 수행
- 범용으로 사용되는 입출력포트로 출력으로 사용시 0과 1을 출력신호로 만들어주고 입력시엔 외부 인터럽트를 처리할 수 있도록 하는 기능이 있다.
- GPIO 레지스터
- 입출력 방향 전환 레지스터, 출력용 레지스터, 입력용 데이터 레지스터
- 내부적으로 PULL-UP 저항을 가지고 있는 경우가 많다.
- 대부분의 핀들을 GPIO로 설정하는 경우가 많고 보통 다른 신호와 중복(multiplexing)하여 사용한다.
🔔 Pullup - Pulldown setting
플로팅(Floating)
- input으로 설정된 핀에는 5V(VCC) 또는 0V(GND)의 전압을 입력해주는 것이 일반적이다. 왼쪽 회로의 그림은 0V의 전압이 입력되는 것으로 보이고 오른쪽 회로는 아무 값도 아닌 전압이 입력된다. 이렇게 아무것도 연결되어있지 ㅇ낳은 것을 플로팅상태라 한다. 이땐 작은 노이즈로도 HIGH, LOW 사이를 빠르게 왔다갔다하여 오동작을 유발하므로 풀업저항과 풀다운 저항을 이용하여 이를 방지한다.
풀업 저항 (Pull-up Register)
![]()
-5V(VCC) 밑에 저항을 달아줌으로써 풀업 저항을 구성한다. 왼쪽 회로의 경우 GND에 달린 스위치가 ON되어 INPUT에는 0V가 공급되고 오른쪽 회로는 OFF되어 5V가 공급된다. (풀업저항을 보통 10K옴)
풀다운 저항 (Pull-down Register)
![]()
- 풀 다운 저항은 0V(GND) 부분에 저항을 연결한 구조이다.
| Switch ON | Switch OFF |
---|
pull-up register | 0 | 1 |
pull-down register | 1 | 0 |
🖇️ GPIO 관련 레지스터
- DDRx (Data Direction Register)
- 데이터의 입출력 방향 지정용 레지스터
- 출력시 1(default), 입력시 0으로 설정한다.
- PORTx (Port Output Register)
- 데이터 출력 레지스터로 원하는 출력값을 입력하면 된다.
- PINx (Port Input Register)
- 데이터 입력 레지스터로 PINx의 값을 읽으면 그것이 입력값이 된다.
- SFIOR (Special Function IO Register)
- 1세팅시 풀업저항이 비활성화, 0 세팅시 활성화
시간 지연
#define F_CPU 160000000UL
#include <util/delay.h>
_delay_ms(unsigned int i)
_delay_us(unsigned int i)
volatile
- volatile로 선언된 변수나 포인터 관련 코드는 임의로 최적하하지 말라는 의미
- 사용되는 곳
- 인터럽트 루틴에서 변수를 사용하는 경우
- 자동변수의 경우 일정시간 CPU에서 operation을 수행해 주기를 원하는 경우
- 코드의 순서를 지키고 싶은 경우
- I/O 레지스터드을 메모리맵에 매핑시켜서 사용하는 경우
![]()