2022년 6월 8일 수요일

SDI 모니터 , 방송용 모니터 교육자료

 이번장에서는 방송용 모니터의 간단한 소개와 역사, 종류에 대해서 교육자료로 만들어 보았다.

( PDF로 작성된 자료 다운로드는 : https://blog.naver.com/zaszas2345/221597442553 )


방송용 모니터는 주로 방송국에서 사용되던 모니터인데, 일반인들이 접근하기에는 어려운 환경적인 부분과, 방송용 모니터에 들어가는 기능들을 눈으로 확인할수 있는 자료라고 생각한다.

설명은....

1. SDI 모니터의 현재 상황과 역사

2. Video 종류

3. HD-SDI란?

4. SMPTE Format

5. 방송모니터 종류

6. Monitor Front

7. Monitor Rear

8. Main Features

9. Data Ports

10. 방송모니터 OSD

11. Color Calibration

12. Waveform/Vector

13. Audio Level Meeter

14. Marker & Safety Area

15. False Color

16. Y Clip Guide

17. Focus & Histogram

18. Closed Caption

의 순서로 이루어져 있고, 설명으로는 방대한 내용이기 때문에 방송용 모니터에 있어야 하는 기능들이 뭐가 있는지? 그 기능들이 실제로 어떻게 동작되서 보이는지 위주로 내용 정리가 되어있다.

본 내용을 보고 방송용 모니터와 일반 모니터의 차이점이나 방송용 모니터에 들어가는 기능들이 어떤게 있는지 확인할수 있는 자료가 됐으면 한다.

모니터 감마(Gamma), 색온도(Color Temp)

 

이번장에서는 모니터에서는 항상 같이 쫒아다니는 하지만 일반적으로 내용이 어려울수가 있는 감마(gamma), 색온도(White Balance)에 대해서 이야기를 해보고자 한다.

기본적으로 내용을 전문가 수준으로 설명하기에는 내용이 너무 방대하고 나또한 어렵기때문에, 최대한 쉽게 개념 위주로 모니터를 토대로 설명하고자 한다.

먼저 감마와 색온도에 대해서 그동안 내가 했던 방송용모니터나 의료용모니터 제품을 토대로 정의를 쉽게 내린다고 하면 아래와 같고, 이러한 감마와 색온도를 조정하는 작업을 모니터에서는 Color Calibration 작업이라고 한다.

감마(gamma) : 0% ~ 100% 까지 Black에서 최대 밝기까지의 단계를 어떤 형태로 볼것인지를 선택.

색온도(White balance) : White Patten을 R,G,B값을 이용하여 원하는 색좌표를 선택.

여기서 모니터 Calibration시 감마와 색온도의 역할이 조금씩 다른데 그 차이를 알아보겠다.

감마 : 어두운 부분부터 밝은 부분까지의 전체적인 구간을 어떻게 볼것인지 선택이고, 주로 우리가 보는 모니터의 경우는 2.2 감마 곡선을 사용하고, 의료용이나 다른 특정 분야에서는 그 분야에 맞는 곡선을 사용한다.

하지만 특정 한 구간만 원하는 형태로 보고자 한다면 전체적인 영상의 밝기 밸런스가 무너지기 때문에 감마 곡선을 이용하여 전체적인 밸런스를 우리가 보기 편하게 만들어준다.

그리고, 감마를 조정하기 위해서는 Look-up table 이라고 하는 메모리 구조를 사용하는데 특정 입력값에 대해 정해진값으로 바로 변환해주는 방식이라고 생각하면 된다.








위 사진은 (1) 영상 데이타를 LUT 를 이용하여 Linear한 값을 적용했을때 동일하게 나오는 (2)영상과 LUT값에 동일한 값을 규칙적으로 적용하고, 이 LUT를 사용했을때 나오는 (3)영상을 보여주고 있다.

아래 표는 위 영상에 대한 LUT값이 실제 적용됐을때의 값을 보여주고 있다.












위 (1) -> (2) LUT가 적용됐을때는 동일한 값이 동일한 출력으로 나가지만, 오른쪽에 있는 (1)->(3)LUT가 적용됐을때는 입력이 0,1,2 가 들어와도 출력은 동일한 '0' 으로 나가게 된다.

이 부분을 영상에서 확대하여 보면 아래와 같이 보인다.







색온도 : 일반적으로 감마를 먼저 맞추고 나서 이후에는 색온도를 Calibration하는 작업을 하는데 색온도는 보편적으로 R,G,B Gain을 사용하여 내가 원하는 색의 온도를 맞추는 작업이다.

우리가 형광등을 고를때 약간 붉은색 또는 푸른색을 선택하듯이 형광등이나 LED에도 색온도가 존재하고, 모니터에도 존재한다.

일반적으로 가장 많이 사용하는 색온도는 6500K를 사용하지만 사용 환경이나 분야에 따라서 5000K ~ 9000K 내에서 많이 사용하고 경우에 따라서는 이 범위를 벗어난 수치도 사용한다.

6500K 정도가 우리가 일반적으로 보는 경우라고 하면 이 수치에서 낮아질수록 전체적으로 붉어지고, 수치가 올라갈수록 푸른색이 된다.

아래 그림을 보면 우리가 표현하는 색 공간이고, 그 색 공간안에서 색온도에 따라서 전체적인 색은 붉은색과 푸른색쪽으로 움직이는것을 알수 있다. 그리고, 그 색온도를 이야기하는 좌표가 X 좌표, Y좌표를 가지고도 이야기한다.

X(0.3127) , Y(0.3290) = 6500K 를 이야기한다.











모니터를 한대만 볼경우에는 User가 임의대로 메뉴를 수정후 어느정도까지는 사용할수도 있겠지만 수십대의 모니터를 같이 볼경우에는 각각의 모니터를 정해진 기준으로 Calibration하여 봐야지만 모니터간의 편차를 줄이고,동일한 색감과 원하는 Gamma로 볼수가 있다.

모니터가 동일 제조사 동일 모델명이라고 하더라도 모니터 보드쪽에서 Calibration을 하지 않는경우에는 편차가 생각보다 심하게 나기때문에 전혀 다른 색감으로 볼수밖에 없다.

경우에 따라서 패널 자체적으로 감마가 내가 원하는 감마로 잘 나올경우 색온도 Calibration만 하는 경우도 있다.

다음편에는 실제로 의료용모니터중에서 초음파, 내시경 모니터에 적용한 보드를 이용하여 Calibration한 동영상을 가지고 설명을 하도록 하겠다.

FPGA관련 정보, 영상 신호 이론, 하드웨어 관련 더 많은 정보는 하기 네이버 블로그에 있습니다.   https://blog.naver.com/zaszas2345



블루투스 HC-05사용하기



이번에는 블루투스 모듈 HC-05 2개로 서로 통신을 해보자.

이번에 블루투스 통신을 해보고 싶어서 인터넷을 찾아보니 HC-05, HC-06 이라는 모듈을 많이 사용하는걸로 보여지고 가격도 꽤 저렴해서 한번 자료조사를 해봤다. HC-05는 Master,Slave 기능이 둘다 되고 HC-06의 경우 Slave만 된다고 한다.

(어떤 글에서는 HC-06도 버젼에 따라서 Master,Slave둘다 된다고 하기도 한다.)

그리고, 통신 속도와 STATE상태 핀이 나와있냐 안나와있냐가 조금 다르다.

HC-05 : 38400,N,8,1 , 통신 마지막에 추가 Data("Both NL&CR")가 있다.

HC-06 : 9600,N,8,1 , 통신 마지막에 추가 Data가 없다.

여기서 추가 Data의 경우 통신 Tool에서 지원이 되면 Both NL&CR 을 선택해주면 되고, 없다면 사용자가 직접 넣어줘야 한다. 이 부분은 모듈 셋팅시 마지막에 항상 넣어줘야 하고, 셋팅완료후 모듈간에 통신을 할때는 있으면 통신 창에서 라인이 바뀌어서 나오고 없으면 그냥 데이타가 이어서 보여진다. 그리고, 통신 속도의 경우 사용자가 셋팅시 명령어로 통신 속도를 바꿔줄수 있는데 이는 사용자가 통신할때 통신 속도이지 블루투스 모듈 셋팅을 할때는 통신속도를 HC-05 (38400)으로 해줘야 한다.

우선 둘다 Master,Slave가 가능한 HC-05를 두개 인터넷으로 주문을 하고 드뎌 도착했다. HC-05나 HC-06이나 기본 셋팅법은 동일하니 이 내용을 참고하여 HC-06사용시 활용하면 된다. HC-06과 HC-05 셋팅 명령어가 다른 부분을 확인.






보드 앞을 보면 패턴 안테나가 있고, 뒷면을 보니 사용자가 사용가능한 핀들이 친절히 표시되어있다.

여기서 사용자가 사용할 핀들은 RXD,TXD,GND,VCC이고 모듈 셋팅을 해주기 위해서 EN핀을 사용해야 한다. 모듈 셋팅시 High가 되어있어야 셋팅이 가능하고, 셋팅이 끝나고 사용할때는 EN핀을 OPEN으로 해두면 된다.

PC로 셋팅을 하기 위해서 집에 있는 보드를 찾아보니 USB to UART통신 컨버터가 있어서 이 보드를 이용해서 PC와 연결해보기로 했다.
















위와 같이 2개를 만들었다. 이제 PC에 저 USB단자를 연결해서 셋팅해보자.













왼쪽 그림과 같이 EN핀 High를 주고 셋팅을 하였다.

여기서 오른쪽 그림의 LED가 모듈 상태에 따라서 켜지는 속도가 달라지는것을 알수있다.

1. LED 깜빡이는 속도가 3초간 ON/OFF : EN핀 High로 줬을때 모듈을 셋팅할수 있는 상태. 모듈 셋팅을 위해서는 이 LED상태를 확인하자. 참고로 EN핀을 사용하지 않을때는 전원을 넣기 전에 모듈에 있는 스위치를 누르고 있다가 전원 넣고 2~3초후에 스위치에서 손을 띄고 사용해도 된다. (근데, 누군가 스위치로 셋팅시 Full로 셋팅을 못한다는 이야기도 있어서 우선 확실히 하는걸로 선택했다)

2. 셋팅후 둘이 페어링이 되면 약 2초간 OFF에서 빠른 속도로 2번 ON이 되고 다시 OFF됨. (이 순서로 반복되면 2개의 모듈이 연결이 잘 됐다고 보면 된다.)

3. 연결이 안됐을때는 Slave는 지속적으로 빠른 속도로 LED가 깜빡이고 Master는 LED가 2번과 같이 반복하는데 좀더 빠르게 동작하는 걸로 보여진다.

이제 PC에 연결하였을때 연결된 PC Port를 확인하고, 통신 프로그램을 이용하여 셋팅을 먼저 해보자. 여기서는 http://blog.daum.net/pg365/276 이라는 블로그에서 친절히 자기가 개발한 프로그램을 올려주셔서 이 프로그램을 사용해봤다.








프로그램을 실행하여 Connect를 누르고 Serial 셋팅을 하였다. 연결 포트와 통신 속도 38400을 선택.








이후에 AT , at 대소문자 구분은 안하는걸로 보여진다. 이 명령어를 보냈을때 OK라는 데이타가 와야 셋팅이 가능한 상태가 된다. 위에 이야기 했듯이 오른쪽 종료 버튼 위에 보면 뒤에 붙이기 (\r\n) 을 넣어주었다.

아니면 통신 Tool에서 (both nl&cr)을 선택해주는게 있다거나 Hex로 0x0D,0x0A를 주면 된다.

1. both nl&cr

2. 0x0D 0x0A

3. \r\n

위 3가지모두 동일한 데이타를 전송하는거다. 이는 모듈 셋팅할때 필요하다.










위와 같이 at 라는 데이타를 보내면 OK가 모듈에서 데이타가 와야 한다. 이제 모듈과 PC가 연결이 되었고, 명령어로 셋팅을 할수 있다. 가끔 통신을 하다보니 그전 상태가 뭔가 안좋을때는 OK가 아니라 ERROR:[0]이라는 문구가 오는데 다시 정상적인 데이타를 보내면 OK가 온다.





버전을 확인하는 명령어를 보냈더니 2.0 버젼과 날짜가 오고, OK가 온다.

이리 저리 셋팅을 처음하는거라 한대는 Master로 하고, 다른 한대는 Slave로 해서 2개의 HC-05 끼리 통신을 시켜보니 서로 페어링이 안돼서 처음부터 다시 셋팅을 해봤다.

한대는 Master로

at

at+init

at+role=1

at+pswd=2345

at+uart=9600,0,0

at+cmode=1

또다른 한대는 Slave로 at+role = 1 을 '0' 으로 바꿔서

at

at+init

at+role=0

at+pswd=2345

at+uart=9600,0,0

at+cmode=1

각순서대로 설명하면

at (기본 연결됐는지 확인용)

at+init (기존 통신 연결상태를 모두 지우는 명령)

at+role=1 ( '1'로주면 Master, '0' 주면 Slave)

at+pswd=2345 (패스워드)

at+uart=9600,0,0 (통신속도)

at+cmode=1 (모든 Address장비와 통신)

위와 같이 순서대로 셋팅을 해서 EN핀을 다시 OPEN해주고 2개의 USB를 PC로 연결하니 페어링은 되어서 LED가 주기적으로 2번 깜빡이는게 보인다.

다시 통신 창을 열어서 데이타를 주고 받아보니 된다.






한쪽은 \r\n을 넣어주고, 한쪽은 안넣어주고 서로 데이타를 주고 받을때 통신창에 나타나는 메세지가 어떻게 다르게 보여지는지 알수 있다.

HC-05명령어를 더 보고 싶으면 하기 사이트에 들어가면 된다.

http://www.linotux.ch/arduino/HC-0305_serial_module_AT_commamd_set_201104_revised.pdf

아래 보면 AT Command에 \r\n 을 주라는 내용도 있다.











HC-05, HC-06의 명령어 참고시 다른 사이트도 많고, 하기 사이트에도 있다.

https://blog.naver.com/wararat/220457318826

http://www.martyncurrey.com/arduino-and-hc-06-zs-040/

이상으로 HC-05 블루투스 모듈을 이용하여 통신하는걸 해봤다.

FPGA관련 정보, 영상 신호 이론, 하드웨어 관련 더 많은 정보는 하기 네이버 블로그에 있습니다. https://blog.naver.com/zaszas2345



2020년 12월 21일 월요일

VIVADO에서 LVDS, DDR I/O 사용하기

 

우리가 FPGA를 사용하다 보면 디지털 I/O 입력으로 LVDS입력을 받거나, DDR방식으로 입력을 받아 처리를 해야 할때가 종종있다. 주로 고속 인터페이스 신호일 때 사용하는데 Xillinx 사의 VIVADO Tool 을 사용해서 개발할 때 한번 알아보도록 하자.

(이 내용은 기본적인 VIVADO 프로젝트를 만들어 사용할줄 아는 전제하에 시작하는 거니 잘모를때는 VIVADO 사용란에 있는 문서를 먼저 봐야한다.)

I/O 관련된 매뉴얼은 Xillinx 홈페이지에 가서 “ug471_7Series_SelectIO” 문서를 찾아보면 된다.

1) LVDS 입력을 위해서 하기 블록을 보자.


