:::: MENU ::::
Posts tagged with: Arduino

SPI of Arduino

SPI of Arduino

ArduinoMOSIMISOSCK
UnoD11 or ICSP4D12 or ICSP1D13 or ICSP3
Mega256051 or ICSP450 or ICSP152 or ICSP3
LeonardoICSP4ICSP1ICSP3
DueICSP4ICSP1ICSP3

SPI 신호들은 ICSP핀이나 보드의 우측 상단(AREF 있는 쪽)에 같이 연결된 경우도 있으나, 그렇지 않은 경우도 있다. 그러므로 SPI를 사용하는 쉴드를 디자인 할 경우 라우팅을 쉽게하기 위해 한쪽만 SPI를 사용하려면 ICSP핀 쪽에만 연결을 하면 된다.


mbed – SeeedArch 프로그래밍하기

SeeedArch

mbed의 플랫폼 중의 하나인 Seeedstudio에서 만든 보드, SeeedArch를 테스트중이다. 이 보드의 스펙은 다음과 같다.

  • mbed enabled
    • online development tools
    • easy to use C/C++ SDK
    • lots of published libraries, projects
  • Standard Arduino Appearance, two Grove connectors
    • available with 3.3V compatible shields
    • a large number of grove modules
  • Drag-n-drop programming
  • NXP LPC11U24 MCU
    • Low power ARM Cortex-M0 Core
    • 48MHz, 32KB Flash, 8KB RAM, 4KB EEPROM
    • USB Device, 2xSPI, UART, I2C

이 보드의 가장 큰 특징은 보드의 형태가 아두이노 보드와 같아서 아두이노 쉴드를 연결할 수 있다.

800px-Arch_Pinout.jpg

코딩은 mbed의 웹컴파일러로 하고 다운로드 역시 msd로 잡히는 외장드라이브에 copy를 하면 되는데, Mac이나 Linux에서는 Windows와 달리 drag & drop이 안된다.

프로그래밍 방법 (Mac)

  • 보드의 왼쪽에 있는 리셋 버튼을 길게 누른다. (짧게 누르면 H/W 리셋이고, 길게 누르면 ISP 모드이다.)
  • 그러면 Finder에 CRP DISABLED 라고 스토리지가 잡힌다. Windows에서는 이 폴더에 있는 firmware.bin을 지우고 새로운 firmware.bin을 copy하면 되지만 Mac에서는 Terminal에서 다음과 같이 dd 명령어로 copy한다.
  • dd if=새로운 firmware 파일명 of=/Volumes/CRP\ DISABLD/firmware.bin conv=notrunc

좀 더 쉽게하기위해서 Mac의 Automator를 사용하여 쉘 스크립트를 만든다.

  • dd if=$* of=/Volumes/CRP\ DISABLD/firmware.bin conv=notrunc

Automator_SeeedArch

LED blink 프로그래밍

SeeedArch

관련정보: SeeedStudio WiKi


Arduino Ethernet 라이브러리 업데이트

WZnet 칩 W5100, W5200과 W5500을 지원하는 통합 아두이노 라이브러리인 Arduino Ethernet 라이브러리를 업데이트 했다. 기존 코드에서 달라진 점은 다음과 같다.

  • Arduino IDE 1.5.x 지원 : Arduino Due를 지원하기 위함.
  • Due용  SPI 드라이버 추가
  • W5200및 W5500의 경우 SPI드라이버 속도를 높였다. 무려 42Mhz까지 지원
  • w5100::read_data함수의 파라미터의 형 변경
  • flush() 함수 추가

Arduino IDE 1.5.xx를 지원하기 위해서는

  • 32비트 SAM용 SPI 드라이버가 추가 되야한다.
  • IDE 1.5.x의 폴더 구조가 바뀌어서 헤더파일 include가 변경된다.아래 그림 참고…  예를 들면 #include “w5100.h”가 #include “utility/ w5100.h” 이런 식으로…

Arduino_Folder

  • AVR코드와의 구별은 #if defined (ARDUINO_ARCH_AVR)로 한다.

W5500 SPI

W5500_SPI

데이터 시트에는 이론상 80Mhz까지 가능하다고 나오지만 실제로는 33Mhz 정도가 최대 SPI clock으로 명기해 놓고 있다. 그리고 Atmel SAM에서  SPI clock은 다음과 같이 결정된다. 즉 메인 클럭을 분주해서 사용을 하는데, 아두이노에서는 84Mhz를 메인으로 사용하므로 14Mhz, 28Mhz, 42Mhz, 84Mhz가 설정이 가능하다.

SAM_SPI

 

