'leonardo'에 해당되는 글 2건

  1. 2017.05.08 인터럽트의 처리(2)
  2. 2017.03.20 대표적인 아두이노 보드의 특징
Embedded Lecture/Arduino2017. 5. 8. 20:34


인터럽트(interrupt)란 지정된 핀의 신호가 원하는 조건과 일치하면 미리 등록한 인터럽트 callback 함수(ISR; Interrupt Service Routines)를 자동으로 호출해주는 기능입니다. 이 ISR 함수는 사용자가 만든 함수이며, 이때 실행 중이던 loop() 함수 내부의 루틴은 인터럽트 callback 함수가 끝날 때까지 멈추게 됩니다.


즉, 특정 핀의 입력 상태가 바뀔 때 Arduino는 이를 자동으로 감지해서 모든 동작을 잠시 멈춘 다음, ISR(Interrupt Service Routines) 이라 불리는 미리 지정된 함수를 실행하고, 다시 원래 작업으로 복귀한다는 것입니다. 이를 '하드웨어 인터럽트'라 부릅니다. 이 외에도 비슷한 타이머(timer) 인터럽트가 있는데 이는 사용법이 전혀 다르므로 이 글에서 다루진 않습니다.

♧ 타이머 인터럽트 - AVR 칩을 비롯한 임베디드 시스템에서는 시간을 재기 위해서 타이머(Timer)/카운터(Counter)를 내장합니다. 만일 타이머/카운터가 없다면, 소프트웨어적으로 시간지연 함수를 사용해야 함으로써 MCU는 동작을 멈추게 되고, 이로 인해 MCU의 효율을 떨어뜨리게 된다는 것입니다.

뿐만 아니라 이와 같은 내장 타이머/카운터는 정확한 시간을 잴 수 있으며, MCU가 다른 작업과 병행할 수 있고, 미리 설정한 조건에서 타이머 인터럽트도 발생하게 할 수 있다는 것입니다. 이러한 각각 인터럽트들은 동시에 발생할 수도 있으므로 우선 순위를 갖습니다.


Arduino의 인터럽트 핀

Arduino Uno 기준으로 2개의 인터럽트 핀이 할당되어 있습니다. 즉, Number 0 (D2), Number 1 (D3). 몇개의 보드별 지원되는 인터럽트 핀은 다음과 같습니다. 인터럽트 callback(ISR)을 등록할 때 유의할 점은 핀 번호가 아니라 반드시 인터럽트 넘버를 사용한다는 것입니다. 예를 들어, 다음 표에서 Leonardo 보드는 Uno 보다 많은 5개의 인터럽트 핀을 제공합니다. 그리고 다섯번째 인터럽트 핀(int4)은 Number 7이라는 것입니다. 참고로 Arduino Due 보드는 모든 핀에 인터럽트가 지원됩니다.


 보드

 int0

 int1

 int2

 int3

 int4

 int5

 Uno/Ethernet

 2

 3

 x

 x

 x

 x

 Mega2560

 2

 3

 21

 20

 19

 18

 Leonardo

 3

 2

 0

 1

 7

 x


인터럽트 callback 함수(ISR)는 입력 인자가 없고 반환값이 없습니다. 즉 파라미터를 전달하거나 리턴할 수가 없다는 것입니다. 게다가 ISR 함수 내에서는 delay() 함수를 사용할 수 없습니다. 또한 milli second의 시각을 가져오는 함수인 millis()를 사용하더라도 값이 증가하지는 않습니다. delayMicroseconds()의 경우에는 인터럽트에 독립적이므로 정상 동작합니다.


뿐만 아니라 ISR 함수 내에서는 Serial data를 읽을 경우 값이 소실되며, 이전 글에서 언급했던 것처럼 ISR 함수 내에서 업데이트 되는 전역 변수는 volatile로 반드시 선언되어야 합니다. ISR 함수를 만드는 요령은 최대한 짧고 빠르게 수행되도록 간결하게 작성해야 합니다. 왜냐면 이 코드가 길어지는 만큼 CPU는 멈추어 메인 작업을 수행하지 않아 효율적이지 않다는 것입니다.


또한 여러 개의 ISR 함수가 등록되어 있더라도 동시에 수행되지는 않습니다. 블루투스 모듈과의 통신을 위해 주로 사용되는 Software Serial 라이브러리의 경우, 내부적으로 인터럽트를 사용하는 것으로 알려져 있습니다. 따라서 Uno 보드의 경우 D2, D3 에 연결해야만 정상 동작 가능합니다. 따라서 이를 회피하기 위해서 D0, D1 핀에 연결해서 Hardware Serial로 동작시킬 수 있습니다.



Posted by Nature & Life

Arduino 보드는 몇가지로 구분할 수 있습니다. 첫번째로 입문용 보드(Entry Level)입니다. 입문용 보드는 초급자들이 사용이 용이하여 기초 전자 지식을 쌓고 처음 코딩을 시작하기에 적합하다는 것입니다. UNO, LEONARDO, MICRO, NANO, MINI 보드 등이 여기에 해당합니다. 특히 MICRO, NANO, MINI 보드는 크기를 최소화 한 것으로 프로그램의 업로드시에 별도의 FTDI 케이블이 필요합니다. 뿐만 아니라 보드가 작기 때문에 대부분의 마이크로컨트롤러는 SMD 타입으로 고장시 초보자는 땜질(soldering)로 교체가 어렵습니다.

