2009년 12월 30일 수요일

PLS 회귀분석을 위한 비선형 반복 부분최소제곱 알고리즘 (non-linear iterative partial least squares (NIPALS))

두 가지의 주어진 데이터 블럭( X: N x K 행렬, Y:N x M 행렬)에 대해서 Herman Wold의 알고리즘은 다음으로 축약된다:

  1. K-weight 벡터 w를 선택하자. 예를 들면, 행렬 X의 크기가 영이 아닌 열 벡터를 선택하자. 그리고 length가 1이 되게 정규화 하자.
  2. score 벡터를 계산하자 t = X w.
  3. Y-loading 벡터를 계산하자 q = Y^T t.
  4. Y-score 벡터를 계산하자 u = Y q.
  5. 새로운 weight 벡터를 계산하자 w1 = X^T u. w1의 length 1이 되도록 만들자.
  6. 만약 |w-w1|이 EPS보다 작다면(달리 말하자면, w와 w1이 서로 같다면), 수렴값이 구해 지는 것이고, 아니면 w=w1 수행하고, 위의 2번 과정에서 다시 시작한다.

  7. 이 반복과정의 결과물은 두 개의 score 벡터다. 하나는 행렬 X에 대한 t 벡터이고, 하나는 행렬 Y에 대한 u벡터이다. 이 결과물들이 훌룡한 선택이라면, 문제는 어떻게 다음 단계의 (t, u) score 벡터들을 얻어내야 하는 것이다. Svante는 행렬 X가  t score 벡터에 따라서 조절되어져야 하고, 행렬 Y의 t 벡터로의 regression이 계산되어지고, 동시에 행렬 Y는 찾아진 결과에 맞게 조절되어진다. 그 과정은 다음과 같이 주어진다.

  8. loading 벡터를 계산하자. p=X^T t / (t^T t)
  9. 행렬 X를 얻어진 결과에 대해 맞추자: Xnew = X - t p^T
  10. 행렬 Y의 t 벡터로의 regression을 계산하자: b = (Y^T t) / (t^T t)
  11. 행렬 Y 얻어진 결과에 대해 맞추자: Ynew = Y - t b^T
  12. 더 많은 (t,u) 가 필요하다면, 행렬을 X = Xnew, Y = Ynew 같이 치환해서 1과정으로 되돌아가자.
Harald가 제안한 방법은 약간 다르지만, 7.부터 10.까지의 과정은 동일하다. 하지만, 1. - 11. 의 과정은 1980년대에 알려진 PLS 회귀분석 알고리즘이다. 비록, H-method의 응용분야로써 표현하는 방식의 좀 더 명확하게 보여주지만, 몇몇 문헌에서는 아직도 가끔씩 이러한 방식으로 남아 있다.

PLS regression methods. Journal of Chemometrics, 2, 1988, p 211-228의 논문에서, 1.-6.의 과정은 |w| = |q|=1인 상태에서 (t^T u)을 최소화하는 X-weight 벡터 w와 Y-weight 벡터 q를 찾는 것과 동일하다. 더욱이, 다변량 분석법에서 이 방법과 Canonical Correlation 분석법 사이는 아주 유사하다. 이러한 유사성의 적용이 보여진다. 사실, distribution 이론은 Canonical Correlation방법의 그것과 같은 선상에 따라다닌다.

