[CS] 4-1 저수준 I/O

현수·2022년 2월 6일
0
post-thumbnail

I/O 포트

  • I/O 포트(I/O 인터페이스) : 입출력장치와 프로세서 사이에 존재하며, 전송 속도, 전압 레벨, 전송 사이클의 길이 등을 조절하여 데이터 전송이 원활하게 이루어지도록 하게 하는 역할을 한다.

  • AVR : Atmel사에서 만든 마이크로컨트롤러. 여러 가지 모델이 있지만 ATMEGA128이 가장 유명한데, ATMEGA128을 기준으로 AVR에는 53개의 입출력 포트를 PortA, PortB, PortC, PortD, PortE, PortF의 종류로 가지고 있다


포트 B에 전구와 스위치를 연결한 모습

각 포트를 제어하는 세 가지 레지스터

(8비트 양방향 포트인 PortB를 기준)

  • DDRB(데이터 방향 레지스터) : I/O 포트의 입출력 방향을 설정하는 레지스터. 각 포트는 총 8개의 핀을 가지고 있는데, 핀 하나 당 비트 하나로 총 8비트를 가진다. 8개의 비트는 각각 0이면 입력, 1이면 출력을 나타낸다.

ex) PortB의 2번 핀만(0번 핀부터 시작) 출력으로 설정하는 경우


2진수로 나타낼 경우 0 0 0 0 0 1 0 0이므로, 16진수로 바꾸면 DDRB = 0x04; 가 된다.
(초기 값은 모두 0)


  • PORTB : I/O 포트의 출력 값을 설정하는 레지스터. 출력에는 High와 Low가 있는데, High로 출력하려면 1을, Low로 출력하려면 0을 입력한다.

ex) PortB의 3번 핀을 high로 출력하는 경우


2진수로 나타낼 경우 0 0 0 0 1 0 0 0이므로, 16진수로 바꾸면 PORTA = 0x08; 가 된다.
(역시 초기 값은 0)


** DDRB에서 PORTB의 3번 핀을 출력으로 설정했을 때만 가능하다. PORTB를 통해 값을 출력하려면 그 핀이 미리 출력상태로 설정되어야 한다.


  • PINB : I/O 포트의 입력 값을 읽을 수 있는 레지스터. PORTB 레지스터와 반대 개념이라고 할 수 있다. PINB 레지스터의 경우에는 읽기만 가능하다.

ex) B 포트의 2번, 3번 핀에 High값이 들어오는 경우


2진수로 나타낼 경우 0 0 0 0 1 1 0 0이므로, char b = PINB;를 하면 b의 값에는 16진수 0x0C가 들어오게 된다.


** 이 레지스터도 역시 읽고자 하는 핀이 DDRB에서 입력으로 설정되어 있어야한다.




버튼

  • 푸시버튼 : 평소엔 전류를 차단하고 있다가 누르고 있는 동안만 전류를 통하게 해주는 일종의 스위치.

    간단한 푸시버튼의 회로

  • 인터럽트 : 프로세서가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것을 말한다. 입출력 연산이 프로세서 명령 수행속도보다 현저히 느리기 때문에 프로세서가 이를 매번 기다리지 않게 하기 위해 생겨났다.

    • 위 그림에서 IRQ는 인터럽트를 요청받는 프로세서의 핀을 의미한다.
    • R은 풀업 저항을 의미한다. (2주차 오픈 컬렉터 참고)

    .


버튼바운스

  • 버튼바운스 : 전자 회로 내의 스위치 접점이 닫히거나 열리는 순간에 기계적인 진동에 의해
    매우 짧은 시간 안에 스위치가 붙었다가 떨어지는 것을 반복하는 현상. 채터링이라고도 한다.
    • 인터럽트가 여러 번 발생할 수 있다.
  • 디바운스 : 버튼바운스를 해결하기위한 방법으로 소프트웨어적인 방법과 하드웨어적인 방법이 있으며, 소프트웨어를 사용하여 구현하는 것이 경제적이다.

소프트웨어를 사용한 다양한 방법 중 한 가지 예

보통 버튼바운스는 100ms 정도의 시간동안 일어나는데, 인터럽트 발생 후 100ms가 지났을 때의 스위치 값을 체크한다. 100ms 후에도 스위치 값이 high면 스위치가 켜지지 않은 것이고 low면 스위치가 켜진 것으로 인식하게 한다.




디스플레이

** 여기서 다루는 디스플레이는 컴퓨터가 아닌 시계나 식기 세척기등의 작은 디스플레이다.

7세그먼트 디스플레이

  • 7세그먼트 디스플레이 : 7개의 획으로 숫자나 문자를 나타낼 수 있는 표시장치로 FND (Flexible Numeric Display)라고도 불린다. 소수점까지 포함해 8개의 LED로 구성되어 있다.

    • 각 LED마다 핀을 한 개씩 연결하며, 핀 하나에 모든 LED를 한 번에 연결한다.

    • 공통 애노드 타입공통 캐소드 타입이 존재하는데, 공통 캐소드 방식은 모든 캐소드가 한 핀에 연결되고, 각 애노드에 핀이 하나씩 연결되는 방식이며, 공통 애노드 방식은 그 반대이다. 두 타입의 차이를 간단히 정리하면 애노드 타입은 off신호에 led가 켜지며, 캐소드 타입은 on신호에 led가 켜진다.

시각의 잔상효과

  • 사람은 1/24초보다 짧은 간격으로 깜빡일 경우 빛이 계속 켜져 있는 것으로 인식한다.

  • 디스플레이가 작동하게 하기 위해 시각의 잔상효과를 활용한다.

    • 영화나 비디오와 같이 움직이는 영상의 작동방식과도 같다.
    • 짧은 시간 각 LED를 껐다 켰다하면 계속 켜져있는 것으로 인식하게 할 수 있다.

밝기 조절

  • 디스플레이의 밝기를 조절하기 위해서 듀티사이클을 조절한다.

    듀티사이클

  • 위 그림과 같이 전체시간(한 사이클)의 얼마 동안 켜져있는가를 조절하여 밝기를 조절한다.

    • 그림의 경우 오른쪽이 왼쪽의 절반 정도의 밝기로 보여진다.



그레이코드

  • 로터리 인코더 : 회전축의 위치를 디지털로 변환하는 센서를 총칭하는 말.
  • 센서를 읽어 모터, 바퀴, 놉 등의 회전축의 위치를 알아내야 하는 경우, 축의 위치를 2진수로 인코딩해야 한다.

2진 로티리 인코더

  • 그레이코드

    • 2진 로타리 인코더의 경우 각 비트를 읽으면서 발생하는 전파 지연으로 문제가 생겨 정확한 값이 읽혀지지 않는 문제가 발생.
    • 이를 해결하기 위해 각도가 달라질 때 1비트씩만 변하는 그레이코드라는 인코딩 방법이 발명되었다.

    그레이코드

    그레이코드를 활용한 로터리 인코더

profile
언젠간 되겠지!

0개의 댓글

관련 채용 정보