BASIC hp3478ext IMPLEMENTATION
If you just want a GPIB adapter, this basic variant is all you need.
This is also the simplest way to try it as an HP 3478A extension, but then there are some limitations:
1. Needs external (USB) power.
2. External connection to an HP 3478A takes some space.
3. Needs some kind of case to be used safely.
4. Doesn't have a buzzer for the continuity tester.
PARTS LIST
ATmega328P module, 5V, 16MHz
An Arduino Pro Mini-compatible board. The project doesn't use the Arduino environment, just the board.
https://www.ebay.com/sch/i.html?_nkw=arduino+pro+mini
USB-UART converter module
For example, an FTDI FT232RL-based or a Silicon Labs CP2102-based board would work. It should have a DTR pin and be 5V tolerant. You'll need an FT232RL, if you want to take advantage of the 2M baud rate.
https://www.ebay.com/sch/i.html?_nkw=usb+uart
GPIB cable or connector
It seems to be easier to find a cable than a connector.
https://www.ebay.com/sch/i.html?_nkw=gpib+connector
CONNECTIONS
Wire the GPIB connector to the ATmega328P as shown in the table, below. The first column contains the pin assignments for the GPIB connector. The last column contains the pin assignments for the 328P. It has Arduino pin names silkscreened on the module.
/* GPIB| | | | ATmega | pin | name | description | direction | pin | ----+-------+--------------------+------------+---------+ 1 | DIO1 | Data bit 1 (LSB) | Talker | PD2 32 | 2 2 | DIO2 | Data bit 2 | Talker | PD3 1 | 3 3 | DIO3 | Data bit 3 | Talker | PD4 2 | 4 4 | DIO4 | Data bit 4 | Talker | PD5 9 | 5 5 | EOI | End Of Identity | Talker | PB3 15 | 11 6 | DAV | Data Valid | Controller | PB4 16 | 12 7 | NRFD | Not Ready For Data | Listener | PC0 23 | A0 8 | NDAC | No Data Accepted | Listener | PC1 24 | A1 9 | IFC | Interface Clear | Controller | PC2 25 | A2 10 | SRQ | Service Request | Slave | PC3 26 | A3 11 | ATN | Attention | Controller | PC4 27 | A4 12 | | Shield | | | 13 | DIO5 | Data bit 5 | Talker | PD6 10 | 6 14 | DIO6 | Data bit 6 | Talker | PD7 11 | 7 15 | DIO7 | Data Bit 7 | Talker | PB0 12 | 8 16 | DIO8 | Data bit 8 (MSB) | Talker | PB1 13 | 9 17 | REN | Remote Enabled | Controller | PC5 28 | A5 18 | | GND DAV | | | 19 | | GND NRFD | | | 20 | | GND NDAC | | | 21 | | GND IFC | | | 22 | | GND SRQ | | | 23 | | GND ATN | | | 24 | | GND data | | | GND | LED | | OUT | PB5 | |BUZZER | Buzzer PWM (OC1B) | OUT | PB2 | */
Connect the ATmega328P to the UART module as follows:
TX - RXO RX - TXI GND - GND DTR - GRN 5V - VCC
FLASHING THE FIRMWARE
A link to the hex
and EEPROM files
can be found on the project page
at
https://kirill-ka.github.io/hp3478ext/
The EEPROM .eep file contains the default settings and is only needed if the EEPROM gets corrupted for some reason. The firmware is flashed with the following avrdude command (assuming the standard bootloader is pre-programmed on the Atmega, which is usually the case):
avrdude -b 57600 -c arduino -p m328p -P /dev/ttyUSB0 -U flash:w:hp3478-ext.hex
Change /dev/ttyUSB0 to the appropriate port for your USB-UART converter module.
Note: You could probably flash the hex file using the Arduino IDE. I don't use it, so I don't know.
Important: I highly recommend setting the brownout detection fuses to 4.3V. The reason for this is that the ATmega will be powered by GPIB signal lines when the USB is disconnected. Then, it tends to hang and corrupt its EEPROM. Note that fuse programming can't be done via the bootloader and requires an ISP programmer. The command for setting the fuses is as follows:
avrdude -c dragon_isp -p m328p -Uefuse:w:0x04:m