아두이노 코드에서는 다음과 같이 클럭을 분주해서 42Mhz가 가능하다. 1로 분주하면 84Mhz 인데, 칩에서는 80Mhz까지만 지원하므로 84Mhz는 지원이 안된다. 42에서 84는 갭이 크다…

참고로 아두이노에서 W5100의 SPI는 4Mhz로 설정이 되어 있으니, 거의 10배 이상이 빨라짐~~


Arduino 코드에서 WIZnet칩 구별하기

WIZnet 칩

WIZnet 칩중에서 SPI가 지원되는 칩은 W5100, W5200 그리고 W5500이 있다. 이중 W5100은 아두이노에 적용이 되어 Ethernet Shield 및 Arduino Ethernet 보드에 사용이 되고 있다. 물론 W5200으로 만든 Ethernet Shield도 있고 W5500으로 만든 Ethernet Shield도 있다. 그리고 최근에는 아두이노 팀에서 W5500으로 Ethernet Shield를 만들고 있다. 이렇게 3가지 칩으로 적용된 보드가 있는데, 그럼 코드에서 이 칩들을 구별할 수 있는 방법이 있는가?

Arduino 코드에서 WIZnet칩 구별하기

W5100, W5200, W5500의 칩들의 기본 기능은 같지만 H/W적으로는 패키지도 다르고 핀도 다르고, 내부 메모리 맵도 다르다. 모두 SPI 를 사용하지만 칩을 제어하기 위한 SPI format도 다르다. 그리고 W5100은 소켓이 4개이고 나머지 칩들은 모두 8개의 소켓을 지원한다.

코드에서 이들 칩을 구별을 하려면 이 칩들의 내부 레지스터를 읽어서 각 칩들에만 유효한 값을 확인해서 비교를 해야한다. 다행히 W5200과 W5500은 칩의 버젼을 구분하는 레지스터가 있다. 따라서 이들 2칩을 구분하면 3개중 2개를 구분이 되니 W5100은 구분이 가능하다. 즉 W5200이 경우 version 레지스터(0x001F)를 읽으면 0x03이 읽히고, W5500의 경우 0x0039 번지를 읽으면 0x04가 읽힌다.

 W5100W5200W5500
0x001F0x000x030x00
0x00390x000x000x04

아두이노 코드

아래 코드는 아두이노 Ethernet 코드를 수정하여 만든 코드이고, Webserver.ino에서 테스트를 했다.

관련 코드는 : https://github.com/jbkim/Differentiate-WIznet-Chip


오픈 소스 하드웨어를 위해 정부가 할 일?

오픈 소스 하드웨어

업무때문에 2010년도에 아두이노팀을 만나고 오픈소스 하드웨어에 관심을 갖게되어서 뉴욕에서 열린 오픈하드웨어 서밋에도 참석을 하고, 메이커페어도 참석을 했다. 이후에 아두이노 IDE가 다국어 버젼을 지원을 할때, 한국어 번역도 하고(덕분에 지금도 버젼이 바뀌면 메일이 온다…) OSHW definition 도 번역을 했다.  최근 아두이노의 영향때문에 크라우드 펀딩 사이트인 Kickstarter.com에도 아두이노로 검색을 하면 161여개의 프로젝트가 뜬다.

Kickstarter_Arduino

ICT D.I.Y

국내에도 오픈소스 하드웨어에 대한 관심아 졌는데 특히 정부에서도 이 분야에 관심을 가지고 있는듯 하다. 미래창조과학부의 보도 자료에 의하면 2017년까지 ICT R&D예산 총 8.5조를 투자하는데 이중 15대 미래서비스 중 하나로 들어가 있는 것이 ICT D.I.Y서비스 이다. 물론 IoT플랫폼도 오픈 소스 하드웨어와 관련이 있다. 그런데 몇가지 궁금한 점이 있다.

“한류(국산) 오픈 소스 하드웨어 플랫폼”?

기술적으로 국산 오픈 소스 하드웨어 플랫폼이 가능하려면 사용되는 모든 부품 특히 MCU를 만들어야 하는데, 호환성 없는 즉 전혀 생소한 개발 환경의 제품을 만들어 내지는 않을까 우려가 된다. 즉 한국형이라는 말로 정말 한국에서만 쓰이는… 또는 정부 과제를 위한 사업들로 전락하는 것은 아닌지 우려스럽다.

개인적인 바램은 이런 사업으로 중소기업 또는 개인이 이런 플랫폼으로 쉽게 자신의 아이디어를 구체화하고 검증하며 시제품을 만드는데 도움을 줘야한다.

