일원동 느티나무

보호수 2008. 10. 1. 07:43
지난 일요일엔 일원동의 가장 오래된 고목이라는 느티나무를 찾았다.  느티나무는 놀이터 옆에 있으며 300년된 나무답게 높이 솟아 있다.



일원동 느티나무 사진

일원동 느티나무




일원동 느티나무 안내판 사진

일원동 느티나무 안내판



마침 어떤 할머니가 놀이터 벤치에 앉아 쉬고 계시길래 나무에 대해 물어보았다.  동제를 지내는 나무라는 것을 인터넷을 통해 알고 있었기에 확인차 물어본 것이다. 

제사라기보다 고사를 지냈는데 나라에서 주관하여 지냈으나 요새는 지내지 않는다고 한다. 또, 일원동이 개발된 후에 이 나무는 죽어가고 있었는데 돈을 들여 살려놓은 것이란다.  일원터널 도로 밑에 물길이 있었는데 아마도 그것 때문에 나무가 잘 사는 것일 게라는 말도 하였다.

기대밖으로 그 근처에 오래사셨던 분이었나보다.  그 나무가 죽을 뻔 했다는 것은 처음 알게 되었다.

WRITTEN BY
tinysun

,
어제 여기저기에서 뉴스로 소개되었지만 다른 평범한 사건들과 함께 그냥 잊고 있었다. 과학사의 커다란 사건을 오늘의 구글 두들이 상기시켜주었다.
사용자 삽입 이미지
그런데 이 CERN 이라는 곳은 팀버너스리에 의해 웹이 태어난 곳이기도 하니(최초의 웹사이트가 만들어진 곳이다) 구글과 무관하지는 않아보인다.

WRITTEN BY
tinysun

,

Arduino 시작하기

아두이노 2008. 6. 23. 22:02
마소에서 안윤호님의 'Arduino 보드를 소개하며'라는 글을 읽고 흥미를 가지게 되었는데 인터넷에 관련 글들이 많이 있었다.  특히, Suapapa 님의 Arduino  에서는 기판제작에서 bootloader 심기까지의 과정을 자세히 보여 주었고 STK200 호환의 패러렐 ISP 를 사용하기위한 고급수준의 방법도 소개하였다.

이것 저것을 보다가 Digitypo님의 Bootloading for a board as an Arduino 를 읽어 보고선 나도 Avrmall 의 ATmega168 보드를 구입하여 여기에 Arduino 부트로더를 심어보고 싶어졌다.  명성높은 Arduino Diecimila 를 큰 맘먹고 구입하고, Avrmall ATmega168 Board 는 물론 부트로더를 Burnning 하기위해 P-AVRISP 도 같이 구입하였다. 

사용자 삽입 이미지

Arduino Diecimila (왼쪽) 와  Avrmall ATmega168 Board V2.1 (오른쪽)


사용자 삽입 이미지

Arduino Diecimila 밑면엔 이탈리아 지도가 그려져 있다.


사용자 삽입 이미지

패러렐포트를 사용하는 P-AVRISP


앞의 Digitypo 님께서 사용한 USBISP V3.0 보다는 저렴하다.  하지만 이것은 패러렐포트용 이라서 PC 에 패러렐포트가 붙어 있는지 확인해야 한다.  MrKiss 님의 USBTiny  에서 USB용 ISP를 자작한 내용을 볼 수 있다.  USBTinyISP 는 ATTINY2313 칩을 사용하는데 MrKiss 님은 이 칩을 프로그램하기위해 다른 ISP를 사용하였다고 한다.  Arduino 사이트에 Parallel Programmer 의 자작방법이 나와 있지만 그냥 P-AVRISP 를 사버렸다.  그런데 지금보니 비슷하게 생긴 youknow 님의 ISP 가 LED 도 있는 것이 더 좋아 보인다.


사용자 삽입 이미지

Avrmall ATmega168 Board 의 ISP 연결 사진

 

컴퓨터가 책상밑에 있기 때문에 같이 딸려 나오는 20cm 짜리 케이블로는 어림도 없었다.  확장케이블을 따로 구매했는데 10pin x 1m 짜리밖에 없었다.  보드의 커넥터는 6pin 이지만 10pin 용 케이블을 잘 사용하고 있다.


Avrmall ATmega168 Board V2.1 는 Digitypo님이 선택했던 것에 비해 더 저렴하고(\12,000) 빠른 클럭의 보드이지만 serial chip 이 없으므로 RS-232C 를 직접연결할 수 없다.  때문에 RS-232C <-> RS-232.TTL 변환기 또는 USB <-> RS-232.TTL 변환기가 있어야 Arduino 환경에서 작성한 코드를 시리얼로 업로드 할 수 있다.  Digitypo님은 DIP232RL V1.0 을 사용하였고 인터넷을 보니 더 저렴한 것도 있었는데 집에 있던 USB <-> RS-232C 를 분해하여 쓸 생각으로 아무 것도 구매하지 않았다.