[출처 : http://www.predict.ws/H_principle/SvanteHarald.htm]


2009년 12월 29일 화요일

Using the Free Visual C++ 2005 Express Edition to Develop Win32 Applications

from http://www.codeproject.com/KB/applications/FreeVS2005Win32.aspx

개요

Microsoft은 상업적인 제품을 개발할때 뿐만아니라, 자유롭게 다운받아 사용할 수 있는 Visual C++ 2005 Express Edition을 내놓았다. 그러나, 당신이 괜찬은 기존 32비트방식의 wxWidgets형틀 프로그램을 사용하는 Windows 응용프로그램을 ( .NET방식이 아닌) 개발하고자 한다면, 약간이 설정 변경을 해주어야 한다.
이 글타래에 실린 정보는 새로운것이 아니며, 대부분의 것들은 구글링이나 다음링크를 클릭해서 찾아 볼 수도 있다. 많은것들이 Microsoft 포럼에서도 볼수있다. 그러나 다음의 이유로 이 글타래를 새로 만들기로 하였다.
참고자료로 이러한 정보를 기록해 놓는 것은 접근하기 쉽게한다.
  1. 한곳에 모든것을 가져다 놓아서 서람들의 시간을 절약할 수 있게 하기위해서 ( 나는 하나씩 하나씩 찾기위해서 구글을 이용하였다.)
  2. 사람들이 추가적인 유용한 정보를 추가할 수 있는 장소가 필요해서 (Microsoft 포럼은 더이상 운용되지 않는것 같아 보인다. 그래서 나는 거기에 내용을 추가 할 수 없었고, 다른 사람들도 여기에 대해서 불평하였다.)
  3. 개발자들이 새로 시작하기에 좋고 자유로운 툴을 찾는데 도움이 되고, 이러한 그들의 수고를 덜어 개발자들을 장려하기 위해서

준비물

Visual C++ 2005 Express

Microsoft 웹사이트에 가서 "Visual C++ 2005 Express" 전송받자. 보통 여러분들은 VC.iso (473,720 KB) 이라는 이름의 파일을 전송받기 원할 것이다. 이것을 CD에 굽거나 그 내용을 직접 읽어 볼 수 있도록 VCdControlTool 나 DiskPrivate 같은 자유로운 도구들을 사용하자. 지정해주는 경로대로 프로그램을 설치하자.

Platform SDK

Microsoft's 웹사이트에서 Platform SDK를 전송받자. 나는 PSDK_x86.exe (1.26 MB)이라는 파일을 받았다. "Microsoft ® Windows Server® 2003 R2 Platform SDK Web Install"에 위치한 Platform SDK를 찾아라 (여기 링크를 보라). 여러분이 직접 페이지를 내려가다 보면, PSDK_x86.exe 를 찾을 수 있을 것이다. 다음은 여러분이 필요한 것들만 모았다.
추전하는 초기 세팅으로 Platform SDK를 설치하자. 나는 Visual C++이라는 항목을 등록하기 위해서 batch 파일을 실행하지 않았다 (이것은 시작메뉴에 프로그램을 추가하한다. 하지만, 여러분이 이것을 실행하면 아무것도 수행되지 않는 것처럼 보인다. 그래서 나는 시작메뉴의 옵션을 이용해서 이것을 다시 등록해제해 버렸다. )

Visual Studio가 Platform SDK와 연동되게 하기

여기있는 대부분의 것들은 여기서 찾을 수 있는 공식적인 지침서에 기반해서 작성되었다.

Include 디렉토리

이것을 수정하지 않으면 여러분들은 windows.h을 포함시킬 수 없다는 에러를 보게 될 것이다. Visual Studio를 실행하고, Options 다이알로그 박스에 있는 Projects and Solutions 섹션 밑에 있는 메뉴에서 특정 부분에 다음 경로를 추가하라.
  • Executable files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin
  • Include files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include
  • Library files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib
위의 경로들은 Visual Studio에 저장되는지 확실히 점검하자! view를 닫고, 되돌아 가서 제대로 저장되었느지 확인하자! 또한 SDK가 다른 디렉토리에 설치되어 있는지를 보고 이 경로들이 올바른지 확인하기 위해서 Windows Explorer사용하자. 디렉토리는 실제로 이와 같을 것이다:
  • Executable files: C:\Program Files\Microsoft Platform SDK\Bin
  • Include files: C:\Program Files\Microsoft Platform SDK\Include
  • Library files: C:\Program Files\Microsoft Platform SDK\Lib
이건 많은 사람들이 가장 자주 마주치는 문제다.

Default Link Libraries

이러한 것들을 고치지 않는다면, 여러분들은 Windows API 함수들에대한 unresolved external link 에러를 맞게 될 것이다. Visual Studio를 닫고, C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults\corewin_express.vsprops 열고 다음과 같은 수정하자.
Collapse Copy Code
AdditionalDependencies="kernel32.lib"
to:
Collapse Copy Code
AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib
  comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib"

Enable Win32 Applications

C:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic\Application\html\1033\AppSettings.htm 파일을 수정하자. Notepad나 다른 평범한 text editor를 사용해서, 다음라인 앞에 //를 추가하자. (as well as any other disabled = true lines if you want):
Collapse Copy Code
WIN_APP.disabled = true;
WIN_APP_LABEL.disabled = true;
DLL_APP.disabled = true;
DLL_APP_LABEL.disabled = true;

그러나...

이것들이 다 수행되어져야만 한다. 그러나...

여러분이 사용할 수 없는 것들

MFC에 대한 것들은?

포함되어 있지 않다. 여러분들은 새로운 개발 작업을 위한 대체물로 wxWidgets 같은 것들은 사용할 수 있다. MFC를 원한다면, 사용료를 지불해야 한다.

ATL / WTL에 대한 것들은?

포함되어 있지 않다. 그러나, 여러분들은 분명히 다른 CodeProject 글타래에 설명되어진 대로 ATL / WTL을 얻을 수 있다. Visual C++ 2005 Express Edition로 WTL 사용하기 .

Free 리소스 에디터에 대한 것들은 ?

Studio Express does not let you edit resource files. Taken from the above article, you can try:
  1. Here is a list of free resource editors (Looks like the Watcom C++ compiler has a standalone resource editors application)
  2. WEditRes
  3. Or (for an IDE that also seems to let you edit resources): RadASM© Win32 assembly IDE for masm/tasm/fasm/nasm/goasm/hla
  4. wxWidgets also has some sort of system where you use XML to define your resources and there are free RAD applications, but I have not looked into that yet.

What About an Installer?

If you wish to create an install/uninstall for your applications, I suggest you try the free Inno compiler. Free for commercial applications even and easy to use.

What About Other Compilers that Integrate with Visual Studio?

Visual Studio Express does not let you install other compilers such as Intel Fortran that integrate directly with Visual Studio Express. However, some of these provide their own IDEs.

Final Comment

If you know of other truly free software pieces that may be handy in this regard, please post a comment.

History

  • 23rd September, 2006: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

NeWi


Member

Occupation: Web Developer
Location: Canada Canada

정전기 방지 대책

1. 세탁시 섬유유연제 혹은 식초

2. 정전기 방지 팔찌 같은것 사용

Hierarchy among complex, vector, matrix, and, pixmap

0. Epsilon
actual zero depending on working machine

#ifndef DOUBLE_EPSILON

#define DOUBLE_EPSILON (2.22045E-016)

#endif

1. real number

type - double

2. complex number

typedef struct {

double real, double imag

} complex_t;

3. vector
typedef struct {

int length;

double *real;

double *imaginary;

} vector_t;

4. matrix

typedef struct {

int columns, rows;

double *real;

double *imaginary;

} matrix_t;

5. pixmap

5.1. header

typedef struct {

int width;

int height;

int pitch;

} maphdr_t;

5.2. bitmap
one bit corresponding one pixel

typedef struct {

maphdr_t header;

unsigned char *buffer;

} bitmap_t;

5.3. bytemap

one byte (8-bits) corresponding one pixel

typedef struct {

maphdr_t header;

unsigned char *buffer;

} bytemap_t;

5.4. wordmap

one word (16-bits) corresponding one pixel

typedef struct {

maphdr_t header;

short *buffer;

} wordmap_t;

5.5. dwordmap

double word (32-bits) corresponding one pixel

typedef struct {

maphdr_t header;

long *buffer;

} dwordmap_t;

5.6. floatmap

float type variable (float point variable containing 32-bits) corresponding one pixel

typedef struct {

maphdr_t header;

float *buffer;

} floatmap_t;

2009년 12월 28일 월요일

실제 메모리와 시스템 정보상의 메모리 용량이 다를때

Windows XP시스템상에 MIL 라이브러리 설치시 MAXMEM 옵션이 설정되어 메모리를 증설하여도 그당시의 메모리로 인식함 해결책은 boot.ini 파일에 있는 maxmem을 수정해야함
스스템 등록정보 -> 고급 -> 시작및복구 -> 설정 -> 편집
---- 변경전
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional (Memory: NT=499 MB, MIL=4.0 MB)" /MAXMEM=499 /Execute /fastdetect
---- 변경후
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /Execute /fastdetect

2009년 12월 21일 월요일

eigen vector 계산???

Eigen Decomposition Theorem
- from http://mathworld.wolfram.com

정사각 매트릭스 A의 Eigenvector로 이루어진 매트릭스 P,
그리고 Diagonal이 Eigenvalue로 이루어진 Diagonal 매트릭스 D가 주어진다면,
행렬 P가 정사각행렬일 경우
정사각행렬 A는 다음과 같이 Eigen decomposition으로 분해할 수 있다.

A=P*D*P^{-1}

여기서, D는 Diagonal 행렬이고
거기에 행렬A가 symmetric이면, P의 컬럼벡터들은 orthogonal벡터가 된다.

만약, P가 정사각 행렬이 아니라면, P는 역행렬이 존재하지 않고, A는 eigen decomposition을 수행할 수 없다.
그러나 m x n크기의 행렬 P가 m > n인 조건이라면,
대신 A는 Singular value decomposion이라는 방법으로 분해될 수 있다.

2009년 12월 18일 금요일

The implementation of PLS1

* condition
The dependant variable has only one component

* variables
X : matrix, independant variables, (the # of samples by # of dim.)
mx : vector, mean vector of matrix X (one by # of dim.)
y : vector, dependant variables, (the # of samples by one)
my : scalar, mean of vector y.
Xt : matrix, transpose of matrix X, ( the # of dim. by the # of samples)
w : vector, auxiliary weight vector, ( the # of dim. by one)
t : vector, factor coefficient vector, ( the # of sample by one)
p : vector, loading vector, ( the # of dim. by one )
q : scalar
b : vector, PLS factors, (the # of dim. by one)
bo : scalar, PLS factor

* procedure
1. mean centering
1.1. mx = mean(X)
1.2. X_{0} = X - expand(mx)
1.3. my = mean(y)
1.4. y_{0} = y - expand(y)
2. scoring (loop i to n)
2.1. Xt = transpose(X_{i})
2.2. w = Xt_{i}*y_{i}
2.3. w = w/norm(w)
2.4. t = X_{i}*w
2.5. p = Xt*t
2.6. p = p/norm(t)
2.7. q = y_{i}*t
2.8. q = q/norm(t)
2.9. X_{i+1} = X_{i}-t*p
2.10. y_{i+1} = y_{i}-t*q
3. compute PLS factor
3.1. pt=transpose(p)
3.2. b = w*inverse(pt*w)*q ; inverse(pt*w) is likely to /(pt*w)
3.3. b0 = my-mx*b

2009년 12월 15일 화요일

알루미늄 아노다이징 업체

안산에 (주)제이스 www.jeiskorea.co.kr
부천에 영광금속 www.anodizing.or.kr

2009년 12월 10일 목요일

[번역] 부분최소제곱 회귀분석 Partial Least Squares Regression (PLSR)

[출처 http://www.vcclab.org/lab/pls/m_description.html]

Partial Least Squares (PLS) regression 기법은 독립변수의 수 (# of descriptors (independent variables)) 가 샘플의 수 (# of compounds (data points)) 보다 크거나 비슷할 때나, 변수들 간의 연관성에 영향을 끼치는 또 다른 요인들이 존재할 때 같은 매우 일반적인 상황에 특히 유용하다. 이러한 경우에 전통적인 Least Squares 문제의 해법은 존재하지 않거나 있어도 불안정하고 신뢰할 수 없다. 달리 이야기 하면, PLS 접근법은 상호연관성이 있는 독립변수에 대해 안정적인, 정확한, 그리고 꽤나 잘 예측하는 모델이다 [1-3].

같은 코드 개념이 유기 화합물의 QSAR 연구에 대해 우리가 제안한 [4] Molecular Field Topology Analysis (MFTA) 기술을 구현하는 소프트웨어에 성공적으로 이식되었다.

1. 일반적인 원리

Partial Least Squares 회귀분석은 수많은 원본 데이터를 적은 수의 직교요소(orthogonal factors)들로 표현되는 새로운 변수 공간으로 선형투영(linear transition) 하는데 기초하고 있다. 다른 말로, 이러한 factor들은 원본 데이터의 상호 독립적인 (mutually independent (orthogonal)) 선형 조합 (linear combination) 이 된다. principle component regression (PCR) 과 같은 몇몇 유사한 접근법과 달리 이러한 직교 factor들은 종속변수와 극대화된 상관관계를 갖도록 하는 방향으로 선택되어진다; 그리하여, PLS 모델은 가장 최소의 필수 factor들만 갖게 된다 [2]. 만약 이러한 factor들을 많이 갖게 되면 PLS 모델은 기존의 multiple linear regression과 동일한 형태를 띄도록 된다. 게다가, PLS 접근은 핵심 직교 factor들이 주요 몇개의 주성분 (principle components)들에 낮은 연관성을 가지고 있더라도 우리가 독립변수와 종속변수 사이에 관계를 예측할 수 있도록 해준다. 이러한 개념은 두개의 독립변수 x1, x2와 하나의 종속변수 y로 이루어진 가상의 데이타 셋으로 표현되는 그림1에서 설명되고 있다. 이것은 원본 변수 x1, x2가 심하게 상호연관되어 있는 것을 쉽게 보여주고 있다. 이들로부터, 우리는 원본 변수들의 선형 조합으로 표현되는 두 개의 직교요소 (orthogonal factors)인 t1, t2로 달리 표현할 수 있다. 그 결과 첫 번째 잠재 변수인 t1으로 종속변수 y를 연관시키는 단일 factor 모델이 찾아 진다.





a



b


Fig. 1. (a) 원본 변수의 잠재 변수로의 변환, 그리고 (b) 단일 PLS factor만을 포함하는 종속변수모델 구축.

k번째 factor를 생성하는 PLS 기법의 기본 알고리즘은 다음과 같이 표현 된다:



여기서, N - 데이터의 수, M - 독립변수의 수, X[N, M] - 독립변수 행렬, y[N] - 종속변수 백터, w[M] - 보조 가중 벡터, t[N] - factor 인자 벡터, p[M] - 로딩 벡터, q - factor와 종속변수 사의 연관관계의 스칼라 인자; 모든 벡터는 컬럼 벡터이고 k+1인자가 없는 항목들은 현재의 k번째 factor에 해당되는 것들이다.

새로운 잠재 변수들은 (loading 벡터 p로 표현되는 c인자들을 가지고) 원본 독립변수들의 선형 조합이기 때문에 새로운 factor 모델은 종속변수에 대한 각 독립변수의 영향을 간접적으로 표현한다.

2. 모델 예측


factor를 구축하는 접근방법은 유용 가능한 데이터의 독립변수가 적용가능한 파라미터를 최소한 사용할 수 있도록 해준다. 그리고 그 결과, 회귀 모델은 최상의 정확성과 안정성을 가져다 준다.그러나 이 모델에서 과도하게 많은 factor들을 포함시키는 것은 독립변수의 예측 정확도를 증가 시킬 수 있지만 독립변수와 종속변수 사이의 연관성의 진짜패턴을 정확히 표현하지 못하고 랜덤 노이즈와 학습 데이터의 개개의 특성만을 대변하는 모델이 되어 벼려 예측성을 감소 시킨다. 이러한 이유때문에 모델을 구축하는 동안 교차검증 (cross-validation) 과정을 통해서 성공적인 factor를 포함 시킨 후 예측 결과를 주시해야한다. 교차 검증 과정에서 모델 구축에 사용되어지지 않은 학습데이터에서 약간을 취하는 방식으로 계산이 수차례 이루어 진다. 그런 다음, 종속변수는 이러한 모델을 이용해서 배제되었던 데이터에 대해서 예측이 이루어진다. 각 데이터는 정확히 한번 배제되어지고,

2009년 11월 18일 수요일

시간되면 드려다 볼 책

마광수 <성애론>
에리히 프롬 <환상의 사슬을 넘어서> '프로이트와 마르크스와의 만남' <프로이트냐 마르크스냐> 문학세계사

2009년 11월 2일 월요일

STARUS 리오돔텐트(2-3인용, 동계텐트)

가격 : 78,000원
플라이 미설치시 전체적인 모습 1




플라이 미설치시 전체적인 모습 2




전체 무게 3.62kg



구성품 가방, 플라이, 폴대, 픽, 텐트내피


가방 무게 100g



텐트내피무게 1.06kg



플라이 무게 870g




폴대무게 1.275kg



픽무게 315g

사용시 차양폴을 제거하고, 차후 듀랄루민 폴대로 교체시 무게를 많이 줄일 수 있음.
전체적으로 가격대비성능이 괜찬음. 말은 3인용이지만 아무리 너그럽게 생각해도 이건 2인용이다.

2009년 10월 14일 수요일

Delay routines of STR91x working at 96mhz

Delay(1200); // >= 200us
Delay(60000); // >= 10ms
Delay(180000); // >= 30ms
Delay(240000); // >= 40ms
Delay(300000); // >= 50ms
Delay(420000); // >= 70ms

2009년 10월 11일 일요일

Configuration of COM26T2844VTX color LCD in STR91x

* CPU IF (9bit data bus)
- 2 cycle transfer through 9bit data bus
- assignment
DB17,DB16,DB15,DB14,DB13,DB12,DB11,DB10,DB9
R5, R4, R3, R2, R1, R0, G5, G4, G3
G2, G1, G0, B5, B4, B3, B2, B1, B0
- IM3-0(system interface selection)
IM3 IM2 IM1 IM0
1010 -> 80-system 18bit interface
0010 -> 80-system 16bit interface
0011 -> 80-system 8bit interface
1011 -> 80-system 9bit interface
- registers
IR : 16bit index register
WDR : 18bit write-data register
RDR : 18bit read-data register
- register selection(parallel interface)
WRB RDB RS
010 -> Write index of IR
100 -> Setting disabled
011 -> write to a control register and internal GRAM via WDR
101 -> Read from the internal GRAM via the RDR

usage str91x pins

*******************************
* Pin ** ALT ****** Descript **
*******************************
* P2.4 * ALT_OUT2 * SSP0_SCLK *
* P2.5 * ALT_OUT3 * SSP0_MOSI *
* P2.6 * ALT_IN1 ** SSP0_MISO *
* P2.7 * ALT_OUT2 * SSP0_NSS **
---- SD Card Connection -------
* P3.0 * ALT_IN1 ** UART0_Rxd *
* P3.1 * ALT_OUT2 * UART0_TX **
- Serial Terminal Connection --
* P3.2 * ALT_IN1 ** UART1_Rxd *
* P3.3 * ALT_OUT2 * UART1_TX **
--- GPS Module Connection -----
* P3.4 * ALT_OUT2 * SSP1_SCLK *
* P3.5 * ALT_IN1 ** SSP1_MISO *
* P3.6 * ALT_OUT2 * SSP1_MOSI *
* P3.7 * ALT_OUT2 * SSP1_NSS **
-- TLV320AIC261 Connection ----
* P4.x -> general ADC(touch panel)
* P7.[0:5] -> [RELEASE,CSB,RS,WRB,RDB,RESTB]
* P8.x -> DB1..8
* p9.x -> DB9..17
--- LCD connnection -----------

2009년 10월 8일 목요일

Rewriting broken EEPROM of Cypress FX2 (non 0xFFFF in first word)

1. plugg off USB connection or Power Supply in FX2 board.

2. remove the boot EEPROM from FX2 board.

3. plugg on USB connection and Power Supply in FX2 board.

4. Carefully attach the boot EEPROM on same place of FX2 board to sustain USB connection and Power suppling.

5. Downloading C:\Cypress\USB\Examples\FX2LP\Vend_ax\Vend_Ax.hex using Cyconsol.exe.

6. Click "Vend Req" with the below picture.



7. Push reset button of FX2 board.

8. verify the device name "USB Device".

2009년 10월 7일 수요일

Secret Of Korea

http://andocu.tistory.com

2009년 10월 5일 월요일

fpga의 신호선 설계정책

입력과 출력은 빵빵하게 버퍼(IBUF, OBUF)를 사용하고

무엇보다도 클럭은 정교하고 안정적이도록 dcm을 꼭 사용하자 IP coregen을 이용해서

2009년 10월 3일 토요일

Useful schematic library of STR91XFWQ 128-pin LQFP in KiCad



EESchema-LIBRARY Version 2.3 Date: 2009-10-03 오전 11:18:32
#
# STR91XFWA
#
DEF STR91XFWA U 0 40 Y Y 1 F N
F0 "U" 0 -550 60 H V C CNN
F1 "STR91XFWA" 0 50 60 H V C CNN
DRAW
S -950 950 1000 -1000 0 0 0 N
T 0 0 -50 60 0 0 0 128-pin~LQFP Normal 0
X P4.3 128 -750 1100 147 D 28 28 1 1 B
X P4.4 127 -700 1100 147 D 28 28 1 1 B
X P4.5 126 -650 1100 147 D 28 28 1 1 B
X P4.6 125 -600 1100 147 D 28 28 1 1 B
X P4.7 124 -550 1100 147 D 28 28 1 1 B
X AVREF 123 -500 1100 147 D 28 28 1 1 W
X AVDD 122 -450 1100 147 D 28 28 1 1 W
X VSSQ 121 -400 1100 147 D 28 28 1 1 W
X VDDQ 120 -350 1100 147 D 28 28 1 1 W
X P7.7 119 -300 1100 147 D 28 28 1 1 B
X P7.6 118 -250 1100 147 D 28 28 1 1 B
X JTDO 117 -200 1100 147 D 28 28 1 1 B
X P1.7 116 -150 1100 147 D 28 28 1 1 B
X JTDI 115 -100 1100 147 D 28 28 1 1 B
X P1.6 114 -50 1100 147 D 28 28 1 1 B
X VSS 113 0 1100 147 D 28 28 1 1 W
X VDD 112 50 1100 147 D 28 28 1 1 W
X JTMS 111 100 1100 147 D 28 28 1 1 B
X P1.5 110 150 1100 147 D 28 28 1 1 B
X P1.4 109 200 1100 147 D 28 28 1 1 B
X JTCK 108 250 1100 147 D 28 28 1 1 B
X JTRSTn 107 300 1100 147 D 28 28 1 1 B
X P1.3 106 350 1100 147 D 28 28 1 1 B
X VSSQ 105 400 1100 147 D 28 28 1 1 W
X X1_CPU 104 450 1100 147 D 28 28 1 1 B
X X2_CPU 103 500 1100 147 D 28 28 1 1 B
X VDDQ 102 550 1100 147 D 28 28 1 1 W
X P1.2 101 600 1100 147 D 28 28 1 1 B
X RESET_OUTn 100 650 1100 147 D 28 28 1 1 O
X P1.1 99 700 1100 147 D 28 28 1 1 B
X P1.0 98 750 1100 147 D 28 28 1 1 B
X JRTCK 97 800 1100 147 D 28 28 1 1 B
X P3.5 65 1150 -800 147 L 28 28 1 1 B
X P3.6 66 1150 -750 147 L 28 28 1 1 B
X P0.0 67 1150 -700 147 L 28 28 1 1 B
X P3.7 68 1150 -650 147 L 28 28 1 1 B
X P0.1 69 1150 -600 147 L 28 28 1 1 B
X P5.4 70 1150 -550 147 L 28 28 1 1 B
X P0.2 71 1150 -500 147 L 28 28 1 1 B
X VSSQ 72 1150 -450 147 L 28 28 1 1 W
X VDDQ 73 1150 -400 147 L 28 28 1 1 W
X EMI_ALE 74 1150 -350 147 L 28 28 1 1 B
X EMI_RDn 75 1150 -300 147 L 28 28 1 1 B
X P0.3 76 1150 -250 147 L 28 28 1 1 B
X P5.5 77 1150 -200 147 L 28 28 1 1 B
X P0.4 78 1150 -150 147 L 28 28 1 1 B
X P5.6 79 1150 -100 147 L 28 28 1 1 B
X P5.7 80 1150 -50 147 L 28 28 1 1 B
X VDD 81 1150 0 147 L 28 28 1 1 W
X VSS 82 1150 50 147 L 28 28 1 1 W
X P6.4 83 1150 100 147 L 28 28 1 1 B
X P6.5 84 1150 150 147 L 28 28 1 1 B
X P0.5 85 1150 200 147 L 28 28 1 1 B
X VDDQ 86 1150 250 147 L 28 28 1 1 W
X VSSQ 87 1150 300 147 L 28 28 1 1 W
X P0.6 88 1150 350 147 L 28 28 1 1 B
X RESET_INn 89 1150 400 147 L 28 28 1 1 I
X P0.7 90 1150 450 147 L 28 28 1 1 B
X TAMPER_IN 91 1150 500 147 L 28 28 1 1 I
X P6.6 92 1150 550 147 L 28 28 1 1 B
X P6.7 93 1150 600 147 L 28 28 1 1 B
X MII_MDIO 94 1150 650 147 L 28 28 1 1 B
X USBDN 95 1150 700 147 L 28 28 1 1 B
X USBDP 96 1150 750 147 L 28 28 1 1 B
X P8.3 32 -1100 -800 147 R 28 28 1 1 B
X P6.1 31 -1100 -750 147 R 28 28 1 1 B
X P8.2 30 -1100 -700 147 R 28 28 1 1 B
X P6.0 29 -1100 -650 147 R 28 28 1 1 B
X P8.1 28 -1100 -600 147 R 28 28 1 1 B
X P5.3 27 -1100 -550 147 R 28 28 1 1 B
X P8.0 26 -1100 -500 147 R 28 28 1 1 B
X PHYCLK/P5.2 25 -1100 -450 147 R 28 28 1 1 B
X VSSQ 24 -1100 -400 147 R 28 28 1 1 W
X VDDQ 23 -1100 -350 147 R 28 28 1 1 W
X EMI_WRHn 22 -1100 -300 147 R 28 28 1 1 O
X EMI_BWR_WRLn 21 -1100 -250 147 R 28 28 1 1 O
X P5.3 20 -1100 -200 147 R 28 28 1 1 B
X P5.2 19 -1100 -150 147 R 28 28 1 1 B
X P5.1 18 -1100 -100 147 R 28 28 1 1 B
X VDD 17 -1100 -50 147 R 28 28 1 1 W
X VSS 16 -1100 0 147 R 28 28 1 1 W
X P7.5 15 -1100 50 147 R 28 28 1 1 B
X P7.4 14 -1100 100 147 R 28 28 1 1 B
X P7.3 13 -1100 150 147 R 28 28 1 1 B
X P5.0 12 -1100 200 147 R 28 28 1 1 B
X P2.1 11 -1100 250 147 R 28 28 1 1 B
X P2.0 10 -1100 300 147 R 28 28 1 1 B
X VDDQ 9 -1100 350 147 R 28 28 1 1 B
X VSSQ 8 -1100 400 147 R 28 28 1 1 B
X P7.2 7 -1100 450 147 R 28 28 1 1 B
X P7.1 6 -1100 500 147 R 28 28 1 1 B
X P7.0 5 -1100 550 147 R 28 28 1 1 B
X AVSS 4 -1100 600 147 R 28 28 1 1 W
X P4.0 3 -1100 650 147 R 28 28 1 1 B
X P4.1 2 -1100 700 147 R 28 28 1 1 B
X P4.2 1 -1100 750 147 R 28 28 1 1 B
X P2.2 33 -750 -1150 147 U 28 28 1 1 B
X P8.2 34 -700 -1150 147 U 28 28 1 1 B
X P2.3 35 -650 -1150 147 U 28 28 1 1 B
X P8.5 36 -600 -1150 147 U 28 28 1 1 B
X P2.4 37 -550 -1150 147 U 28 28 1 1 B
X P8.6 38 -500 -1150 147 U 28 28 1 1 B
X VBATT 39 -450 -1150 147 U 28 28 1 1 W
X VSSQ 40 -400 -1150 147 U 28 28 1 1 W
X X2_RTC 41 -350 -1150 147 U 28 28 1 1 B
X X1_RTC 42 -300 -1150 147 U 28 28 1 1 B
X VDDQ 43 -250 -1150 147 U 28 28 1 1 W
X P8.7 44 -200 -1150 147 U 28 28 1 1 B
X P2.5 45 -150 -1150 147 U 28 28 1 1 B
X P9.0 46 -100 -1150 147 U 28 28 1 1 B
X P9.1 47 -50 -1150 147 U 28 28 1 1 B
X VSS 48 0 -1150 147 U 28 28 1 1 W
X VDD 49 50 -1150 147 U 28 28 1 1 W
X P9.2 50 100 -1150 147 U 28 28 1 1 B
X P9.3 51 150 -1150 147 U 28 28 1 1 B
X P9.4 52 200 -1150 147 U 28 28 1 1 B
X P2.6 53 250 -1150 147 U 28 28 1 1 B
X USBCLK/P2.7 54 300 -1150 147 U 28 28 1 1 B
X P3.0 55 350 -1150 147 U 28 28 1 1 B
X VSSQ 56 400 -1150 147 U 28 28 1 1 W
X VDDQ 57 450 -1150 147 U 28 28 1 1 W
X P9.5 58 500 -1150 147 U 28 28 1 1 B
X P3.1 59 550 -1150 147 U 28 28 1 1 B
X P3.2 60 600 -1150 147 U 28 28 1 1 B
X P3.3 61 650 -1150 147 U 28 28 1 1 B
X P9.6 62 700 -1150 147 U 28 28 1 1 B
X P3.4 63 750 -1150 147 U 28 28 1 1 B
X P9.7 64 800 -1150 147 U 28 28 1 1 B
ENDDRAW
ENDDEF
#
#End Library

2009년 10월 2일 금요일

change ~~~.... windows to linux

IE -> firefox
Visual Studio -> Eclipse
Orcad -> Kicad
Keil -> SDCC

above all, try to Virtual Box as the bridge to complete linux machine.

2009년 9월 25일 금요일

INSTALL.CROSS in Freetype Library

이 문서는 유닉스 호환 시스템상에서 FreeType 라이브러리를 교차생성(Cross-Build)하는 방법을 설명하고 있다. 예를 들면, FreeBSD/i386 시스템 상에서 Linux/MIPS에서 사용할 이미지들을 만든다던가 하는 것들 말이다. 이 문서를 읽기 전에 필요한 도구와 기본적이 생성 절차에 대해 알아 보기 위해서 INSTALL.UNIX문서를 살펴 보기 바란다.

1. 필요한 도구들
-----------------

유닉스 시스템상에서 FreeType 라이브러리를 생성하기 위해선 GNU Make 는 3.80이거나 그 이상의 버전이어야 한다. INSTALL.UNIX문서는 설치된 make의 버전을 체크하는 힌트를 포함하고 있다.

대상시스템을 교차생성하기 위해선 GNU C 컴파일러가 필요하다. 현재, 비 GNU 크로스 컴파일러를 사용하는 방법은 시도되지 않았다. 크로스 컴파일러는 대상 시스템에 대한 정보를 담고 있는 앞첨자를 가지고 설치 되어 있을 것이다. 예를 들면, 여러분의 생성-시스템이 FreeBSD/i386이고 대상-시스템이 Linux/MIPS라고 한다면, 크로스 컴파일러는 'mips-ip22-linux-elf-gcc'라는 이름을 갖고 설치 되어있을 것이다.

자체생성을 위한 C 컴파일러도 교차생성 과정동안 실행 되어야 하는 도구들을 만들기 위해서 필요하다. 비 GNU 자체-컴파일러도 수용가능하지만, 그러한 과정은 아직 시도되지 않았다.


2. 설 정
----------------

2.1. 생성 그리고 대상 시스템

교차생성을 위한 설정을 하기 위해서 '--host='옵션과 '--build='옵션을 configure 스크립트에 넘겨주어야 한다. 예를 들면, 여러분의 생성시스템이 FreeBSD/i386이고 대상시스템이 Linux/MIPS라면

./configure \
--build=i386-unknown-freebsd \
--host=mips-ip22-linux-elf \
[other options]

'--host='이 실제 생성과정이 일어 나는 시스템이 아니라 생성된 이미지가 실행될 시스템을 가리키는 것을 명심해야 한다. 오래된 버전의 GNU autoconf은 '--host='와 '--target'을 사용하였다. 하지만, 지금은 잘못된 표현으로 동작하지 않는다. 마찬가지로 명확하게 CC라는 환경 변수로 다음과 같은

env CC=mips-ip22-linux-gcc ./configure

또는,

env CC=/usr/local/mips-ip22-linux/bin/gcc ./configure

표현은 둘다 동작하지 않는다. 이런 방식은 크로스-C(생성된)와 원래의 C(생성에 사용될) 컴파일러를 찾을때 'configuration' 스크립트를 혼동시킨다.


2.2. FreeType2 설치하는데 필요한 prefix

`--prefix='을 적절히 샛팅하는 것은 중요하다. FreeType2를 설치하기 위한 prefix는 freetype-config 스크립트와 freetype2.pc같은 설정파일에 쓰여진다.

생성된 FreeType2 라이브러리는 교차생성시스템의 한부분으로 사용된다면, prefix는 자체생성시스템의 설치 위치와는 다르게 되어야 한다. 예를 들면, '--prefix=/usr/local'를 갖는 설정은 자체시스템에서 실행 될 수 없는 이미지를 자체시스템이 폭넓게 사용하는 '/usr/local' 디렉토리에 설치한다. 이것은 FreeType2를 사용하는 모든 응용프로그램의 설정에 혼돈을 초래한다. 대신, 교차생성을 자체시스템이 사용하는 디렉토리와 분리된 다른곳을 지정하는 prefix로 사용하라. 예를 들면, '--prefix=/usr/local/mips-ip22-linux/'.

다른 편으로, 생성된 FreeType2가 대상시스템의 한 부분으로 사용된다면, 설치될 prefix는 대상 시스템의 파일 시스템 구조를 참조하여 설정해야한다.


3. 생성 명령어
-------------------

설정이 성공적으로 끝났다면, GNU make 를 불러서 FreeType2를 만든다. 그냥 다음과 같이 치면 된다.

make

또는,

gmake

GNU make 실행 파일의 실제적인 이름에 따라 다른다.


4. 설 치
---------------

다음과 같이 치자.

make install

통상 '--prefix'옵션의 값으로 설정된 디렉토리에 FreeType2가 설치될 것이다.

2.2 문단에서 말했듯이 FreeType2는 때때로 교차생성을 하는 시스템에 설치되지 말고, 대상시스템의 시스템 디렉토리에 설치되도록 설정되기도 한다. 이러한 경우에 make의 변수값 'DESTDIR'을 설치할 root 디렉토리를 변경하는데 유용하다. 예를 들면, 다음과 같이

make DESTDIR=/mnt/target_system_root/ install

실행 한후에, 생성된 FreeType2 라이브러리 파일들은 '/mnt/target_system_root//lib' 디렉토리에 설치 되어진다.


5. 해야할일들
-------------

Cygwin(또는 MSys)와 Unix사이의 크로스-생성은 시도해보아야 한다.


----------------------------------------------------------------------

Copyright 2006, 2008 by suzuki toshiya
David Turner, Robert Wilhelm, and Werner Lemberg.


This file is part of the FreeType project, and may only be used,
modified, and distributed under the terms of the FreeType project
license, LICENSE.TXT. By continuing to use, modify, or distribute
this file you indicate that you have read the license and understand
and accept it fully.


--- end of INSTALL.CROSS ---

GPS Logger 와 Tracer를 만들어 보자

CPU Module (STR91x) + GPS Module + mono LCD Module + DAC Audio Codec (tlv320aic261) + SD Card Module

* CPU module
STR911(SPI, I2S, UART, GPIO, RTC) + eclipse + codesourgery tool + jtag + uart terminal
UART, GPIO -> test Ok
RTC -> testing (not tick)

* Korean font based bitmap

* SD Card Module(fat32)

* GPS track loading for the tracer

* LCD interface
8bit gray,

* DAC Audio Codec (tlv320aic261)
I2S or SPI Interface, DAC for Audio Codec, ADC for Mic, Battery ISP, Temperature Sensor

2009년 9월 16일 수요일

MAKE YOUR OWN GARBAGE ENZYME

* 설탕, 야채 과일 찌꺼기, 물을 1:3:10의 비율로 사용 예를 들면, 1kg 설탕, 3kg의 야채 과일 찌꺼기, 10리터의 물

* 설탕 부분에 대해선, 인도산 흑설탕인 자그리(vellam or gula merah)나 당밀 사용하라

* 신선한 향의 효소가 되기 위해서, 오랜지나 레몬 껍질이나 pandan 잎파리를 첨가하라. 어떤 사람은 유쾌하지 않은 냄새를 줄수 있는 야채 찌꺼기나 과일 찌꺼기를 사용한다.

* 팽창을 허용하기 위해 밀패된 플라스틱 용기를 사용하라. 유리나 금속 용기는 사용하지 말라. 용기는 시원하고 건조하면서 통풍이 잘되는 곳에 놓아 두어라. 직사광을 피하라 가스를 제거하기 위해서 첫번째 달에는 매일 매일 뚜껑을 열어 주어라.

* 여러분이 충분한 양의 부엌 쓰레기를 모으지 못하였다면, 용기를 점차적으로 채워 넣는 방법을 상용할 수 있다. 3개월의 발효과정은 여러분의 부엌 쓰레기의 최근 덩어리와 시작한다. 쓰레기는 위에 뜨도록 놓아 두고, 잠시동안 모든것을 아래 쪽에 놓는다.

* 효소 액은 검은 갈색을 띄게 된다. 만약 거무스름하다면, 발효과정을 다시 시작하기 위해서 같은 양의 설탕을 첨가하라.

* 혼합물의 표면에 생기는 어떤 희고 검고 갈색의 층은 무시하라. 이건 그냥 효모다. 만약 용기가 밀봉되지 못하면 파리나 구더기가 생길지도 모른다. 이러한 것들을 그냥 내버려 두면 화학반응은 그것들은 자연적으로 변하게 할것이다.

* 3개월후, 발효된 용액을 오래된 티셔츠나 체에 거른다. 걸러진 부산물들은 여러분의 다음 효소만드는 과정에 사용하거나 비료로 쓸 수 있다.

* 이 효소는 유통 기한 같은 것이 없고 사용할때 물에 희석시켜야 한다.

사용법과 희석 비율에 관한 더많은 정보는, www.justlifeshop.com/changeclimate (click on the "recover ozone layer" icon)

다목적 Citrus Cleaner 만들기

이 글의 원본은 다음 사이트에서 http://happyhomemaker88.wordpress.com/2009/05/02/recipe-for-homemade-citrus-enzyme-a-natural-cheap-effective-all-purpose-cleaner/ 볼 수 있습니다.

집에서 만드는 감귤 효소 세정제 조리법 - 자연적, 정말로 싸고 효과적 !



레몬과 오랜지 껍질로 만든 새로운 내 eco 효소 세정제
이 놀라운 효소에 대한 나의 평을 보시려면 여기를 읽어 보세요

여기는 건강을 위해서 마실수 있는 Dragon Fruit 효소를 만드는 법

안녕하세요, 소중한 친구분들.

헤헴, 아주 잠시동안 나는 써야할 것들로 고생했었습니다. - 여러분에게 말해줄 것들이 아주 많이 있었습니다. 그러나 여기서 새로운 글을 등록하려 할때마다, 나는 아무 말 없이, 빈 페이지를 그냥 쳐다 보는 것으로 끝내곤 했습니다.

내 마음은 흐르는 모래위에 놓여진 것처럼 느겨졌었습니다.

어쨌든, 몇 주전 말레이시아내의 여기서 수행된 Earth Hour 캠페인은 아주 성공적이었습니다. - 환경적인 인식이 증가 하고, 환경 친화적인 프로그램과 게시물을 알리는 지역 신문에 많은 좋은 게시물들이 있었습니다.

그들 중 나의 눈을 끄는 하나는 부엌에 나오는 찌꺼기나 야채 쓰레기, 과일을 이용하는 효소를 만드는 방법에 대한 것이었습니다. 이 효소들은 다용도 세정제로 사용하기에 정말로 좋고 효과적입니다.

나는 지난 13년동안 내 마루를 청소하는데 과일 혹은 효소기반 마루 세정제를 사서 사용해 왔습니다. 하지만 판매용으로 환경친화적인 마루 청소제를 만드는 화학 엔지니어로 부터 마루 세정제를 사서 섰습니다. 마루를 청소한 후, 꽃이 활짝 핀 식물 화분에 물을 주었습니다. 마루세정제는 식물 비료로서도 사용가능해 일석이조입니다.

지난해, 한 친구가 직접 효소 세정제 만드는 법을 나에게 말해 주었습니다. 그러나 나는 지난달 신문에서 그것에 대한것을 읽기 전까지 약간도 만들어 보기를 시도해 보지 않았습니다. 그건 The Garbage Enzyme이라고 불려 지는 것이었습니다. 그러나 "garbage"라는 단어는 불쾌한 느낌을 준다고 생각해서 약간 고치기로 결심했습니다. 그래서 나는 레몬과 오렌지 부산물로 구성된 Citrus Enzyme을 만들기로 했습니다.

이 무독하고 환경친화적인 효소에 알맞는 훌룡한 사용법들 (효소 한, 두 스푼정도만 사용)

1) 접시를 닦거나 세탁을 할때

2) 목욕실과 화장실을 청소할때

3) 심각한 얼룩을 지우기 위해

4) 야채나 과일을 싰기 위해

5) 부엌 싱크나 배수관에 있는 막히는 곳을 청소할때

6) 개미나 바퀴벌레를 쫒기위해

7) 마루를 반들거리게 청소하기 위한 마루 세정제로

8) 야채, 꽃이 있거나 없는 식물을 위한 비료로

9) 안면 세정제 같은 스킨 케어 제품으로

지금, 내가 아는 대부분의 사람들은 집에서 이 효소를 만들어 쓰고 있고 많이들 그 놀라운 사용에 확신을 가지고 있습니다. 급기야 내 정기적인 에어컨 수리공은 그의 아내에게 얼굴을 싰을 때 이 효소를 사용해 보라고 말했고, 그녀는 그것에 SK3라는 이름을 붙였습니다.

나는 혼자서 시도해 볼 수 있도록 효소를 만드는 절차를 간소하게 만들었습니다. 그리고 아래에 그림을 첨가하여 게시 합니다. 나는 시작해서 효소를 얻는데 인내심이 부족하고 충분히 큰 플라스틱 용기를 가지고 있지 못해서, 추천하는 전체의 성분의 10%만을 사용하였습니다. 어쨋든, 호기심은 나를 좀 더 낳은 모습으로 만들어 주었습니다. 그리고 내 부엌에서 3kg의 야채와 과일이 모이기 위해 몇 주간 기다리지 못했습니다.

감귤 효과 기반 다용도 세정제(Citrus Enzyme Based Multipurpose Cleaner)

시작하기 전에 밀패용 커버를 가진 플라스틱 용기가 필요합니다. 여기서 나는 오래된 2리터 과일 쥬스 병을 사용하였습니다. 효소는 3달정도의 발효과정을 지나면 사용할 준비가 됩니다.

성분 : -



갈색 설탕 100g



레몬, 오렌지 부스러기 300g(쥬스를 만들고 남은 찌꺼기)



1리터의 수돗물



깔대기를 사용해 병에 설탕을 넣고 물에 넣습니다.



병을 닫고, 시간이 지나도록 놓아 둡니다. 그럼 당신은 효소가 사용 가능할 때를 알 수 있을 겁니다. 보통 3달이후 정도...



첫번째 달쯤 돼면 발효과정에서 생기는 산소를 내보내기 위해서 뚜껑을 열어 주어야 합니다. (어떤날쯤 되면 당신을 크기가 부풀어 오르는 병을 볼수 있을 것입니다.)



위의 그림은 단지 한달 막 지난 효소로 가득찬 내 병입니다. 나의 지역 신문에서 이 놀라운 효소 세정제에 대한 것을 더 읽기 원한다면 여기로

2009년 9월 9일 수요일

OpticalGrating

from http://www.thespectroscopynet.com/Index.html?/Optics_1.html

광학(Optics)

광자(photons)나 광파(light wave)가 고체 표면(solid surface)에 충돌할때,

광자의 전달과정에서 다섯가지 현상들이 나타난다.

* 반사(reflection)
* 굴절(refraction)
* 흡수(absorption)
* 방사(scattering)
* 극성변이(polarization)

각 현상은 고체의 전기적인 구조와 광자의 미세한 상호작용에 의해서 생겨난다.

그리하여 금속과 비금속사이,

혹은 다른 유전체 성격을 가진 비금속사이에서 광자의 파장은 변하게 될것이다.

고체의 구조와 견고함에도 변화를 줄것이다.

비록 빛이 서로 다른 두 물질사이에 도달했을때

일어나는 다른 현상에 대한 자세한 분석은 여러분이 원하는 만큼 복잡해 질 수 있지만,

몇가지 과정만 이해하는 것으로도 충분한 가치가 있다.

금소과 진공사이에서, 혹은 전기장에서 아무런 흡수를 보이지 않는 광학 물질 사이에서

일어나는 빛의 굴절 같은 것들 말이다.

2009년 8월 25일 화요일

자전거 바꾸다

티티카카 클래식에 애착이 참 많았는데,

그놈의 자전거 부품은 금땡이로 만드는 것도 아닌데 쓰봉 졸라 비싸다.

그래서 새로 샀다.

수명이 조금씩다해가는 부품들을 바꾸려고 하니

거기에 맞는 다른 부품들도 바꾸어야 하는 상황

그렇다고 지금과 동일한 부품으로 바꾸려니 싸구려 부품은 가게서 아예 취급도 하질 안아

이래 저래 짱구를 돌리고 계산기를 뚜드려 보니 새로 사는 가격이

부품 교체하는 비용과 얼추 비슷해 버리는 얼빵한 상황

마침 다혼 hammerhead 8.0가 중고 매물로 나와서 질렀다.

우선 맘에 든다. 단지 잔고가 다 비었다.

2009년 8월 24일 월요일

very hard str91x' environment; eclipse + openocd + codesourcery + armusbocd

#debug options
#debug_level 3

telnet_port 4444
tcl_port 6666
gdb_port 3333

# tell gdb our flash memory map
# and enable flash programming
gdb_memory_map enable
gdb_flash_program enable

#interface
interface ft2232
ft2232_device_desc "Olimex OpenOCD JTAG A"
ft2232_layout "olimex-jtag"
ft2232_vid_pid 0x15BA 0x0003

jtag_speed 4
jtag_nsrst_delay 100
jtag_ntrst_delay 100

#use combined on interfaces or targets that can't set TRST/SRST separately
reset_config trst_and_srst

#jtag scan chain
#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
jtag_device 8 0x1 0x1 0xfe
jtag_device 4 0x1 0xf 0xe
jtag_device 5 0x1 0x1 0x1e

#target configuration
daemon_startup reset

#target
#target arm7tdmi
target arm966e little run_and_init 1 arm966e

run_and_halt_time 0 30

working_area 0 0x50000000 16384 nobackup

#flash bank str9xpec 0x00000000 0x00080000 0 0 0
flash bank str9x 0x00000000 0x00080000 0 0 0 # 512k
flash bank str9x 0x00080000 0x00008000 0 0 0 # 32k

#target_script 0 reset event/str912_reset.script
#target_script 0 reset ./str91x_flash.script

# For more information about the configuration files, take a look at:
# http://openfacts.berlios.de/index-en.phtml?title=Open+On-Chip+Debugger

***************************************************************************
target remote localhost:3333
monitor reset
monitor sleep 500
monitor poll
monitor soft_reset_halt
monitor arm7_9 force_hw_bkpts enable

# Set SRAM size to 96 KB
monitor mww 0x5C002034 0x0197
monitor mdw 0x5C002034

# Set Flash, Bank0 size to 512 KB
monitor mww 0x54000000 0xf

load
break main
continue

!!!!!!!!!!!!!!!!! => error erasing flash with vFlashErase packet !!!!!!!!!!!!!!!!!

2009년 8월 20일 목요일

이들 중 가장 해로운 것은?

1. 귀신 잡는 해병
2. 대통령 잡는 대통령
3. 모기 잡는 잠자리
4. 파리 잡는 끈끈이

2009년 8월 19일 수요일

bike parts

Shop1 : http://stores.ebay.com/Ultimate-Sports-and-Nutrition
Chain
Sram Chain PC-971 Chain Power Chains PC971 9 Speed PC, US $21.99, x 1250 = 27,500
Bar grip
SRAM Shifter Grips SRAM Halfpipe Grips SRAM Grips 60 mm, US $8.99 , x 1250 = 11,300
Shifter
SRAM Attack Bicycle Grip Shift Set 3x 9 Speed Shifters, US $35.99, x 1250 = 45,000
Cassette
Sram Cassette SRAM PG 980 PG980 11-32 PG-980 9 Speed, US $45.99, x 1250 = 57,500

141,300

Shop 2 : http://stores.shop.ebay.com/Crosslake-Sales__W0QQ_armrsZ1hash=item518b74fd09&_trksid=p3286.c0.m14
Crank
FSA GOSSAMER 170mm Crankset 39/53 with MegaExo BB New, US $79.97, x 1250 = 100,000

Shop 3 : http://stores.shop.ebay.com/Cycleway-Bicycle-Shop__W0QQ_armrsZ1
Hub
Novatec A291SB F292SB Road Hubs(F20/R24H), US $118.0, x 1250 = 147,500

Shop 4 : http://www.athatb.com/
Spoke+nipple
DT swiss champion 2.0mm+1.8mm+2.0mm, \77600 \77,600

Shop 5 : http://www.ssung2shop.com
Rim
Alexrim R390(20h, 24h), \86,000\86,000

total : \552,400

2009년 7월 21일 화요일

OSC's interconnection between 5v and 3.3v on spartan xc3s400




Transition Delay is about 5ns between ch1 and ch2

2009년 7월 20일 월요일

2009년 7월 17일 금요일

USB camera (verilog HDL)

`timescale 1ns / 1ps

module usb_camera(nReset, nStart, Pclk, Href, Vsync, Y,
nLB, nUB, nCS, nWE, nOE, Address, Data,
Uclk, nFlagB, nPktend, nSLWR, Udata,
TP);

input nReset;
input nStart;
input Pclk;
input Vsync;
input Href;
input [7:0] Y;

output nLB;
output nUB;
output nCS;
output nWE;
output nOE;
output [17:0] Address;
inout [15:0] Data;

output Uclk;
input nFlagB;
output nPktend;
output nSLWR;
output [15:0] Udata;
output [7:0] TP;

wire pclkdcm;
wire clkdcm;
DCM dcm2x(.CLKIN(Pclk), .RST(1'b0), .CLKFB(pclkdcm), .CLK0(pclkdcm), .CLK2X(clkdcm), .LOCKED());
defparam dcm2x.CLKIN_PERIOD = 37.0; // 37ns

// make Global buffered pclk_2x(27*2Mhz) and new_pclk(27Mhz)
//wire pclk_2x;
//BUFG buf2x(.I(clkdcm), .O(pclk_2x));
wire new_pclk;
BUFG bufpclk(.I(pclkdcm), .O(new_pclk));
//wire inv_pclk;
//BUFG bufinvpclk(.I(~new_pclk), .O(inv_pclk));
//wire new_uclk;
//BUFG bufuclk(.I(~Uclk), .O(new_uclk));

assign Uclk = ~pclkdcm;

// parameter declarations
parameter CAM_RCV_SIZE = 4;
parameter CAM_RCV_IDLE = 4'h0;
parameter CAM_RCV_WAIT_VSYNC = 4'h1;
parameter CAM_RCV_VSYNC = 4'h2;
parameter CAM_RCV_WAIT_HREF = 4'h3;
parameter CAM_RCV_HREF1 = 4'h4;
parameter CAM_RCV_HREF2 = 4'h5;
parameter CAM_RCV_END = 4'h6;
parameter CAM_RCV_WAIT_EXT_EMPTY = 4'h7;

// internal variables declaration section - register types (only assigned within always statements).
reg [CAM_RCV_SIZE-1:0] cam_rcv_state;
reg [10:0] pixel_count;
reg [8:0] href_count;
reg [7:0] low_byte;
reg [15:0] word_data;
reg frame_end_flag;
reg [1:0] frame_end_count; // write OV7620's data to the external memory

reg ext_write_flag;
reg ext_read_flag;
reg ext_full_flag;
reg ext_empty_flag;
reg [18:0] ext_write_addr; // note MSB is not really address
reg [18:0] ext_read_addr; // note MSB is not really address
wire ext_read_wire;
assign ext_read_wire = ((cam_rcv_state^CAM_RCV_HREF2))&(~ext_empty_flag)&nFlagB;

// external memory -> USB FIFO
parameter USB_CTRL_SIZE = 2;
parameter USB_CTRL_READ = 2'h0;
parameter USB_CTRL_WRITE = 2'h1;
reg [USB_CTRL_SIZE-1:0] usb_ctrl_state;
reg [15:0] usb_data;
reg slwr_flag;
reg [19:0] usb_count;

// write ov7620's data to the external memory
always @(posedge new_pclk) begin
if (~nReset) begin
cam_rcv_state <= CAM_RCV_IDLE;
pixel_count <= 11'h0;
href_count <= 9'h0;
low_byte <= 8'hz;
word_data <= 16'hz;
ext_write_flag <= 1'b0;
frame_end_flag <= 1'b0;
frame_end_count <= 2'h0;

ext_write_addr <= 19'h0;
ext_read_addr <= 19'h0;

ext_read_flag <= 1'b0;
usb_ctrl_state <= USB_CTRL_READ;
slwr_flag <= 1'b1;
usb_count <= 20'h0;
end
else begin
if (~nPktend) frame_end_flag <= 1'b0;
case (cam_rcv_state)
CAM_RCV_IDLE: begin
if (~nStart) cam_rcv_state <= CAM_RCV_WAIT_VSYNC;
end
CAM_RCV_WAIT_VSYNC: begin
if (Vsync) cam_rcv_state <= CAM_RCV_VSYNC;
end
CAM_RCV_VSYNC: begin
if (~Vsync) begin
frame_end_flag <= 1'b0;
href_count <= 9'h00;
usb_count <= 20'h0;
cam_rcv_state <= CAM_RCV_WAIT_HREF;
end
end
CAM_RCV_WAIT_HREF: begin
ext_write_flag <= 1'b0;
pixel_count <= 11'h0;
if (Href) begin
low_byte <= Y;
//pixel_count <= 11'h1;
pixel_count <= pixel_count+1;
href_count <= href_count+1;
cam_rcv_state <= CAM_RCV_HREF2;
end
//else if (Vsync) begin
// cam_rcv_state <= CAM_RCV_END;
//end
end
CAM_RCV_HREF1: begin
low_byte <= Y;
ext_write_flag <= 1'b0;
pixel_count <= pixel_count+1;
cam_rcv_state <= CAM_RCV_HREF2;
end
CAM_RCV_HREF2: begin
word_data <= {Y, low_byte};
ext_write_flag <= 1'b1;
pixel_count <= pixel_count+1;
if (~(pixel_count^11'h4ff)) begin
if (~(href_count^9'h1e0)) cam_rcv_state <= CAM_RCV_END;
else cam_rcv_state <= CAM_RCV_WAIT_HREF;
end
else cam_rcv_state <= CAM_RCV_HREF1;
//cam_rcv_state <= CAM_RCV_WAIT_HREF;
end
CAM_RCV_END: begin
ext_write_flag <= 1'b0;
if (Vsync) begin
cam_rcv_state <= CAM_RCV_WAIT_EXT_EMPTY; // one shot
//frame_end_flag <= 1'b1;
frame_end_count <= 2'b11; // start frame_end_count !!!!!!
end
//else if (Vsync) begin
// cam_rcv_state = CAM_RCV_VSYNC; // continuous
// frame_end_flag <= 1'b1;
//end
end
CAM_RCV_WAIT_EXT_EMPTY: begin
if (ext_empty_flag&slwr_flag) begin
if (~frame_end_count) begin
frame_end_flag <= 1'b1;
cam_rcv_state <= CAM_RCV_IDLE;
end
else frame_end_count <= frame_end_count-1;
end
else frame_end_count <= 2'b11;
end
endcase

if (ext_write_flag) begin
ext_write_addr <= ext_write_addr+1;
end
else if (ext_read_flag) begin
ext_read_addr <= ext_read_addr+1;
end

case (usb_ctrl_state)
USB_CTRL_READ: begin
slwr_flag <= 1'b1;
if (ext_read_wire) begin
ext_read_flag <= 1'b1;
usb_ctrl_state <= USB_CTRL_WRITE;
end
end
USB_CTRL_WRITE: begin
ext_read_flag <= 1'b0;
usb_data <= Data;
slwr_flag <= 1'b0;
usb_count <= usb_count+1;
usb_ctrl_state <= USB_CTRL_READ;
end
endcase
end
end

always @(ext_write_addr or ext_read_addr) begin
if (~(ext_write_addr[17:0]^ext_read_addr[17:0])) begin
if (~(ext_write_addr[18]^ext_read_addr[18])) begin
ext_empty_flag <= 1'b1;
ext_full_flag <= 1'b0;
end
else begin
ext_empty_flag <= 1'b0;
ext_full_flag <= 1'b1;
end
end
else begin
ext_empty_flag <= 1'b0;
ext_full_flag <= 1'b0;
end
end

assign nWE = ~(ext_write_flag);
assign nOE = ~(ext_read_flag);

wire common_wire = ~(ext_write_flagext_read_flag);
assign nCS = common_wire;
assign nLB = common_wire;
assign nUB = common_wire;
assign Address = ext_write_flag ? ext_write_addr[17:0] : ext_read_flag ? ext_read_addr[17:0] : 18'hz;
assign Data = ext_write_flag ? word_data : 16'hz;
assign nSLWR = slwr_flag;
assign Udata = usb_data;
assign nPktend = ~(ext_empty_flag&frame_end_flag);

assign TP[0] = (cam_rcv_state^CAM_RCV_HREF2);
assign TP[1] = ext_write_flag;
assign TP[2] = ext_read_flag;
assign TP[3] = ext_empty_flag;
assign TP[4] = ext_full_flag;
assign TP[5] = ~(usb_count^20'h4b000);
assign TP[6] = ~(usb_ctrl_state^USB_CTRL_READ);
assign TP[7] = ~(usb_ctrl_state^USB_CTRL_WRITE);

endmodule

2009년 7월 13일 월요일

my terrible bug in the usb image system

Ov7620 (Progressive Scan @ 8Bit Data) + Cypress 68013A

If 1frame = 480*Href (640*2*Pixel) , then

we should be be set Transfer Size 480*640*2 = 614400

(!!!!!!!!!! The default transfer size is 4096 !!!!!!!!!!!)

--------------- CyAPI -------------------

DWORD BytesXfered; // Define Transfer Size

SET_TRANSFER_SIZE_INFO SetTransferInfo;
SetTransferInfo.EndpointAddress = 0x82; // Pipe address
SetTransferInfo.TransferSize = 614400;

DeviceIoControl(hDevice, IOCTL_ADAPT_SET_TRANSFER_SIZE,
&SetTransferInfo, sizeof(SET_TRANSFER_SIZE_INFO),
&SetTransferInfo, sizeof(SET_TRANSFER_SIZE_INFO),
&BytesXfered, NULL);

------------------------------------------------------------------------

2009년 6월 30일 화요일

카메라 프레임 도면 완성 직전

휴우~~ 부품이 무려 15개 정도의 도면을 해본적 없던 autocad 배워가며 도면 그리랴

맘고생좀 했다. 이제는 적당한 볼트를 섭외 해서 도면에 그려 넣어 줘야한다.

프리즘 가공업체도 가봐야 하고 정밀가공업체도 가봐야 하고

카메라 모듈 제작업체에도 가봐야 한다. 몸이 여러개 였음 좋겠다. 에휴~~

2009년 6월 24일 수요일

USB Image system

처음 cypress cy68031와 OV7620만 가지고 이미지를 볼라구 시도했었다.

뭔가 원하는 파형은 다 인터 페이스 할수 있을것만 같았던 GPIF 인터 페이스는

동기 시점의 모호성과 지원하는 state machine이 너무 적었던 관계로

그리고 무엇보다 버퍼링할 만한 여유적 메모리가 부족하여,

지금에서 안 일이지만 윈도우 시스템상에서 돌아가는 USB 드라이버의

성능은 무시한체 Open Source가 선인 마냥 Libusb-Win32만 쓰다가

자체 실패하였다. 이를 보다 못한 교수님의 재촉은 날이 갈수록 초초함으로 변하고,

난 태연히 프로그램만 할 상황이 안되어 xilinx 사의 FPGA와 SRAM이 달린 모듈을

구입하고 동시에 camera 보드를 개발해주는 업체와 접촉하기에 이르렀다.

이제는 뭔가 돌아 가는 상황이 만들어 졌는데 업체와 접촉하다 보니 생기가 떨어 진다.

자장구 활용하기

구동계를 교체하는 방향은 너무나도 터무니 없는 부품 가격으로 인하여 제외한다.

www.philshop.co.kr에서 판매하는 나름 저렴하다는 microShift사의 구동계 조합도

마찬가지 비싸기는 매한가지다.

우선 뿌러질때까지 써보도록하자. 구동계도 차츰차츰 보완해 가는 쪽으로 하자

우선 휠셋과 스프라켓을 바꾸고 드레일러와 변속기는 그대로 쓰면서

추후에 개선을 도모하도록 하자

주기적으로 휠셋을 만드는 방법과 허브와 림 가격을 조사하여 보자

현재 시야에 들어오는 novatech사의 28홀짜리 허브와 alexrim의 조합을

눈여겨 보자. 지금 떠돌아 다니는 가격대가 30만원 선이니...

마구자비로 티티카카가 풀리고 있으니깐 내년 이맘때 쯤이면

희소성이 떨어지는 티티카카와 동시에 많은 부속품들도 떠돌아 다닐꺼라고 예상된다.

기다리자.. 그때까지 지름신은 죽여가면서 타자. ㅋㅋ

2009년 4월 5일 일요일

티티카카 클래식 제원

앞 뒤 허브 : Joytech 프리휠 허브
스프라켓(sprocket): MF-TZ07
뒷 드레일러 : SHIMANO SIS (RD-TZ30 )
변속기 : 2*7 speed SHIMANO Revoshift

2009년 3월 29일 일요일

시작

앞으로... 앞으로....