이 블로그 검색

2012년 9월 13일 목요일


Win32API 혹은 MFC를 배우다 보면 HRESULT나 LRESULT라는 반환형이 보입니다.
의외로 유용한 타입들이니 이 타입들이 어떤 역할을 하는지 알아보겠습니다.

HRESULT형은 32비트의 singed형 정수입니다.
COM의 규정에 정의된 것은 아니지만 COM 인터페이스에 소속된 대부분의 함수들은(DirectX가 대표적이죠)
HRESULT형태의 반환값을 가진다고 합니다.( 직접 만들어 사용하셔도 된다고 하지만 저라면 그냥 있는거 쓰겠습니다;; )

이 HRESULT형은 함수의 실행 결과를 리턴하게 됩니다.
주 사용법은 BOOL형과 마찬가지로 실행 결과를 SUCCEEDED / FAILED로 리턴 받을 수 있습니다.
단, BOOL과의 차이점은 반드시 함수의 리턴 값을 받지 않아도 된다는 것입니다.

예를 들면

if( FAILED( CreateWindow( ) )
          MessageBox( L"윈도우 생성에 실패 했습니다." );
라는 것과 단순히
CreateWindow( );
라고 사용하는 것의 결과물은 차이가 없습니다.

단지 전자의 경우 윈도우 생성에 실패하게 되면 오류메시지를 출력하도록 해놓은 것입니다.
이렇게 사용하면 쉽게 틀릴 수 있는 부분을 1차적으로 디버깅 할 수 있습니다.
윈도우 생성이 실패하면 메시지가 출력되기 때문에 CreateWindow 부분이 잘못 되었다는 것을
금방 알아차릴 수 있습니다.

주의할 점은 BOOL형 처럼 !를 사용해서 성공과 실패 여부를 받아도 되지만 BOOL 형에서 TRUE가 1 FALSE가 0인 것에 반해 SUCCEEDED는 0, FAILED는 1의 값을 가지고 있기 때문에 헷갈릴 수 있는 부분입니다.

HRESULT 형을 함수의 반환형으로 자유롭게 사용할 수 있습니다.
리턴 값은 다음과 같습니다.

S_OK : Boolean TRUE 값(0X0)으로 S_FALSE와 함께 사용되며 함수가 성공하였음을 의미한다.
NOERROR : S_OK와 동일한 의미이다.
S_FALSE : S_OK와 반대로 Boolean FALSE 값(0X1)으로 함수가 실폐하였음을 의미한다.
E_UNEXPRCTED : 치명적인 실패를 의미한다.
E_NOTIMPL : 멤버 함수에 구현 코드가 포함되어 있지 않다.
E_OUTOFMEMORY : 필요한 메모리를 할당할 수 없음
E_INVALIDARG : 하나 혹은 그 이상의 인자가 타당하지 않음
E_NOINTERFACE : 요청한 인터페이스를 지원하지 않음
E_POINTER : 타당하지 않은 포인터
E_HANDLE : 타당하지 않은 처리
E_ABORT : 작동 중지
E_FAIL : 특정하지 않은 실패
E_ACCESSDENIED : 일반적 접근이 금지된 에러

주로 return S_OK와 return E_FAIL을 사용하게 됩니다.

다음은 HRESULT형의 구조입니다.

* HRESULT 형의 구조

0~15 비트 : RETURN CODE
16~28 비트 : FACILITY
29~30 비트 : R
31 비트 : SEVERITY ( SEVERITY(31비트)는 함수의 수행의 성공과 실패를 알려주는 코드다. )

다음으로 LRESULT라는 타입이 있습니다.
이것은 long형으로 Win32환경에서 메시지 처리를 마친 후 운영체제에게 신호를 주기 위해 사용하는 값이라고 합니다.

대표적으로 콜백함수의 반환형이 LRESULT이죠.
switch case문에서 각 메시지에 대한 처리 값을 -1, 0, 1 혹은 비트 플래그로 운영체제에게 어떤 작업을 해야하는지 추가로 알려주게 됩니다.

0을 리턴하면 모든 메시지가 처리 되었으니 넌 더이상 처리할 메시지가 없다.
라는 뜻이된다거나 진행 중인 작업을 취소해라 라던가 하는 의미를 가지기도 합니다.

2012년 9월 9일 일요일

OP-AMP 응용

OP-AMP의 응용OP-AMP는 아주 다양하게 응용이 되고 있습니다.
기본기능은 증폭의 역할입니다.

반전 증폭기
입력신호의 반대로 증폭해서 출력합니다.
sin wave를 입력하면 역 sin wave가 증폭이 되어서 나오게 됩니다.
R1,Rf 값에 의해 증폭률이 정해지게 됩니다.
일반적으로 많이 쓰이는 증폭기입니다.

오래전 핸드폰 튜닝 사이트에 소리크기를 키우는 방법이 있었습니다.
저항을 바꾸면 소리가 크지게 되죠. 그러나 그런 방법을 추천하지 않습니다.
왜냐하면 출시때 큰 음량으로 신호가 깨지지 않을 정도로 튜닝이 되어 있으니까요
앞서 Transistor에서 이야기 한것처럼 최고 증폭은 인가 전압까지 가능합니다.
증폭률이 너무 높아서 인가 전압을 넘어설경우(Saturation) 최고전압까지만 표현되므로
신호가 깨어집니다.


비반전 증폭기
입력신호와 동일한 파형이 증폭되어 출력됩니다.
반전 증폭기에 비해 효율이 떨어져서 많이 사용하지는 않습니다.



비교기
2개의 전압을 비교해서 -쪽보다 높으면 High(Vcc) 낮으면 Low(GND) 전압을 출력합니다.
핸드폰의 이어폰에서 전화를 거는 버턴은 mic와 연결이 되어 있는데 전압이 떨어질경우
키가 눌러진것으로 인식하는데 쓰이기도 합니다.


Highpass Filter
높은 주파수만 통과시키도록 하는 필터로 사용됩니다.
즉 낮은 주파수가 통과 되지 못하도록 하는 필터라는 의미이기도합니다.
소리로 말하자면 고음(높은 주파수)이 통과하도록 하고 저음은 통과하지 못하도록 하는 회로입니다.


Lowpass Filter낮은 주파수만 통과하도록 하는 필터역할을 하기도 합니다.
바꾸어말하면  높은 주파수가 통과 되지 못하도록 하는 필터라는 의미이기도합니다.
소리로 말하자면 저음(낮은 주파수)이 통과하도록 하는 회로입니다.



이 외에도 OP-AMP는 많이 사용됩니다.
ADC(Analog to Digital Converter),DAC(Digital to Ananlog Converter), 신호발생기 등등 다양하게 사용될 수 있습니다.
하지만 앞서 소개해 드린 경우가 거의 대부분 사용됩니다.


TR / FET


TR(트랜지스터)의 기능

: NPN 타입과 PNP타입
  -> TR의 제일 큰 용도는 스위치 역할이다.
       예) LED ON/OFF , 버져 소리 발생 , 다른 외부 기기의 스위치 조작 등.
       위에서 보는거와 같이 스위치 역할이 주 이다.
      
       스위치 역할을 TR을 꼭 써야 하나?
       위에 예는 마이크로프로세서에 바로 연결해도 작동 하는대 구지 TR을 써야하나? 이렇게 생각이 들수도 있을 것이다.
        하지만 TTL,C-MOS,마이크로 프로세서등은 OUT 포트에서 보내줄수 있는 전류량이 한정이 되어 있다.
       보통 25mA~2mA정도 이다. MSP430,CORTX-M3등 고급 사양의 IC는 외부 포트의 전류량이적다.
       이유는 구동시 전력 소모를 줄이기 위해 최대한 줄여 놓아서 이다.
          그렇다면 2mA로 LED를 켤수 있을까? LED가 요구하는 전류는 20mA 이므로 아주 흐리게 켜져 있을것이다.
          TR을 쓰면 사용된 TR에 따라 최대 보낼수 있는 전류량이 달라 진다.
      
     TR의 두번째 용도는 신호 증폭이다.
     TR은 회로 구성에 따라 신호를 증폭 할수 있다. 하지만 요즘 OP-AMP가 좋고 가격도 저렴해서 OP-AMP를 더 사용하는 경향이 있다. OP-AMP에 비해 TR로 구성시 구성이 복잡해 지기 때문이다.OP-AMP내부에 TR로 증폭하는 회로가 사실은 들어 있다. *^^*

