2012년 6월 29일 금요일

브레드 보드위에 아두이노 꾸미기

http://arduino.cc/en/Main/Standalone

위에 링크 설명대로 따라 하면 되는데 뒷부분에 부트로더를 ISP 프로그래머를 사용하는데 아두이노를 하는 분들은 ISP 프로그래머가 없는 경우가 많을 것이다. 그리고 브레드 보드에 연결할 변환보드도 귀하기 힘들다. 그래서 본 블로그의 아두이노에서 부트로더 굽기라는 내용을 참조하여 아두이노로 ISP기능을 구현하여 부트로더를 구우면 될 것이다.

아래 동영상은 Blink 예제를 올려 업로딩해 본 영상이다.


2012년 6월 18일 월요일

arduino로 부트로더 굽기

Arduino Duemilanove 보드를 가지고 있으면 아래 링크의 방법대로 하면 바로 부트 로더를 구을 수 있다고 한다.
http://arduino.cc/en/Tutorial/ArduinoToBreadboard

하지만 Arduino Uno 보드를 가진 사람은 Uno 보드의 auto reset 기능때문에 이 방법대로 할 수 없다고 한다.
Uno 보드에서 부트로더를 굽는 방법은 http://arduino.cc/en/Tutorial/ArduinoISP 에 따라 하면 되는데 먼저 arduino  메뉴의 File > Examples > ArduinoISP 스케치를 업로드한다.
그 후에 만약 외부클럭 없이 브레드 보드 상에 ATmega328/168 칩만 놓고 작업할려면 (16MHz의 외부클럭을 사용하면 메뉴의 Tools > Boards 메뉴에서 "Arduino Duemilanove or Nano w/ ATmega328" 를 선택한다.) 


http://arduino.cc/en/uploads/Tutorial/breadboard.zip 를 받아서 압축을 풀면 boards.txt 파일이 있는데 그 내용을 복사해서 arduino-1.0\hardware\arduino\boards.txt 파일(윈도우의 경우)의 제일 뒤에 첨부한다. 절대 파일에 덮어 쓰면 안된다. 그럼 아래와 같이 Tools > Boards 메뉴에 추가된다. 이제 "ATmega328 on a breadboard (8 MHz internal clock)" 를 선택한다.

그리고 위에 링크 설명처럼 Uno보드의 auto reset 기능을 막기 위해 reset 과 ground 사이에   10uF 캐패시터를 연결해 주던지, reset과 5V 사이에 120 ohm를 연결해준다.
직접 연결하면 회로가 망가질 수 있으니 주의해야 한다. 120 ohm보다 조금 커도 상관은 없는 듯 하다. auto reset 기능이 정지되었는지 확인하는 방법은 Serial Monitor를 열어 놓아 serial port를 사용하면 부트로더가 실행되지 않을 것이다.

그리고 이제 마지막으로 Programmer > Arduino as ISP 를 선택한 후 Burn Bootloader 명령을 실행한다.
참고로 ATmega328p(저전력 설계된 칩)가 아니라 ATmega328 칩에 위와 같이 진행하면

Expected signature for ATMEGA328P is 1E 95 0F Double check chip, or use -F to override this ... 


위와 같은 메세지가 나타나며 작업이 진행이 안될 것이다. 스케치 IDE에서 ATmega328p만 인식을 하기 때문인데 이때는 arduino-1.0-windows\arduino-1.0\hardware\tools\avr\etc\avrdude.conf 파일에서
# ATmega328P 부분의

signature = 0x1e 0x95 0x0F; -> signature = 0x1e 0x95 0x14;


위와 같이 잠시 바꿔 놓고 스케치 IDE를 재실행하면 부트로더를 구울수 있다. 작업 완료 후에는 원상 복귀시켜놔야 한다.

이제 부트로더가 구워졌으면 이 칩에 USB-to-serial 변환기로 작업이 가능할 것이다.

2012년 6월 8일 금요일

Gerber 파일 Merge (Panelize) 하기

