첨부파일:

 

TTL&CMOS[1].pdf

+3.3V DSP 레벨의 신호를 +5V TTL에 접속하는 방법

[출처] +3.3V DSP 레벨의 신호를 +5V TTL에 접속하는 방법|작성자 어리버리

 

이번에는 반대로 DSP의 3.3V 출력신호를 5V 논리소자에 입력으로 접속하는 방법을 요약하여 설명하고자 한다.

(1) 3.3V CMOS형의 DSP 출력을 5V TTL 입력에 접속하는 경우 - <그림 1>
이 경우는 CMOS의 출력이 TTL과 원천적으로 잘 매치되므로 별다른 방법을 사용하지 않고 그대로 접속하면 된다. 이것은 TTL의 입력에서 최대 L상태 전압 Vil=0.8V이고 최소 H상태 전압 Vih=2.4V인데 비하여 3.3V CMOS의 출력에서 최대 L상태 전압 Vol=0.4V이고 최소 H상태 전압 Voh=2.8V로서 TTL의 입력조건을 만족하기 때문이다.

(2) 3.3V CMOS형의 DSP 출력을 5V CMOS 입력에 접속하는 경우 - <그림 2>
이 경우는 3.3V CMOS의 출력을 5V CMOS의 입력 레벨에 맞도록 시프트시켜 주어야 한다. 5V CMOS의 입력은 최대 L상태 전압 Vil=1.0V이고 최소 H상태 전압 Vih=3.5V일 것을 필요로 한다. 그러나, 3.3V CMOS의 출력단에 R1=10kΩ를 접속한 상태에서는 최대 L상태 전압 Vol=0.2V이고 최소 H상태 전압 Voh=3.3V로서 5V CMOS의 입력레벨을 만족시키지 못한다.
따라서, 이를 위의 <그림 2>처럼 다이오드 D1으로 레벨 시프트시키면 출력전압이 약 0.6V 정도 상승되어 0.8V 및 3.9V의 범위에서 스윙(swing)하게 되고, 이것은 5V CMOS의 입력조건을 만족하게 된다. 그러나, 당연히 이는 신호의 상승시간 지연을 야기한다.

(3) 3.3V CMOS형의 DSP 출력을 바이폴라 트랜지스터나 MOSFET 입력에 접속하는 경우 - <그림 3, 4>
바이폴라 트랜지스터를 구동하는 것은 앞단의 출력이 3.3V 로직이든지 5V 로직이든지 동일하다. 즉, 구동하려는 트래지스터의 전류증폭률을 고려하여 적절한 베이스 전류를 흘려주면 되므로 <그림 3>에서와 같이 베이스 저항값을 적절히 선정하여 사용하면 된다.
그러나, MOSFET를 구동하는 경우에는 대부분의 MOSFET가 필요로 하는 게이트 전압이 3.3V를 넘으므로 특별한 방법이 필요하다. 가장 간편하게 이 문제를 해결하는 것은 <그림 4>에서와 같이 74HCT04나 74HCT240과 같은 5V CMOS 버퍼를 사용하여 3.3V 레벨의 출력을 5V 레벨의 출력으로 변환하는 것이다.

<참고자료> TI사의 Application Report : 3.3V DSP for Digital Motor Control

< 결론 정리 >

5V 출력 신호가 DSP의 3.3V IO port 에 입력되는 경우는 아래와 같이 크게 4가지 경우로 나눌 수 있다.

 

DSP의 3.3V IO port 에 입력되는

5V 출력 신호의 종류

 solution

 ① 5V TTL 출력

 

 단점: 저항이 커지면 RC 회로에 의한 시간지연이 커짐

 ② 5V CMOS 출력  

 분압회로를 이용하여  입력신호를 약 2.9V 이하로 drop

 ③ open-collector  

풀업 저항 사용

 ④ open-drain  

풀업 저항 사용

 

 

< 첨부파일 >

TEXAS INSTRUMENTS - Application Reports (SPRA550)

3.3V DSP for Digital Motor Control

======================================================================

+5V TTL 레벨의 신호를 +3.3V형의 DSP에 접속하는 방법

[출처] +5V TTL 레벨의 신호를 +3.3V형의 DSP에 접속하는 방법|작성자 어리버리

 

 

