Color TFT screen in a Tektronix TDS500, 600 or 700  - Page 1
Forum section: electronics / testgear

author: nctnico
author_rank: Super Contributor
timestamp: June 14, 2012, 05:25:43 pm
content: These scopes often appear on Ebay with broken or bad screens. And even if the screen is working it gives me a headache... So I decided to replace CRT with a color TFT screen. A document called 'TDS520B component service manual' can be downloaded from Tektronix which contains the schematics of the controller board. There are several different controller boards but the schematics are 99% the same.The display system is basically a 640x480 VGA display. There is a catch though. There are two display planes. Which plane is active can be detected by the 5th display data bit (NDATA4). But that is not all... The scope uses different modes for normal and persistent display so the color palette needs to be changed depending on the mode. I didn't bother to see if there is a pin to determine the mode. It can be detected by keeping track which colors are used.Now the problem is to translate all this into signals a TFT display understands. A TFT display generally needs a clock, hsync, vsync, data enable and color data. I looked into several programmable logic solutions and found the Xilinx XL9500 series are cheap and up to the job. I've attached a schematic as a PDF. The PCB I made need some rewiring so I didn't attach that. Below is the VHDL code:Code:----------------------------------------------------------------------------------library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;use IEEE.numeric_std.all;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;--mode_color : in STD_LOGIC;-- mode_invert : in STD_LOGIC;entity lcdconv isPort ( pclk : in STD_LOGIC;vsync : in STD_LOGIC;hsync : in STD_LOGIC;ndata : in STD_LOGIC_VECTOR (4 downto 0);pixclk : out STD_LOGIC;r : out STD_LOGIC_VECTOR (2 downto 0);g : out STD_LOGIC_VECTOR (2 downto 0);b : out STD_LOGIC_VECTOR (2 downto 0);hs : out STD_LOGIC;vs : out STD_LOGIC;enab : out STD_LOGIC);end lcdconv;architecture Behavioral of lcdconv istype Tcolor_table is array(0 to 15) of integer;--Standard color table (used for text plane)--index 0=background--index 1=CH1 V/div--index 2=CH2 V/div--index 3=CH3 V/div--index 4=CH4 V/div--index 5=Ref--index 6=Math--index 7=All text, menus, time/div, trigger level, square brackets screen position--index 8=help backgroundv1.1--index 9=??--index 10=help textv1.1--index 11=graticule--index 12=??--index 13=Tek logo--index 14=Red stripe on Tek logo--index 15=??--text plane colors--0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15constant color_red : Tcolor_table:= (7, 6 ,0 ,0 ,6 ,6, 0, 1, 0, 7, 7, 5, 7, 0, 7, 0);constant color_green : Tcolor_table := (7, 0 ,3 ,5 ,3 ,6, 6, 1, 5, 4, 7, 5, 0, 3, 3, 0);constant color_blue : Tcolor_table:= (7, 0 ,6 ,5 ,6 ,0, 0, 1, 5, 4, 7, 5, 0, 7, 0, 0);--Signal color table (used for text plane)--index 0=background--index 1=CH1 non selected--index 2=CH2 non selected--index 3=CH3 non selected--index 4=CH4 non selected--index 5=Ref signal--index 6=Math signal--index 7=unused--index 8=unused--index 9=CH1 selected--index 10=CH2 selected--index 11=CH3 selected--index 12=CH4 selected--index 13=ref--index 14=math--index 15=collision-- 1 2 3 4 r m 1 2 3 4 r m--0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15constant color_red_sig : Tcolor_table:= (7, 6, 0 ,0 ,6 ,6, 0, 0, 4, 7, 2, 0, 7, 7, 0, 5);constant color_green_sig : Tcolor_table:= (7, 0 ,3 ,6 ,3 ,6, 6, 0, 4, 0, 4, 7, 4, 7, 7, 5);constant color_blue_sig : Tcolor_table:= (7, 0 ,6 ,6 ,6 ,0, 0, 7, 4, 0, 7, 7, 7, 0, 0, 5);-- Persistence color table (a rainbow)--0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15constant color_red_pers : Tcolor_table:= (7, 0 ,0 ,0 ,0 ,0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7);constant color_green_pers : Tcolor_table:= (7, 0 ,1 ,2 ,3 ,4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 0);constant color_blue_pers : Tcolor_table:= (7, 7 ,6 ,5 ,4 ,3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0);signal video_in_pos: std_logic_vector(4 downto 0);--video in positivesignal vsync_pos: std_logic;signal hsync_pos: std_logic;signal vsync_delayed: std_logic;--inverted vsync_pos delayed by 1 cyclesignal hsync_delayed: std_logic;--inverted hsync_pos delayed by 1 cyclesignal vsync_pulse: std_logic;--active for 1 cycle at the start of vsyncsignal hsync_pulse: std_logic;--active for 1 cycle at the start of vsyncsignal line_counter: std_logic_vector(8 downto 0);signal pixel_counter: std_logic_vector(9 downto 0);--counter used to detect whether the display is using 15 shades or 5 shadessignal shades_counter: std_logic_vector(3 downto 0);signal use_15_shades : std_logic;--1 if in persistent modesignal de_int: std_logic;--internal DE signalbegin--signal assignmentsvideo_in_pos <= ndata;vsync_pos <= not vsync;hsync_pos <= not hsync;enab <= de_int;pixclk <= pclk;--planes_out <= use_15_shades;main: process(pclk)beginif rising_edge(pclk) then--edge detector delayvsync_delayed <= not vsync_pos;hsync_delayed <= not hsync_pos;--egde detectorvsync_pulse <= vsync_pos and vsync_delayed;hsync_pulse <= hsync_pos and hsync_delayed;--line counterif vsync_pulse='1' thenline_counter <= (others=> '0');--reset--decrement shades counter for each refreshif shades_counter>0 thenshades_counter<=shades_counter-1;end if;elseif hsync_pulse='1' thenline_counter <= line_counter +1;end if;end if;--pixel counterif hsync_pulse='1' thenpixel_counter <= (others =>'0');elsepixel_counter <= pixel_counter +1;end if;if (line_counter>=27) and (line_counter<(480+27)) thenif (pixel_counter>=(40+96)) and (pixel_counter <(640+40+96)) thende_int <='1';elsede_int <='0';end if;elsede_int <='0';end if;if (video_in_pos(4)='1') and (de_int='1') then--The scope is drawing a pixel which is part of a signal trace.--Now detect if it is using 15 shades or 5 shadesif (video_in_pos(3 downto 0)=8) or (video_in_pos(3 downto 0)=7) thenif shades_counter<15 thenshades_counter<=shades_counter+1;--count up if not at the limitend if;end if;end if;--make the signal which defines the number of shades to useif shades_counter/=0 thenuse_15_shades <='1';elseuse_15_shades <='0';end if;--Create video output. This looks a bit obfusticated with the--loops but the loop is actually a way to use a signal (vector)--as an array index.if (video_in_pos(4)='1')then--drawing signal planeif use_15_shades='1' then--persistent modefor i in 0 to 15 loopif i=video_in_pos(3 downto 0) thenr<=std_logic_vector(to_unsigned(color_red_pers(i),r'length));g<=std_logic_vector(to_unsigned(color_green_pers(i),g'length));b<=std_logic_vector(to_unsigned(color_blue_pers(i),b'length));end if;end loop;else--signal colorsfor i in 0 to 15 loopif i=video_in_pos(3 downto 0) thenr<=std_logic_vector(to_unsigned(color_red_sig(i),r'length));g<=std_logic_vector(to_unsigned(color_green_sig(i),g'length));b<=std_logic_vector(to_unsigned(color_blue_sig(i),b'length));end if;end loop;end if;else--text planefor i in 0 to 15 loopif i=video_in_pos(3 downto 0) thenr<=std_logic_vector(to_unsigned(color_red(i),r'length));g<=std_logic_vector(to_unsigned(color_green(i),g'length));b<=std_logic_vector(to_unsigned(color_blue(i),b'length));end if;end loop;end if;--copy vsync and hsyncvs <= vsync;hs <= hsync;end if;end process;end Behavioral;The mechanical bit is a tricky. The display needs to be aligned so its is in the plastic opening. I used a sheet of 1.5mm aluminium which holds the backlight inverter and the PCB with the PLD. I used 5mm standoffs between the aluminium plate and the display to get to about the right height. Fortunately CRT screens have large mechanical tolerances so the front bezel is designed to deal with that.I've put some images on Imageshack:http://imageshack.us/g/854/img0482xd.jpg/These are the display and inverter I've used:http://www.ebay.com/itm/TOSHIBA-TFT-COLOR-LCD-DISPLAY-LTA065A041F-6-5-1-Stk-/310405207108http://www.ebay.com/itm/CCFL-Inverter-LXMG1617-05-41-Single-Lamp-3-5W-80KHz-10P-/310405208948The seller probably still has many of these displays and inverters. When I thought I'd bought the last one he relisted... The datasheets can be found on internet.

