2015년 11월 20일 금요일

[번역] 16x32 RGB LED 매트릭스의 기술적인 해설

Curtis@HobbyPCB.com에 의해서 작성됨

16x32 RGB LED 매트릭스의 블로그 연재물에서 첫 번째 사안은 디스플레이 모듈을 소개하고 어떻게 동작하는지 설명하는 것이다. 우리는 보드에 있는 모든 부품에 대해서 살펴 볼 것이고, 그곳에서 벌어지는 일들을 이해하기 쉽게 풀어 해쳐갈 것이다.

이런 설명을 위해서 우리는 3-in-1 Pixel들을 가지고 있는 16x32 P7.62 RGB LED 매트릭스를 사용할 것이다. 이게 모두 뭘 의미하느냐 하면, 16x32는 512개의 각각의 픽셀을 가지고 있는 16열과 32 행을 의미하고 P7.62는 피치가 7.62mm 혹은 픽셀 간의 거리가 7.62mm를 의미한다. 일반적인 실내 디스플레이는 P6이나 P7.62이다. 좀 더 작은 값을 갖으며, 여러분은 좀 더 실제 이미지에 가까운 디스플레이를 볼 수 있다. P6와 P7.62의 실내 디스플레이들은 3.5m 혹은 4m 정도의 시청 거리를 가지고 있다. 일반적인 실외 디스플레이들은 최소 시청 거리가 15-20m인 P16 혹은 P20이다. 3-in-1은 각 픽셀이 같은 패키지에 3개의 색상의 LED 모아놓은 것을 의미한다. (우리의 모듈은 3528 패키지이다.) 보드에 하나의 픽셀을 형성하는데 3개의 각각의 SMD LED (보통 0805)들이 같이 납땜된 3-in-3형태도 존재한다. 나는 아직 어떤 것도 테스트 해보지 못했지만, 다음에 반드시 해볼 것이다.

다음의 그림은 P6(위)와 P7.62(아래) LED 매트릭스를 보여준다. 여러분은 1.62mm가 크기에 얼마나 큰 차이를 어떻게 가져오는지 볼 수 있다.



 내가 아는한 크지 않은 320x240 디스플레이를 보여줄 수 있는 큰 Jumbo Tron 디스플레이를 상상해보자. 이 모듈을 가지고 150의 모듈이 8 inch x 6 inch 정도 크기를 만들 수 있다. 640X480 디스플레이는 이 크기의 두배가 되고 600개의 모듈이 소요된다.

자 충분히 상상 가능할 것이다. 나는 Arduino 나 EasyPIC6 (아마도 나중에) 같은 마이크로 개발 보드를 가지고 이들을 구동하기 위해서 어떻게 동작하는지 설명하고 싶다.

나의 돋보기를 가지고 되돌아 보면, 나는 다음 칩들을 손꼽을 수 있다.

74HC245D - Bus Tranciever (Non-Inverting)
CYT62726B - Constant Current LED Driver
APM4953 - Dual P-Channel Mosfet
74HC138 - 3to8 Line Decoder (ABC)
74HC04D - HEX Inverter

나는 이 칩들은 개개별로 다음 그림에서 찾아 볼 수 있다.




이제, 이들 각각의 무엇을 하고 있는지 보자. 나는 이 설명서를 세 개의 섹션으로 구분해 놓을 것이고 모듈의 enable, rows, 그리고 columns을 분리해서 이야기 할 것이다.

커넥터에 가장 가까운 칩은 Non-Inverting Bus Transceiver 인 74HC245D (빨간색)이다. 이것이 뭐냐하면, 이 경우에는 74HC245D는 parallel bus Transceiver로 동작해서, 왼쪽 핀으로 전송된 데이터를 오른쪽 핀으로 전달되도록 한다. 때때로 bus transceiver는 신호 분리 요구를 맞추어줄 뿐 아니라 bus상의 신호를 배가시키는데 사용되곤 한다. 이 경우에 나는 그져 신호를 배가하는데 사용되고 회로에 다른 곳으로 신호를 분배 시켜주는데 사용되고 있다고 생각한다.

이 모듈의 하나의 중요한 기능이고 전혀 동작하지 않는 것처럼 모듈을 만드는 것은 Output Enable (OE)이다. 여러분은 커넥터의 왼쪽 모퉁이 바닥에서 이것을 찾을 수 있다. OE는 모듈이 어떤 것을 디스플레이하기 위해서 LOW 레벨을 유지해야 한다. 기본적으로 여러분이 OE을 변경할때, 신호가 A6/B6에 있는 74HC245를 통해서 전달되고 enable 기능을 가지고 있는 74HC138의 핀 4번과 5번 (G2A/G2B)에 연결된다. G2가 high를 띄게 될때, 74HC138의 모든 출력을 끄게 된다. 이것은  활성화된 열이 없다는 것을 의미한다.

row로 관점을 바꿔보자. 이 장치의 row들은 LED의 anode (양 극)들을 선택한다. 우리는 이 모듈을 구매한 공급자로 부터 이것이 8:1 scan 모듈이라는 것을 알았다. 이것은 여러분이 영상을 출력하기 위해서 8 rows를 단위로 스캔해야 한다는 것을 의미한다. 그러나 살펴보면 모듈은 16개의 row들로 되어 있다. 우리는 2개의 row를 동시에 불 밝혀야 한다고 예상할 수 있을 것이다. 커넥터 부분을 좀 더 살펴보자. A, B, 그리고 C로 표시된 3개의 핀들을 보자. 이것들이 뭘 하는 것인지 구글 검색을 해보면 row 스캐닝을 위한 제어 핀이라는 것을 알려 준다. 이 3개의 핀들은 3to8 디코더인 74HC138을 제어한다. 의미인 즉슨 효과적으로 3개 입력이 8개의 출력 중 하나는 선택하는 것이다. 여러분이 3 비트 바이너리 조합을 전송할때, 그에 알맞은 라인이 활성화 된다. 그래서 '000'는 0번째 row를 불 밝히고 '100'은 4번째 row를 불 밝히고, '111'는 7번째 row를 불 밝히게된다. 그래서 총 8개의 조합이 가능하다. 좀 더 살펴보면, 우리는 APM4953 Dual P-Channel Mosfet을 볼 수 있다. 이것은 순차적으로 LED에 전류를 공급하도록 74HC138에 의해서 제어된다.

마지막으로, 우리는 실제의 데이터인 Column에 대해서 이야기 할 필요가 있다. row는 그져 안보이게 하나하나씩 선택되고 다시 계속 반복된다. 하나의 row에 있는 각각의 픽셀에 해당하는 column은 데이터를 수행하는 것이다. 각 row는 각각 3개의 색상을 가지고 있는 32 픽셀들로 구성된다. 우리는 두 개의 row들을 동시에 불 밝힐 것이라는 것을 안다. 칩 리스트를 살펴보면, 우리는 CYT62726(녹색)이 있는 것을 볼 수 있다. 이건 또 뭐지. 이것은 16 비트 정전류 LED 드라이버이다. 이 드라이버는 LED의 cathode (음극) 에서 적절한 총 전류를 유지하도록 한다. 이 총 전류는 여러분이 선택한 LED의 지속성을 위해서 저항으로 조절 가능하다. 보드를 살펴보면, 우리는 보드의 각 코너에 3개의 칩을 볼 수 있다. (그림에서 여러분은 단지 왼쪽의 2개만 볼 수 있고 오른쪽은 사진의 앵글때문에 그렇지 못하다.) 이 칩들은 각각 16x8를 위한 (동시에 하나의 row에 해당하는) 색상을 표현한다. CYT62726B는 MBI5026과 TB62726과 호환되는 기능과 핀아웃을 가지고 있다. 여러분은 이런 다른 칩들을 이용하는 유사한 보드를 찾아 볼 수 있지만, 모두다 동일한 기능을 한다. 입력 커넥터에 있는 R1, R2, G1, G2, U1, U2 핀들은 각 색상에 대한 데이터 라인이다. (U는 파란색이다.) 1은 위쪽 반 rows들을 의미하고 2는 아랫쪽 반 rows들을 의미한다ㅏ. 윗쪽과 아랫쪽의 칩들을 각 모음은 수평적으로 32 비트의 라인을 형성하도록 중첩되어 있다. 나는 어떻게 클럭 데이터가 입력되는지를 좀 더 이야기 할 것이다. 나의 다음 블로그에서 이 프로토콜에 대해서 다룰 것이다.

