I've spent a few hours tinkering with my code and an oscilloscope, and I
think I understand my protocol
problem!
vassilip(a)dsl.cis.upenn.edu wrote:
Bob Shannon <bshannon(a)tiac.net> in cctalk-647
wrote:
As long at I have the HP bus analyzer connected,
and set for SLOW or
HALT bus speeds, I can correctly transfer commands and data to the HP
1350 (a listen only device). When the bus analyzer is removed, or
connected and set to FAST the bus transfers
will lock up at the inter-command "::" seperator characters. Its almost
as if the HP 1350 cannot signal the bus that it needs to
wait and think about the last command.
What would happen if a HPIB listener could not drive NRFD?
I think that what may be wrong is a simple pull-up or pull-down resistor
(which may explain why the setup works with the bus analyser connected).
NRFD and NDAC are supposed to be "weakly" pulled high (so that even one
device pulling it low wins), so your 1350 may be allowing this line to
float rather than pulling it high. If the bus analyser is connected, it
will pull the line high (since the 1350 is floating the line) and the
bus cycle will work. With the bus analyzer removed, the line stays floating
and the cycle freezes.
From page 28 of the HP-IB Tutorial Description of
the HP-IB
(HP 5952-0156, Jan 1983):
The pull-up resistor (to VCC) should be 3.1KOhm (+/-5%)
while the pull-down (to signal ground) should be 6.2 KOhm.
Ahhh, here we have it!
The HP 12821A 'hi-speed' HPIB interface board has very different pull-up
values! Only 240 ohms for
the pull up (as compared to 3.1K) and the pull down values are 680 ohms
(compated to 6.2K).
Looking at NRFD with the analyzer in slow-mode, I see clean edges and
valid levels. NRFD will pulse 'high'
for random durations from ~23usec to over 1 ms, depending on what
instruction is being sent to the HP1350.
NDAC is always about 500ns, positive going pulse.
So NRFD is trying to tell the bus how fast to go, it looks like the
HP1350 is working correctly, with the analyzer
in slow mode.
In fast mode the levels and edges change for the worse. NRFD's edges
look awful, and it does not pull the signal
all that 'low', the pull-up values do indeed appear to be much too low.
But is it possible that my HPIB driver code is malfunctioning, and not
waiting for NRFD high before starting a transfer?
I looked at this, and NRFD goes directly into the 12821A's transmit
handshaking logic, this is not the programmers
responsibility, nor is there a real-time status signal available to
check the state of this line prior to sending a byte.
So the code cannot be screwing this up, besides, I can talk to other
HPIB devices at full speed, its just the HP1350 that
I'm having problems with.
Check both the NDAC and the NRFD.
NDAC appears to be doing ok, but NRFD is having problems.
If I cannot get the programming info for the HP59310B instrument control
version of the HPIB controller, I'll try to 'alter' a
12821A by removing the pull-up and pull down networks and replacing them
with more reasonable values.
The 12821A schematics refer to these resistors as a '7 unit load'.
This sounds reasonable, if each device has its own termination
resistors. I thought only the system controller had these terminators,
so why does it appear each device has a parallel set of termination
resistors?