arduino.cc 다운로드 페이지 에서 윈도용 Arduino 환경을 다운받아 적당한 위치에 압축을 풀면 바로 실행을 할 수 있다.

사용자 삽입 이미지

Arduino 개발환경 초기화면


Arduino Diecimila 보드를 USB 로 연결하니 FT232칩 관련 드라이버를 설치하는 화면이 나오고 난 후 COM 포트가 새로 생겼다.  Arduino 환경에서 새로 생긴 COM 포트를 사용한다.

사용자 삽입 이미지

Arduino 개발 환경에서 COM7 이 추가된 모습


Sketch 로 샘플 소스를 열고 Upload to I/O Board 아이콘을 클릭하면 잠시 후 Arduino Diecimila 에서 실행되는 것을 볼 수 있다.

사용자 삽입 이미지

Sketch 소스 (LED 점멸)


사용자 삽입 이미지

Arduino Diecimila 의 LED가 켜져있는 사진


이제 Sketch 로 작성된 것을 Avrmall ATmega168 Board 에서도 같은 방식으로 돌려보겠다.  우선, Avrmall ATmega168 Board 에 P-AVRISP 를 사용하여 Arduino 부트로더를 심어야 한다.  Avrmall ATmega168 Board 의 clock 은 Arduino Diecimila 나 Arduino Mini 와 다르게 20MHz 로 되어 있으므로 이것에 맞게 새로 빌드한 부트로더와 보드설정을 사용한다.

arduino 개발환경이 설치된 곳의 hardware 디렉토리에 boards.txt 라는 파일이 있다.  맨 끝에 다음을 추가한다.
##############################################################
avrmall.name=Avrmall ATmega168 Board V2.1

avrmall.upload.protocol=stk500
avrmall.upload.maximum_size=14336
avrmall.upload.speed=19200

avrmall.bootloader.low_fuses=0xff
avrmall.bootloader.high_fuses=0xdd
avrmall.bootloader.extended_fuses=0x00
avrmall.bootloader.path=atmega168
avrmall.bootloader.file=ATmegaBOOT_168_avrmall.hex
avrmall.bootloader.unlock_bits=0x3F
avrmall.bootloader.lock_bits=0x0F

avrmall.build.mcu=atmega168
avrmall.build.f_cpu=20000000L
avrmall.build.core=arduino
##############################################################

f_cpu 값이 20MHz 에 맞추어 졌고 bootloader.file 에 지정된 파일명이 Arduino Diecimila 의 설정과 다르다.  아래 ATmegaBOOT_168_avrmall.hex 를 다운로드 하여 hardware\bootloaders\atmega168 디렉토리에 복사한다.
invalid-file

Avrmall ATmega168 Board V2.1 용 부트로더


참고로, 이 hex 파일은 atmega168 디렉토리의 Makefile 을 아래와 같이 고친 후 cygnus 쉘에서 make avrmall 을 실행하여 만든 것이다.
##########################################
#AVR_FREQ = 16000000L
AVR_FREQ = 20000000L

avrmall: TARGET = avrmall
avrmall: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>3' '-DNUM_LED_FLASHES=3'
avrmall: $(PROGRAM)_avrmall.hex
##########################################

사용자 삽입 이미지

Arduino 개발환경 메뉴에 Avrmall 보드가 표시된다.


P-AVRISP (유저가이드)는 Arduino 의 Parallel Programmer (회로도) 와 다른 종류 이다.  P-AVRISP 를 Arduino 환경에서 사용할 수 있도록 hardware 디렉토리의 programmers.txt 파일의 맨 끝에 다음을 추가한다.
#####################################
stk200.name=P-AVRISP(STK200)
stk200.communication=parallel
stk200.protocol=stk200
#####################################

사용자 삽입 이미지

Arduino 개발환경 메뉴에 P-AVRISP 가 표시된다.


이제 P-AVRISP 를 연결해서 Avrmall ATmega168 V2.1 에 arduino bootloader 를 burnging 할 차례다.  Arduino 환경의 Tools / Board 에서 Avrmall ATmega168 Board V2.1 을 선택한 후 Burn Bootloader 에서 w/ P-AVRISP(STK200) 을 선택한다.  Digital 13번(PB5) 핀에 LED 를 연결해 놓았다면 LED가 깜박이는 것으로 부트로드가 버닝되는 순간을 확인할 수 있다.

사용자 삽입 이미지

다운로드 되는 것을 확인하기위한 LED 연결