참고 사이트 : http://www.instructables.com/id/Panelizing-PCBs-for-Seeed-Using-Eagle-Free-Light/#step1

PCB 주문을 할때 비용 절감을 위해서 PCB 기판에 같은 보드를 여러개 동시에 배치하는 것을 미쿡에서는 Panelizing이라고 한다.
전에 PCB Layout 시간에도 다루었지만 Seeed Studio에서도 서브 보드를 5개까지 허용한다. 대신 너무 아쉬운 점은 자르는 것은 각자의 몫이라는 것이다. PCB를 자를수 있는 밴드 쏘우를 또 구해야 할 판이다. 비용 좀 더 받고 잘라 주면 좋을 텐데...
하여튼 Eagle CAD Light 버전에는 복사기능이 막혀 있어, 이 작업을 도와주는 GerbMerge 라는 프로그램이 있다.  이게 Python 어플이라 먼저 아래와 같은 어플이 설치가 되어 있어야 한다.
Python 은 3.x 도 있는데 혹시 몰라서 2.7 버전을 설치했다.
Seeed Studio는 전체 패널의 아웃라인을 요구해서 GerbMerge 를 패치할 필요가 있단다. gerberge-patched github repo 여기서 zip 파일을 다운받아서 gerbmerge 폴더를  C:\Python<version>\Lib\site-packages\gerbmerge (윈도우일 경우) 폴더에 덮어 쓴다. 전에 작업한 FT232-Breakout 보드를 merge 해 볼 것이다. CAM 작업으로 생성한 7개파일을 C:\Python<version>\FT232-Breakout-v10 폴더를 만들어 복사해 온다.

<board>.GTO - top silkscreen
<board>.GTS - top soldermask
<board>.GTL - top copper
<board>.GBO - bottom silkscreen
<board>.GBS - bottom soldermask
<board>.GBL - bottom copper
<board>.TXT - Excellon drill file.

그리고 config 파일과, layout 파일을 만든다.

panel.cfg 파일내용
#------------------------------------------------------------------------------------------------------------

[DEFAULT]
# I always use the local directory to contain all input gerbers, config files, and output files
projdir = FT232-Breakout-v10
# MergeOut is the prefix of the output files.
MergeOut = merge2

[Options]
# CutlineLayers will determine where the subboard markings are, which will help in separating them.  These are the accentuated lines between the two instances of the board in the image below.
CutLineLayers = *topsilkscreen,*bottomsilkscreen

CropMarkLayers = *topsilkscreen,*bottomsilkscreen

# OutlineLayers is used by the patched gerbmerge, it defines which layers the entire panel outline will be drawn on.  Seeed requires this on all layers.
OutlineLayers = *toplayer,*bottomlayer,*topsilkscreen,*bottomsilkscreen,*topsoldermask,*bottomsoldermask

FabricationDrawingFile = %(mergeout)s.fab

ExcellonLeadingZeros = 0

OutlineLayerFile = %(mergeout)s.oln

ScoringFile = %(mergeout)s.sco

# here you can specify the maximum dimensions allowed by the Seeed PCB service you ordered (in inches).
# gerbmerge will warn you if your final panel (based on your layout) exceeds these dimensions.
PanelWidth = 3.93
PanelHeight = 1.965

# comment out the margins or set them to zero if you want the maximum amount of useable area on your panel.
#LeftMargin   = 0.1
#RightMargin  = 0.1
#TopMargin    = 0.1
#BottomMargin = 0.1

# spacing determines how much space between the panels.  I found 0.0625 to be plenty of space for a band-saw blade, I may reduce it a hair in the next run.
XSpacing = 0.0625
YSpacing = 0.0625

CutLineWidth = 0.01

CropMarkWidth = 0.01

AllowMissingLayers = 1

DrillClusterTolerance = 0.002

MinimumFeatureSize = *topsilkscreen,0.008,*bottomsilkscreen,0.008

# if you define the merge output files to be in the filename scheme that Seeed requires, you won't have to rename them by hand later.
[MergeOutputFiles]
Prefix = %(mergeout)s

