논리연산장치(Arithmetic Login Unit : ALU)
: 비교, 판단, 연산제어 유닛(Contro Unit : CU)
: 명령어 해석, 판단 실행, H/W 모듈레지스터 세트(Register Set)
: CPU 내부 기억장치, 비교/판단/연산 결과 일시적 저장
- 단일 IC 칩에 CPU, 기억장치 ROM, RAM, I/O 제어 인터페이스, Timer/Counter, Interrupt 처리기 등 모두 집적
- 1970년대 중반부 만듬
- MPU와 달리 기본적인 산술, 논리 연산 뿐만 아니라 부가적인 요소들을 모두 통합
- 특정 기기 제어용
- General Purpose Input/Output 약자
- HIGH/LOW 2개 신호로 구성된 디지털 데이터 입력/출력 제어 하는 방식
- 모든 핀(PIN)의 기본 제어 방식
- 관련 레지스터
- 입출력 동작모드 설정 레지스터
- 출력 데이터 설정 레지스터
- 입력 데이터 설정 레지스터
- 최상위(MSB) 비트 & 최하위(LSB) 비트
- And & 연산
- OR | 연산
- XOR ^ 연산
- NOT ~ 연산
- Shift << 연산
- Shift >> 연산
- Bit Set
4번 비트 1로 설정
ex)LED = LED | (1<<4) LED |= (1<<4)
- Bit Clear
4번 비트 0으로 설정
LED = LED & ~(1<<4) LED &= ~(1<<4)
- Bit Toggle
4번 비트 0으로 설정
LED = LED ^ (1<<4) LED ^= (1<<4)
크기, 모양에 상관없고, 손으로 누르거나 발로 밟는 것 등등 버튼을 눌러서 회로를 절단 또는 접속시키는 스위치 총칭
- Chatterring 현상
스위치 접점이 닫히거나 열리는 순간에 기계적인 진동에 의해 매우 짧은 시간안에 스위치가 붙었다가 떨어지는 것을 반복하는 현상
- 해결방법 -> Debounce 처리
- SW적 처리
Debounce Delay값을 주어 짧은 시간 연속 입력값 무시- HW적 처리
콘덴서(커패시터)를 디지털핀과 GND핀을 끼워주는 방법
- MCU 실행 중에 내/외부에서 장상적인 요청이나 비정상적인 오류가 발생하는 경우 즉시 처리해야 하는 특수한 이벤트
- 인터럽트 서비스 루틴
- 인터럽트를 처리해주는 함수
- 발생 원인에 따른 분류
- 차단 가능성에 따른 분류
- 감지 및 처리 방법에 따른 분류
- EICRA (External Interrupt Control Register A) : 0 ~ 3번 설정
- EICRB (External Interrupt Control Register B) : 4 ~ 7번 설정
- EIFR (External Interrupt Flag Register) : 허용/금지 설정
- INT7~0핀에 인터럽트 신호 입력되어 인터럽트 트리거(trigger) 되면 H/W에 의해서 자동 set
- MCU가 IVT를 인출하여 서비스 루틴으로 점프하면 '0'으로 Clear
Interrupt 관련 함수는 avr/interrupt.h
Interrupt vector 상수 avr/iom128.h
// Interrupt 관련 함수 -----------------
void init_EINT() {
EICRB |= ((1<<ISC41) | (1<<ISC40)); // - INT4 Rising Edge Interrupt
EIMSK |= (1<<INT4); // - External Interrupt4 Enable
}
// 외부인터럽트 처리 함수 --------------------
// - Rising Edge시 마다 자동 실행
ISR(INT4_vect) {
// - 인터럽트 시 처리 코드
}
// Entry Point 함수
int main(void) {
// 초기화
init_EINT();
// Global Interrupt 활성화
sei();
while(1) {
;
}
return 0;
}
- USART I/O Data Register - UDRn
- 송수신 데이터 저장
- USART Control and Status Register A - UCSRnA
- 송수신 버퍼 상태, 송수신 완료 상태 등 정보
- USART Control and Status Register B - UCSRnB
- 송신 여부, 수신 여부, 인터럽트 활성화 여부 설정
- USART Control and Status Register C - UCSRnC
- 데이터 프레임 설정
- USART Baud Rate Registers - UBRRnH, UBRRnL
- 전송 속도 설정
- 모든 ASCII 문자 표현 가능하여 가단한 무자 출력에 사용
- LED처럼 자체 발광능력 있지 않아 조도가 낮거나 각도에 따라 보이지 않음
- LCD 표시부에 조명 부착한 백라이트(Backlight)형 LCD가 많이 사용
- 종류
- 구성요소 -> LCD 패널 + 컨트롤러 + 드라이버
- ex) HITACHI HD44780
- 핀 기능
- 제어핀(Control Pin)
- RS : Register Select, 명령어와 데이터 레지스터 선택 핀
H : 데이터 레지스터
L : 명령어 레지스터- R/W : Read/Write data, 데이터 읽기/쓰기 설정 핀
H : 읽기
L : 쓰기- E : Enable Pulse, LCD <-> MCU 데이터 교환 가능여부 설정 핀
H : 교환 가능
L : 교환 불가능
- RS = 0, R/W = 0 : IR쓰기 (각종 제어 명령 쓰기)
- RS = 0, R/W = 1 : BF읽기, AC읽기
- RS = 1, R/W = 0 : DR쓰기
- RS = 1, R/W = 1 : DR 읽기
- 데이터핀(Data Pin)
- RS : Register Select, 명령어와 데이터 레지스터 선택 핀
H : 데이터 레지스터
L : 명령어 레지스터- R/W : Read/Write data, 데이터 읽기/쓰기 설정 핀
H : 읽기
L : 쓰기- E : Enable Pulse, LCD <-> MCU 데이터 교환 가능여부 설정 핀
H : 교환 가능
L : 교환 불가능
- 제어 명령어
- LCD 모듈 동작이 MCU에 비해서 많이 느리기 때문에 명령이나 데이터 보내기 전 지연 시간 필요
- Clear Display : 0b0000 0001 (0x01)
- 전체 화면을 지우고 DDRAM 주소를 0으로 설정한 후 커서를 홈 위치로 옮기면 DDRAM 어드레스 카운트를 0으로 한다.
- 데이터 버스에는 0000 0001 (0x01)이 전송
- Return Home : 0b0000001x (0x02)
- 커서를 홈 위치로 옮긴다. DDRAM 주소 카운터를 0으로 하고 디스플레이 시프트 된 것을 본래의 위치로 되돌린다.
- Entry Mode Set
- MCU가 LCD 모듈에 데이터를 Read/Write할 경우에 커서의 위치를 오른쪽으로 증가, 왼쪽으로 감소할 것인지 결정
- Display On/Off
- DDRAM 내용이 화면에 표시되도록 On/Off 설정하거나, 커서를 On/Off하거나, 커서 위치의 문자를 깜빡이게 할 것인지 설정
- Cursor or Display Shift
- DDRAM 내용 변경하지 않고 화면 또는 커서 오른쪽/왼쪽 쉬프트
- Function Set
- MCU와 LCD 모듈 사이에 인터페이스 설정
- 데이터 길이, 화면 표시 행수, 문자 폰트 크기를 설정
void Init_ADC() {
// - ADC1 채널, AREF 기준 전압
ADMUX = 1;
// - 채널, 활성화, 프리스케일 설정
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
}
unsigned int CDS_StartADConverter() {
unsigned int result;
cli(); // -ADC 변환 중 인터럽트 금지
ADCSRA |= (1<<ADSC); // -ADC 변환 시작
while(!(ADCSRA & (1<<ADIF))); // -ADC 변환 완료 신호 대기
result = ADCL; // - 변환 결과 저장
result |= ((ADCH & oxo3) << 8);
sei(); // - 인터럽트 허용
return result;
}