:FET의 기능
->TR과 같이 스위치 기능을 하고 용도도 비슷하다.

그렇다면 TR과 FET의 차이는 뭘까?
TR은 5V전원에 사용 하면 TR을 지나가고 나면 대략 0.7V정도가 줄어든다. 다시말해 출력이 4.3V정도 나온다.
TR종류에 따라 다르고 외부 전류 소모량에 따라 다르다.

FET는 어떨까? FET는 드롭 전압이 보통 0.4V이하가 나온다. 종류가 많아서 어떤것은 0.2V 다 다르다.
그리고 전류 소모량에 의해 드롭 되는 전압이 크지가 않다.

그래서 FET는 리튬이온이나 리튬폴리머에 보호 회로에서 전지와 회로 간에 스위치 역할로 많이 쓰인다.

그리고 TR에 비해 FET는 발열이 적고(거의 없다.) 지나갈수 있는 전류량이 상당히 크다.
TR 3A짜리로 2A만 흘리면 TR방열판에 무지 많은 열이 발생 한다.

하지만 FET는 아주 작은 SMD TR(SOT-23)타입으로 사용을 해도 열이 발생 하지 않는다.

여기서 잠깐 위에 장점을 본다면 TR을 외 쓰지 다 FET쓰지 하는 생각을 할지 모른다.

