Sunday, December 14, 2014

An Updated Memory Module : Part 4 - It's Alive!

It's taken a while longer than I had planned, but it's finally done:


A fully-functioning, DIY, self contained, built from scratch memory unit for the FRG-7700!

I'm calling it the NMU-7700.

I'll write the whole thing up properly later - with circuit and software descriptions and everything - but for now here's a quick demo video, a rundown of current features, potential features & expansion, and a short how-it-works.

 

Current Features

  • 12 memories (same as the original): expandable to … well, lots. If you really wanted to, you could push it out to 32kbytes / 5 bytes per memory = over 6,500 (but it's up to you to figure out how to select them!)
  • Fine tuning: like the MU-7700, the NMU-7700 enables the fine tune control on the front panel. Step-size is dependent on the accuracy of the existing front-panel control, but should typically be 15~20Hz.
  • Frequency-accurate memories: the original MU-7700 stored frequencies with only 1kHz resolution, while the NMU-7700 stores frequencies with 6.25Hz resolution. This is particularly handy for CW, SSB, and other narrow-band & digital signals.
  • Overall frequency accuracy is typically ±30Hz (worst case is ~±150Hz).

 

Potential Features / Expansion

These are the ideas I'm considering:
  • 128 memories: 'split' the 12 memory positions between 8 global all-band (independent of the band switch position) and 4 local per-band (dependent on the position of the band switch when the MR button is pressed) entries, increasing the number of memories without any hardware modifications. This would give (8 + (4 * 30) = 128 memory channels.
  • External memory switches could be connected to the I2C buss via port expander ICs, to expand the number of available memory positions.
  • Computer control via the serial port.
  • Direct frequency entry via an add-on keypad / LCD connected to the I2C buss.

 

Hardware / How It Works


Interface board connections
Interface board, installed
The NMU-7700 is built on two circuit boards. A small interface board (50mm*57mm) replaces the original blanking plate for the memory unit wiring, and is held in place using the original mounting clips and holes. This board carries connectors for the pre-existing memory unit wiring, as well as a pair of TCA9535 I2C port expander ICs. These ICs interface the switching and control logic of the radio to the I2C buss of the microcontroller, allowing it to read and control the radio's tuning.

Main Board v4
The larger main board (50mm*80mm) 'piggybacks' on the interface board, with connections between the two carried over 2 sets of pin headers & sockets. This board contains :
  • a 5v power supply (REG1, a 78M05 regulator) for both the main and interface boards ,
  • an input buffer (IC2, a LMV761 comparator) for the frequency counter,
  • a buffer/conditioner (IC3, a LM321 op-amp) for the fine-tune control,
  • a DDS signal generator (IC4, a AD9833), driver amp (Q1 & Q2, 2N2222A transistors), and output filter for the memory unit VFO,
  • a 24LC256 EEPROM (IC5) for memory storage, and
  • an Atmel ATmega328 microcontroller (IC1), which controls the whole show.
Operation is controlled almost entirely by the ATmega328. When the "M" button is pressed and released, the ATmega328 reads the memory and band switches via the port expanders on the interface board. At the same time, a software frequency counter connected to the LMV761 reads the frequency of the radio's tuning dial VFO. The band and VFO frequency information is then stored to EEPROM at a location determined by the memory switch.

When the "MR" button is pressed it disables the radio's band switch and tuning dial VFO, and sends a logic low to the micro. The software then …
  • reads the memory switch and calculates the memory address,
  • retrieves the band and VFO frequency from the EEPROM,
  • writes to the I/O board to selects the correct band, VCO, and front end-filter on the radio, and
  • programmes and enables the DDS to generate the stored VFO frequency
… causing the radio to change bands and tune to the correct frequency.

Simple, huh!

As is probably obvious, the software running on the microcontroller is the key to the whole thing. The ATmega328 is the same microcontroller as used in the Arduino Uno and similar boards, and the software for the memory unit has been developed using the Arduino environment.

(Errr... well, not quite! The Arduino IDE is tolerable for simple things, but it's bloody terrible for larger projects. The software has actually been written using embedXcode, an Arduino-compatible template for Mac OS X's Xcode IDE. Since it's Arduino-compatible, all I really need to do before release is to make sure it compiles and installs using the standard Arduino environment…)

The main difference between a standard Arduino Uno and the NMU-7700 is the clock speed - the Arduino runs at 16MHz, while the NMU-7700 runs at 20MHz (the maximum clock speed for the ATmega328, and the minimum practical speed for the DDS to generate 2.5-3.5MHz signals). In practice, all this means is that a modified version of the standard Arduino bootloader needs to be installed on the chip, and an entry added to the Arduino software's boards.txt file.

I think that's enough for now. Schematics for the interface and main boards are below; board files, software, and construction notes to follow soon!
Main Board schematic
Interface Board schematic


No comments:

Post a Comment