[출처 : http://www.hobbypcb.com/blog/item/3-16x32-rgb-led-matrix-technical-details.html
cached at
https://web.archive.org/web/20121201205905/http://www.hobbypcb.com/blog/item/3-16x32-rgb-led-matrix-technical-details.html ]

[번역] 16 x 32 매트릭스 구동하기

나는 최종적으로 Adafruit에서 16 x 32 매트릭스 패널을 구매했다. - 가격이 비쌌지만, 아주 많은 LED들이 있었다. 가능한 한 빨리 시도해 보기 위해서, 나는 디지탈 파형 발생기 (DWG)에 전선으로 연결했다. JaySisson에 의해서 만들어진 다음의 타이밍도는 내가 16 x 32 의 영상을 생성하기 위해서 스크립트를 작성한 것이다. 여기에 매트릭스의 한 라인을 생성하는 (LED의 2번째 열에 해당하는) CLK (파란색), OE (핑크), 그리고 LAT (녹색) 신호들을 포착한 오실로스코프이다.

LED-Matrix-Scope-1Line

Flying lead connection

나는 DWG를 flying 리드 선으로 패널에 연결했고, 총 12개의 연결로 6개의 데이터 선, 3개의 어드레스선, 그리고 CLK, OE, LAT으로 구성된다.

다음의 것은 우리가 알고 있는 것이다.

LED Panel Blue

모두 같은 색을 띄는 색상들은 아주 단순하지만 VHDL 코드를 작성하기 전에 PWM을 조절하고 테스트하기에 훌룡하다. PWM 코드를 실행하고 설정하는 몇 개의 비디오가 있다. 나는 Favicons (16x 16 웹브라우져 아이콘)을 사용했다. 자 보시라.




다음 과정은 얼마나 빠른 클럭을 적용할 수 있는지이다.그리고 다른 조건 하에서 패널이 얼마나 많은 전력을 소비하는지를 측정하는 것이다.


[출처 : rhb.me/blog/2012/05/led-matrix-bringup+&cd=1&hl=ko&ct=clnk
cached at
 http://webcache.googleusercontent.com/search?q=cache:gUDee4-3LOAJ:rhb.me/blog/2012/05/led-matrix-bringup+&cd=1&hl=ko&ct=clnk ]

2015년 11월 19일 목요일

[번역] 옷 카피하기.

바느질은 배우기 매우 쉬운 것이지만, 패턴 만들기는 완벽히 배우는데 평생이 걸릴 수 도 있는 기술이다. 여러분이 초보자 이든 경험많은 숙련자이든, 초안에서 패턴을 만드는 것은 시간이 많이 걸리고 때때로 놀랄만한 노력이 필요하다. 초안에서 패턴을 만드는 데 수일을 소요하는 것 보다, 여러분이 이미 가지고 있는 옷들을 카피하여 시간과 노력을 절약하자.

이것은 니트나 스트래치 옷의 경우 맞춤 과정이 여유를 허용하고 여러분이 성공하는데 100%의 정확성을 필요로 하지 않기 때문에 특히나 쉬운 것이다. 나는 한 예로써 니트 스웨터를 자르고 꼬매는 데 사용하고 있다. 그러나, 옷이면 어는 것이나 카피 될 수 있다.

소개해 보자면 이러한 프로젝트를 위해 나는 속도감 있게 진행 있었고, 그래서 나중에 다시 사용할 수 있는 종이로 된 패턴을 실제로 만들지 않았다. 대신 최종 옷감에 직접 그리고 garment(가봉?)을 조립했다. 종이 패턴을 만들기에 앞서 소비되는 약간의 시간은 물론 내가 한 이 작업 후에 시간이 절약될지도 모른다. 그러나 이 작업은 가봉을 카피하는데 정밀한 작업인 snazzybot의 실제 great instructable의 (특히나 정밀한 사안인  짜인 옷을 카피할 경우 유용하다.)속성의 엉성한 버전으로 생각하기 바란다.

준비 됐으면 가보자 !

1 단계: 필요한 것들


- 카피에 알맞은 가봉. 정확한 가봉이 이어야만 하는 것은 아니다. 그져 여러분이 필요한 부분을 복사할 수 있으면 된다. 예를 들면 내가 카피하고 있는 스웨터는 가벼운 웃옷이지만, 나는 단지 상반 부분만 카피하고 있다.

- 여러분의 새로운 가봉을 위한 직물의 선택, 그리고 완성하는데 필요한 (지퍼나, 장식 등등의) 필요한 어떤 것들.

- 숙련자용 초크나 초크펜

- 바느질 기계/기본적인 바느질 보조품들

2 단계; 카피 시작하기


시작할 패턴 조각을 선택하고 따라 그리기를 시작하자. 나는 팔쪽부터 시작했다.

시작하면서, 나는 조심스럽게 옷감의 팔 부분을 눕혀 놓고 평평하고 주름이 없도록 만들었다.

[출처: http://www.instructables.com/id/Copy-Your-Clothes/?ALLSTEPS]

2015년 11월 13일 금요일

Kicad의 결과물을 3D 캐드 에서 편집할 수 있게 해주는 방법

Kicad가 다 좋은데 평소에 섭섭하게 생각했던 것이 3D 모델링 기능이다. 3D 부품을 추가하고 편집할 수 있는 유일한 방법은 Wing3D 뿐인데 이것이 문제가 많은 프로그램이다. 하지만, 아래의 링크에 가면 StepUp 스크립트를 통해서 Kicad에서 FreeCad가 편집할 수 있는 형태로 export하는 방법을 제공하고 있다. 조만간 써야할 일이 발생할 것같아 이렇게 기록해 둔다.

http://hackaday.com/2015/11/08/kicad-script-hack-for-better-mechanical-cad-export/

2015년 11월 6일 금요일

[번역] 뉴럴 네트워크를 위한 Memristor 만들기

뉴럴 네트워크를 위한 Memristor 만들기 by Brian Benchoff

[출처] http://hackaday.com/2015/11/03/building-memristors-for-neural-nets/



오늘날 사용 가능한 대부분의 전자 부품들은 몇 년전에 사용 가능했던 것들이 그져 개선된 형태이다. Microcontroller들은 점점 빨라지고, memory 들은 점점 커지고 sensor들은 점점 작아진다. 그러나 우리는 수년동안 혹은 수십년동안 조차 진짜로 기발한 부품을 보지 못해왔다. memristor보다 더 기발한 응용분야를 갖는 더 흥미로운 전자 부품은 없다. 그리고 지금 그들은 Knowm으로 부터 상업적으로 사용가능하다. 이 회사는 실리콘에 직접 machine learning을 직접하는  최첨단에 있다.

디지탈 회로의 모든 관점은 '1'과 '0'의 연속으로 이루어진 정보를 저장하는데 있다. Memristor들 또한 정보를 저장한다. 하지만, 완전히 아날로그 방식으로 수행한다. 각각의 Memristor는 흐르는 전류에 따라 자체 저항을 변경한다; 양의 전압을 저장하는 것은 저항을 낮추고 음의 전압을 저장하는 것은 장치를 다시 높은 저항 상태로 되돌아 가게 한다.

이 새로운 memristor는 Boise 주립대의 Dr. Kris Campbell에 의해서 수행된 연구에 기반한다. 이사람은 우리가 올해 초에 보았던 silver chalcogenide memristors에 책임이 있는 연구자와 같은 사람이다. 이러한 초기의 장치들과 같이 Knowm memristor는 silver chalcogenide 분자들을 이용해서 만들어 진다. memristor의 저항값을 낮추기 위해서 양전압이 silver 이온들을 금속 chalcogenide 층으로 당긴다. silver 이온들은 음전압에 의해 다시 밀려나게 될때까지 이 chalcogenide 층에 머물르게 된다. 이것이 memristor의 핵심 기능이 된다. 이를 통해서 얼마나 많은 전류를 흘려 보내냐를 기억할 수 있게 된다.

금속 chalcogenide memristor의 단면 [출처 : Knowm.org]

이 기술은 2008년에 HP에서 만든 첫 번째 memristor들 과는 다르고, Knowm으로 하여금 상대적으로 높은 수율을 갖는 실리콘에서 동작하는 memristor를 만들 수 있도록 하였다. Knowm은 현재 8개 중 2개가 QC 테스트에 실패하고 있는 tier 3 memristor 부품을 팔고 있다. 모든 8개의 memristor들이 동작하는 tier 1 파트는 $220달러에 팔고 있다. 

이러한 memristor를 위한 용도로써 Knowm은 그들이 Thermodynamic RAM 혹은 kT-RAM으로 부르는 것들에 이 기술을 이용하고 있다. 이것은 훨씬 더 많이 전통적인 아키텍쳐인 컴퓨터로 가능한 것보다 더 빠른 machine learning를 허용하는 작은 coprocessor이다. 이러한 kT-RAM은 node 사이를 연결하는 link들로써 작동하는 memristor들로 구성된 binary tree layout을 사용한다.

kT-RAM 프로세서는 실생활에서 machine learning 작업들을 수행하는데 있어서 더 좋게 혹은 더 많이 효율적이라고 멀지 않은 시기에 말할 수 있게 되면, machine learning 보조 프로세서는 80년대 AI 르네상스 시기동안 개발된 machine learning 반도체의 희미하지만 분명한 반영을 가지고 있다. 30십년전, 칩위에 구현된 neural net 들은 어떤 이가 이러한 neural net들이 데스크탑 PC에 훨씬 더 효율적으로 시뮬레이션 할 수 있었을 때까지 Boston 주변에 몇 몇의 회사들에 의해서 만들어 졌다. kT-RAM은 다소 새롭고 고도의 병렬구조이고, 새로운 전자 부품을 가지고 machine learning을 직접적으로 반도체 위에 직접할 필요성이 있다. 

[번역] 진동자의 진화

진동자의 진화 by Nava Whiteford


[출처] http://hackaday.com/2015/11/03/the-evolution-of-oscillations/

내가 사용하고 있는 랩탑은 아키하바라의 중고 물품통에서 50 달러에 구입한 것으로 2.53GHz에서 동작하는 CPU를 가지고있다.이건 초당 2조5억3천만번 전자들이 체계적으로 정확히 신호를 발생한다는 것을 의미한다. 인간의 관점에서 이것은 상상할 수 없는 것이다. 2백년전만해도 인류는 아직 전자적인 진동에 관한 지식이 전혀 없었다.

물론 명확한 자연적인 진동 소스는 물론 태양이 아마도 가장 분명할 것이다. 피타고리언의 시스템은 처음 지구의 자전이 태양의 일상적인 사이클을 유발한다고 생각하였습니다. 그들의 시스템은 우리가 알고 있는 사실보다 더 난해하고 복잡하고,  중앙의 불꽃 뒤에 보이지 않게 놓인 가상의 Counter-Earth를 포함한다. 그들의 이론에 내포된 오류와 관계없이, 중앙링크는 회전과 진동사이에 만들어 졌다.

그리고 회전 운동은 초기의 전기 진동기에 이용되었다. 오늘날 이와 유사하게 사용되는 발전기에서 부터 더 난해한 장치인 차단기같은 것들이 이에 해당한다. 1838년에 Charles Page에 의해서 개발된 차단기는 단순한 진동을 만들어내기 위해 주기적으로 차단하도록 전선을 수은 통에 담글 수 있도록 수평운동이나 회전 운동을 이용하였다.

산업적인 전자 발생기쪽으로 진보하면서 전류를 발전하는 것은 일반적이 되었다. 그러나 점점 더 고 주파수가 라디오 전송을 위해서 요구되었다. 첫 번째 전송기는 spark gaps이 사용되었다. 이 단순한 전송기는 두 선로 사이의 공간에 항복전압이 발생할때 까지 캐패시터를 충전하기 위해 DC 서플라이를 사용하였다. 그러고 나서 전기는 이 공간에 기체화된 분자로 이온화 된다. 이와같이 전류가 흐르도록 허용하면 빠르게 캐패시터를 충전한다. 다시 캐패시터가 충전되면 이와 같은 과정이 반복된다.



spark gaps이 노이즈를 발생하는 동영상에서 듣고 보듯이, 실제 싸인파 출력과는 거리가 멀다. 그래서, 더 효율적인 진동을 위해서, 공학자들은 다시 회전에 의존하였다.

Alexanderson 발전기는 수백 개의 슬롯들로 나뉘어진 곳에 바퀴를 사용한다. 이 바퀴는 두 개의 코일사이에 위치한다. 한 코일은 직류 전류가 가해져서 다른 곳에서 전류를 발생하는 자기장을 만들어 낸다. 슬롯화된 디스크는 주기적으로 이 영역을 가로지르며 유도전류를 생산한다. Alexanderson 발전기는 대부분 해군 용도에 맞게 15에서 30Khz의 주파수를 생산하도록 되어있었다. 놀랍게도 Alexanderson 발전기중 하나는 1996년까지 여전히 동작하였고 아직도 동작할 수 있는 상태에 있다.

An Alexanderson Alternator 

유사한 원리가 Hammond 오르간에 사용되었다. 여러분은 아마도 이 이름을 알지 못할 것이다. 그러나 이 초기의 전자적인 기기의 소리는 알아 차릴 수 있을 것입니다.



Hammond 오르간은 울림바퀴와 픽업들의 연속된 배열을 이용하였다. 픽업은 코일과 자석으로 구성된다. 울림을 발생하기 위해서 픽업은 표면에 주름을 가지고 있는 회전 바퀴쪽으로 밀려지게 된다. 이런것들은  Alexanderson 발전기의 슬롯들과 유사하고, 울림을 만들기 위해 자석과 코일 사이에 자기장을 효과적으로 생성한다.

증폭된 진동기


지금까지 우리는 순전히 전자기계적인 기술에만 의존하는 것을만 다루었다. 그러나, 능동형 기기의 요구 측면에서 증폭기 모든 현대의 진동기에서 핵심이다. 이러한 것들 중 가장 단순한 형태는 tank 회로를 형성하는 인덕터와 캐패시터를 사용한다. tank 회로에서 에너지가 인덕터와 캐패시터 사이를  왔다 갔다 한다. 증폭기가 없다면 손실이 발생하여 진동기가 곧 멈춰 버리게 된다. 그러나 Colpitts 진동기와 같이 증폭기를 사용함으로써 이과정은 무한정 동작하도록 유지 될 수 있다.

Tank 회로의 동작 (출처 : 위키피디아)


진동기의 안정성은 라디오 전송기 같이 많은 응용분야에서 중요하다. 더 좋은 진동기는 전송신호가 스펙트럼상에서 밀리거나 겹치는 문제 없이 서로 더 밀착된 상태로 변조되도록 해주어야 한다. 그래서, 더 좋고 안정적인 진동기에 대한 추구는 계속되었다. 결국 Crystal 진동기가 발견되었고, 생산되었따. 이것은 기념비적인 노력이었다.

Crystal 진동기의 생산


아래의 비디오는 Crystal 진동기의 생산에 대해서 1940년대에 사용된 일반적인 과정을 보여준다.


브라질에서 채굴된 자연 Quartz Crystal은 미국으로 배송되고 처리된다. 내가 세어본 봐로는 총 13개의 비 단순 가공/에칭 과정들과 (엄격한 품질 제어를 포함하는)16개의 측정단계인 것으로 파악되었다. 이러한 과정들의 일부분은 X-선 Crystalography와 유사한 기술을 사용하여 X-선 아래서 Crystal의 배치하는 것 같이 매우 발전되었다.

요즘의 Crystal 진동기 생산 과정은 더 발전되었다. 1970년대 이후로 Crystal 진동기는 Photolithographic 공정에서 제조된다. crystal을 좀 더 안정화히기 위해서 열소자(OCXO)를 사용해서 제어된 온도에서 crystal을 동작하거나 온도 보상(TCXO)같은 추가적인 기술들이 적용되어 왔다. 대부분의 응용분야에서 이것은 충분히 정확하다는 것이 증명되었다. 그러나 timenuts에 대해선 충분히 정확하지 않다.

timenut의 원자 사용

timenut를 위해 충분히 정확한 것은 없다. 많은 해커들이 그들이 할 수 있는 가장 정확한 타이밍 시스템을 만들려고 노력한다. 이것은 모두 물론 그들이 만들 수 있는 가장 정확한 진동기에 의존한다.

일반적인 timenut 입는 원자 손목시계

많은 timenut들이 측정하는데 원자시계에 의존한다. 원자시계들은 가장 잘 온도가 제어된 crystal 진동기 보다 더 정확한 크기의 차원을 가지고 있다.

Bill Hammack은 cesuim beam 진동기의 동작을 설명하는 훌룡한 비디오를 가지고 있다. 기본적인 과정은 아래의 사진에서 보여진다. 요점은 cesuim 기체가 두 개의 에너지 상태로 존재하고 자기장에서 분리될 수 있다는데 있다. 낮은 에너지의 원자는 crystal 진동기에서 결정된 주파수를 갖는 라디오파 소스에 노출된다. 정확히 9,192,631,770Hz의 주파수만이 낮은 에너지의 cesuim 원자를 높은 에너지의 형태로 바꿀 수 있다. 높은 에너지의 원자는 검출기로 향하게 되고, 이 출력은 진동기의 출력의 주파수가 어긋나고 cesium 원자들이 더 이상 검출기로 향하지 않으면, 출력은 정확한 값으로 내주게 되는 것 같이 crystal 진동기를 훈련시키는데 사용된다. 이와 같은 기본 물리적 상수가 원자 시계를 보정하는데 사용된다.

cesium 원자 시계의 기본적인 작동 원리

cesium 표준은 가장 정확한 진동자로 알려지는 동안, 또 다른 원자 시계인 Rubidium 진동자 또한 많은 timenuts에서 정확하고 상대적으로 저렴한 옵션을 제공한다. 이 진동자의 가격은 전화산업의 대량 생산 때문에 낮아져왔다. 이들은 GSM과 다른 이동 라디오 시스템에 핵심이고 지금은 eBay에서 구할 수 있다.

손안에 정확한 시간 조각을 가지고 timenuts 은 수많은 흥미로운 실험들을 수행해 왔다. 내 기억에 가장 흥미로왔던 것은 상대론적 효과들에 의한 시간 차이를 측정하는 것이다. 하나의 timenut을 가지고 원자시계로 채운 자동차를 가족을 태우고 주말동안 Rainier 산까지 올라가는 경우에는 도착하였을때 그가 여행에 가져간 시계와 집에 놓아둔 것 사이에 20n초의 차이를 측정할 수 있었다. 이러한 시간 감소 효과는 거의 정확히 상대성 이론에 의해서 예측된 대로이다. 아주 인상적으로 놀라운 가족의 외출이다!

아인슈타인이 1950에 특수 상대성 이론을 제안하였을 때 기초적인 crystal 진동기 조차 존재하지 않았다는 것을 생각하면 놀라운 것이다. 그때는 Spark gap과 Alexanderson 발전기들이 여전히 일상적으로 사용되어왔을 것이다. 나는 그가 언젠가 그의 이론의 과실이 주말 취미 프로젝트로 아이들과 함께하는 여행하는 누군가에 의해서 확인되어 질 수 있을 것이라고 상상할 수 있었다고 생각하지 않는다. 세계의 해커들이여 즐기시라.

2015년 10월 16일 금요일

debian testing(stretch/sid)에 새로나온 Kicad 소스로 설치하기

나도 모르는 사이에 kicad가 패키지 저장소에서 사라져 버려 자동 삭제되어 버렸다. 평소에 아무런 의심없이 "# apt-get update; apt-get dist-upgrade"를 해버린 내 잘못도 크지만, 곧 복원되리라 하고 참고 살았는데 너무 오랫 동안 복원되지 않는다. 그 사이에 새로운 4.0버전 대로 메이져 버전업이 되어버렸고 해서 소스를 구해다가 설치를 해 보려고 했다.

문제는 libboost1.54 버전이 gcc5.0에서 제대로 컴파일 되지 않아 중도에 멈추어 버린다는 점이다. 그래서 libboost1.58-all-dev를 설치하고 kicad 4.0.0-rc1 버전이 자동 다운로드 하는 libboost1.54 버전을 무시하도록 설정해주어야 한다.

# apt-get install libboost1.58-all-dev
# cd kicad-4.0.0-rc1
# cmake -DKICAD_SKIP_BOOST=ON ./
# make

지금까지 컴파일 하는 중인데 제대로 진행되는 듯하다.

그리고 컴파일이 종료되면 root 계정으로 설치를 수행해 준다.

# sudo make install
root@debian:/home/daysleep/다운로드/kicad-4.0.0-rc1# make install
[ 35%] Built target bitmaps
[ 35%] Built target page_layout_lexer_source_files
[ 35%] Built target boost
[ 35%] Built target lib-dependencies
[ 36%] Generating version string header
-- Not updating /home/daysleep/다운로드/kicad-4.0.0-rc1/version.h
[ 36%] Built target version_header
[ 36%] Built target netlist_lexer_source_files
[ 44%] Built target common
[ 44%] Built target fp_lib_table_lexer_source_files
[ 44%] Built target shader_headers
[ 45%] Built target gal
[ 46%] Built target pcb_lexer_source_files
[ 46%] Built target pcb_plot_lexer_source_files
[ 46%] Built target specctra_lexer_source_files
[ 51%] Built target pcbcommon
[ 52%] Built target 3d-viewer
[ 53%] Built target avhttp
[ 53%] Built target github_plugin
[ 54%] Built target pcad2kicadpcb
[ 54%] Built target polygon
[ 56%] Built target cvpcb_kiface
[ 56%] Built target cmp_library_lexer_source_files
[ 56%] Built target dialog_bom_cfg_lexer_source_files
[ 56%] Built target field_template_lexer_source_files
[ 68%] Built target eeschema_kiface
[ 68%] Built target eeschema
[ 72%] Built target gerbview_kiface
[ 72%] Built target gerbview
[ 73%] Built target lib_dxf
[ 74%] Built target idf3
[ 77%] Built target pnsrouter
[ 94%] Built target pcbnew_kiface
[ 94%] Built target pcbnew
[ 96%] Built target pl_editor_kiface
[ 96%] Built target pl_editor
[ 96%] Built target potrace
[ 96%] Built target bitmap2component
[ 96%] Built target pcb_calculator_lexer_source_files
[ 97%] Built target pcb_calculator_kiface
[ 98%] Built target pcb_calculator
[100%] Built target kicad
[100%] Built target dxf2idf
[100%] Built target idf2vrml
[100%] Built target idfcyl
[100%] Built target idfrect
Install the project...
-- Install configuration: "Release"
-- Up-to-date: /usr/local/share/doc/kicad/INSTALL.txt
-- Up-to-date: /usr/local/share/doc/kicad/scripts
-- Up-to-date: /usr/local/share/doc/kicad/scripts/library-repos-install.bat
-- Up-to-date: /usr/local/share/doc/kicad/scripts/kicad-install.sh
-- Up-to-date: /usr/local/share/doc/kicad/scripts/osx_build_wx.sh
-- Up-to-date: /usr/local/share/doc/kicad/scripts/bom-in-python
-- Up-to-date: /usr/local/share/doc/kicad/scripts/bom-in-python/bom_html_with_advanced_grouping.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/bom-in-python/bom_sorted_by_ref.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/bom-in-python/bom_csv_grouped_by_value.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/bom-in-python/bom_html_grouped_by_value.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/bom-in-python/round_robin.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/bom-in-python/kicad_netlist_reader.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/bom-in-python/README-bom.txt
-- Up-to-date: /usr/local/share/doc/kicad/scripts/bom-in-python/bom_csv_grouped_by_value_with_fp.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/bom-in-python/round_value_robin.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/bom-in-python/bom_html_by_value.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/bom-in-python/bom_csv_sorted_by_ref.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/test_plugin.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/library-repos-install.sh
-- Up-to-date: /usr/local/share/doc/kicad/scripts/test_kicad_plugin.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/lib_convert.py
-- Up-to-date: /usr/local/share/doc/kicad/scripts/osx_fixbundle.sh
-- Up-to-date: /usr/local/share/mimelnk
-- Up-to-date: /usr/local/share/mimelnk/application
-- Up-to-date: /usr/local/share/mimelnk/application/x-kicad-project.desktop
-- Up-to-date: /usr/local/share/mimelnk/application/x-kicad-schematic.desktop
-- Up-to-date: /usr/local/share/mimelnk/application/x-kicad-pcb.desktop
-- Up-to-date: /usr/local/share/icons
-- Up-to-date: /usr/local/share/icons/hicolor
-- Up-to-date: /usr/local/share/icons/hicolor/16x16
-- Up-to-date: /usr/local/share/icons/hicolor/16x16/mimetypes
-- Up-to-date: /usr/local/share/icons/hicolor/16x16/mimetypes/application-x-kicad-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/32x32
-- Up-to-date: /usr/local/share/icons/hicolor/32x32/mimetypes
-- Up-to-date: /usr/local/share/icons/hicolor/32x32/mimetypes/application-x-kicad-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/32x32/apps
-- Up-to-date: /usr/local/share/icons/hicolor/32x32/apps/kicad.png
-- Up-to-date: /usr/local/share/icons/hicolor/scalable
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/mimetypes
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/mimetypes/application-x-3d-project.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/mimetypes/application-x-pcbnew-project.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/mimetypes/application-x-kicad-project.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/mimetypes/application-x-eeschema-project.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/mimetypes/application-x-gerbview-project.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/mimetypes/application-x-cvpcb-project.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/mimetypes/application-x-pcbcalculator-project.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/mimetypes/application-x-bitmap2component-project.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/apps
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/apps/kicad.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/apps/gerbview.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/apps/eeschema.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/apps/pcbcalculator.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/apps/pcbnew.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/apps/cvpcb.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/apps/bitmap2component.svg
-- Up-to-date: /usr/local/share/icons/hicolor/scalable/apps/3d.svg
-- Up-to-date: /usr/local/share/icons/hicolor/128x128
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/mimetypes
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/mimetypes/application-x-kicad-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/mimetypes/application-x-3d-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/mimetypes/application-x-bitmap2component-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/mimetypes/application-x-eeschema-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/mimetypes/application-x-cvpcb-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/mimetypes/application-x-gerbview-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/mimetypes/application-x-pcbnew-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/mimetypes/application-x-pcbcalculator-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/apps
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/apps/cvpcb.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/apps/kicad.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/apps/pcbnew.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/apps/gerbview.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/apps/pcbcalculator.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/apps/bitmap2component.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/apps/3d.png
-- Up-to-date: /usr/local/share/icons/hicolor/128x128/apps/eeschema.png
-- Up-to-date: /usr/local/share/icons/hicolor/24x24
-- Up-to-date: /usr/local/share/icons/hicolor/24x24/mimetypes
-- Up-to-date: /usr/local/share/icons/hicolor/24x24/mimetypes/application-x-kicad-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/24x24/apps
-- Up-to-date: /usr/local/share/icons/hicolor/24x24/apps/kicad.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/mimetypes
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/mimetypes/application-x-kicad-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/mimetypes/application-x-bitmap2component-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/mimetypes/application-x-eeschema-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/mimetypes/application-x-cvpcb-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/mimetypes/application-x-gerbview-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/mimetypes/application-x-pcbnew-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/mimetypes/application-x-pcbcalculator-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/apps
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/apps/cvpcb.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/apps/kicad.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/apps/pcbnew.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/apps/gerbview.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/apps/pcbcalculator.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/apps/bitmap2component.png
-- Up-to-date: /usr/local/share/icons/hicolor/48x48/apps/eeschema.png
-- Up-to-date: /usr/local/share/icons/hicolor/22x22
-- Up-to-date: /usr/local/share/icons/hicolor/22x22/mimetypes
-- Up-to-date: /usr/local/share/icons/hicolor/22x22/mimetypes/application-x-kicad-project.png
-- Up-to-date: /usr/local/share/icons/hicolor/22x22/apps
-- Up-to-date: /usr/local/share/icons/hicolor/22x22/apps/kicad.png
-- Up-to-date: /usr/local/share/mime
-- Up-to-date: /usr/local/share/mime/packages
-- Up-to-date: /usr/local/share/mime/packages/kicad.xml
-- Up-to-date: /usr/local/share/applications
-- Up-to-date: /usr/local/share/applications/eeschema.desktop
-- Up-to-date: /usr/local/share/applications/pcbcalculator.desktop
-- Up-to-date: /usr/local/share/applications/kicad.desktop
-- Up-to-date: /usr/local/share/applications/cvpcb.desktop
-- Up-to-date: /usr/local/share/applications/gerbview.desktop
-- Up-to-date: /usr/local/share/applications/pcbnew.desktop
-- Up-to-date: /usr/local/share/applications/bitmap2component.desktop
-- Up-to-date: /usr/local/bin/_cvpcb.kiface
-- Up-to-date: /usr/local/bin/eeschema
-- Up-to-date: /usr/local/bin/_eeschema.kiface
-- Up-to-date: /usr/local/lib/kicad/plugins/bom2csv.xsl
-- Up-to-date: /usr/local/lib/kicad/plugins/bom_cvs.xsl
-- Up-to-date: /usr/local/lib/kicad/plugins/netlist_form_cadstar-RINF.xsl
-- Up-to-date: /usr/local/lib/kicad/plugins/netlist_form_cadstar.xsl
-- Up-to-date: /usr/local/lib/kicad/plugins/netlist_form_OrcadPcb2.xsl
-- Up-to-date: /usr/local/lib/kicad/plugins/netlist_form_pads-pcb.xsl
-- Up-to-date: /usr/local/lib/kicad/plugins/bom_with_title_block_2_csv.xsl
-- Up-to-date: /usr/local/bin/gerbview
-- Up-to-date: /usr/local/bin/_gerbview.kiface
-- Up-to-date: /usr/local/bin/pcbnew
-- Up-to-date: /usr/local/bin/_pcbnew.kiface
-- Up-to-date: /usr/local/bin/pl_editor
-- Up-to-date: /usr/local/bin/_pl_editor.kiface
-- Up-to-date: /usr/local/bin/bitmap2component
-- Up-to-date: /usr/local/bin/pcb_calculator
-- Up-to-date: /usr/local/bin/_pcb_calculator.kiface
-- Up-to-date: /usr/local/bin/kicad
-- Up-to-date: /usr/local/bin/idfcyl
-- Up-to-date: /usr/local/bin/idfrect
-- Up-to-date: /usr/local/bin/dxf2idf
-- Up-to-date: /usr/local/bin/idf2vrml
-- Up-to-date: /usr/local/share/kicad/demos/complex_hierarchy
-- Up-to-date: /usr/local/share/kicad/demos/complex_hierarchy/ampli_ht.sch
-- Up-to-date: /usr/local/share/kicad/demos/complex_hierarchy/complex_hierarchy.net
-- Up-to-date: /usr/local/share/kicad/demos/complex_hierarchy/complex_hierarchy.pro
-- Up-to-date: /usr/local/share/kicad/demos/complex_hierarchy/complex_hierarchy_schlib.lib
-- Up-to-date: /usr/local/share/kicad/demos/complex_hierarchy/complex_hierarchy-cache.lib
-- Up-to-date: /usr/local/share/kicad/demos/complex_hierarchy/complex_hierarchy.kicad_pcb
-- Up-to-date: /usr/local/share/kicad/demos/complex_hierarchy/complex_hierarchy.sch
-- Up-to-date: /usr/local/share/kicad/demos/ecc83
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83-pp-cache.lib
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83-pp.sch
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83_schlib.dcm
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/fp-lib-table
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83-pp.net
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83-pp_v2.pro
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83-pp_v2.cmp
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83-pp_v2.kicad_pcb
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83_schlib.lib
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83-pp.kicad_pcb
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83-pp.pro
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83-pp_v2.sch
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83-pp_v2-cache.lib
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83-pp.cmp
-- Up-to-date: /usr/local/share/kicad/demos/ecc83/ecc83-pp_v2.net
-- Up-to-date: /usr/local/share/kicad/demos/electric
-- Up-to-date: /usr/local/share/kicad/demos/electric/electric-cache.lib
-- Up-to-date: /usr/local/share/kicad/demos/electric/electric.pro
-- Up-to-date: /usr/local/share/kicad/demos/electric/electric.sch
-- Up-to-date: /usr/local/share/kicad/demos/flat_hierarchy
-- Up-to-date: /usr/local/share/kicad/demos/flat_hierarchy/flat_hierarchy.net
-- Up-to-date: /usr/local/share/kicad/demos/flat_hierarchy/flat_hierarchy.kicad_pcb
-- Up-to-date: /usr/local/share/kicad/demos/flat_hierarchy/flat_hierarchy_schlib.lib
-- Up-to-date: /usr/local/share/kicad/demos/flat_hierarchy/pic_programmer.sch
-- Up-to-date: /usr/local/share/kicad/demos/flat_hierarchy/flat_hierarchy-cache.lib
-- Up-to-date: /usr/local/share/kicad/demos/flat_hierarchy/flat_hierarchy.sch
-- Up-to-date: /usr/local/share/kicad/demos/flat_hierarchy/flat_hierarchy.pro
-- Up-to-date: /usr/local/share/kicad/demos/flat_hierarchy/pic_sockets.sch
-- Up-to-date: /usr/local/share/kicad/demos/flat_hierarchy/flat_hierarchy.cmp
-- Up-to-date: /usr/local/share/kicad/demos/interf_u
-- Up-to-date: /usr/local/share/kicad/demos/interf_u/tux.bmp
-- Up-to-date: /usr/local/share/kicad/demos/interf_u/image.lib
-- Up-to-date: /usr/local/share/kicad/demos/interf_u/interf_u.kicad_pcb
-- Up-to-date: /usr/local/share/kicad/demos/interf_u/image.mod
-- Up-to-date: /usr/local/share/kicad/demos/interf_u/interf_u-cache.lib
-- Up-to-date: /usr/local/share/kicad/demos/interf_u/interf_u.pro
-- Up-to-date: /usr/local/share/kicad/demos/interf_u/interf_u.net
-- Up-to-date: /usr/local/share/kicad/demos/interf_u/interf_u_schlib.lib
-- Up-to-date: /usr/local/share/kicad/demos/interf_u/interf_u.sch
-- Up-to-date: /usr/local/share/kicad/demos/interf_u/pagelayout_logo.kicad_wks
-- Up-to-date: /usr/local/share/kicad/demos/interf_u/interf_u.cmp
-- Up-to-date: /usr/local/share/kicad/demos/kit-dev-coldfire-xilinx_5213
-- Up-to-date: /usr/local/share/kicad/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.cmp
-- Up-to-date: /usr/local/share/kicad/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.net
-- Up-to-date: /usr/local/share/kicad/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213-cache.lib
-- Up-to-date: /usr/local/share/kicad/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.sch
-- Up-to-date: /usr/local/share/kicad/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213_schlib.lib
-- Up-to-date: /usr/local/share/kicad/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.pro
-- Up-to-date: /usr/local/share/kicad/demos/kit-dev-coldfire-xilinx_5213/xilinx.sch
-- Up-to-date: /usr/local/share/kicad/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.kicad_pcb
-- Up-to-date: /usr/local/share/kicad/demos/kit-dev-coldfire-xilinx_5213/in_out_conn.sch
-- Up-to-date: /usr/local/share/kicad/demos/microwave
-- Up-to-date: /usr/local/share/kicad/demos/microwave/microwave.pro
-- Up-to-date: /usr/local/share/kicad/demos/microwave/shape1.txt
-- Up-to-date: /usr/local/share/kicad/demos/microwave/microwave.kicad_pcb
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer/libs
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer/libs/pic_programmer_schlib.lib
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer/libs/pic_programmer_fp.pretty
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer/libs/pic_programmer_fp.pretty/1pin-4.kicad_mod
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer/pic_programmer-cache.lib
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer/fp-lib-table
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer/pic_programmer.kicad_pcb
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer/pic_programmer.pro
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer/pic_programmer.sch
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer/pic_programmer.net
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer/pic_programmer.cmp
-- Up-to-date: /usr/local/share/kicad/demos/pic_programmer/pic_sockets.sch
-- Up-to-date: /usr/local/share/kicad/demos/pspice
-- Up-to-date: /usr/local/share/kicad/demos/pspice/pspice.pro
-- Up-to-date: /usr/local/share/kicad/demos/pspice/pspice.cir
-- Up-to-date: /usr/local/share/kicad/demos/pspice/pspice-cache.lib
-- Up-to-date: /usr/local/share/kicad/demos/pspice/pspice.sch
-- Up-to-date: /usr/local/share/kicad/demos/python_scripts_examples
-- Up-to-date: /usr/local/share/kicad/demos/python_scripts_examples/plot_board.py
-- Up-to-date: /usr/local/share/kicad/demos/python_scripts_examples/gen_gerber_and_drill_files_board.py
-- Up-to-date: /usr/local/share/kicad/demos/sonde xilinx
-- Up-to-date: /usr/local/share/kicad/demos/sonde xilinx/sonde xilinx.kicad_pcb
-- Up-to-date: /usr/local/share/kicad/demos/sonde xilinx/sonde xilinx.cmp
-- Up-to-date: /usr/local/share/kicad/demos/sonde xilinx/sonde xilinx.sch
-- Up-to-date: /usr/local/share/kicad/demos/sonde xilinx/sonde xilinx.pro
-- Up-to-date: /usr/local/share/kicad/demos/sonde xilinx/sonde xilinx-cache.lib
-- Up-to-date: /usr/local/share/kicad/demos/sonde xilinx/sonde xilinx.net
-- Up-to-date: /usr/local/share/kicad/demos/sonde xilinx/sonde xilinx_schlib.lib
-- Up-to-date: /usr/local/share/kicad/demos/test_pads_inside_pads
-- Up-to-date: /usr/local/share/kicad/demos/test_pads_inside_pads/test_pads_inside_pads.sch
-- Up-to-date: /usr/local/share/kicad/demos/test_pads_inside_pads/test_pads_inside_pads.kicad_pcb
-- Up-to-date: /usr/local/share/kicad/demos/test_pads_inside_pads/test_pads_inside_pads.pro
-- Up-to-date: /usr/local/share/kicad/demos/test_pads_inside_pads/test_pads_inside_pads.cmp
-- Up-to-date: /usr/local/share/kicad/demos/test_pads_inside_pads/test_pads_inside_pads.net
-- Up-to-date: /usr/local/share/kicad/demos/test_pads_inside_pads/test_pads_inside_pads-cache.lib
-- Up-to-date: /usr/local/share/kicad/demos/test_xil_95108
-- Up-to-date: /usr/local/share/kicad/demos/test_xil_95108/carte_test.sch
-- Up-to-date: /usr/local/share/kicad/demos/test_xil_95108/carte_test_schlib.lib
-- Up-to-date: /usr/local/share/kicad/demos/test_xil_95108/carte_test.kicad_pcb
-- Up-to-date: /usr/local/share/kicad/demos/test_xil_95108/carte_test-cache.lib
-- Up-to-date: /usr/local/share/kicad/demos/test_xil_95108/carte_test.pro
-- Up-to-date: /usr/local/share/kicad/demos/test_xil_95108/carte_test.cmp
-- Up-to-date: /usr/local/share/kicad/demos/test_xil_95108/carte_test.net
-- Up-to-date: /usr/local/share/kicad/demos/video
-- Up-to-date: /usr/local/share/kicad/demos/video/libs
-- Up-to-date: /usr/local/share/kicad/demos/video/libs/video_schlib.lib
-- Up-to-date: /usr/local/share/kicad/demos/video/libs/footprints.pretty
-- Up-to-date: /usr/local/share/kicad/demos/video/libs/footprints.pretty/sim72.kicad_mod
-- Up-to-date: /usr/local/share/kicad/demos/video/libs/footprints.pretty/LRTDK.kicad_mod
-- Up-to-date: /usr/local/share/kicad/demos/video/libs/footprints.pretty/PLCC68.kicad_mod
-- Up-to-date: /usr/local/share/kicad/demos/video/libs/footprints.pretty/PLCC84.kicad_mod
-- Up-to-date: /usr/local/share/kicad/demos/video/video.sch
-- Up-to-date: /usr/local/share/kicad/demos/video/video.cmp
-- Up-to-date: /usr/local/share/kicad/demos/video/graphic.sch
-- Up-to-date: /usr/local/share/kicad/demos/video/bus_pci.sch
-- Up-to-date: /usr/local/share/kicad/demos/video/fp-lib-table
-- Up-to-date: /usr/local/share/kicad/demos/video/pal-ntsc.sch
-- Up-to-date: /usr/local/share/kicad/demos/video/muxdata.sch
-- Up-to-date: /usr/local/share/kicad/demos/video/video.kicad_pcb
-- Up-to-date: /usr/local/share/kicad/demos/video/modul.sch
-- Up-to-date: /usr/local/share/kicad/demos/video/video.net
-- Up-to-date: /usr/local/share/kicad/demos/video/rams.sch
-- Up-to-date: /usr/local/share/kicad/demos/video/video.pro
-- Up-to-date: /usr/local/share/kicad/demos/video/esvideo.sch
-- Up-to-date: /usr/local/share/kicad/demos/video/video-cache.lib
-- Up-to-date: /usr/local/share/kicad/template/kicad.pro
-- Up-to-date: /usr/local/share/kicad/template/gost_landscape.kicad_wks
-- Up-to-date: /usr/local/share/kicad/template/gost_portrait.kicad_wks
-- Up-to-date: /usr/local/share/kicad/template/pagelayout_default.kicad_wks
-- Up-to-date: /usr/local/share/kicad/template/pagelayout_logo.kicad_wks
root@debian:/home/daysleep/다운로드/kicad-4.0.0-rc1# 

그럼 다음과 같은 풍부한 화면을 볼 수 있다.



[참조]
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=795077

일련의 타버린 저항으로 인한 회로 불능 사례들

먼저, Falling Number 1600이라는 모델이 동작하지 않아서 보드를 점검해 보았다. 가장 눈에 띄는 문제점이 히터는 동작하는데 그 이외는 동작하지 않는다는 것이다. 우선 옛날 회로이다 보니 마이컴으로 해결해야 할 부분들이 트렌지스터와 다이오드 혹은 두 개의 다이오드가 직렬로 결합되어 중간에 탭이 있는 유사 트렌지스터로 구성된 거미줄 같은 로직 회로로 구성되어 있다. 이 부분은 되도록이면 건드리지 않으려고 전원, 릴레이, 7 세그먼트 디스플레이 그리고 클럭순으로 점검하였다.

전원은 트렌스포머에서 오는 전압을 제대로 7812가 DC로 변환하고 있었고, 릴레이도 직접 전압을 인가해 본 결과 정상적으로 동작하였다. 7 세그먼트도 마찬가지로 직접 전압을 걸어본 결과 모두 불빛이 들어 오고 있었다. 클럭을 점검하는데서 부터 회로를 역추적해야 하는 상황이 시작되었지만, 1초 주기의 클럭 생성하는 부분이 14655라는 CMOS 시리즈가 담당하고 있어서 그리 어렵지 않았다. 클럭 생성은 트렌스포머에서 전달되는 60Hz의 전원을 RC회로로 약간 가공하고 이 60Hz를 14655이 1초로 만드는 것이 핵심이다. 결론적으로 로직 부분을 제외한 모든 부분이 정상 작동하고 있었다.

이제 남은 부분인 로직 부분을 건드려야 하는 상황이라서 어쩔 수 없이 모든 회로를 역 추척하여 도면을 만드는 작업을 해야 했다. 나도 트렌지스터는 실험 수업때나 사용하거나 인버터가 하나 필요한데 칩을 쓰기에는 공간이 부족한 경우나 사용해 본 경험이 전부이기 때문에 익숙하지 않았다. 아무튼, 모르는 부품은 검색을 통하여 이해하고 안보이는 패턴은 멀티미터로 연결 부위를 역추척했다. 이 작업은 첨하는 작업이어서 애로사항이 많았는데 좀 쉽게 할 수 있는 방법은 기판과 동일한 배치를 갖도록 도면의 각 부품을 배치하고 일일이 찍어 가면 연결하는 것이다. 어줍짢게 로직대로 재배치 해가며 회로를 역추적했다간 내가 어디까지 했는지 알 수 없는 상황에서 동일한 작업을 계속 되풀이 하고 있는 것을 깨닫게 되었다. 아무튼 좋은 경험이 었다. 하긴 요즘은 가운데 듬직한 CPU가 떡하니 박혀있기 때문에 회로를 역추적하는 작업이 어렵지 않다.

이와 같이 회로도 다 역추적하였다. 이제는 동작하지 지점에서 시작하여 회로를 따라가며 점검하면 문제가 되는 지점을 찾아 볼 수 있을 것 같다.



그리고 요즘 휴대용 진공관 헤드폰 앰프를 제작했는데 전원으로 쓸 아답타 수급에 문제를 격고 있다. 그냥 12V를 쓰는 회로로 구성했으면 문제가 없는데 휴대용으로 만들다 보니 배터리에서 오는 14.8v의 전압을 11.6로 변환하는 레귤레이터를 회로 박아 넣었다. 그래서 아답터를 사용할 때는 최소 14.6V 이상의 500mA의 용량을 가지고 있는 아답터가 필요했다. 이런 아답터는 쉽게 구할 수 없다. 그래서 구석에 짱박혀 있는 안쓰는 알텍렌싱 스피커 아답터, HP 프린터 아답터등을 찾아 내었다. 이와 같이 구해진 두개의 아답터는 15V에 1A의 용량으로 내 요구에 딱 들어 맞았다. 하지만, 출력 전압이 안나온다. 그래서 뜯어 보았다. 하나를 뜯어 본 결과 트렌스포머에서 바로 RC회로로 넘거가는 부분의 저항이 노리끼리하게 변해 있었다. 탄것 같다.


2015년 9월 24일 목요일

[번역] 엔지니어의 윤리: 폭스바겐 디젤의 큰 실수 by Brian Benchoff

엔지니어의 윤리: 폭스바겐 디젤의 큰 실수

by Brian Benchoff

매번 아주 빈번하게 - 그리고 대체적으로 최상의 상황 아래 놓여있진 않았을 때 - 공학 분야는 대체적으로 가르치는 순간으로 재워지게 된다.폭스바겐은 최근에 11만대의 디젤 자동차의 배기 가스 테스트를 포함하는 거대한 스캔들에 휘말리게 됐다. 이 문제는 미국에서만 18억달러의 조정으로 VW의 비용 발생하게 할 수 있고 의심할 여지 없이 몇 명 이상의 폭스바겐 고용인의 경력을 끝내게 할 것입니다. 자동차 스캔들의 측면에서, 이것은 "Unsafe at Any Speed(어떠한 속도에서의 불안정)" 보다 훨씬 큰 문제이다. 그리고 이것은 폭발하는 경향이 있는 포드 사의 Pinto보다 큰 문제이다. 이것은 제조업에서 엔지니어링의 역사이고, 공학 윤리에 대한 엄청난 가르침을 받을 만한 순간이다.

디젤과 Clean Air 법률


디젤 엔진의 차량은 유럽과 비교했을 때 미국에서는 훨씬 덜 일반적이고, 이러한 성향은 연료의 가격이나 단순한 선호도처럼 단순한 것이 아니다. 디젤 연료는 동일 부피의 가솔린보다 더 많은 에너지를 포함하고 있다. 달리 말하자면, 갤런 당 더 많은 마일 수로 해석할 수 있다. 이러한 점은 비용 측면에서 기인한 것이지만, 가솔린 엔진은 더 많은 이산화탄소를 배출하는 반면, 디젤 엔진들은 그들의 가스 배출량에 비해 훨씬 더 많은 질소 산화물(NOx)을 배출한다.

디젤 자동차들은 유럽에서 승객용 차량의 1/3을 차지하는 반면, 미국의 도로에서는 드물게 차지하고 있다. 이러한 점이 환경 규제에서 차이를 가져오게 된다. 1970년의 US Clean Air 법률의 소개 이후로, 질소 산화물 배출은 이산화탄소 배출보다 더 엄격한 통제 상태에 놓이게 되었다. 유럽에서 이산화탄소는 질소 산화물보다 더 엄격히 통제되고 있다. 이것은 디젤 자동차가 미국보다 유럽에서 더 대중적인 상황에 대한 규제의 단순한 결과이다.

TDIs 와 West Virginia 대학교


폭스바겐 디젤차량의 판매는 이런 더 엄격한 규정에도 불구하고 지난 몇 년 동안 미국에서 상승 추세에 있어왔다. '깨끗한 디젤'은 산업계의 하나의 목표이고, 유럽의 비영리인 International Council for Clean Transportation는 Wet Virginia 대학교의  Alternative Fuels과 Engine Emissions를 위한 센터(CAFEE)의 연구자들과 교류했다. 어떻게 폭스바겐이 미국 규정에 적합한 디젤 엔진을 생산할 수 있었는지에 대한 질문이 우선순위 목록 중 상위에 있었고, 이 팀은 실 사용 환경에서 Passat, Jetta 그리고 Golf 차량들을 시험하는데 장비가 잘 갖추어져 있었다.

미국 정부에 의해서 요구되는 배기가스 시험 통과에도 불구하고 CAFEE는 이 엔진들이 적합하지 않다는 것을 알아냈다. 이러한 명백한 불일치는 어떻게 디젤 배기가스가 측정되는지를 조사함으로써 명확해 질 수 있었다.  위반 사항에 관한 EPA의 안내문은 차량이 테스트 상황에 있었을 때를 감지하는 'defeat device' 로써 기능하는 몇 줄의 코드에 의해서 이루어 졌다고 설명한다. 전자 제어 장치(ECM)에 설치된 소프트웨어는 "운전대의 위치, 차량의 속도, 엔진의 동작의 지속기간, 그리고 기압등을 포함하는 다양한 입력"들을 읽음으로써 차량이 배기가스 시험이 진행중에 있었는지를 감지하게 된다.이러한 조건에서 ECM은 토크와 질소 산화물 배출량을 떨어뜨리는 다른 'map'을 사용하게 된다. 정상 조건 - 차량이 배기가스에 대한 검사가 진행되지 않을 때 - 하에서 따로 분리된 'map'은 가속, 토크, 혹은 연료 효율을 증가 시키도록 사용된다. CAFEE는 시험 장치를 휴대용으로 조작하여 이것을 판정할 수 있었다. dynamometer위에서 차량의 배기가스를 검사하는 대신, 연구자들은 LA에서 Mount Baldy, 그리고 LA에서 San Diego 등의 Los Angeles 주변을 운행하는 실제 주행 조건에서 그들의 검사를 수행했다.

VW은 그들이 잘못됬다고 인정한다.


CAFEE의 연구는 2014에 완료 되었고, 같은 해의 12월에 폭스바겐은 이러한 이슈를 다루기 위한 자발적인 리콜을 발효했다. 한편으로는, California Air Resources Board (CARB)는 onboard 진단 시스템이 증가 된 배기 가스를 왜 감지하지 못했는지를 조사하기 위해서 추가적인 조사를 수행했다. 이 기간동안, VW은 증가된 배기가스를 설명하는 잠재적인 기술적 문제점들을 제공했다. 이 설명들은 EPA나 CARB에게 충분하지 않았고, 이러한 이슈가 해결되었을 때까지 2016년 모데의 디젤 차량들은 적합성 인증을 부여받지 못하는 결과를 가져왔다. 그리고 나서 폭스바겐은 아주 놀라운 행우를 했었다:  차량이 배기가스 검사될 때를 감지하도록 되어 있는 'defeat device'을 디자인하고 설치 했다고 시인했다.

오늘날  어떠한 점이 우리에게 다가오는가...


VW은 미국 도로에 이 'defeat device'가 ECM에 설치된  400,000 이상의 차량들을 가지고 있다. EPA는 규정에 따르지 않은 각 차량에 $37,500달라 까지 민사처벌을 적용할 수 있다. 이것은 폭스바겐이 180억 달러의 벌금에 직면할 수 있다는 것을 의미한다. 폭스바겐 주식은 지난 몇 일 동안 20% 떨어졌고, 폭스바겐의 CEO에서 최하위 엔지니어까지에 이르는 명령의 모든 체계는 초조해 하고 있다. 폭스바겐은 현재 US Department of Justice에 의해서 조사의 대상이 되고, 이 사안에 대한 의회 청문회가 있을 것이다. 폭스바겐이 자신을 찾을 수 있는 더 나쁜 상황을 상상하기 어렵게 됬다.

엔지니어링에서 윤리


의회의 답변 촉구, DoJ의 조사, 투자자들의 년 수입을 잃게되는 이러한 문제점들에도 불구하고, 우리는 이 사안에 하나의 핵심 사실을 절대 알지 못할지도 모른다: 왜 이 'defeat device'가 지금까지 구현되어 왔는가.

폭스바겐 혹은 더 직접적으로 하청업체의 엔지니어는 EPA와 Clean Air Act 규정의 전체적인 목적을 무력화 하는 코드에 승인 했다. 권한 있는 어떤 사람도 아니요 라고 말하지 못했다. 그리고 이 코드는 수많은 차량의 전자 제어 장치에 설치 되었다. 이 시점은 이러한 전체적인 시련의 가르침을 받을 만한 순간이다: 어떤 점에서 어떤 이는 더 잘 알았어야 한다. 최소한 한 명의 엔지니어라도 이시기를 거치면서 직업을 잃고, 확실하게, 한 명 이상의 임원은 탈탈 털어져야 한다.

Space Shuttle Challenger 재앙과 같이, Johnstown 홍수 같이 그리고 Fight Club의 초기의 장면 같이 이것은 엔지니어 윤리 교과서를 위한 한 부분이 될 것이다. 만약 이것인 범죄 조사로 전환될 경우 - 아마도 좋은 기회가 될 것인 - 우리는 결국 이러한 사항이 법과 사회적 책임의 완벽한 망각이 되었는지 배우게 될 것이다. 그 때까진 우리는 어떻게 자동차 역사의 가장 큰 실수 중 하나가 될지, 폭스바겐과 디젤 차량은 장차 어디에 있게 될지 추측해 볼 따름이다.

[출처 : http://hackaday.com/2015/09/23/ethics-in-engineering-volkswagens-diesel-fiasco/]

뭐. 고학력 실업자 신세인 본인에게 이러한 문제는 그림의 떡이지만, 혹시라도 여유없을 현장 엔지니어에게 도움이 될까 싶다.

2015년 7월 13일 월요일

LED 를 광센서로 활용하기



LED를 광센서로 활용하는 방법은 두 가지 있다. Cathode (음극) 센싱과 Anode (양극) 센싱이 있다. 우선 LED 설명에 앞서 다이오드의 동작원리에 대해서 살펴보자. 다이오드는 아래의 그림과 같이 P형, N형 반도체와 중간의 Depletion 지역으로 구성된다. P형 반도체는 -극성을 갖고 있는 Electron을 수용할 수 있는 용기 같은 역할을 수용하고 N형 반도체는 -극성을 갖고 있는 Electron을 포함하고 있다.


http://ffden-2.phys.uaf.edu/212_fall2003.web.dir/Marvin_Casanova/physics.htm

그리고 아래와 같이 P형 반도체 쪽에 양극을 N형 반도체 쪽에 음극을 연결하면 다이오드를 관통하는 전류가 발생한다.

http://ffden-2.phys.uaf.edu/212_fall2003.web.dir/Marvin_Casanova/physics.htm

반대로 아래의 그림과 같이 전극 연결을 반대로 하면 전류는 전혀 흐르지 못하고 P형, N형 반도체 사이에 Depletion 지역이 발생하게 된다.

http://ffden-2.phys.uaf.edu/212_fall2003.web.dir/Marvin_Casanova/physics.htm

여기서, LED를 광센서로 활용하는 (Cathode (음극) 센싱) 원리를 이해하기 위해서 바로 위의 그림 즉 다이오드를 정상 작동하지 못하는 역 전압이 걸렸을 때부터 시작해야한다.

http://jtgonz.com/led-sensing-matrix.html
역전압이 걸렸을때의 다이오드를 좀 더 자세히 살펴보면 위의 그림과 같다. P형 반도체는 +극성을 갖는 Hole들은 정체되어 왼쪽으로 쏠려 버리고, 마찬가지로 N형 반도체의 -극성의 electron들도 정체되어 오른쪽으로 쏠려 버리게 된다. 이 상태에서 Deplection 지역은 각각 쏠려 있는 hole과 electron 양 만큼의 반대 극성을 띄는 캐패시터가 순간적으로 형성된다.

http://jtgonz.com/led-sensing-matrix.html

이 상태에서 LED에 광자가 유입되면 이 Depletion 지역에 Hole과 Electron이 유입되고 미세한 전류 흐름이 발생하게 된다. 그럼 다이오드에 걸려 있는 역전압을 해제하고 광자의 유입에 따른 미세 전류의 흐름에 따른 전압을 측정하면 LED를 광센서로 활용할 수 있다. (Depletion 지역에 캐패시터가 형성 되기 때문에 일정 시간 이후에도 광자에 의한 전류 흐름은 일정 시간 이후에http://jtgonz.com/led-sensing-matrix.html도 지속된다.)

http://jtgonz.com/led-sensing-matrix.html

그리고 Anode (양극) 센싱은 Cathode 센싱에 비해서 추가적인 하드웨어 비용이 들지만, 수 ms나 s가 걸리던 센싱 시간을 us 단위로 줄일 수 있다. Anode 센싱을 위해선 아래의 그림과 같이 Anode 단에 analog input을 수용하는 단자를 연결하고, 반대편은 0V를 연결한다. 광자에 의한 전류의 흐름은 Cathode 센싱과 마찬가지로 이루어지고 전압차가 alalog input 단자에서 감지된다.

http://jtgonz.com/led-sensing-matrix.html

앞서 이야기 했듯이 이방법을 사용하면 여러개의 LED을 스캔하는데 수 ms면 LED로 광량을 측정 할 수 있다. 그래서 속도적인 측면에서 Anode 센싱 기법을 사용하는 것을 추천한다. 하지만, 각각의 LED에 전용 ADC를 연결해야 하기 때문에 CPU에 내장된 ADC이상의 외부 ADC를 사용해야하는 경우가 발생하기 때문에 비용이 많이 든다.

[참고자료]
http://ffden-2.phys.uaf.edu/212_fall2003.web.dir/Marvin_Casanova/physics.htm
http://jtgonz.com/led-sensing-matrix.html

2015년 7월 9일 목요일

[작업중] Barrel Distortion이라 불리는 렌즈 왜곡 해결 알고리즘

우선 Barrel Distortion이란 무엇인지 다음의 사진을 보면 명확해진다.


[참고자료]
http://www.tannerhelland.com/4743/simple-algorithm-correcting-lens-distortion/
http://sprg.massey.ac.nz/ivcnz/Proceedings/IVCNZ_73.pdf

2015년 7월 1일 수요일

[작업중] TP-LINK WR703N 설정하기

1. OpenWRT의 배포본 설치하기
다음의 바이너리이미지를 다운로드한다.

 https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin

구체적인 설치 방법은 다음의 링크를 통해서 해결하자.

http://wiki.xinchejian.com/wiki/Install_OpenWRT_on_TPlink_WR703N
https://translate.google.com/translate?sl=auto&tl=en&js=y&prev=_t&hl=ko&ie=UTF-8&u=http%3A%2F%2Fwww.geeknimo.com%2F2013%2F10%2F14%2Fopenwrt%25E7%259A%2584%25E7%25A0%2594%25E4%25B9%25A0%25E7%25AC%2594%25E8%25AE%25B0%25E4%25BA%258C%2F&edit-text=

2.WIFI 설정하기
WR703N은 기본적으로 WIFI가 비활성화 되어 있다. 우선 보드에 접속한다. 보드에 접속하는 방법은 이더넷을 연결하거나 보드에서 RS232포트를 집적 뽑아내어 터미널로 로그인하는 방법이다. 자세한 접속 방법은 다음의 링크를 참조하자.

http://www.instructables.com/id/TL-WR703N-serial-port/

보드에 접속하여 /etc/config/network 파일에 다음과 같이 수정한다.

config interface 'wan'
             option ifname 'wlan0'
             option proto 'dhcp'

그리고 구체적인 무선통신 설정은 /etc/config/wireless 파일을 다음과 같이 수정하여 해결한다.

             # REMOVE THIS LINE TO ENABLE WIFI:
config wifi-iface
             option device radio0
             option network wan
             option mode sta
             option ssid '와이파이네트워크이름'
             option encryption psk
             option key '와이파이네트워크암호'


리부팅한다. 참고적으로 위의 와이파이 네트워크는 주변의 사용 가능한 SSID와 암호이어야 한다. 그래야 인터넷에 접속하여 다음의 사항들을 진행할 수 있다.

3. sysupgrade 설치


4. opkg 설치

용량한계에 따른 문제들

tftp 설치

커스텀 롬 설치하기

10. mjpg-streamer 설치하기

http://wiki.openwrt.org/doc/howto/webcam

mjpg-streamer 컴파일

소스 코드를 고쳐서 mjpg-streamer를 사용해야 하기 때문에 소스코드를 직접 컴파일해 보았다.
우선 가장 먼저 맞이하게 되는 문제는 다음과 같다.

mjpg_streamer.c:27:28: fatal error: linux/videodev.h: No such file or directory

이건 다음의 심볼릭 링크를 만들어서 해결하면된다.

# ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h

그리고 두 번째 봉착하게 되는 문제는 unsigned long int와 int * 사이에 발생하는 cast 오류이다. 이것은 문제가 되는 파일의 컴파일을 무시하는 방식으로 처리하자. mjpg-streamer의 Makefile의 다음 라인을

plugins: input_uvc.so output_file.so output_http.so input_testpicture.so output_autofocus.so inputgspcav1.so

아래와 같이 수정한다.

plugins: input_uvc.so output_file.so output_http.so input_testpicture.so  output_autofocus.so

여전히 문제점이 하나 남아 있다. plugins/input_uvc/uvcvideo.h파일에 다음 라인을 추가한다.

#include "linux/videodev2.h"

아직 혼돈 스럽지만 컴파일은 이로써 가능하다.

2015년 4월 23일 목요일

주목할 만한 프로젝트들

1.해커데이에서 지구의 날 특집으로 소개된 초소형 스펙트로 미터가 흥미롭다.

https://hackaday.io/project/4141-c12666ma-micro-spectrometer

핵심은 하마마츠에서 판매하는 캔 타입의 C12666MA는 chip 타입의 grating과 linear CMOS 센서로 구성되며 이러한 개념으로 계속 버전업을 해왔나 보다. 응답유효 파장대가 340nm 에서 780nm으로 일반적인 형광 반응과 컬러 측정이 가능할 것이다. 아래의 데이터 시트를 살펴보면 다른 파장대의 센서도 판매하고 있다. 가격이 아직 착한 상황은 아니지만 약 200~300 달러 인 것 같다. 계속 주의 깊게 살펴보아야 겠다.

http://www.hamamatsu.com/resources/pdf/ssd/c12666ma_kacc1216e.pdf

2. 마찬가지로 해커데이에서 소개된 wifi 모듈이다. 단순한 wifi모듈은 아니고 Atheros사의 지금은 Qualcomm사에 합병된 회사의 AR9331로 구성된 하나의 리눅스 시스템이다.

http://hackaday.com/2015/04/22/kickstarting-even-more-router-based-dev-boards/

그 구성이 한동안 유행되었던 OpenWRT기기인 DT-Link사의 WR703n이 떠오르게한다.

http://daviddarts.com/piratebox-diy-openwrt/

조금만 살펴보면 위의 기기를 사용한 다양한 프로젝트를 고려하면 그 유용성은 상당할 것 같다.

아무튼 조만간 사용해야 할 일들이 많을 것 같다.

3. LED 모듈인데 내가 필요한 용도와는 다르지만 그 구성이 참고해 볼만 한다. 참고삼아 하나 구매해 보고 싶지만. 아무튼 살펴보자.

https://www.adafruit.com/products/1430


2015년 3월 31일 화요일

Debian 기반 리눅스 시스템에서 Adafuit의 Trinket 사용하기

1. 사전 작업 (arduino 설치)

# apt-get arduino

2. 디바이스 필터 설정
아래의 설정 파일을 생성하고 내용을 추가한다.

/etc/udev/rules.d/95-usbtiny.rules

#Adafruit Trinket
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1781", ATTR{idProduct}=="0c9f", GROUP="dialout", MODE="0666"

3. avrdude 설정 파일 변경

/etc/avrdude.conf 에서 다음의 항목들을 변경한다.


#------------------------------------------------------------
# ATtiny85
#------------------------------------------------------------

part
     id            = "t85";
     desc          = "ATtiny85";
...
 # chiperasetime = 0;
  chiperasetime = 900000;
 ...

# delay  = 6;
 delay  = 12;
...

#         min_write_delay = 4500;
#         max_write_delay = 4500;
         min_write_delay = 30000;
         max_write_delay = 30000;

4. arduino IDE를 추가 파일 설치하기
다음의 주소로 가서
https://learn.adafruit.com/introducing-trinket/setting-up-with-arduino-ide

Step 1. Add ATtiny85 Support  밑에 있는 다운로드 항목을 내려 받는다.
내려 받은 trinkethardwaresupport.zip을 압축해제한다.
해제된 파일들중 variants 디렉토리밑의 디렉토리들을 (tiny8, tiny14) 통체로
/usr/share/arduino/hardware/arduino/variants밑으로 이동한다.
그리고 /usr/share/arduino/hardware/arduino/boards.txt 파일에 다음 항목들을 추가한다.


gemma.name=Adafruit Gemma 8MHz
gemma.bootloader.low_fuses=0xF1
gemma.bootloader.high_fuses=0xD5
gemma.bootloader.extended_fuses=0xFE
gemma.upload.maximum_size=5310
gemma.build.mcu=attiny85
gemma.build.f_cpu=8000000L
gemma.build.core=arduino:arduino
gemma.build.variant=tiny8

trinket3.name=Adafruit Trinket 8MHz
trinket3.bootloader.low_fuses=0xF1
trinket3.bootloader.high_fuses=0xD5
trinket3.bootloader.extended_fuses=0xFE
trinket3.upload.maximum_size=5310
trinket3.build.mcu=attiny85
trinket3.build.f_cpu=8000000L
trinket3.build.core=arduino:arduino
trinket3.build.variant=tiny8

trinket5.name=Adafruit Trinket 16MHz
trinket5.bootloader.low_fuses=0xF1
trinket5.bootloader.high_fuses=0xD5
trinket5.bootloader.extended_fuses=0xFE
trinket5.upload.maximum_size=5310
trinket5.build.mcu=attiny85
trinket5.build.f_cpu=16000000L
trinket5.build.core=arduino:arduino
trinket5.build.variant=tiny8

##############################################################

그리고 arduino IDE에서 개발 보드의 제어 권을 획득하기 위해서 다음 명령을 수행한다.

# adduser <사용자명> dialout


 5. Trinket을 연결하고 인식 여부를 확인해 보자.
주의 사항: 해당 보드는 하드웨어적으로 USB 포트를 지원하지 않기 때문에 전원 인가 후 10초 동안만 펌웨어 다운로드와 보드 인식이 가능하다. 달리 말하자면 보드를 제대로 인식하고 작성된 프로그램을 업로드 하기 위해서 리셋을 사전에 누르고 10초 안에 해당 작업을 해야 한다.
# avrdude -c usbtiny -p attiny8

6. 간단한 프로그래을 테스트 해보자.
마찬가지로 업로드 하기 전에 리셋 버튼을 누르고 업로드는 10초 안에 이루어져야한다.
/*
  Blink
  Turns on an LED on for one second, t/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  This example code is in the public domain.

  To upload to your Gemma or Trinket:
  1) Select the proper board from the Tools->Board Menu
  2) Select USBtinyISP from the Tools->Programmer
  3) Plug in the Gemma/Trinket, make sure you see the green LED lit
  4) For windows, install the USBtiny drivers
  5) Press the button on the Gemma/Trinket - verify you see
     the red LED pulse. This means it is ready to receive data
  6) Click the upload button above within 10 seconds
*/

int led = 1; // blink 'digital' pin 1 - AKA the built in red LED

// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);

}

// the loop routine runs over and over again forever:
void loop() {
    digitalWrite(led, HIGH);
    delay(500);
    digitalWrite(led, LOW);
    delay(500);
}
    hen off for one second, repeatedly.

  This example code is in the public domain.

  To upload to your Gemma or Trinket:
  1) Select the proper board from the Tools->Board Menu
  2) Select USBtinyISP from the Tools->Programmer
  3) Plug in the Gemma/Trinket, make sure you see the green LED lit
  4) For windows, install the USBtiny drivers
  5) Press the button on the Gemma/Trinket - verify you see
     the red LED pulse. This means it is ready to receive data
  6) Click the upload button above within 10 seconds