위 그림에서 보면 LVDS RX블럭의 “A” 블럭을 설정해주어야 이후에 나오는 “B” 블럭부터 기존에 Single Signal형태의 신호를 가지고 사용자가 코드를 구현할수 있다.

2) DDR 방식의 입력은 CLK의 High, Low 두개의 타이밍에 각각 다른 데이타가 들어오는 것을 말하는데 우리가 사용할때는 CLK의 Rising Timing에 2개의 데이타를 만들어서 사용하는작업을 해주어야 한다.



위 그림을 보면 C (clk) High, Low 타이밍에 D0, D1, D2, … 데이터가 들어오는 것을 Q1,Q2 로 분리하여 같은 CLK Timing으로 만들어 사용한다.

이제 위 설정들을 어떻게 해주어야 하는지 확인해보자.



프로젝트를 만들고 XDC에 LVDS CLK과 DATA를 위와 같이 각각 설정해주어야 한다. 대체로 LVDS는 IO STANDARD가 LVDS_25 이다.

프로젝트 설정이 완료된후 LVDS I/O 입력처리를 위해서 Templates를 이용해야 한다.

사용자 프로젝트 코드에

Library UNISIM;

use UNISIM.vcomponents.all;

위 2줄이 있어야 Templastes를 사용할수 있고, IBUFDS를 찾아서 사용하면 된다. Templastes는 Component와 같이 선언해주지 않고 바로 사용이 가능하다.

