A "new" device at my workbench :-)
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
A "new" device at my workbench :-)
For my retro computer project I got an used vintage 20 years old 32 channel 100 MHz. logic analyzer
(eBay: GA320s = 28$ and AP03 pod 100MHz highspeed probes = 26$)
The GA320s from Global Specialties is in very good condition and it cames in only 6 days from USA to GERMAY but is was made in UK.
Here are some images to enlarge you can click on it if you like:
Looks good at my small hobby workbench :-)
Here are the the 100 MHz 16 channel pod (32 channels = 25MHz.):
4 clock and 32 channel inputs and one clock output and the RS-232 remote interface:
LCD without a backlight may be there are space for a LED modification:
A clean design:
Nothing special at all some logic gates and a bunch of data-bus drivers:
Retro horsepower Zilog Z80 with 25MHz / 4 = 6.25MHz:
The data collector XILINX FPGA XC3120A:
I found only this catalog image (last listed at 2006):
Currently I write an RS-232 remote controller in FreeBASIC and FLTK-c of course ;-)
So I can use the larger PC screen to show all 32 channels at once.
There are a problem I can open the COM port
and I see on my ocilloscope the GA320s sends data over TX
but something are wrong may be it isn't a standard NULL modem wire.
This are not a real problem it's more a challenge
like "hack the device protocol without an data sheet" :-)
Joshy
(eBay: GA320s = 28$ and AP03 pod 100MHz highspeed probes = 26$)
The GA320s from Global Specialties is in very good condition and it cames in only 6 days from USA to GERMAY but is was made in UK.
Here are some images to enlarge you can click on it if you like:
Looks good at my small hobby workbench :-)
Here are the the 100 MHz 16 channel pod (32 channels = 25MHz.):
4 clock and 32 channel inputs and one clock output and the RS-232 remote interface:
LCD without a backlight may be there are space for a LED modification:
A clean design:
Nothing special at all some logic gates and a bunch of data-bus drivers:
Retro horsepower Zilog Z80 with 25MHz / 4 = 6.25MHz:
The data collector XILINX FPGA XC3120A:
I found only this catalog image (last listed at 2006):
Currently I write an RS-232 remote controller in FreeBASIC and FLTK-c of course ;-)
So I can use the larger PC screen to show all 32 channels at once.
There are a problem I can open the COM port
and I see on my ocilloscope the GA320s sends data over TX
but something are wrong may be it isn't a standard NULL modem wire.
This are not a real problem it's more a challenge
like "hack the device protocol without an data sheet" :-)
Joshy
Last edited by D.J.Peters on Oct 12, 2022 19:00, edited 2 times in total.
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: A "new" device at my workbench :-)
Looks like my Global Specialties GA320s is in original an TTI TA320s from Thurlby Thandar Instruments.
May be I can find a complete service manual or any other data sheet with the right RS232 specs. from TTI :-)
Joshy
May be I can find a complete service manual or any other data sheet with the right RS232 specs. from TTI :-)
Joshy
Last edited by D.J.Peters on Oct 12, 2022 19:00, edited 2 times in total.
Re: A "new" device at my workbench :-)
thank you D.J.Peters, I find bare metal projects fascinating :-)
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: A "new" device at my workbench :-)
I got it :-)
I soldered 4 times a different RS232 NULL modem cable.
Now I can remote control the logic analyzer and download all current samples.
From the 9 pin serial connector on PC side:
pin 1 + 4 + 6 are shorted
and
pin 7 + 8 also
crossed TX, RX:
PC pin 2 -> analyzer pin 3
PC pin 3 -> analyzer pin 2
ground:
PC pin 5 -> analyzer pin 5
Joshy
I soldered 4 times a different RS232 NULL modem cable.
Now I can remote control the logic analyzer and download all current samples.
From the 9 pin serial connector on PC side:
pin 1 + 4 + 6 are shorted
and
pin 7 + 8 also
crossed TX, RX:
PC pin 2 -> analyzer pin 3
PC pin 3 -> analyzer pin 2
ground:
PC pin 5 -> analyzer pin 5
Joshy
Code: Select all
const PORT = "COM1"
const BAUD = "9600"
const INIT = "N,8,1,BIN,DS0,CS0"
var hFile = FreeFile()
if open com(PORT & ":" & BAUD & "," & INIT ,as #hFile) then
print "error: can't open port: " & PORT & " with " & BAUD & " baud !"
beep : sleep : end 1
end if
print PORT & " is open"
dim as string char,s
print "*IDN? instrument identification"
print #hFile,!"*IDN?\n"
while inkey()=""
while loc(hfile) > 0
char = Input(1,hFile)
if char=!"\n" andalso len(s)>0 then
print s:s=""
elseif asc(char)>31 then
s &= char
end if
Wend
sleep 10
wend
s=""
print "ACQ? get current acquisition of samples"
print #hFile,!"ACQ?\n"
while inkey()=""
while loc(hFile) > 0
s = Input(loc(hFile),hFile)
print s;
Wend
sleep 10
wend
close #hFile
Last edited by D.J.Peters on Oct 12, 2022 19:01, edited 1 time in total.
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: A "new" device at my workbench :-)
If I use print# or input# on the RS232 without any handshaking protocol
only pin 5 ground and 2+3 are needed and must be crossed TX -> RX and RX <- TX.
Does anyone knows the sense behind shorting the pins 1+4+6 and 7+8 on PC side ?
Joshy
only pin 5 ground and 2+3 are needed and must be crossed TX -> RX and RX <- TX.
Does anyone knows the sense behind shorting the pins 1+4+6 and 7+8 on PC side ?
Joshy
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: A "new" device at my workbench :-)
Here are how I draw the front pannel of my RS232 GSA320S remote controller.
Joshy
GFX_SCALE = 5
GFX_SCALE = 10
GFX_SCALE = 20 (blue arrows becomes visible)
GFX_SCALE = 30 (printed label becomes visible)
original :-)
Joshy
GFX_SCALE = 5
GFX_SCALE = 10
GFX_SCALE = 20 (blue arrows becomes visible)
GFX_SCALE = 30 (printed label becomes visible)
original :-)
Code: Select all
#include once "fbgfx.bi"
const as single ORIGINAL_PIXEL_SIZE = 0.053125 ' cm
' device 40 x 8 chars = 40*5 pixels x 8*8 pixels = 240x64 pixels display
const as single ORIGINAL_DISPLAY_HEIGHT = 64 * ORIGINAL_PIXEL_SIZE ' cm
' all in cm
const as single DEVICE_WIDTH = 25.5
const as single DEVICE_HEIGHT = 8.8
const as single DEVICE_FRAME = 0.5
const as single DEVICE_BUTTON = 0.5
const as single FRAME_LEFT = 2.8
const as single FRAME_TOP = 1.3
const as single DEVICE_LABEL_LEFT = 3.3 + DEVICE_FRAME
const as single DEVICE_LABEL_TOP = 0.5 + DEVICE_FRAME
const as single DISPLAY_BKG_LEFT = FRAME_LEFT + DEVICE_FRAME
const as single DISPLAY_BKG_TOP = FRAME_TOP + DEVICE_FRAME
const as single DISPLAY_BKG_WIDTH = 13.8
const as single DISPLAY_BKG_HEIGHT = 4.5
const as single DISPLAY_LEFT = 0.5
const as single DISPLAY_TOP = 0.5
const as single DISPLAY_WIDTH = 12.75 ' 240 * ORIGINAL_PIXEL_SIZE
const as single DISPLAY_HEIGHT = 3.4 ' 64 * ORIGINAL_PIXEL_SIZE
const as single SOFTKEY_BKG_LEFT = FRAME_LEFT + DEVICE_FRAME
const as single SOFTKEY_BKG_TOP = 6.6 + DEVICE_FRAME
const as single SOFTKEY_BKG_WIDTH = 13.8
const as single SOFTKEY_BKG_HEIGHT = 1.1
const as single SOFTKEY_LEFT = 1.4
const as single SOFTKEY_TOP = 0.3
const as single SOFTKEY_DISTANCE = 1.6
const as single KEYPAD_LEFT = 18.7 + DEVICE_FRAME
const as single KEYPAD_TOP = 0.7 + DEVICE_FRAME
const as single KEYPAD_DISTANCE = 0.7
const as single CURSOR_BKG_LEFT = 21.1 + DEVICE_FRAME
const as single CURSOR_BKG_TOP = 5.0 + DEVICE_FRAME
const as single CURSOR_BKG_WIDTH = 2.9
const as single CURSOR_BKG_HEIGHT = 2.7
const as single GFX_SCALE = 35.5
const as single GFX_FRAME_LEFT = FRAME_LEFT * GFX_SCALE
const as single GFX_FRAME_TOP = FRAME_TOP * GFX_SCALE
const as single GFX_DEVICE_WIDTH = DEVICE_WIDTH * GFX_SCALE
const as single GFX_DEVICE_HEIGHT = DEVICE_HEIGHT * GFX_SCALE
const as single GFX_DEVICE_BORDER = DEVICE_FRAME * GFX_SCALE
const as single GFX_DEVICE_BUTTON = DEVICE_BUTTON * GFX_SCALE
const as single GFX_DEVICE_LABEL_LEFT = DEVICE_LABEL_LEFT * GFX_SCALE
const as single GFX_DEVICE_LABEL_TOP = DEVICE_LABEL_TOP * GFX_SCALE
const as single GFX_DISPLAY_BKG_LEFT = DISPLAY_BKG_LEFT * GFX_SCALE
const as single GFX_DISPLAY_BKG_TOP = DISPLAY_BKG_TOP * GFX_SCALE
const as single GFX_DISPLAY_BKG_WIDTH = DISPLAY_BKG_WIDTH * GFX_SCALE
const as single GFX_DISPLAY_BKG_HEIGHT = DISPLAY_BKG_HEIGHT * GFX_SCALE
const as single GFX_DISPLAY_LEFT = DISPLAY_LEFT * GFX_SCALE
const as single GFX_DISPLAY_TOP = DISPLAY_TOP * GFX_SCALE
const as single GFX_DISPLAY_WIDTH = DISPLAY_WIDTH * GFX_SCALE
const as single GFX_DISPLAY_HEIGHT = DISPLAY_HEIGHT * GFX_SCALE
const as single GFX_SOFTKEY_BKG_LEFT = SOFTKEY_BKG_LEFT * GFX_SCALE
const as single GFX_SOFTKEY_BKG_TOP = SOFTKEY_BKG_TOP * GFX_SCALE
const as single GFX_SOFTKEY_BKG_WIDTH = SOFTKEY_BKG_WIDTH * GFX_SCALE
const as single GFX_SOFTKEY_BKG_HEIGHT = SOFTKEY_BKG_HEIGHT * GFX_SCALE
const as single GFX_SOFTKEY_LEFT = SOFTKEY_LEFT * GFX_SCALE
const as single GFX_SOFTKEY_TOP = SOFTKEY_TOP * GFX_SCALE
const as single GFX_SOFTKEY_DISTANCE = SOFTKEY_DISTANCE * GFX_SCALE
const as single GFX_KEYPAD_LEFT = KEYPAD_LEFT * GFX_SCALE
const as single GFX_KEYPAD_TOP = KEYPAD_TOP * GFX_SCALE
const as single GFX_KEYPAD_DISTANCE = KEYPAD_DISTANCE * GFX_SCALE
const as single GFX_CURSOR_BKG_LEFT = CURSOR_BKG_LEFT * GFX_SCALE
const as single GFX_CURSOR_BKG_TOP = CURSOR_BKG_TOP * GFX_SCALE
const as single GFX_CURSOR_BKG_WIDTH = CURSOR_BKG_WIDTH * GFX_SCALE
const as single GFX_CURSOR_BKG_HEIGHT = CURSOR_BKG_HEIGHT * GFX_SCALE
const as ulong FRAME_R = 88
const as ulong FRAME_G = 98
const as ulong FRAME_B = 99
const as ulong FRONT_R = 206
const as ulong FRONT_G = 209
const as ulong FRONT_B = 198
const as ulong GRAY_R = 159
const as ulong GRAY_G = 162
const as ulong GRAY_B = 155
const as ulong DISPLAY_R = 94
const as ulong DISPLAY_G = 120
const as ulong DISPLAY_B = 85
const as ulong SOFTKEY_R = 17
const as ulong SOFTKEY_G = 160
const as ulong SOFTKEY_B = 216
const as ulong PADKEY_R = 17
const as ulong PADKEY_G = 160
const as ulong PADKEY_B = 216
const as ulong ARROW_R = 44
const as ulong ARROW_G = 80
const as ulong ARROW_B = 164
const as string LABEL = "GA320S 32 CHANNEL LOGIC ANALYZER REMOTE CONTROLLER"
' saturate [N]ormal color (range of 0 - 255)
#define SATN(x) iif((x)<0,0,iif((x)>255,255,(x)))
' saturate [D]arg color (color-16)
#define SATD(x) iif(x - 16 < 0, 0,x-16)
' saturate [B]right color (color+16)
#define SATB(x) iif(x + 16 > 255,255,x+16)
sub drawButton(xp as integer,yp as integer,size as integer,r as long,g as long,b as long,border as integer=2)
dim as ulong NORMAL = RGB(SATN(r),SATN(g),SATN(b))
dim as ulong LIGHT = RGB(SATN(r+64),SATN(g+64),SATN(b+64))
dim as ulong BRIGHT = RGB(SATB(r),SATB(g),SATB(b))
dim as ulong DARG = RGB(SATD(r),SATD(g),SATD(b))
dim as single w
line(xp,yp)-step(size-1,size-1),0,BF
if border<0 then border=0
if border>0 then
for i as integer = 1 to border
w=size-1-i*2
if i=border-1 then
line (xp+i,yp+i)-step( w, 0),LIGHT
line -step( 0, w),LIGHT
else
line (xp+i,yp+i)-step( w, 0),BRIGHT
line -step( 0, w),BRIGHT
end if
line -step(-w, 0),DARG
line -step( 0,-w),DARG
next
end if
w=size-2 - border*2
if w<1 then return
line (xp+border,yp+border)-step(w,w),NORMAL,BF
end sub
screenres GFX_DEVICE_WIDTH,GFX_DEVICE_HEIGHT,32,,FB.GFX_NO_FRAME
line (0,0)-step(GFX_DEVICE_WIDTH - 1,GFX_DEVICE_HEIGHT - 1),RGB(FRAME_R,FRAME_G,FRAME_B),BF
line (GFX_DEVICE_BORDER,GFX_DEVICE_BORDER) _
-step(GFX_DEVICE_WIDTH - 1 - GFX_DEVICE_BORDER*2,GFX_DEVICE_HEIGHT - 1 - GFX_DEVICE_BORDER*2),RGB(FRONT_R,FRONT_G,FRONT_B),BF
' label
if GFX_SCALE>29 then draw string (GFX_DEVICE_LABEL_LEFT,GFX_DEVICE_LABEL_TOP),LABEL,RGB(FRAME_R,FRAME_G,FRAME_B)
' display
line (GFX_DISPLAY_BKG_LEFT,GFX_DISPLAY_BKG_TOP) _
-step(GFX_DISPLAY_BKG_WIDTH-1,GFX_DISPLAY_BKG_HEIGHT-1),RGB(GRAY_R,GRAY_G,GRAY_B),BF
line (GFX_DISPLAY_BKG_LEFT+GFX_DISPLAY_LEFT,GFX_DISPLAY_BKG_TOP+GFX_DISPLAY_TOP) _
-step(GFX_DISPLAY_WIDTH-1,GFX_DISPLAY_HEIGHT-1),RGB(DISPLAY_R,DISPLAY_G,DISPLAY_B),BF
' softkeys
line (GFX_SOFTKEY_BKG_LEFT,GFX_SOFTKEY_BKG_TOP) _
-step(GFX_SOFTKEY_BKG_WIDTH-1,GFX_SOFTKEY_BKG_HEIGHT-1),RGB(GRAY_R,GRAY_G,GRAY_B),BF
for x as integer = 0 to 5
if GFX_SCALE>19 then
draw string (GFX_SOFTKEY_BKG_LEFT + GFX_SOFTKEY_LEFT + x * (GFX_SOFTKEY_DISTANCE+GFX_DEVICE_BUTTON)+0.125*GFX_SCALE, _
6.3*GFX_SCALE + GFX_SOFTKEY_TOP), chr(30), RGB(ARROW_R,ARROW_G,ARROW_B)
end if
drawButton(GFX_SOFTKEY_BKG_LEFT + GFX_SOFTKEY_LEFT + x * (GFX_SOFTKEY_DISTANCE+GFX_DEVICE_BUTTON), _
GFX_SOFTKEY_BKG_TOP + GFX_SOFTKEY_TOP, _
GFX_DEVICE_BUTTON,SOFTKEY_R,SOFTKEY_G,SOFTKEY_B,2)
next
' keypad
for y as integer = 0 to 4
for x as integer = 0 to 4
if y<4 then
line(GFX_KEYPAD_LEFT + x * (GFX_KEYPAD_DISTANCE+GFX_DEVICE_BUTTON)-GFX_DEVICE_BUTTON, _
GFX_KEYPAD_TOP + y * (GFX_KEYPAD_DISTANCE+GFX_DEVICE_BUTTON)+1) _
-step(GFX_DEVICE_BUTTON-1,GFX_DEVICE_BUTTON-1),RGB(GRAY_R,GRAY_G,GRAY_B),BF
elseif y=4 andalso x>1 then
continue for
end if
drawButton(GFX_KEYPAD_LEFT + x * (GFX_KEYPAD_DISTANCE+GFX_DEVICE_BUTTON), _
GFX_KEYPAD_TOP + y * (GFX_KEYPAD_DISTANCE+GFX_DEVICE_BUTTON), _
GFX_DEVICE_BUTTON,FRAME_R,FRAME_G,FRAME_B,2)
next
next
' cursorkeys
line (GFX_CURSOR_BKG_LEFT,GFX_CURSOR_BKG_TOP) _
-step(GFX_CURSOR_BKG_WIDTH-1,GFX_CURSOR_BKG_HEIGHT-1),RGB(GRAY_R,GRAY_G,GRAY_B),BF
drawButton(GFX_CURSOR_BKG_LEFT + 1.2 * GFX_SCALE, GFX_CURSOR_BKG_TOP + 0.3 * GFX_SCALE, _
GFX_DEVICE_BUTTON,SOFTKEY_R,SOFTKEY_G,SOFTKEY_B,2)
drawButton(GFX_CURSOR_BKG_LEFT + 1.2 * GFX_SCALE, GFX_CURSOR_BKG_TOP + 1.9 * GFX_SCALE, _
GFX_DEVICE_BUTTON,SOFTKEY_R,SOFTKEY_G,SOFTKEY_B,2)
drawButton(GFX_CURSOR_BKG_LEFT + 0.3 * GFX_SCALE, GFX_CURSOR_BKG_TOP + 1.1 * GFX_SCALE, _
GFX_DEVICE_BUTTON,SOFTKEY_R,SOFTKEY_G,SOFTKEY_B,2)
drawButton(GFX_CURSOR_BKG_LEFT + 2.1 * GFX_SCALE, GFX_CURSOR_BKG_TOP + 1.1 * GFX_SCALE, _
GFX_DEVICE_BUTTON,SOFTKEY_R,SOFTKEY_G,SOFTKEY_B,2)
sleep
Last edited by D.J.Peters on Oct 12, 2022 19:02, edited 2 times in total.
Re: A "new" device at my workbench :-)
Man, if I knew more about electronics, I'd spend more time programming a Z80 than a modern computer. It's a lot more fun to do everything from scratch. Without knowing much on the topic here, I still look at in in awe!
Re: A "new" device at my workbench :-)
@D.J.Peters,
nice stuff, as usual ;-)
But I had to change some of your definitions, in order to scale properly (on my hires. Display).
I'd like you to check the changes on yours, in order to verify, that I've *got it right*:All the remaining code was left unchanged ... (I'm now getting: Device height = 8.8 cm)
nice stuff, as usual ;-)
But I had to change some of your definitions, in order to scale properly (on my hires. Display).
I'd like you to check the changes on yours, in order to verify, that I've *got it right*:
Code: Select all
#include once "fbgfx.bi"
'const as single ORIGINAL_PIXEL_SIZE = 0.053125 ' cm
const as single ORIGINAL_PIXEL_SIZE = 0.009201 ' cm (QHD+ 13,3" Display, 276 DPI)
' device 40 x 8 chars = 40*5 pixels x 8*8 pixels = 240x64 pixels display
const as single ORIGINAL_DISPLAY_HEIGHT = 64 * (1/ORIGINAL_PIXEL_SIZE) ' cm <-- corrected math. (inverted proportionality)
' all in cm
const as single DEVICE_WIDTH = 25.5
const as single DEVICE_HEIGHT = 8.8
const as single DEVICE_FRAME = 0.5
const as single DEVICE_BUTTON = 0.5
const as single FRAME_LEFT = 2.8
const as single FRAME_TOP = 1.3
const as single DEVICE_LABEL_LEFT = 3.3 + DEVICE_FRAME
const as single DEVICE_LABEL_TOP = 0.5 + DEVICE_FRAME
const as single DISPLAY_BKG_LEFT = FRAME_LEFT + DEVICE_FRAME
const as single DISPLAY_BKG_TOP = FRAME_TOP + DEVICE_FRAME
const as single DISPLAY_BKG_WIDTH = 13.8
const as single DISPLAY_BKG_HEIGHT = 4.5
const as single DISPLAY_LEFT = 0.5
const as single DISPLAY_TOP = 0.5
const as single DISPLAY_WIDTH = 12.75 ' 240 * ORIGINAL_PIXEL_SIZE -- ??
const as single DISPLAY_HEIGHT = 3.4 ' 64 * ORIGINAL_PIXEL_SIZE -- ??
const as single SOFTKEY_BKG_LEFT = FRAME_LEFT + DEVICE_FRAME
const as single SOFTKEY_BKG_TOP = 6.6 + DEVICE_FRAME
const as single SOFTKEY_BKG_WIDTH = 13.8
const as single SOFTKEY_BKG_HEIGHT = 1.1
const as single SOFTKEY_LEFT = 1.4
const as single SOFTKEY_TOP = 0.3
const as single SOFTKEY_DISTANCE = 1.6
const as single KEYPAD_LEFT = 18.7 + DEVICE_FRAME
const as single KEYPAD_TOP = 0.7 + DEVICE_FRAME
const as single KEYPAD_DISTANCE = 0.7
const as single CURSOR_BKG_LEFT = 21.1 + DEVICE_FRAME
const as single CURSOR_BKG_TOP = 5.0 + DEVICE_FRAME
const as single CURSOR_BKG_WIDTH = 2.9
const as single CURSOR_BKG_HEIGHT = 2.7
const as single GFX_SCALE = 72 '35.5 <-- corrected factor
' --- end of changes ---
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: A "new" device at my workbench :-)
@MrSwiss your properties doesn't fit on my screen in my hobby "eLab" I use an older computer with 1680x1050 pixels :-)
Joshy
Joshy
Re: A "new" device at my workbench :-)
@Joshy, maybe a misunderstanding here:
only the changed math. (in your case) but, the *old* constants otherwise, to be used :-)Reason: smaller PIXEL --> larger multiplier *required*, to get the same physical size.
Factor: not 1:1 but invers: 1 * (1 / PX-size) ...
only the changed math. (in your case) but, the *old* constants otherwise, to be used :-)
Code: Select all
const as single ORIGINAL_DISPLAY_HEIGHT = 64 * (1/ORIGINAL_PIXEL_SIZE) ' cm <-- corrected math. (inverted proportionality)
Factor: not 1:1 but invers: 1 * (1 / PX-size) ...