author: hobbs
author_rank: Contributor
timestamp: June 14, 2012, 06:07:24 pm
content: Very cute, Nico. You might want to license the design to some folks who do retrofits, e.g. Joerg's friends at Test Equipment Plus. I'm going to try cranking up the brightness on my TDS744A, and see how that lasts.CheersPhil Hobbs

author: nctnico
author_rank: Super Contributor
timestamp: June 14, 2012, 06:15:51 pm
content: I doubt you can do a commercial retrofit kit real cheap. I've been chasing after displays which should be available for a longer period but the ones you need for these kind of jobs are expensive to begin with and then there is the mechanical part and assembly work. Not even counting engineering time. I make my profits from the knowlegde I gainOTOH if you want a couple of 1000 you could have a Chinese produce a complete kit for $50.

author: free_electron
author_rank: Super Contributor
timestamp: June 14, 2012, 08:44:15 pm
content: nice hack.The plane control signal actually controls a shutter that is mounted in front of the display tube on the color screens. they alternate between text and graphics and drive the shutter to show the correct colors. funny technique..

author: nctnico
author_rank: Super Contributor
timestamp: June 14, 2012, 10:04:15 pm
content: Quote from: free_electron on June 14, 2012, 08:44:15 pmNo, it does notBecause monochrome CRTs are less fragile than color CRTs Tektronix decided to use the NuColor display system. There is an RGB shutter in front of the CRT. Colors are made by displaying 3 images sequentially. One for the red channel, one for the green channel and one for the blue channel. This also means that the display is working at 180Hz (3*60Hz). The color scopes have an extra piece of memory which stores the color image for the three color channels. A RAMDAC generates the color display signal from that memory in sync with the shutter. The whole NuColor output seems to be added later in the design stage because it is clearly piggy-backed on top of the display system which already has a color RAMDAC for the VGA output on the back of most scopes. FWIW: the monochrome versions have a neat feature which displays the previous trace at lower intensity. The color scopes don't have that.More information on the NuColor display is here:http://www2.electronicproducts.com/Oscilloscope_makers_ride_the_color_bandwagon-article-OL3-apr1993-html.aspx