특히 요즘은 하나의 제품을 만드는 것이 단순히 하드웨어를 만드는 것 뿐만 아니라 S/W, 스마트폰 앱, 인터넷 서비스 까지 신경을 써야하기 때문에 이런 부분의 전문가들이 서로 협업을 할 수 있는 공간과 미국의 TechShop처럼 Tool들의 사용법을 가르치고 사용할 수 있는 기반이 필요하다.

또한 해외의 유명 커뮤니티처럼 국내에서도 이런 커뮤니티를 육성하고 지원을 해줄 수 있는 제도도 필요하다. 국내의 카페형 커뮤니티는 너무 폐쇄적임…

너무 이상적인 이야기인가?


Intel Galileo board와 Arduino Tre

Intel Galileo Board

최근 아두이노는 매년 메이커페어에서 신제품의 출시에 대한 내용을 발표하는 것 같다. 올해는 지난 주말에 이태리 로마에서 있었던 메이커페어 유럽에디션에서 인텔과의 협력으로 나온 보드인 Intel Galileo Board를 발표를 했다. PC 기반의 칩셋업체인 인텔이 임베디드분야에 그것도 오픈하드웨어에 발을 담그기 시작한 것이니 최근 오픈 소스 하드웨어의 열풍이 세상을 변화시키고 있는 것은 확실한 것 같다.

그런데 한가지 재미있는 것은 이 제품이 아두이노의 “Arduino Certified” 제품군에 들어간 것이다. 우리가 익히 알고 있듯이 인텔은 자신들의 칩셋을 PC 업체에 공급을 하면서 Intel Inside라는 로고를 붙이게 했다. 하지만 오픈소스하드웨어 시장에서는 도리어 아두이노가 거대 기업 인텔에게 “Arduino Certified”라는 로고를 주다니…

Arduino Certified & Arduino at Heart Program

아두이노가 유명세를 타면서 많은 클론과 카피켓들이 나오고 있는 상황에서 “Arduino Certified”는 이에 대한 대안으로 생각이 된다. 이제 시장에서 “Arduino Certified”가 붙지 않은 제품들은 아무래도 입지가 좁아들 것이고, 반대로 아두이노는 더 큰 영향력을 갖게 될 것이다.

ArduinoAtHeart_logo

이것과 함께, Arduino at Heart Program이 소개가 되었는데, 이것은 Atmel 칩을 사용하면서 아두이노 플랫폼에 기반한 제품들에 주는 로고이다. 즉 아래 칩들을 사용한 제품이 아두이노 기반의 코드로 만들어 있다면 Arduino at Heart 로고를 준다. 아마도 이것은 Atmel과 같이 기획한 냄새가 많이 나는데, 오픈소스하드웨어가 기존의 프로토타입이나 하비스트의 제품을 넘어서 완제품까지 연결이 되는 시대가 왔음을 시사하는 것 같다.

  • ATMega328 clocked at 8 or 16 MHz
  • ATMega1280 clocked at 16 MHz
  • ATMega2560 clocked at 16 MHz
  • ATMega32U4 clocked at 16MHz
  • SAM3X

이 프로그램의 혜택은 아두이노 커뮤니티의 도움을 얻을 수 있고, 사용자가 커스터마이징이 가능하며, 아두이노 채널(홈페이지, 트위터 및 기타 마케팅 채널)을 통해서 프로모션을 해준다는 것. 물론 이 로고를 붙이기 위한 라이센스 비용이 필요하다. -_-;;

Intel® Quark SoC X1000 Application Processor

아무튼 보드의 스펙을 보면 펜티엄기반 Intel® Quark SoC X1000 Application Processor를 사용하고, 아두이노의 IDE 를 사용해서 프로그래밍이 가능하다. 물론 기존의 쉴드들도 사용이 가능하다고 한다.

관련기사: http://blog.arduino.cc/2013/10/03/massimo-banzi-reveals-an-exciting-new-product-and-collaboration-with-intel/

개봉기: http://www.flickr.com/photos/brucesterling/sets/72157636182707015/

Arduino Tre

Arduino Tre

Tre는 이태리어로 3이라는 뜻인데, 기존 Uno, Due보드의 후속의 성격이다. 하지만 TI의 1-GHz Sitara AM335x을 사용해 우노나 네오나르도 보드보다 100배 빠르다고 한다. Arduino Yun보드가 리눅스를 사용한 것 처럼 이보드 역시 리눅스 기반인데 더 의미가 있는 것은 Beagleboard와 협력해서 나온 작품이라는 것이다.