그런데 LPT1 을 열 수가 없다는 에러가 발생하면 별도의 드라이버(giveio.sys)를 설치해주어야 한다.    hardware\tools\avr\bin 디렉토리에 가면 install_giveio.bat 가 있다.  이것을 탐색기에서 더블클릭 하여 실행한다.  아래는 실행결과를 보기 위해 도스창을 열어서 실행한 화면이다.  
사용자 삽입 이미지
 
패러렐포트 사용을 위한 giveio.sys 설치



Guide to the Arduino Mini 의 Connecting the Arduino Mini and a regular Arduino 에 나온대로 가지고 있는 Arduino Diecimila 보드를 USB<->RS-232.TTL 변환기 대용으로 사용해 보았다.(리셋핀 연결은 필요없다)  Arduino 환경에서 Upload 하는 순간에 맞추어 Avrmall ATmega128 Board 의 Reset 버튼을 눌러줘야 한다.  Arduino Diecimila 보드에 내장된 RX, TX LED가 깜박여서 업로드 되고 있음을 확인할 수 있다.
 
사용자 삽입 이미지

Arduino Diecimila 를 USB<->시리얼 컨버터로 사용


이제 Arduino 가 두 개 생겼다.  하나는 Arduino Diecimila 정품, 하나는 Arduino Mini 짝퉁(?).  하지만 더 빠르고(16MHz -> 20MHz) 귀여운 Arduino 이다.




WRITTEN BY
tinysun

,

Prefactoring

카테고리 없음 2008. 4. 22. 19:59


Ken Pugh 가 쓴 명저로 졸트(Zolt)상을 수상한 책이다.

prefactoring 이란, 경험으로 부터 얻은 소프트웨어 개발에 관한 통찰력을 새 프로젝트에 응용하는 것이다.
( THE ART OF PREFACTORING APPLIES TO NEW PROJECTS THE INSIGHTS INTO DEVELOPING SOFTWARE YOU HAVE GLEANED FROM YOUR EXPERIENCE, as well as the experience of others, in developing software to new projects. )

Refactoring 이 이미 만들어진 코드의 내부구조를 개선하는 것이고 prefactoring 은 만들고 있는 코드를 위한 것으로 볼 수 있다.

책의 내용은 가상의 소프트웨어 프로젝트를 진행하면서 design, code, testing 에 관한 guideline 및 design principle 을 제시한다.  guideline 및 principle 하나하나가 녹록한 경험에 의한 산물로 보인다.  더러는 너무 쉽고 당연한 것도 있고 이해하기 힘든 추상적인 것도 있다.  하지만 대부분은 간결한 문장으로 정리되었으면서도 깊이있고 공감이 가게되는 주옥같은 표현의 지침들이다.

접근하기 쉬워 보이는 것들만 소개한다.


Guidelines
==========
(Big Picture)
Don't Reinvent the Wheel
Think About the Big Picture
Don't Repeat Yourself (DRY)
Plan Globally, Develop Locally

(Extreme Abstraction)
Splitters Can Be Lumped More Easily than Lumpers Can Be Split
Never Let a Constant Slip into Code

(Extreme Separation)
Adapt a Prefactoring Attitude
Do a Little Job Well and You May Be Called Upon Often
Decouple with Associations

(Extreme Readability)
A Rose by Any Other Name Is Not a Rose
Communicate with Your Code
The Easiest Code to Debug Is That Which Is Not Written
Use the Client's Language

(Interfaces)
Test the Interface, Not the Implementation

(Error Handling)
Report Meaningful User Messages
Never Be Silent

(General Issues)
Don't Speed Until You Know Where You Are Going
Consistency Is Simplicity
Plan for Testing
More Is Sometimes Less



Software Design Principles
==========================
Well-Defined Interfaces
Decomposition and Modularity
Prioritized Requirements
Abstraction
Information Hiding
Extensibility
Hierarchy
Separation of Concerns
Packaging




WRITTEN BY
tinysun

,
가지고 다니던 USB 메모리를 개비하였다.

기존에 쓰던 64 MB 짜리는 용량이 너무 적어서 소스 백업 받을 때마다 뭔가를 열심히 지워야 했기에 용량이 큰 것을 구입했다.  Memorette Swing Silver 2GB 로 용량 대비 32배 크다.

새 메모리의 디자인과 용량은 대만족.  그런데 속도를 재보자.  1.4GB 저장하는데 4분 걸렸으니  5.97 MB/s 쓰기 속도가 나왔다.   스펙엔  쓰기 15MB/s, 읽기 21MB/s 이니 쓰기 성능이 스펙대비 40% 밖에 안나왔다.

뭐가 잘못되었지 ?

WRITTEN BY
tinysun

,