author: Lukas
author_rank: Frequent Contributor
timestamp: June 14, 2012, 10:27:29 pm
content: There've also been analog colour scopes around back then.http://www.i9t.net/5000_images/5116.jpgAmazing technique.

author: free_electron
author_rank: Super Contributor
timestamp: June 15, 2012, 03:53:38 am
content: Ah yes. Thats what i meant. I remember they were pulling a trick with a monochrome tube amd a shitter to create a color tube.The shutters would eventually die.... And the colors went all wonky....Anyway. I don't touch 'Trektopnix' scopes anymore....

author: amyk
author_rank: Super Contributor
timestamp: June 15, 2012, 08:37:13 am
content: Could something useful be put in the space where the tube used to be?

author: Lukas
author_rank: Frequent Contributor
timestamp: June 15, 2012, 03:50:31 pm
content: Quote from: amyk on June 15, 2012, 08:37:13 amWhat about making a cutout in the top cover and adding a lunch/toolbox?

author: free_electron
author_rank: Super Contributor
timestamp: June 15, 2012, 03:54:03 pm
content: stick a pack of C4 in it ... that may be fun. anything to get rid of these disaster scopes

author: krivx
author_rank: Frequent Contributor
timestamp: June 15, 2012, 03:59:30 pm
content: I guess the high voltage power supplies can also be eliminated? This could be very useful to make older equipment more portable, is the weight reduction significant?

author: mikeselectricstuff
author_rank: Super Contributor
timestamp: June 15, 2012, 04:06:54 pm
content: Quote from: krivx on June 15, 2012, 03:59:30 pmWell you'd be removing some vacuum so the weight reduction from removing the tube wouldn't be quite as much as you might hope

author: krivx
author_rank: Frequent Contributor
timestamp: June 15, 2012, 04:17:08 pm
content: Quote from: mikeselectricstuff on June 15, 2012, 04:06:54 pmJust like when I drop a lightbulb and it floats up to the ceiling

author: free_electron
author_rank: Super Contributor
timestamp: June 15, 2012, 04:49:23 pm
content: you scale down the turbojet fan in those things.... then agian , i'm not sure the majority of the heat comes from the tv monitor...Those scopes are NOISY. and if you happen to sit next to one's exhaust it's like sitting in a stream of air from a hair dryer ...

author: nctnico
author_rank: Super Contributor
timestamp: June 15, 2012, 05:51:20 pm
content: Quote from: krivx on June 15, 2012, 03:59:30 pmI also removed the CRT driver board from my scopes as well. The noise from these scopes ain't too bad. Modern ones have a 120mm temperature controlled fan. The older ones have a special 156mm low noise fan. Anyway, these scopes go for around $1000 (about half for one with a bad screen) which is hard to beat to get a 4 channel 500MHz scope.

author: T4P
author_rank: Super Contributor
timestamp: June 15, 2012, 09:08:57 pm
content: Quote from: nctnico on June 15, 2012, 05:51:20 pmWith a turbojet for a fan, the last time i used a trektopnix i forever vowed to stay away

author: Walkerru
author_rank: Newbie
timestamp: April 08, 2025, 12:00:37 pm
content: Hello!Can anyone share the images from the first post, i.e. fromhttp://imageshack.us/g/854/img0482xd.jpg/?They are not at that address