*TopLayer=%(prefix)s.GTL
*BottomLayer=%(prefix)s.GBL
*TopSilkscreen=%(prefix)s.GTO
*BottomSilkscreen=%(prefix)s.GBO
*TopSoldermask=%(prefix)s.GTS
*BottomSoldermask=%(prefix)s.GBS
Drills=%(prefix)s.TXT
BoardOutline=%(prefix)s.bor
ToolList = toollist.%(prefix)s.drl
Placement = placement.%(prefix)s.txt

# Job configuration - for each different sub-board, define a section like follows with the subboard name (used in the layout file) and the gerbers comprising that job.
[FT232-Breakout-v10]

Prefix=%(projdir)s/FT232-Breakout-v10

# List all the layers that participate in this job. Required layers are Drills
# and BoardOutline and have no '*' at the beginning.  Optional layers have
# names chosen by you and begin with '*'. You should choose consistent layer
# names across all jobs.
*TopLayer=%(prefix)s.GTL
*BottomLayer=%(prefix)s.GBL
*TopSilkscreen=%(prefix)s.GTO
*BottomSilkscreen=%(prefix)s.GBO
*TopSoldermask=%(prefix)s.GTS
*BottomSoldermask=%(prefix)s.GBS
Drills=%(prefix)s.TXT
BoardOutline=%(prefix)s.BOR
#-----------------------------------------------------------------------------------------------------------------

panel.layout 파일내용
칼럼 추가시 콤마없이 엔터치고 추가하면 된다.
#-----------------------------------------------------------------------------------------------------------------

Row {
  Col {
    FT232-Breakout-v10
  }
  Col {
    FT232-Breakout-v10
  }
}  
#-----------------------------------------------------------------------------------------------------------------


10cm x 5cm 크기에 merge 한다고 가정하고 작업을 했다. 근데 여기서 헤맨 부분은 bor 파일이 필요한데 
Seeed_Gerber_Generater_v0r95_DrillAlign.cam 파일로 gerber 파일을 생성해 봐도 bor 파일은 없다는 거다. 그런데 이 파일이 보드 아웃라인 파일이여서 GBO 파일이 아웃라인만 나타내므로 이걸 복사해서 bor 파일로 만들어서 작업해보니 merge가 되었다. 아래와 같이 실행하면 된다.

C:\Python<version>>python.exe C:\Python<version>\Lib\site-packages\gerbmerge\gerbmerge.py panel.cfg panel.layout

layout이 잘못 설정되면 패널 사이즈를 초과했다는 메세지를 표시한다.

정상적으로 merge가 되면 아래와 같이 나타난다. 
Windows 7 운영체제에서는 설치파일은 관리자권한으로 설치하고 cmd.exe 파일도 관리자권한으로 실행해야 에러가 나지 않는다.

생성된 파일을 Gerbv로 열어서 확인해 봤다.

이상이 없으면 Seeed Studio의 Fusion PCB Service에 신청하면 될 것 같다.

2012년 6월 3일 일요일

Eagle 3D로 회로 보드 Preview 하기

Eagle CAD로 만든 PCB Layout 파일로 3D 랜더링하여 보드 상태를 3D로 미리 확인 할 수 있는 방법이 있다. 잘 설명되어 있는 사이트는 아래와 같다.
http://www.societyofrobots.com/electronics_Eagle3D_tutorial.shtml

#준비물
1.Eagle 3d 설치 : http://developer.berlios.de/projects/eagle3d/
여기서 eagle3d- img 파일이 어디에 쓰는 건지 헤깔렸는데 나중에 알고 보니 맞는 부품명이 없어서 3D로 표시가 안되는 부품을 이 이미지 파일에서 찾아서 부품명을 추가할때 사용한다. 여기서 부품명을 추가하는 작업은 좀 복잡해서 생략하기로 한다. 하는 방법은 위에 링크에 나와 있다.
2.POV-Ray 설치 : http://www.povray.org/
스크립트로 3D을 할 수 있는 엔진으로 Eagle 3d에서 만든 *.pov 파일을 3D 이미지로 보여준다.

