아두이노 How to (h2) 시리즈는
전자과를 졸업하고 전자과를 또 다니는 주인장 NSD로서
임베디드 관련 논문을 쓰고나서 MCU에 관심이 생긴사람,
10년을 함께한 기계공학 석사생 Marius를 위해 쓰는 글입니다.
내가 아는 한계 내에서
이론과 실무를 같이 지껄여 볼 터이니
보고 따라해도 되고, 안 보고 안 따라해도 됩니다.
[MCU] T - Theoretical Seriese (이론)
[MCU] P - Practical Seriese (실습)
내 블로그에 디지털 발을 들인 이상
브금은 틀고 시작해야합니다.
목차.
A. MCU - 마이크로 프로세서 유닛.
A1. GPIO, General Purpose Input Output
A2. Serial Communication, 시리얼 통신
A2e1 ~ e5 시리얼 통신의 예시, e.g.
A3. Parallel Communication, 병렬 통신
A3e1 ~ e2 페러렐 통신의 예시, e.g.
B. Arduino
B.1 Arduino 종류
A. MCU - 마이크로 프로세서 유닛.
입출력은 뭐냐.
A1. GPIO, General Purpose Input Output
디지털 형태, 1과 0을 입력받거나 출력할 수 있는 포트를 부를 때 주로 쓴다.
PWM과 같이 펄스파를 출력할 수도 있고,
여러 핀을 묶어 (함께 사용하여) 병렬 통신 형태로 쓸 수도 있다.
GPIO의 좀 더 심화된 내용은
3편, "신호 및 시스템"에서 다룰 예정이다.
A2. Serial Comm. 시리얼 통신 (직렬 통신)
우유에 말아먹는 시리얼은 Cereal 이다. 헷갈리지 말자.
기기 혼자서 숫자놀이 하고 끝.이 아니라,
다른 기기나 주변장치 (디스플레이, 센서...)에게 그 값을 보내고 싶을 때 쓰는 방법.
여러 비트의 1과 0을, 하나의 신호선 (또는 소수의 신호선)을 통해
한 비트씩 데이터를 전송하는 방식이다.
그 데이터의 형태는
ASCII 코드 가 될 수도, 8비트 unsigned Integer가 될 수도 있다.
데이터의 형태와 종류는 2편 "자료의 형태"에서 다룰 예정이다.
통신은 "동기식"과 "비동기식"으로 나뉜다. 역시 대학 동기를 말하는게 아니다.
서로 기준 클럭을 공유하고, 그 클럭(구형파)에 맞춰 데이터를 보내면 " 동기식 ", Syncronous
그런거 없이 자기만 가지고 있는 클럭에 맞춰 보내버리면 "비동기식" Asyncronous
자세한 내용은 4편. "시리얼 통신" 편에서 다룰 예정이다.
대표적인 직렬통신의 예를 보자:
A2e1 - SATA (컴퓨터의 HDD와 SSD 등을 연결). 그 약자가 Serial - ATA이다.
- 버전에 따라 3Gb/s (초당 3 기가 개의 비트를 전송), 6Gb/s 를 전송할 수 있다.
- 아두이노와는 상관없다. 그냥 이런게 있구나 하면 된다.
A2e2 - USB. Universal Serial Bus
여기서 버스는 7726시내버스의 버스가 아니라, 통신하는 구녕, 포트를 지칭한다.
(관련된 joke로 빅뱅이론에서 다룬 적이 있다)
USB 2.0을 기준으로,
- 전원선 2개
- 통신선 2개
를 사용한다.
https://www.youtube.com/watch?v=wdgULBpRoXk&t=410s
코쟁이 중에 이를 상세하게 잘 설명한 사람이 있다.
영어 듣기 평가 연습도 할겸, 궁금하면 나중에 한 번 보는걸 추천한다.
(키보드에서 c를 눌러 자막을 띄우면 좀 나을텐데, 자동생성 자막 싱크가 잘 안맞는다.)
(나중에 시간 되면 한글 자막 작업해서 유투브에 올려드림)
장점:
- 빠르다.
- 하위 호환 (USB 1.1, USB 3.0, USB 3.2 ...)이 된다.
- Hot plug, Plug & Play를 지원한다. (꽂고 본체를 껏다켜지 않아도 된다)
단점:
- 복잡하다. 프로토콜이 복잡하다.
- 통신 에 필요한 컴퓨팅 파워 ( CPU 로드 ) 가 있다. 저렴한 MCU보드에서 직접 구현하긴 어렵다.
아두이노 레벨에서 직접 만들어 쓸 일은 없을 것이다.
대부분 통신 관련된 칩셋이 보드에 따로 올려져있고, 이 것이 아두이노 메인 프로세서에 다른 통신형태로 연결되어있다.
그냥. 그렇구나. 하고 잊어버리면 된다.
A2e3 - UART. 마이크로 컴퓨팅에서 "시리얼" 통신은 대부분 UART를 지칭한다. 폼 팩터는 RS-232포트.
(폼 팩터: "형태" 정도로 번역할 수 있겠다.)
- 어마어마하게 오래된 기술이고
robust함 (튼튼?함??), 단순함 등으로 인해
산업현장과 MCU에서 여전히 많이 쓰이고 있다.
- 아두이노 역시 UART를 사용한다.
펌웨어를 올릴때, 컴퓨터의 시리얼 모니터와 통신할 때, 다른 아두이노와 UART 통신할 때
사용할 수 있다.
단, UART 포트는 1개뿐이라, 다른 아두이노와 통신할때는 잘 안쓰는 편이다.
- 일 대 일, 일부일처제의 형태로 통신한다.
내 컴퓨터에서 여러 UART 장비와 통신하고 싶으면,
여러개의 UART 통신포트가 있어야 한다.
- Tx와 Rx를 크로스해서 꽂아야한다.
Tx는 트랜스미터 (입)
Rx는 리시버 (귀)
역할을 한다. Tx끼리, Rx끼리 연결하면 통신이 안 된다. (귀를 맞댄 키스? 의사소통은 안된다.)
- 워낙 오래전 기술이다보니,
기기별로 최대 전송 속도가 다르다.
UART 통신 시작시에는 양쪽 기기에 [ 어느 속도로 통신할지 ] 사람이 설정해주어야 한다.
이를 Baud rate, 버드레이트가 아닌, "보오-레이트" 라고 부른다.
A2e4 - I2C, I^2C, "아이-스퀘어-씨" 또는 "아이-투-씨"
- 일 대 다 연결, 일 대 일 통신을 지원한다. 일부다처 / 일처다부제라고 생각하면 된다. 잠자리도 쓰리썸이 안되는게 같다
- 브로드캐스팅은 지원 (일대다 일방향 통신)한다.
다처/다부를 앉혀놓고 일부/일처가 공지사항 잔소리를 방송하는 것이라고 생각하면 되겠다.
- 신호선을 공유한다. 같이 연결된 두 녀석이 떠들고 있으면 나머지는 입을 다물어야만 한다.
신호선은 물리적으로 길게 잡을 수는 없다.
빵판 한 개 범위 내가 그 한계라고 보면 된다.
- 동기화 통신이다.
SDA가 데이터,
SCL이 클럭이다.
(동기화가 뭔지 까먹을 것 같다. 적어도 과거의 나라면 그랬을듯.
클럭신호에 맞춰 데이터를 보낸다.)
- 각 장치의 역할놀이, 롤 플레잉으로는 Master와 Slave가 있다.
주인님이 모든 것을 관제한다.
주인님은 보통 하나로 잡는다.
멀티 주인님도 가능하지만, 그러면 컬리젼 디텍트 / 컬리젼 어보이던스,
CSMA나 CSMA/CD와 과 같은 매체 제어를 해야한다.
통신 과목을 들어야 이론을 알 수 있다.
중급 레벨로 가면 이론과 같이 설명해줄게.
일단은 주인놈은 하나만 잡자.
주인님께서 [자네 할 말이 있는가]라고 묻기 전까지
노예놈은 하고싶은 말이 있어도 감히 말을 할 수 없다.
주인님께서 이름을 만들어 불러 주기 전까지
노예놈은 그저 하나의 몸짓에 지나지 않을 뿐이다.
(김춘수의 꽃)
나는 학교에서 I2C를 3학년때 배웠다.
내가 교수라면 1학년 강의에 I2C 꼭 넣는다.
별로 어려운것도 아닌데 '컴퓨터 아키텍쳐'에서 가르치는게 말이 되냐.
그것도 이론만 살짝 핥고 넘어갔다.
실제로 써보기까지 오랜 시간이 걸렸다.
막상 써보면 별거 없다.
A2e5 - SPI
잠만 기둘. 손목이 너무 아픔 ㅠ
A3. Parallel Comm. 병렬 통신
한 번에 보낼 데이터의 비트수만큼 통신핀을 가지고 있다.
8비트 데이터를 보낸다? 8비트의 통신핀을 잡으면 된다.
500비트 데이터? 500개의 통신핀을 연결하면 된다.
장점
- 굉장히 빠르다. 한 번에 뭉테기로 보내버리니 직렬포트를 발라버린다.
단점
- 매우 복잡하고 비싸다. 핀 여러개를 제어하는 하드웨어는 가격이 오르고, 싱크 등 맞춰야할 특성이 있다.
저렴하고 작은 직렬통신의 성능이 올라가면서
병렬통신은 컨슈머 프로덕트, 일반 시장 제품에서 사장되었다. X __ X
아두이노 GPIO핀을 통해 병렬통신을 할 수 있다.
A3e1 - IDE, Parallel ATA 포트
옛날 옛적 컴퓨터에서 쓰이던 방식이다.
A3e2 - 7 Segment, 세븐 세그먼트 디스플레이.
기본으로 7개의 LED, 지랄 발광 다이오드를 보기좋게 레진으로 묶어놓은 디바이스이다.
숫자는 점이나 대각선 등으로 추가될 수 있다.
사실 7세그먼트를 아두이노에 바로 연결하는것은,
LED 7개를 그냥 연결하는 것이라
병렬통신이라고 보기 어렵다고 주장할 수도 있다.
맞다. 그레이 존에 있다고 생각한다.
그러나 통신의 정의,
" 원하는 데이터를 / 다른 장치에 / 어떠한 물리적 신호를 통해 / 보내거나 받는 " 행위에서
어긋난 것 하나 없으므로 "병렬통신"이라고 지칭할 수 있겠다.
한 번에 7비트 데이터를 같이 보내는 형태.
병렬통신의 그 예이다.
7세그멘트를 여러개 연결하는 두가지 방법
(switching / 드라이버) 관련해서는
추후 페리페럴 (Peripheral) 장치때 다룰 예정이다.
B. Arduino
이탈리아에서 만들어진 제품명이다.
RISC 아키텍쳐, Atmel 사의 AVR 프로세서를 사용한다. Arm 아키텍쳐를 쓰진 않는 것 같다.
8비트 프로세서 (한 번에 8비트단위로 처리한다)이고 속도는 약 16MHz.
아두이노 + 액체질소로 60MHz 넘게 오버클럭을 한 사람도 있다.
https://www.youtube.com/watch?v=KVRvWmcxnA0
설계도가 오픈소스로 공개되어있다. Atmel 사의 프로세서만 사다가 PCB 설계해서 팔면 합법이다.
그래서 내가 마리우스 케어테이크 패키지에 담아준 6장의 아두이노 보드는
"불법 짜장면 짝퉁"이 아니라, "아두이노 호환보드"이다.
장당 3달러를 안줬다. 이 쩜 몇달러.
고장나면 쓰레기통으로 직행하면 된다.
애들 장난감. 맞다.
그러나 개발과 관리가 쉽다고해서 강력한 툴이 아닌 것도 아니다.
내가 준 와이파이 모듈만 하더라도
아두이노보다 연산성능이 좋았으면 좋았지 떨어지지는 않지만,
다목적성 다양한 옵션이 주는 무기는
만지작거리는 주인만이 끌어쓸 수 있는 강력한 것이다.
B.1 아두이노의 모델 종류
- Uno
- Nano
- Micro
- Mega
- Et Cetera. 기타.
B.1.a. Uno
- 13개의 GPIO핀
- 6개의 아날로그 핀
- I2C, UART (USB포트 & 직결포트), SPI 통신 가능.
- 3.3V & 5V 출력
- USB 5V전원 + 6 ~ 20V 전원잭 or Vin 포트
(내가 건전지 어댑터랑 동그란 잭을 같이 준 이유는, 9V 건전지로 전원잭에 공급해도 정상작동한다)
(여러 아두이노를 쓸 때, 한 아두이노의 5V포트와 다른 아두이노의 Vin포트를 연결해주면 전원을 공유한다)
- 리셋 버튼
- Atmega 328P (또는 168) 칩셋
B.1.b. Nano
우노를 소형화한 녀석이다. 둘이 똑같은 놈이고, 다이어트했다고 보면 된다.
중국에서 사면 핀이 납땜된 것과, 납땜되지 않은 것 두 개를 살 수있다.
핀 납땜을 안 하면 사이즈가 정말 작다. USB포트도 뜯어버리면 진짜 얇아진다.
B.1.c. Micro
Uno - Nano와 같이
레오나르도라는 녀석을 소형화시킨 버전이다.
우노-나노와
레오나르도-마이크로의 가장 큰 차이는
"USB 통신이 가능하다는 점" 정도가 있다.
(스램이나 이이피롬이 좀 더 큰 것 등의 차이도 있으나, 고놈이 고놈이다)
프로세서에 내장된
USB 프로토콜 지원 기능 덕분에
USB 관련 기능을 쓸 수 있다.
키보드 마우스를 에뮬레이트 할 수 있는것 외에도
PC와 통신하면서 동시에 다른 UART 장치와 통신할 수 있다는게 큰 강점이다.
나는 Marius에게 이걸 주고싶었다.
가격이 비싸서 (약 10달러) 몇장 안 사둔 바람에 줄게 없었다ㅜ
조만간 같이 사자.
B.1.c. Mega
우노에 스테로이드와 비아그라를 주입한 모델이다.
주 기억장치 (RAM)과 보조기억장치 (플래시)가 조따 커졌다.
(우노를 쓰다보면 메모리부족은 늘 온다. 추후 EEPROM에 고정변수를 넣어 메모리 다이어트하는 방법을 다룰 예정이다.)
GPIO가 어마어마하게 많아졌다. 54개.
나는 우노 2개 + I2C통신으로
2CPU 컴퓨터처럼 사용했다.
물론 프로그래밍은 훨씬 복잡해진다.
하지만 Mega는 싼 보드가 잘 없다.
(나 학생때를 Marius는 기억하겠지만, 알거지였다.)
외에도
무선랜 칩셋을 박은 Uno wifi,
ARM Coretex M0 프로세서의 고성능 칩셋을 박은 제로
3.3볼트 기반, 메가의 변종인 두에
등등이 있다.
아두이노 자체가 엔트리급 레벨이라
성능도 구리고 좀 뒤쳐진 감은 있지만
강력한 커뮤니티 라이브러리 자료가 널려있고
손쉬운 툴 (IDE)로 새로 접하기 좋다.
사람 쓰라고 만든건데
사람이라면 못 쓸 이유는 없다.
겁먹지 말구 천천히 천천히 호작질 같히해보자.
다음 글은
1. 프로그램 설치, 드라이버 설치, 예제 업로드
가 될 예정이다.
'1.B. Low Level Engineering > Micro Controller Unit' 카테고리의 다른 글
[MCU] P3. 적외선 리모컨 사용하기 (수신, 발신) (0) | 2023.03.21 |
---|---|
[MCU] P2. PWM 신호 만들기 (LED 밝기조절, 피에조, 모터 신호...) (0) | 2023.03.06 |
[MCU] P1. I2C 디스플레이 연결하기 (1602A LCD + Adafruit OLED) (0) | 2023.02.15 |
[MCU] T1.1 (정수) 데이터란 Intro. to Datum (0) | 2023.02.03 |
[MCU] P0. IDE & 드라이버 설치, 예제 (0) | 2023.01.31 |
Comment(s)