하지만 TR은 비세신호도 증폭이 가능 하지만 FET는 미세 신호증폭이 힘들다.

그리고 FET는 정전기에 무지 약하다.

아차하면 나간다.

그리고 가격도 TR에 비해 높은 편이다.

예로) 20원짜리 TR로 가능한 곳에 100원 짜리 FET를 구지 넣을 필요 있을까?
이러한 여러가지 사항들을 고려해서 설계를 하면 된다..

2012년 9월 5일 수요일

Pads


PAD
부품이 인쇄 회로 기판(PCB)에 삽입 될 때에 부품의 라인이 삽입되는 Hole 주위에 입혀지는 엷은 구리 판막을 PAD라 한다.
(참고) 모든 부품의 1번 PIN은 PAD 모양을 구분하여 사용한다. 
VIA
PAD 와 PAD를 연결하면서 Track의 층(Layer)을 바꿀때 생기는 원 모양의 동박을 말한다. (VIA는 Standard VIA, Small VIA 등 VIA의 크기(Size)에 따라 종류를 만들어 사용하는 것이 좋다)
VIA의 홀(hole)은 기본적으로 기본 격자상(2.54mm)으로 하고, 미니 VIA hole에 대해서는 보조 격자상(0.508mm)의 대각을 최소 간격으로 한다. 
TRACK
PAD 와 PAD 또는 PAD 와 VIA 간을 연결하는 라인(Line)으로서 이 라인에 의하여 전류가 흐르게 된다. 
THERMAL 처리
부품의 GND PIN 및 GND의 넓은 패턴(Pattern)내에는 열방산을 막는 THERMAL 처리를 해 준다. (인쇄회로 프로그램에서 신호 라인을 전부 연결 후 GND에 Copper 처리를 하게 되면 THERMAL이 형성된다.)
THERMAL의 분기 모양은 + 자형 패턴(Pattern)과 * 자형 패턴(Pattern)이 있으며 주로 + 자형 분기 패턴을 많이 사용하게 되는데 네 귀퉁이는 모두 동일 크기(Size)로 만들어 주는 것이 좋다. 
배선
자동배선 : 처리속도는 빠르나 시스템 기능과 연관된 전기적 특성처리가 미흡하여 원하는 패턴을 만들 수 없다는 단점, 수동배선: 시간은 다소 걸리나 배선 결과 측면에서 원하는 패턴을 만들 수 있다는 장점이 있다. 배선 간격 : 인쇄회로에서는 부품간의 연결된 정보(NET)를 이용하여 구성하게 되는데 부품 밀도를 높이기 위해서는 배선간의 간격(space)을 줄여야 한다. 그러나 배선 간격이 너무 좁아지면 납땜시 쇼트(short)되는 문제가 발생하고 인가 전압에 의해 배선간 절연파괴 문제가 발생하므로 최소한도의 도체 간격이 피로하다. 
배선 설계시 유의사항
소신호 배선과 대전류 배선은 근접하지 않도록 한다.
배선과 배선간에 가능한 접지선을 통과시킨다.
배선은 최단 거리를 유지하고 배선이 길어서 루프(loop)가 형성되지 않도록 한다.
배선간의 전위차에 따라 배선 간격을 유지하여야 한다. 
FILE 
New : 새로운 PowerPCB 파일을 만든다. ( 단축키 : Ctrl + N ) 
Open : PowerPCB 파일과 PADS Perform의 JOB 파일을 읽어 불러 들인다.
( 참고 : *.PCB는 PowerPCB의 V1.0 부터 새로이 붙여진 확장자 명인 파일
            *.JOB는 PADS Perform의 확장자 명이다. ) 