마이크로프로세서가 처음 등장하였을 때부터 최근까지는 마이크로프로세서 및 그 주변회로에 모두 +5V 전압을 기본으로 하는 로직회로가 사용되었다. 그러나, 최근에 이르러 일반 마이크로프로세서에서는 물론 DSP 분야까지도 3.3V의 저전압에서 동작하는 방식이 점차 많아지고 있으며, 심지어는 1.8V형 소자까지 개발되고 있다. 물론 이렇게 저전압 논리소자를 사용하는 것은 소비전력을 감소시킬 수 있는 장점 때문이다. 물론 이러한 저전압형 마이크로프로세서를 전력제어나 서보제어에 응용하는 경우에는 잡음 여유(noise margin)이 작아지므로 불리할 수도 있으나 이는 여러가지 방법으로 극복될 수 있다.
이에 따라 마이크로프로세서의 주변회로를 구성하는 소자들도 이러한 소자에 문제없이 접속될 수 있도록 3.3V형이 개발되고 있으나, 아직은 그 종류가 많지 않으므로 때로는 5V로 동작하는 논리소자(TTL 또는 CMOS)와 3.3V로 동작하는 논리소자(DSP)를 직접 인터페이스하게 되는 경우가 있다. 이러한 경우에는 양측의 전압차에 의하여 회로적으로 문제가 되지 않도록 세심하게 설계하여 접속하지 않으면 시스템의 동작이나 수명에 큰 영향을 미칠 수 있다.
여기서는 이렇게 5V 논리소자와 3.3V 논리소자를 접속하는 경우에 여러가지의 상황에 따라서 올바르게 처리해 주는 방법을 요약하여 설명하고자 한다.

(1) 5V TTL 출력을 3.3V CMOS형의 DSP 입력에 접속하는 경우 - <그림 1>
TTL이 허용가능한 최대 전원전압 5.25V에서 동작할 때 무부하에서 약 4.05V의 H상태 출력전압을 나타내며, 정격부하에서는 약 3.4V가 된다. 한편, 3.3V형의 DSP에는 최대로 허용되는 H상태의 입력신호가 Vcc + 0.3V이며, 따라서 Vcc가 가장 낮은 3.0V일 경우에 TTL 출력과 DSP 입력에서의 H상태 전압차는 최대 0.75V에 이른다.
이로부터 만약 입력신호의 전류를 75uA 이하로 억제하려면 TTL 출력과 DSP의 입력단 사이에는 10kΩ의 저항을 직렬로 삽입해야 한다. 그러나, 이것은 신호의 RC 지연을 야기하며, 이 값은 DSP의 입력단 정전용량이 5pF라면 10K×5pF = 50nS에 이른다. 이와 같이 저항이 커지면 전류값은 억제되나 신호의 시간지연이 커지고 내잡음성이 나빠진다.

(2) 5V CMOS 출력을 3.3V CMOS형의 DSP 입력에 접속하는 경우 - <그림 2>
CMOS가 허용가능한 최대 전원전압 5.25V에서 동작할 때 무부하에서 약 5.25V의 H상태 출력전압을 나타내며, 따라서 Vcc가 가장 낮은 3.0V일 경우에 TTL 출력과 DSP 입력에서의 H상태 전압차는 최대 1.95V에 이른다.
이로부터 입력신호를 3.3V 이하로 억제하려면 저항에 의한 분압회로를 사용하는 것이 바람직하다. 이것을 그림 2에서와 같이 R1=18K, R2=22K로 구성하면 입력신호는 약 2.9V 이하로 억제된다.

(3) 개방 콜렉터 또는 개방 드레인 출력을 3.3V CMOS형의 DSP 입력에 접속하는 경우 - <그림 3, 4>
개방 콜렉터(open-collector)형의 TTL이나 개방 드레인(open-drain)형의 CMOS 출력을 3.3VDSP에 접속하는 경우는 풀업저항을 3.3V의 전원에 접속하면 간단히 해결된다. 이 경우에도 풀업저항을 크게하면 입력신호의 상승시간(rising time)이 느려진다.

<참고자료> TI사의 Application Report : 3.3V DSP for Digital Motor Control

출처 :

While Google SketchUp is not a professional CAD tool it has the advantage of being free and, because of that, it is used by a large number of people. Recently, some of my customers where asked by their own customers to supply SolidWorks models for review in Sketch-up format.

There is one problem with this request – none of file formats that SolidWorks can export to are on the Sketch-Up import list. There are commercial converters from SolidWorks to Sketch-up but they come at a cost.

Fortunately, we found a way to exchange data between SolidWorks and SketchUp - just follow this workflow:

1. Save your SolidWorks model as ACIS (.SAT extension).

Save as ACIS

Note: Make sure that the Options are set as per this image:

Save as ACIS Options

2. Open DraftSight. If you have not installed this free 2D Editor, please use this link for doing so:

Download DraftSight

3. In DraftSight’s command line type: “IMPORTSAT” and press <ENTER>. Locate the ACIS file you saved at step #1 and import it in DraftSight.

Import the ACIS file in DraftSight

4. Save this file again in DWG format.

5. Open SketchUp

6. Import the DWG file you saved at STEP #4.

Import DWG into SketchUp

7. That’s all. You have successfully imported your SolidWorks model into SketchUp.

Congratulations! You did it!

리소스 보기에서 해당 Dialog 를 선택하고

단축키 : ctl+D

설정은 1번 부터 순서대로 눌러주면 순서가 바뀌면서 설정된다.

다시 ctl+D 를 누르면 보기/설정 이 종료된다.

 

현재 Class 를 보면 다음과 같이 기본 Class 만 존재하고 있다.

 

여기에, 기존에 클래스로 만들어놓은 소스 및 헤더 파일을 불러와서 Class 를 추가해 보자.

 

 