즉 Beaglbone Black에 사용된 동일한 칩을 사용하고 있다. 인텔과의 콜레보레이션에 이어 TI와 콜레보레이션 이라… 아두이노는 8비트 기반에서 High-end로 가고 싶었고, BeagleBoard는 아두이노의 다양한 쉴드 및 커뮤니티를 원했던 것이 아닌가 생각이 된다. ^^*

관련기사: http://beagleboard.org/blog/2013-10-03-beagleboardorg-collaborates-with-arduino/


MQTT

MQTT stands for MQ Telemetry Transport. It
is a publish/subscribe, extremely simple and lightweight messaging protocol,
designed for constrained devices and low-bandwidth, high-latency or unreliable
networks. The design principles are to minimise network bandwidth and device
resource requirements whilst also attempting to ensure reliability and some
degree of assurance of delivery. These principles also turn out to make the
protocol ideal of the emerging “machine-to-machine” (M2M) or “Internet of
Things” world of connected devices, and for mobile applications where bandwidth
and battery power are at a premium.


Gmail의 메일을 확인해 주는 파이썬 스크립트

Gmail 계정에 새로운 메일이 있는지 확인해 주는 파이썬 스크립트이다.

Feedpaeser라이브러리가 필요하다. http://code.google.com/p/feedparser/

파이썬에서 시리얼을 쓰러면 Pyserial도 필요하다. http://pyserial.sourceforge.net/

import serial, sys, feedparser

#Settings - Change these to match your account details
USERNAME="[email protected]"
PASSWORD="yourpassword"
PROTO="https://"
SERVER="mail.google.com"
PATH="/gmail/feed/atom"

SERIALPORT = "/dev/tty.usbserial-FTDK0P3M" # Change this to your serial port!

# Set up serial port
try:
    ser = serial.Serial(SERIALPORT, 9600)
except serial.SerialException:
    sys.exit()

newmails = int(feedparser.parse(
    PROTO + USERNAME + ":" + PASSWORD + "@" + SERVER + PATH
)["feed"]["fullcount"])

# Output data to serial port
if newmails > 0: ser.write('M')
else: ser.write('N')

# Close serial port
ser.close()

이 코드를 일정한 시간 간격 주기적으로 실행을 하려면, Mac OS X에서는 Launchd가 필요.

Launchd관련 정보 http://zcode.sunji.net/groups/zcode/wiki/4c5b5/launchd__lingon.html

Arduino + Ethernet shield로도 가능할 듯..


아두이노 IDE 빌드 환경 만들기

아두이노 IDE의 한글화를 진행하기 위해 윈도우즈 환경에 아두이노 IDE 빌드 환경을 세팅을 했다. 

1. 개발툴 설치

필요한 사항: Cygwin, Java JDK, ant가 필요하다.

1) Cygwin : Cygwin 은 윈도우즈 환경에서 리눅스를 쓰기위한 툴이다. 이걸 다운로드 한다. http://www.cygwin.com/setup.exe

    다운받은 파일을 실행시키고, 필요한 패키지만 선택을 해서 다운로드 받는다.

    필요한 패키지는 git, make, gcc-mingw, g++, perl, unzip, zip, coreutils, gzip, tar 이다.

    각각의 이름을 search해서 바이너리만 받는다. 

    국내 미러사이트가 없는데, 위치상으로 가까운 일본쪽 미러사이트를 선택을 하면 빨리 다운로드 받을 수 있다.

2) ant :아파치 Ant는 자바라이브러리 및 command-line 툴인데 빌드할때 필요하다.  http://ant.apache.org/bindownload.cgi 에서 

   다운로드하고 설치를 한 다음에, apache-ant-xxx\bin 를 PATH에 추가한다.

3) Java JDK: 오라클 홈페이지에 가서 다운로드하고 설치한다.

    http://www.oracle.com/technetwork/java/javase/downloads/index.html

   시스템 환경 변수에  다음 그림과 같이 JAVA_HOME를 추가하고 설치한 JDK의 위치를 설정한다.

   만약 이 설정이 제대로 되지 않으면 빌드를 할때 “Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre6\lib\tools.jar” 이런 에러메시지가 뜬다.

    

2. Github에서 코드 가져오기

   Cygwin Terminal을 열고 다음과 같이소스를 가져온다.

   git clone git://github.com/arduino/Arduino.git

  위와 같이하면 Cygwin의 home 폴더 (따로 HOME을 지정을 하지 않았으면)에 Arduino라는 폴더 아래에 소스를 가져올 것이다. 

3. 빌드하기

  Cygwin Terminal에서 Arduino/build 로 이동한후 ant 라고 치면 빌드를 한다.    

  Arduino/build/windows/work 아래에 arduino.exe 파일이 생겼을 것이다.


Pages:12345