I/O 포트(I/O 인터페이스) : 입출력장치와 프로세서 사이에 존재하며, 전송 속도, 전압 레벨, 전송 사이클의 길이 등을 조절하여 데이터 전송이 원활하게 이루어지도록 하게 하는 역할을 한다.
AVR : Atmel사에서 만든 마이크로컨트롤러. 여러 가지 모델이 있지만 ATMEGA128이 가장 유명한데, ATMEGA128을 기준으로 AVR에는 53개의 입출력 포트를 PortA, PortB, PortC, PortD, PortE, PortF의 종류로 가지고 있다
포트 B에 전구와 스위치를 연결한 모습
(8비트 양방향 포트인 PortB를 기준)
ex) PortB의 2번 핀만(0번 핀부터 시작) 출력으로 설정하는 경우
2진수로 나타낼 경우0 0 0 0 0 1 0 0
이므로, 16진수로 바꾸면DDRB = 0x04;
가 된다.
(초기 값은 모두 0)
ex) PortB의 3번 핀을 high로 출력하는 경우
2진수로 나타낼 경우0 0 0 0 1 0 0 0
이므로, 16진수로 바꾸면PORTA = 0x08;
가 된다.
(역시 초기 값은 0)
** DDRB에서 PORTB의 3번 핀을 출력으로 설정했을 때만 가능하다. PORTB를 통해 값을 출력하려면 그 핀이 미리 출력상태로 설정되어야 한다.
ex) B 포트의 2번, 3번 핀에 High값이 들어오는 경우
2진수로 나타낼 경우0 0 0 0 1 1 0 0
이므로,char b = PINB;
를 하면b
의 값에는 16진수0x0C
가 들어오게 된다.
** 이 레지스터도 역시 읽고자 하는 핀이 DDRB에서 입력으로 설정되어 있어야한다.
간단한 푸시버튼의 회로
인터럽트 : 프로세서가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것을 말한다. 입출력 연산이 프로세서 명령 수행속도보다 현저히 느리기 때문에 프로세서가 이를 매번 기다리지 않게 하기 위해 생겨났다.
.
버튼바운스
소프트웨어를 사용한 다양한 방법 중 한 가지 예
보통 버튼바운스는 100ms 정도의 시간동안 일어나는데, 인터럽트 발생 후 100ms가 지났을 때의 스위치 값을 체크한다. 100ms 후에도 스위치 값이 high면 스위치가 켜지지 않은 것이고 low면 스위치가 켜진 것으로 인식하게 한다.
** 여기서 다루는 디스플레이는 컴퓨터가 아닌 시계나 식기 세척기등의 작은 디스플레이다.
7세그먼트 디스플레이
7세그먼트 디스플레이 : 7개의 획으로 숫자나 문자를 나타낼 수 있는 표시장치로 FND (Flexible Numeric Display)라고도 불린다. 소수점까지 포함해 8개의 LED로 구성되어 있다.
사람은 1/24초보다 짧은 간격으로 깜빡일 경우 빛이 계속 켜져 있는 것으로 인식한다.
디스플레이가 작동하게 하기 위해 시각의 잔상효과를 활용한다.
디스플레이의 밝기를 조절하기 위해서 듀티사이클을 조절한다.
듀티사이클
위 그림과 같이 전체시간(한 사이클)의 얼마 동안 켜져있는가를 조절하여 밝기를 조절한다.
2진 로티리 인코더
그레이코드
그레이코드
그레이코드를 활용한 로터리 인코더