*/

int led = 1; // blink 'digital' pin 1 - AKA the built in red LED

// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);

}

// the loop routine runs over and over again forever:
void loop() {
    digitalWrite(led, HIGH);
    delay(500);
    digitalWrite(led, LOW);
    delay(500);
}
  








2015년 3월 25일 수요일

캐패시터의 X5R과 X7R의 차이점 ?

간단하다 각각의 문자가 의미하는 내용을 알면 명확해진다.

X : 동작상태의 최저 온도가 -55℃
5 : 동작상태의 최고 온도가 +85℃
R : 캐패시턴스의 오차 범위가 ± 15%

요약하자면 X5R이 의미하는 것은 동작온도 범위가 -55℃에서 +85℃이고,캐패시턴스의 오차범위는 ± 15%가 된다.

X : 동작상태의 최저 온도가 -55℃
7 : 동작상태의 최고 온도가 +125℃
R : 캐패시턴스의 오차 범위가 ± 15%


요약하자면 X5R이 의미하는 것은 동작온도 범위가 -55℃에서 +125℃이고,캐패시턴스의 오차범위는 ± 15%가 된다.

결국 X5R과 X7R의 차이는 동작 할 수 있는 최고 온도의 차이 밖에 없다.

2015년 2월 17일 화요일

씽크패드 x220의 Full HD LCD로 변경 하기 위한 자료들