위에 파일을 모두 설치했으면 Eagle CAD의 Board 화면에서 File > Run 으로 eagle3d를 설치한 폴더(C:\Program Files\eagle3d\ulp)에서  3d50.ulp 파일을 연다. 그러면 설정 창이 뜨는데 거기서 pov 파일 생성 경로를 설정하고 create POV-File 버튼을 누른다.

POV-Ray를 실행후 open 메뉴로 생성된 pov 파일을 연다. 그리고 이것이 중요한데 Tools > Edit master POVRAY.INI 으로 ealge3d가 설치된 폴더의 povray 폴더를 라이브러리 경로에 추가하는 것이다. 그래야 제대로 렌더링이 된다. 제일 마지막 줄에 Library_Path="C:\Program Files\Eagle3D\povray" 를 추가하고 저장한다. 
참고로 Ini 메뉴를 실행하여 Section 항목에서No AA가 아닌 AA로 선택하면 렌더링 시간은 더 걸리지만 좀더 이미지가 선명하게 보인다.

이제 Run 메뉴를 실행하면 IC의 Logo를 표시할지 소켓을 표시할지 등을 물어 보고 없는 부품은 표시되지 않는다는 메세지가 뜬후 OK를 누르면 랜더링된 이미지를 표시한다.
전에 만든 Breakout 보드는 Sparkfun 라이브러리를 사용해서 거의다 표시를 못하고 있다. 그러면 일일이 부품을 추가해 주거나 원래 Eagle CAD에서 제공하는 부품으로 변경하면 표시가능한데 귀찮아서 ^^;; 이렇게 하는 방법을 아는 것에서 마무리 할까 한다.

Eagle CAD : PCB Layout

http://www.sparkfun.com/tutorials/109

이제 전에 만든 회로도로 PCB를 만들어 보자.  이 단계는 보드상에 부품을 배치하고 보드파일을 만들어 PCB 제조업체에 보내는 것이다.
먼저 작업전에 vector 폰트를 활성화 시킨다. Control Panel 화면의 Options>User interface>Always vector font를 체크한다.
여기서 보기 편하게 배경색을 검정색으로 변경할 수 있다.

왼쪽 메뉴는 Schematic 화면하고 비슷하지만 추가된 것들이 몇개 있다.

부품들을 Group 하여 마우스 우클릭하여 Move 시켜 아웃라인 안에 넣는다.
부품이 만약 이 아웃라인을 벗어나서 놓여 지면 아래와 같은 에러창이 뜬다.
Freeware 버전이라 이 크기 이상으로 작업 할 수 없는 것이다.

부품명이 표시가 안되어 어떤 부품이 어떤 부품인지 구분이 안간다.
그럼 먼저 부품명을 볼수 있도록 설정한다. 메뉴 > View > Display/hide layers...를 선택하면
아래와 같은 창이 뜨는데 여기서 25~28까지가 위, 아래 보드의 부품명과 부품값을 표시한다. 부품값까지 표시하면 복잡하니 27번은 클릭해서 꺼놓아도 좋다.

F10을 누른 후 각 코너를 클릭하여 아웃라인을 1.5x1.0인치로 변경한다.
부품마다 있는 십자표시를 클릭하여 이동시킨다.(Move : 단축키 F7) 마우스 우클릭하여 회전할 필요가 있으면 회전시킨다.

그런데 회로상에서는 구별이 잘 안가서 막 놓다 보니 부품을 틀리게 놓아서 다시 왼쪽 메뉴의 Replace로  부품을 바꿨다. Replace 창도 Add 창과 같이 생겼는데.. 방식도 똑같다. 검색하여 오른쪽에 부품배치 모양을 보고 고르면 된다. 그리고 나서 Layout상의 부품을 선택하면 부품이 바뀐다. 전에 뭣도 모르고 튜토리얼 보면서 막 따라 하면서 글도 같이 쓰다보니 좀 개판이였다. SMD와 LEAD 부품이 서로 섞여 있다니.. ㅎㅎㅎ


