Tuesday, January 29, 2013

TINA, TL072를 이용한 오디오 레벨검출회로


오디오 관련 회로에서 CPU의 ADC를 이용하여 오디오 신호의 레벨을 검출하기 위한 회로이다.

물론 간단한 RC회로를 만들어서 사용할 수도 있지만 미약한 신호에 대한 증폭을 필요로 하는 경우가 많기때문에 OP-AMP를 하나 넣고 다이오드,캐패시터,저항을 이용한 회로를 만들었다.

실제 음성 파일을 VG1의 소스로 지정하여 Transient Analysis를 돌렸다.

CPU에서는 VM1의 +핀 부분을 ADC의 입력으로 삼아 사용하면 쉽게 레벨을 검출할 수 있을것이다.



무료 SPICE 툴 TINA의 간단한 사용방법

TINA는 TI에서 제공하는 SPICE-Based Analog Simulation Program 이다.

TI사의 OP-AMP 들과 그 외 각종 아날로그 IC를 시뮬레이션 해볼 수 있으며,

제공되지 않는 OP-AMP는 특성을 입력하여 사용할 수 있다.

나는 실력이 없어서 그냥 TINA에서 제공하는 OP-AMP만 사용하고 주로 R-C-L 회로의

검증을 주로 하고 있다.


http://www.ti.com/tool/tina-ti  에서 TINA-TI 를 Download 해서 설치한다.

다운로드 용량은 약 86MB

설치는 모두 디폴트 옵션을 사용하여 설치하면 별 문제 없다.

Windows 7, Windows XP 모두 설치됨.


1. TINA를 실행한 후 아래처럼 OPAMP와 전원을 놓는다.



2. 아래와같이 나머지 회로도 다 그린다. VM1 은 Voltage meter(전압측정기)이다.

   이 회로는 그냥 단순한 OP-AMP 증폭회이다.



3. 회로도의 OP-AMP를 더블클릭하면 아래처럼 OP-AMP 의 모델을 지정할 수 있다.



4. 전압 신호원 (VG1)의 특성은 아래처럼 싸인파로 Vp-p가 1V가 되도록 지정해본다.



주파수는 500hz로 정했다.


5. 이제 시뮬레이션을 해볼 시간. 먼저 Transient Analysis를 해본다. 시간에 따른 VG1과 VM1의 전압을 표시해줄것이다.


아래처럼  결과가 나왔다. 입력 Vp-p 가 1V 인것이  Vp-p가 2V로  증폭이 된 결과물이다.




5. 이번에는 주파수 특성을 알아본다.

  AC Transfer Characteristic (AC 변환 특성)을 시험해볼때에는 필요한 주파수를 지정한다.


아래처럼 주파수별 Gain 특성과 위상 특성이 표시된다.

이번 회로는 보통 품질의 음성(오디오)를 위한 증폭회로이므로 100hz ~ 20khz 사이에서 평탄한 위상과 게인 특성을 보이면 되므로 이정도면 필요한 결과를 얻었다.



6. 완성된 회로도를 저장하고,  별도의 디자인 툴을 이용해서 PCB를 만들어 사용한다.


Monday, January 28, 2013

정신이 없을때 하기 쉬운 실수


int D = 1234;


void function_xxx()
{
    char D;
   
     printf( "%d", D );
}

이렇게 해놓고.. 아놔.. 왜 D가 이상한 숫자가 나오지? 1234가  나와야 하는데..라고 생각하며 삽질을 할 수 있다.

C언어에서 변수의 사용은 가까운놈이 우선이므로 전역변수 D보다 로컬변수 D가 우선이므로  1234가 나올리가 없다.

전역변수 사용시 극히 주의하고 전역변수는 이름을 특별히 지어서 해깔리지 않도록 한다.

각자 개인차가 있겟지만 예를 들어 전역은 G_xxx 식으로 변수 이름을 지어주자. 아니면

별도의 구조체나 클래스의 맴버로 만든 후 static 변수로 만들어놓고 쓰던가.



Sunday, January 20, 2013

CPort 사용중 링크에러 SetPortW 가 없다고 나온다면?


#ifdef UNICODE
#define SetPortW SetPort
#else
#define SetPortA SetPort
#endif

내용을 CPort.hpp 의 에 추가해준다.



아래내용처럼.



// CodeGear C++Builder // Copyright (c) 1995, 2009 by Embarcadero Technologies, Inc. // All rights reserved // (DO NOT EDIT: machine generated header) 'Cport.pas' rev: 21.00 #ifndef CportHPP #define CportHPP #pragma delphiheader begin #pragma option push #pragma option -w- // All warnings off #pragma option -Vx // Zero-length empty class member functions #pragma pack(push,8) #include <System.hpp> // Pascal unit #include <Sysinit.hpp> // Pascal unit #include <Windows.hpp> // Pascal unit #include <Messages.hpp> // Pascal unit #include <Classes.hpp> // Pascal unit #include <Sysutils.hpp> // Pascal unit #include <Inifiles.hpp> // Pascal unit #include <Registry.hpp> // Pascal unit

//-- user supplied -------------------------------

#ifdef UNICODE #define SetPortW SetPort #else #define SetPortA SetPort #endif

namespace Cport {