I/0란?

입력INPUT / 출력OUTPUT
컴퓨터와 데이터를 주고받는 연산이나, 프로그램 또는 장치를 가리킵니다.

저수준 I/O란?
cpu가 읽거나 쓸 수 있는 비트에 물건을 연결한 형태의 I/O



1. I/O포트


첫째로 속도
입출력장치의 속도는 CPU의 속도에 비교가 되지 않을 정도로 느립니다.

둘째로 전압 레벨
입출력장치의 전압 레벨은 기종에 다라 각양각색입니다.

셋째로 전송 사이클의 길이
상당수의 입출력장치는 기계장치이기 때문에 정송 사이클의 길이가 길다. 이러한 것들을 서로 맞게 하기 위해선 CPU와 입출력장치 사이에 특별한 하드웨어를 만들어 넣어야 하는데, 이것이 I/O 포트의 역활


AVR의 포트 B

1) AVR : AVR(Atmel AVR) 8bit

1996년 아트멜 사에서 개발된 하버드 구조로 수정한 8비트 RISC 단일칩 마이크로컨트롤러

-RISC(Reduced Instruction Set Computer)는 CPU 명령어의 개수를 줄여 하드웨어 구조를 좀 더 간단하게 만드는 방식으로, 마이크로프로세서를 설계하는 방법 가운데 하나이며, SPARC, MIPS 등의 아키텍처에서 사용

AVR의 포트들
http://realsys.co.kr/lecture/avr_edu/3%EB%B6%803_2.%20%EC%9E%85%EC%B6%9C%EB%A0%A5%ED%8F%AC%ED%8A%B8.pdf

2) 다이오드(diode)


다이오드(diode)는 저마늄(영어: germanium 또는 게르마늄(독일어: germanium), Ge)이나 규소(Si)로 만들어지고, 주로 한쪽 방향으로 전류가 흐르도록 제어하는 반도체 소자.
정류, 발광 등의 특성


3) 발광다이오드 = LED(light-emitting diode)

순방향으로 전압을 가했을 때 발광하는 반도체 소자

전압이 낮은 동안은 전압을 올려도 거의 전류가 흐르지 않고, 발광도 하지 않습니다.
하지만 어느 전압 이상이 되면 전압 상승에 대하여 전류가 빠르게 흘러서, 전류량에 비례해서 빛이 발생되는데, 이 전압을 순방향 강하전압이라 부릅니다.

일반적인 다이오드와 비교해서 발광 다이오드는 순방향 강하전압이 높은 특성.


1) DDRx

I/O 포트의 입출력 방향을 설정하는 레지스터.
x = A ~ G포트
A부터 F까지는 8개의 핀이 존재 => 핀 하나당 비트 하나로 총 8비트

8개의 비트를 각각 0이면 입력, 1이면 출력이라고 할 때

PORTB의 2번 핀만 출력으로 설정시 (초기값은 0(입력 모드)),
2진수 => 0 0 0 0 0 1 0 0 (왼쪽부터 7번 핀 ~ 제일 오른쪽이 0번 핀)
16진수로 바꾸면 DDRB = 0x04


2) PORTx

I/O 포트의 출력 값을 설정하는 레지스터
x는 DDRx 레지스터와 똑같이 A ~ G포트

출력은 High 또는 Low가 존재
High로 출력하려면 1을, Low로 출력하려면 0을 입력

PORTB의 2번 핀을 High로 출력하고 싶다면 (초기값은 0 (Low 설정))
PORTB2 = 0x04


유의할 점!!

DDRx에서 PORTB의 2번핀을 출력으로 설정했을 때 가능
즉, PORTx로 통해 값을 출력하려면 그 핀이 DDRx에서 미리 출력(Output)으로 설정되어야 가능


3) PINx

I/O 포트의 입력 값을 읽을 수 있는 레지스터.
PORTx 레지스터와 반대 개념이라고 생각하시면 편할 거 같아요.

PORTx와 DDRx 레지스터가 각 비트에 읽기/쓰기가 가능
BUT PINx 레지스터는 읽기만 가능

x는 A ~ G포트

PORTB의 2번핀에 High값이 들어오고 있을 때

char a = PINB;

를 하면 a의 값에는 0x0C가 존재




2. 버튼을 눌러라


푸쉬버튼회로

플로팅


풀업, 인터럽트요청핀 원리
https://kocoafab.cc/tutorial/view/526



바운스발생 (채터링 증상)

채터링[chattering]
전자 회로 내의 스위치 접점이 닫히거나 열리는 순간에 기계적인 진동에 의해
매우 짧은 시간안에 스위치가 붙었다가 떨어지는 것을 반복하는 현상



해결방법 : 디바운스[debounce]

인터럽트 핸들러에 타이머를 설정하고 그 시간이 지나면 버튼상태를 감지

  1. 최초 인터럽트시 타이머를 설정
  2. 인터럽트가 발생할때마다 기존 타이머를 새 타이머로 재설정
    => 소프트웨어적으로 해결!
    https://m.blog.naver.com/roboholic84/220880882127





3. 빛이 있으라

7세그먼트 디스플레이

1) 캐소드
캐소드(cathode)는 전자공학, 물리학, 화학 등에서 전극 중 전류가 흘러나오는 쪽의 전극을 의미

2) 애노드
어노드 (Anode)는 캐소드와 반대개념으로, 전류가 흘러 들어가는 쪽 전극을 의미

둘 다 양극 혹은 음극이라 번역되지만, 상황에 따라 다르게 해석


시각 잔상효과(Persistence of vision, POV)

우리의 뇌는 눈의 망막을 통해 이미지를 전달받으면 사물이 시야에서 사라져도 뇌에 그 이미지(잔상)를 남깁니다. 사물은 이미 눈앞에서 사라졌지만 여전히 존재하는 것처럼 기억하는 것으로, 실제로는 없지만 있는 것처럼 잠시 느끼는 착시현상이 바로 ‘시각 잔상효과’ 입니다.

ex) 윌리엄 조지 호너의 조트로프
https://www.youtube.com/watch?v=5lSmWF42lFk




4. 밝기 조절


듀티사이클
http://www.ktword.co.kr/test/view/view.php?no=4143


듀티 사이클을 이용한
펄스폭 변조 PWM (pulse width modulation)
https://kinvent.tistory.com/3
https://m.blog.naver.com/emperonics/221725399383




5. 그레이의 2의 n승 그림자


인코더
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ghkstjqdl&logNo=221320942468

그레이코드

허용오차&전파지연으로 인한 인코더의 오류
=> 비트가 여러개가 바뀜으로 인한 전파지연발생가능성

01234567이 아닌 201023645467

그렇다면 비트 1개씩만 바꿔서 오류를 최소화하자!
https://woodforest.tistory.com/147

profile
새싹자라나욧!

0개의 댓글

Powered by GraphCDN, the GraphQL CDN