1.    솔루션 보기로 가서

프로젝트네임을 우클릭 -> 추가 -> 새 필터

 

 

2.    새 필터를 만들고 이름을 넣어준다.

 

 

3.    새 필터를 우클릭 -> 추가 -> 기존항목 을 선택하고

추가하고자 하는 클래스에 관련된 모든 소스파일과 헤더파일을 선택해서 등록한다.

 

 

4.    이제 클래스 뷰로 가보면 새로운 Class 들이 추가된 것을 볼 수 있다.

 

 

5.    이를 C______Dlg (여기선, CaddclasstestDlg) 에서 사용하기 위해서는

Dlg 의 header file 에서

사용하고자 하는 header fille을 include 시켜주고 사용하면 된다.

 

 

1. 전역으로 Thread 작업 함수 선언

UINT ThreadTaskFunc(LPVOID pParam);

 

 

2. Thread 작업 함수에 다음 code를 기본적으로 작성

UINT ThreadTaskFunc(LPVOID pParam)

{

//본 함수는 전역함수 이므로, Dialog Class 의 멤버에 접근하기 위한 포인터 선언

// 이후, pDlg-> 를 사용하여 Dialog 의 멤버에 접근 가능하다.

CProjectDlg* pDlg = (CProjectDlg*)pParam;

 

// 추후, thread 를 안정적으로 종료시키기 위해 m_flag_threadrun 를 Flase 로 만듦.

while(pDlg->m_flag_threadrun)

{

//Thread 작업

}

 

return 0;

}

 

 

3. Thread 시작

// m_flag_threadrun : Dialog class에 정의된 멤버변수

// m_pThread : thread 의 pointer

// CWinThread* m_pThread;

 

//thread 작업 함수가 while() 로 계속 돌아가도록 함.

m_flag_threadrun=TRUE;

 

//thread 시작

m_pThread=AfxBeginThread(ThreadTaskFunc,this);

if(m_pThread==NULL)

{

AfxMessageBox("ERROR: Failed to begin thread");

return;

}

 

 

4. thread 종료

//thread 종료 flag

m_flag_threadrun=FALSE;

 

//thread 가 종료 될 때 까지 기다림

WaitForSingleObject( m_pThread->m_hThread, INFINITE );

 

 

5. 프로그램이 종료 되는 시점에서 thread 종료 code 추가

DestroyWindow() 를 재정의 하고 (Dlg 클래스에서, 속성창에서, 재정의, DestroyWindow

생성된 재정의 함수에 아래 code추가

 

if(m_flag_threadrun=TRUE)

{

[4. thread 종료] 참고

}

 

출처 :  http://blog.naver.com/kansapa?Redirect=Log&logNo=100065520198

 


  • %c 문자
  • %C %c
  • %s 문자열
  • %p 포인터값 16진수
  • %d 10진수 부호있는 정수
  • %i %d
  • %u 10진수 부호없는 정수
  • %f 부동소수점 실수 소수 표현 무한수를 표현할 때 소문자 표현
  • %F %f 무한수를 표현할 때 대문자 표현
  • %e 부동소수점 실수 지수 표현
  • %E %e e 대신 E 로 출력
  • %g 크기가 작으면 %f, 크기가 크면 %e
  • %G 크기가 작으면 %f, 크기가 크면 %E
  • %x 16진수 정수 소문자 0 ~ 9,a,b,c,d,e,f
  • %X 16진수 정수 대문자 0 ~ 9,A,B,C,D,E,F
  • %o 8진수 정수
  • %n Print nothing, but write number of characters successfully written so far into an integer pointer parameter.
  • %% % 출력

References
  1. Printf, http://en.wikipedia.org/wiki/Printf
  2. Printf, http://www.cplusplus.com/reference/clibrary/cstdio/printf/
  3. printf의 format(type정리), http://wwwi.tistory.com/99

 

 

사용예---------

display.Format(_T("data2    :0x%8X"),received_dworddata[2]);

-> data2    :0x????????      (8자리 HEX code 로 출력된다.)

button 의 caption text 가져와서

button 에 표시되는 text를 toggle 시키는데 유용하게 사용 할 수 있다.

 

CButton m_bt; //해당 버튼 컨트롤러에 대한 멤버변수

CString str="";
m_bt.GetWindowText(str);

 

str에 해당 버튼의 현재 caption 을 가져온다.

 

사용예--------

해당 버튼의 OnBnClick 이벤트 처리 함수에서

 if(str=="Start") //thread 시작
 {
    m_bt.SetWindowTextA("Stop");
 }
 else     //thread 종료
 {
    m_bt.SetWindowTextA("Start");
 }

결론 : \ 를 붙이고 다음줄에 코딩을 이어서 하면 된다.

 

\가 필요없는 경우는?

함수의 parameter, 연산식 등

ex) function(int a, int b,

int c, int d)

{

}

ex) func(a,b,

c,d);

 

ex) result = a + b

+ c + d;

+ Recent posts