[추가 : 가장 최근의 성공 사례 http://tech.vectro.ca/prototype-x220-fhd-mod/ ]

어느 독일인이 중국어 한국어 영어를 넘나들며 일목요연하게 자료를 모아 두었다.
현재 x240s 모델의 경우 FHD LCD 패널을 지원하지만 x230까지의 모델은 지원하지 못하고 있다. x220과 x230 모델에서 FHD LCD 패널을 사용하지 못하는 가장 큰 이유는 LCD 인터페이스가 LVDS 방식이어서 FHD LCD 패널이 지원하는 eDP와 맞지 않는 것이다. 해당 글에서도 알 수 있듯이 LeoKim이라는 한국분이 이미 FHD LCD 장착을 성공 하였다. 핵심은 LVDS->를 eDP로 변환하는 변환기판을 제작하고 그에 따른 케이블 제작과 바이오스 변경이 필요한 듯 싶다. 아무튼 쉽지 않은 작업인 것 같다. 시간을 두고 알아 봐야 겠다.


DP/eDP에 관한 정보들
http://www.intel.com/content/dam/www...logy-paper.pdf
http://dp2retina.rozsnyo.com/
http://abusemark.com/store/index.php...products_id=47
http://www.tarduino.cc/2013_04_01_archive.html
http://emerythacks.blogspot.de/2013/...lcd-to-pc.html
http://www.cables-oem.com/e_products/?big_id=20

LVDS-eDP 변환기
http://www.hy-line.de/de/firmengrupp...parade/ps8622/
http://www.paradetech.com/products/d...at-converters/
http://www.paradetech.com/products/d...25-dp-to-lvds/
http://www.paradetech.com/products/d...erters/ps8623/
http://www.chrontel.com/index.php/pr...ds/edp--per-dp
http://www.chrontel.com/index.php/pr...ews/read/id/1/
http://www.st.com/web/catalog/mmc/FM128/SC1386/SS1485
http://www.st.com/web/catalog/mmc/FM...N1695/PF250895
http://www.chrontel.com/media/Datash...1bs%201.11.pdf
http://bunniefoo.com/novena/pvt1_release/eDP_adapter_dvt1.PDF
http://bunniefoo.com/novena/novena-laptop-dev.jpg

바이오스 변경
https://www.bios-mods.com/forum/index.php

한국 사이트의 성공 사례
X220 LVDS FHD LCD compare LCD VS EDP
World First X220/X230 FHD
Kabel und Interface
X220 Tablet FHD (Proof)
Connector in order for the reconstruction

중국 사이트의 사례들
X220 FHD Mod thread (kaum Infos, die Bilder sind die gleichen wie auf thinkpads.kr)
X220T FHD Mod thread (nur Proof-Bilder und warum der Mod beim X230T nicht klappt) + QHD ist im T420/T420s/T430/T430s möglich
T410S 13.3" ( 16:10 , FHD, 1920x1080, IPS) Modification
T420S/T430s 14.0 "IPS FHD Modifcation success
(hier gibts mehr Infos zu erforderlichen Schritten des Bios-Mods, Schaltpläne, Bauteile die man verlöten muss), Anhänge gibts hier
Diskussion zu eDP am X301 Anhänge gibts hier
QHD (2560x1440) im T430s Bilder gibts hier
X1 Carbon mit FHD indem die Southbridge kurzzeitig abgelötet wird und Drähte angebracht werden. Bilder gibts hier. Auf diese Weise soll FHD am X230T doch möglich sein, Bilder hier.
Der Mod am X201 (11,6" FHD) ging auch schon über geklaute edP/DP Signale und Modbios, in den Threads gibt es aber keine weiteren relevanten Infos

12,5" FHD Displays
LP125WF1-SPA1/SPE2 (Dell XPS 12)
LP125WF1-SPA2/SPA3/SPA4/SPB1/SPD1

LP125WF2-SPB1 (X240, Thinkpad Yoga) - touch
LP125WF2-SPB2 (X240) - non-touch

[출처]

http://thinkpad-forum.de/threads/146962-Full-HD-im-X220-X230-mit-diesem-Panel/page10

2015년 1월 3일 토요일

리눅스 파티션 사용량

요번에 16GB M2 타입 SSD와 1TB의 HDD의 조합으로된 시스템을 구성하고 리눅스를 깔아야 하는 상황이다. 문제는 작은 용량의 SSD를 효율적으로 사용하고 싶어서 조금 검색해 보았다. 많은 경우 두 저장 장치를 RAID로 구성해서 Bcache를 통해서 SSD를 캐시로 사용하는 방법을 추천한다. 하지만, RAID로 구성하면 두 저장장치를 항상 같이 사용해야 하기 때문에 내 경우 적합하지 않다.

그래서 파티션을 적절히 분배하는 방법을 알아 보기 위해 현재 사용하고 있는 데비안 시스템의 파티션 사용 분포를 살펴 보았다.


/ 는 SSD에 배정하고 /home, /var, /tmp,와 swap은 HDD에 배정하는 방법이 적당한 것 같다.