JP1의 커넥터상에 VCC/GND/TX/RX를 Text 명령으로 입력한다. 위치는 21 tPlace 로 선택한다. 실크스크린에 표시될 것이다. 그리고 글자 크기가 크다면 Change 명령의 Size에서 크기를 선택하고 글자를 선택하면 크기가 변경이 된다.

디자인 오류가 없는지 Drc 명령으로 디자인 룰 체크를 한다. Seeed Studio에서 디자인 룰을 제공하니 그 파일(Fusion_eagle_rule_v1.1.dru)을 로딩하여 체크해 본다.

이상이 없으면 Auto 명령으로 autorouter를 한다. 이때 Autorouter Setup 창에서 Routing Grid 값을 기본값으로 해도 되지만 복잡한 회로일때 잘 안될 경우가 있다. 그럴때 8 mil 정도로 한다. 참고로 Seeed Studio 의 최소값은 6 mil 이다. 그럼 대부분 다 그려준다. 만약 몇개 못 그려준 것은 Route와 Ripup 명령으로 직접 그린다.

Auto 명령으로 그린 것이 마음에 들지않아 처음부터 다시 그리고자 한다면 왼쪽 메뉴의 Ripup 명령으론 안된다. 상단 command 입력란에 Ripup; 이라고 입력하면 경고창이 뜨고 확인 버튼을 누르면 다시 처음 상태로 되돌아 간다.

만약 부품명을 표시하고자 할때 부품명의 위치가 적당하지 않으면 Schematic 화면과 마찬가지로 Smash 명령으로 수정할 수 있다. 이제 모두 제대로 만들어 졌다면, 상단 메뉴바의 CAM 을 선택하여 Gerber 파일을 생성해 보자.
그러면 CAM Processor 창이 열리는데 여기서 File > Open > Job 하여 Seeed Studio에서 제공한 cam 파일(Seeed_Gerber_Generater_v0r95_DrillAlign.cam)을 연다. DrillsHoles탭은 EXCELLON 포맷으로, Slot drills/holes 탭등 나머지 탭은 GERBER_RS274X 포맷으로 설정이 될 것이다.
이제 Process_Job 버튼을 누르면 파일들이 생성된다.

생성된 Gerber 파일들을 체크해 봐야 하는데 Sparkfun.com에서는 Viewplot를 사용했는데, 여기선 오픈소스 프로그램인 Gerbv를 사용해 보도록 하겠다.
File > Open layer(s) 로 각각의 Layer를 연다. Seeed Studio에 보낼때 필요한 파일은 아래와 같다. 그러니 TXT 파일을 제외한 6개 Layer를 열어서 확인해 본다.

  • <pbname>.GTL  (top layer)
  • <pcbname>.GBL (bottom layer)
  • <pcbname>.GTS (solder stop mask top)
  • <pcbname>.GBS (solder stop mask bottom)
  • <pcbname>.GTO (silk top)
  • <pcbname>.GBO (silk bottom)
  • <pcbname>.TXT (drill sizes and positions)


Seeedstudio.com에서 Fusion PCB Service를 주문하고 나면 주문번호가 매겨져서 메일이 온다. 그 주문번호를 PCB상의 실크스크린에 적어 놓으면 작업하기 수월하단다.
그런 후에 pcb@seeedstudio.com에 위에 7개 파일을 압축하여 첨부해서 보내면 검토후 진행한다는 메일이 온다. 참고로 파일명은 D(your order number)_(Your PCB size).zip 으로 한다.
PCB 내에 공간을 활용하여 서브 보드를 최대 5개까지 넣을 수 있다. 서브 보드 구분은 홀이나 슬롯이 아닌 실크스크린상에 표시해야 되고 자르는 것은 사용자 몫이다. 절약도 좋은데 PCB 받아서 자르는 것도 일이 될 것 같다. 하여튼 Gerber파일 Merge하는 방법은 다음에 다뤄 보겠다.

가격정책이나 디자인 스펙같은 자세한 사항은 해당 페이지를 확인해 보기 바란다. 디자인룰 캠파일도 여기에 있다.