06-03-2018, 07:55 PM
Hello,
I just spend several hours trying to understand why I was not able to successfully configure a HP-82164A RS-232 interface with a HP-41C while it was a walk in the park with a HP-71B.
The default configuration of the interface is: 9600 bauds, 8 bits, no parity, 1 stop bit, no protocol, no hardware handshake
My new configuration for the interface is: 4800 bauds, 8 bits, no parity, 1 stop bit, no protocol, no hardware handshake
In my test programs, I could have chosen to change the baud rate only, but I decided to set all the parameters just in case, anyway as you will see, that is not the issue here.
My HP-IL setup is: IL-Controller (71B/41C) <-> HP-82164A <-> back-to-IL-Controller
My RS232 setup is: HP-82164A <-> DB25-to-DB9-adapter <-> NULL-modem-adapter <-> DB9-to-USB-dongle <-> MacBookPro <-> Serial-macOS-Program (cfg: 4800,8,n,1)
The following three blocks was my starting point ...
HP-82164A remote commands subset (82164A OM Rem Cmd P.37 to P.40)
HP-71B program (working)
HP-41C program (<' means append) (not working)
When I ran the HP-71B program I saw the expected "HELLO WORLD" message on the terminal application but not so for the HP-41C.
I tried several configuration changes but to no avail, in the end I had no choice but to go into the low level stuff, the RAW HP-IL messages. 8-)
I changed my physical setup to a debugging one:
HP-IL setup: IL-Controller <-> PILBox#1 [pyilper --instance one with Scope] <-> HP-82164A <-> PILBox#2 [pyilper --instance two with Scope] <-> IL-Controller
RS232 setup: HP-82164A <-> DB25-to-DB9-adapter <-> NULL-modem-adapter <-> DB9-to-USB-dongle <-> MacBookPro <-> Serial-macOS-Program (cfg: 4800,8,n,1)
Then I traced the HP-IL messages and manually mapped them to their high level commands for both IL-Controllers (71B & 41C)
After that I compared both logs taking into account the small IL management differences between both IL-Controler and found why it was not working with the HP-41C.
This is what I have found:
HP-71B REMOTE command issue a HP-IL REN (Remote Enable) message (as expected)
HP-41C REMOTE command issue a HP-IL REN (Remote Enable) message (as expected)
HP-71B LOCAL command issue a HP-IL NRE (Not Remote Enable) message (as expected)
HP-41C LOCAL command issue a HP-IL GTL (Go To Local) message (totally unexpected for me)
I then checked the 82160A manual and it is correctly specified that the LOCAL command issue a GTL message, so the command works as specified.
After that I checked the 82164A manual and this is what I found:
Ha! Ha! This is why it was not working with the HP-41C.
Because the LOCAL command was not putting the interface in local mode for good (NRE) but only temporary (GTL), the next time it will receive data in listening mode, the interface will go back into remote mode and try to interpret the data as instructions instead of passing it through.
Here is the proof ...
LOCAL
'HELLO WORLD' OUTA
The only way I found to solve the issue is to use the NOTREM (Not Remote Enable) command from the 82183A Ext.I/O ROM module.
NOTREM
HP-41C program (<' means append) (working)
Sylvain
Edit: changed the faulty 71B program from "40 LOCAL :RS232" to "40 LOCAL" (see the next post from Jean-François)
I just spend several hours trying to understand why I was not able to successfully configure a HP-82164A RS-232 interface with a HP-41C while it was a walk in the park with a HP-71B.
The default configuration of the interface is: 9600 bauds, 8 bits, no parity, 1 stop bit, no protocol, no hardware handshake
My new configuration for the interface is: 4800 bauds, 8 bits, no parity, 1 stop bit, no protocol, no hardware handshake
In my test programs, I could have chosen to change the baud rate only, but I decided to set all the parameters just in case, anyway as you will see, that is not the issue here.
My HP-IL setup is: IL-Controller (71B/41C) <-> HP-82164A <-> back-to-IL-Controller
My RS232 setup is: HP-82164A <-> DB25-to-DB9-adapter <-> NULL-modem-adapter <-> DB9-to-USB-dongle <-> MacBookPro <-> Serial-macOS-Program (cfg: 4800,8,n,1)
The following three blocks was my starting point ...
HP-82164A remote commands subset (82164A OM Rem Cmd P.37 to P.40)
Code:
SB8; // 1200 bauds
SBA; // 2400 bauds
SBC; // 4800 bauds
SBE; // 9600 bauds
SW0; // 8 bits
P4; // no parity
SS0; // 1 stop bit
C0; // no protocol
SL0; // use CTS(4), DCD(8) & DSR(6)
SL2; // use CTS(4)
SL4; // use DCD(8)
SL6; // use DSR(6)
SL7; // no hardware handshake
HP-71B program (working)
Code:
10 RESTORE IO
20 REMOTE :RS232
30 OUTPUT :RS232 ; "SBC;SW0;P4;SS0;C0;SL7;"
40 LOCAL
50 OUTPUT :RS232 ; "HELLO WORLD"
HP-41C program (<' means append) (not working)
Code:
01 LBL "CFG232"
02 AUTOIO
03 1
04 SELECT
05 REMOTE
06 "SBC;SW0;P4;"
07 <"SS0;C0;SL7;"
08 OUTA
09 LOCAL
10 "HELLO WORLD"
11 OUTA
12 END
When I ran the HP-71B program I saw the expected "HELLO WORLD" message on the terminal application but not so for the HP-41C.
I tried several configuration changes but to no avail, in the end I had no choice but to go into the low level stuff, the RAW HP-IL messages. 8-)
I changed my physical setup to a debugging one:
HP-IL setup: IL-Controller <-> PILBox#1 [pyilper --instance one with Scope] <-> HP-82164A <-> PILBox#2 [pyilper --instance two with Scope] <-> IL-Controller
RS232 setup: HP-82164A <-> DB25-to-DB9-adapter <-> NULL-modem-adapter <-> DB9-to-USB-dongle <-> MacBookPro <-> Serial-macOS-Program (cfg: 4800,8,n,1)
Then I traced the HP-IL messages and manually mapped them to their high level commands for both IL-Controllers (71B & 41C)
After that I compared both logs taking into account the small IL management differences between both IL-Controler and found why it was not working with the HP-41C.
This is what I have found:
HP-71B REMOTE command issue a HP-IL REN (Remote Enable) message (as expected)
HP-41C REMOTE command issue a HP-IL REN (Remote Enable) message (as expected)
HP-71B LOCAL command issue a HP-IL NRE (Not Remote Enable) message (as expected)
HP-41C LOCAL command issue a HP-IL GTL (Go To Local) message (totally unexpected for me)
I then checked the 82160A manual and it is correctly specified that the LOCAL command issue a GTL message, so the command works as specified.
After that I checked the 82164A manual and this is what I found:
Code:
There are two command messages that set the interface back into Local mode: Go To Local and Not Remote Enable.
Go To Local is a device specific command, which means that only devices that are currently listeners will respond to the message.
If your interface is a listener and it receives a Go To Local message, it changes back to Local mode.
Remember that your interface is still remote enabled, so if it becomes a listener again, it will then change back to Remote mode.
The Not Remote Enable command not only puts the device back into Local mode, but it also disables the device from going back into Remote mode if it is made a listener.
Ha! Ha! This is why it was not working with the HP-41C.
Because the LOCAL command was not putting the interface in local mode for good (NRE) but only temporary (GTL), the next time it will receive data in listening mode, the interface will go back into remote mode and try to interpret the data as instructions instead of passing it through.
Here is the proof ...
LOCAL
Code:
AAU RFC AAD 1 // reconfiguring the loop
LAD 01 RFC // selecting 82164A as listener
GTL RFC // tell 82164A to go into LOCAL mode temporary
UNL RFC // unselecting 82164A as listener
'HELLO WORLD' OUTA
Code:
AAU RFC AAD 1 // reconfiguring the loop
TAD 01 RFC // selecting 82164A as talker
SAI DAB 42 // requesting its accessory ID
UNT RFC // unselecting 82164A as talker
AAU RFC AAD 1 // reconfiguring the loop
LAD 01 RFC // selecting 82164A as listener and at the same time going back into REMOTE mode 8-(
// the following data (my "HELLO WORLD" message) is not passed through
DAB 48 DAB 45 DAB 4C DAB 4C DAB 4F DAB 20 DAB 57 DAB 4F DAB 52 DAB 4C DAB 44 DAB 0D DAB 0A
UNL RFC // unselecting 82164A as listener
The only way I found to solve the issue is to use the NOTREM (Not Remote Enable) command from the 82183A Ext.I/O ROM module.
NOTREM
Code:
AAU RFC AAD 1 // reconfiguring the loop
NRE RFC // telling every device in the loop to go back to local mode
HP-41C program (<' means append) (working)
Code:
01 LBL "CFG232"
02 AUTOIO
03 1
04 SELECT
05 REMOTE
06 "SBC;SW0;P4;"
07 <"SS0;C0;SL7;"
08 OUTA
09 NOTREM
10 "HELLO WORLD"
11 OUTA
12 END
Sylvain
Edit: changed the faulty 71B program from "40 LOCAL :RS232" to "40 LOCAL" (see the next post from Jean-François)