Save 활성화된 화면의 PCB 작업파일을 Harddisk에 저장한다.(확장자 : *.PCB )( 단축키:Ctrl+S ) 
Save As : 활성화된 화면의 PCB 작업파일을 다른 이름으로 저장을 하는데, JOB 파일로의 저장은 PADS Perform V6.0 형식으로 저장한다. ( 확장자 : *.PCB, *.JOB ) ( 단축키 : Ctrl+A ) 
Import : 회로도에서 작성된 Netlist 파일(확장자 : *.ASC)과 Export로 작성되어진 ASCII 형식으로 저장된 data를 Binary값으로 변환하여 불러들인다. (확장자 : *.ASC) 
Export : Export는 주로 메모리 상에 존재하는 PCB 파일을 ASCII 파일로 전환할 때 사용 하거나, 혹은 PowerPCB의 하위 버전으로 파일을 보낼 때 사용하는데,(확장자:*.ASC) 파일 형식에 따라 *.ASC, *.DXF, *.EMM/*.EMP 파일로 작성을 할 수 있다. 
Library : PowerPCB에서 사용할 모든 Library의 경로, Library의 추가 및 삭제, 편집등을 관리하고, PowerPCB와 PowerLogic은 Library Manager를 서로 같이 공유한다.
New Lib : 새로운 Library Directory(방)를 만들어 준다.
New List : Library Directory(방)들을 User가 원하는 순서대로 지정할 수 있다.
Export : Lib Directory(방)의 Data(Decal, Parts, Lines, CAE)들을 다른 Lib Directory(방) 으로 옮기고자 하는 경우에 사용한다. 먼저(Decal, Part, Lines, CAE) 중 하나를 선택하고 그 중에 서 선택하고자 하는 Item 들을 선택한 뒤 Export를 선택하면 Library Export File Dialog box가 나타난다. 만약, 선택한 항목이 Parts 일 때, AAA 이라는 File name을 주면 AAA.P 라는 File 이 생성된다.
Import : 다른 Lib Directory(방)에 존재하는 Lib Item(Decal, Parts, Lines, CAE)들을 현 재의 Lib Directory로 가져오고자 하는 경우에 사용한다.즉,위의 Export에서 만든 AAA.P 를 현재 의 Lib Directory(방)로 읽어 들이면 된다.
Decals : PowerPCB에서 사용될 Library의 Shape를 만드는데,정확한 치수로 PCB기판상에 놓여질 부품의 실제모양을 만든다.
Parts : Decals로 작성된 Library를 PCB 상에 불러낼 실질적인 Library 이름을 등록한다.
Lines : 2D Lines로 작성된 Sheet Form, Title Box, 일반적인 Form 에 관련된 Line들을 등록한다
Lines는 PowerLogic, PowerPCB에서 모두 작성을 할 수 있으며, 주로 회사 Logo, Sheet Form 등 을 작성을 할때 많이 사용된다. 
CAE : 작성될 부품의 Gate 모양을 등록하는 것으로 CAE Decal 또는 Gate Decal 이라 부르며 주로 회로도의 부품의 Gate 모양을 작성 할 때 많이 사용된다. 
Report : 활성화된 화면의 PCB 파일에 관련된 Database 의 List를 만들어 준다.
Unused : 사용되지 않는 Parts의 Pins에 대한 정보 List를 생성한다.
Statistics : 작업 중인 PCB 기판에서 사용된 Layer number, Drill 위치, Part Type, 사용 된 Via, Routed Connections 등의 전체 정보 List 를 생성한다.
Limits : 현 Database에 포함된 PCB 의 최대 Item 의 수와 사용된 Item의 수가 비교되어 List를 생성한다.
Net List w/o pin info : 각 신호선에 연결된 부품의 핀 번호 List를 생성한다.
Part List 1 : Reference Designator에 의한 부품의 Part Type 과 Logic Type의 Netlist를 생성한다.
Test Point : 않는 모든 Net 등의 List를 생성한다.
Print SetUp : 출력할 프린터를 설정한다.