※ FTDI 케이블 - USB-Serial (TTL) 변환기로 TTL 장치(아두이노 보드)를 쉽게 USB에 연결할 수 있게 합니다. 언듯 보기에 단순 케이블로 보이지만 USB 커넥터안에는 FT232RQ칩 등이 내장되어 있습니다.


※ SMD(
Surface Mount Device) 타입 - 전통적인 DIP(Dual Inline Package) 타입의 부품들은 기판에 홀이 있어 꽂을 수 있지만, SMD 타입의 부품들은 홀이 없이 부품을 동박면에 얹은 상태로 땜질을 하게 됩니다. 예를 들어, SMD 부품의 동박면에 미리 솔더크림을 바르고, 부품을 얹은 다음 고열을 가해 크림을 녹이므로써 단단한 납으로 변하여 고정됩니다. 이는 기존의 타입에 비해서 부품 패키지가 작아지므로 칩 자체의 성능이 개선될 뿐만 아니라, PCB 입장에서도 홀이 없어 배선이 용이하고 부품의 실장 개수도 증가하며 전반적으로 성능이 개선됩니다.


두번째는 중급용 보드(Enhanced Features)입니다. 향상된 기능과 빠른 성능을 요구하는 좀 더 복잡한 프로젝트에 적합합니다. 이러한 이유로 입출력 핀은 입문용 보드보다 훨씬 많습니다. 대표적인 보드로는 MEGA, DUE, MEGA ADK, PRO, M0 등이 있습니다.

세번째는 사물인터넷(Internet of Things; IoT)에 쉽게 이용할 수 있는 보드로 인터넷에 연결할 수 있는 기능을 제공합니다. 예를 들어, YUN, ETHERNET, TIAN, Industrial101, MKR1000, YUN Mini 보드 등이 여기에 해당합니다. 이외에도 교육 목적이나 Wearable, 3D printing 용도의 보드들도 선보이고 있습니다.

위와 같은 보드(board) 이외에도 모듈(module)과 쉴드(shield)가 있습니다. 모듈과 쉴드는 보드와 흡사하지만 차이가 있습니다. 먼저 모듈은 사용자의 보드에 장착할 수 있도록 핀헤더가 마련된 것이 대부분이고, 이 모듈은 사용자가 원하는 기능을 업로드하여 자체적으로 동작합니다. MICRO, NANO, MINI 보드가 모듈에 해당합니다.

반면에 쉴드는 아두이노 보드에 장착할 수 있는 사용자의 확장 보드로 스스로 동작할 수는 없습니다. 예로써 MOTOR Shield는 아두이노 보드를 이용하여 실제 모터를 구동하기 위해서 제작한 응용 보드입니다. 때로는 사용자가 전자 회로를 직접 꾸밀 수 있도록 PROTO Shield도 제공하는데 이는 PCB만 제공하는 것으로, 핀아웃(Pinout) 배열이 같아 아두이노 보드에 Stack 형태로 장착할 수 있으며 몇가지의 footprint를 만들어 놓아 IC나 저항 등과 같은 소자들을 쉽게 남땜할 수 있습니다.

다음은 대표적인 Arduino 보드를 비교하였습니다.

보드

Microcontroller

동작전압

디지털 I/O

PWM

아날로그I/O

Flash[KB]

SRAM[KB]

EEPROM[KB]

Clock[MHz]

크기[mmxmm]

 특징

Uno

 ATmega328

5

14

6

6

32

2

1

16

68.6x53.4

가장 보편적

Leonardo

 ATmega32u4

5

20

7

12

32

2.5

1

16

68.6x53.3

 컴퓨터 주변장치 인식 가능

Micro

 ATmega32u4

5

20

7

12

32

2.5

1

16

48.0x18.0

 

Nano

 ATmega328

5

22

6

8

32

1

0.51

16

45.0x18.0

 

Mini

 ATmega328

5

14

 

6

32

2

1

16

30.0x18.0

작지만 업로드시 별도의 FTDI 모듈 필요 

Due

 Atmel SAM3X8E

3.3

54

12

12

512

96


84

102.0x53.3

 강력한 프로세싱

Mega

 ATmega2560

5

54

15

16

256

8

4

16

102.0x53.3

다수의 장치 연결 가능 

M0

 Atmel SAMD21

3.3

20

12

6

256

32


48

68.6x53.3

 

Yun Mini

 Atheros AR9331

3.3

20

7

12

32

2.5

1

400

71.1x23.0

Ethernet과 WiFi 가능

Ethernet

 ATmega328

5

20

4

6

32

2

1

16

68.6x53.4

 

Tian

 Atmel SAMD21,

Atheros AR9342

5

20

12


16000

64000


560

68.5x53.0

 

Mega ADK

 ATmega2560

5

54

15

16

256

8

4

16

102.0x53.3

 안드로이드 연결 가능

M0 Pro

 Atmel SAMD21

3.3

20

12

6

256

32


48

68.6x53.3

 

Industrial 101

 ATmega32u4,

Atheros AR9331

5

7

2

4

16000

64000

1

400

51.0x42.0

 

Leonardo Ethernet

 ATmega32u4,

W5500

5

20

7

 12

 32

 2.5

 1

 16

 68.6x53.3

 

MKR1000

 ATSAMW25

3.3

8

12

 7

 256

 32

 

 48

 64.6x25.0

 


자세한 비교 정보는 다음의 링크를 참조하시기 바랍니다.

https://www.arduino.cc/en/Products/Compare



Posted by Nature & Life