LVDS to Single은 아래와 같이 IBUFDS를 사용하면 되고, 사용자는 O에 연결된 Single Signal 사용이 가능하다.

u0 : IBUFDS port map ( O => lvds_clk, I => clk_p, IB => clk_n);

u1 : IBUFDS port map ( O => lvds_ch1, I => ch1_p, IB => ch1_n);

이제 LVDS로 들어온 (clk_p, clk_n) (ch1_p, ch1_n) 신호를 lvds_clk , lvds_ch1 처럼 한 개의 신호로 만들었다. 일반적인 신호는 이 상태에서 사용자가 코드 작성을 하면 된다.

만약 DDR방식으로 들어온 LVDS라고 하면 한단계를 더 거쳐야 한다.

IDDR을 Templates에서 찾아보자.


위와 같이 IDDR을 사용해서 lvds_clk 과 lvds_ch1의 clk, data DDR방식을 같은 타이밍에 2개의 데이터를 만들어서 사용할수 있다.

여기서 사용자가 선택해주어야 할 것은 DDR_CLK_EDGE이다.

총3개의 “OPPOSITE_EDGE” , “SAME_EDGE”, “SAME_EDGE_PIPELINED” 가있다.


자세한 내용은 “ug471_7Series_SelectIO” 문서를 보면 나와있다.

이제 위와 같은 방식으로 LVDS, DDR방식의 신호를 사용할수 있다.


RTL로 나온 로직을 보면 IBUFDS를 통한 DATA,CLK이 IDDR로 들어가서 Q1,Q2로 나오는것을 볼수 있다.

FPGA관련 정보, 영상 신호 이론, 하드웨어 관련 더 많은 정보는 하기 네이버 블로그에 있습니다. https://blog.naver.com/zaszas2345