Posted on 22 Comments

GY561 Frequency & Power Meter

The latest addition to my radio shack is the GY561 frequency & power meter, which has already come in useful for measuring the output power of all my radios.

GY561
GY561

It’s a small device, roughly the same size & weight as a stock UV-5R. Power is provided by 3 AAA cells.

Display
Display

The display is a standard HD44780 8×2 module. The display on this unit isn’t backlit, so no operating in the dark.

Cover Removed
Cover Removed

The cover pops off easily to allow access to the internals, without having to remove any screws!
The 4 screws on the back of the unit hold the heatsink plate for the 50W 50Ω dummy load resistor.
Removing the cover reveals a couple of adjustments, for frequency & RF power calibration.

There are also 3 tactile switches that aren’t on the front panel. According to the manual (which in itself is a masterpiece of Chinglish), they are used to software calibrate the unit if an accurate RF power source is available. I will attempt to do a reasonable translation when time allows.

Disassembly further than this involves some desoldering in awkward places, so a search of the internet revealed an image of the rest of the internal components. In the case of my meter, all the part numbers have been scrubbed off the ICs in an attempt to hide their purpose. While it’s possible to cross-reference IC databooks & find the part numbers manually, this process is a time consuming one. Luckily the image I managed to locate doesn’t have the numbers scrubbed.

Total Disassembly
Total Disassembly

Under the LCD is some 74HC series logic, and a prescaler IC as seen in the previous frequency counter post. However in this unit the prescaler is a MB506 microwave band version to handle the higher frequencies specified.
In this case however the main microcontroller is an ATMEGA8L.
This is complemented by a SN54HC393 4-bit binary counter for the frequency side of things. This seems to make it much more usable down to lower frequencies, although the manual is very generous in this regard, stating that it’s capable of reading down to 1kHz. In practice I’ve found the lowest it reliably reads the frequency input is 10MHz, using my AD9850 DDS VFO Module as a signal source.
It did however read slightly high on all readings with the DDS, but this could have been due to the low power output of the frequency source.
Just like the other frequency counter module, this also uses a trimmer capacitor to adjust the microcontroller’s clock frequency to adjust the calibration.

The power supply circuitry is in the bottom left corner of the board, in this case a small switching supply. The switching regulator is needed to boost the +4.5v of the batteries to +5v for the logic.
Also, as the batteries discharge & their terminal voltage drops, the switching regulator will allow the circuit to carry on functioning. At present I am unsure of the lower battery voltage limit on the meter, but AAA cells are usually considered dead at 0.8v terminal voltage. (2.4v total for the 3 cells).
When turned on this meter draws 52mA from the battery, and assuming 1200mAh capacity for a decent brand-name AAA cell, this should give a battery life of 23 hours continuous use.

On the back of the main PCB is a 5v relay, which seems to be switching an input attenuator for higher power levels, although I only managed to trigger it on the 2m band.

Finally, right at the back attached to an aluminium plate, is the 50Ω dummy load resistor. This component will make up most of the cost of building these, at roughly £15.

On my DVM, this termination reads at about 46Ω, because of the other components on the board are skewing the reading. There are a pair of SMT resistors, at 200Ω & 390Ω in series, and these are connected across the 50Ω RF resistor, giving a total resistance of 46.094Ω.
This isn’t ideal, and the impedance mismatch will probably affect the calibration of the unit somewhat.

The heatsinking provided by the aluminium plate is minimal, and the unit gets noticeably warm within a couple of minutes measuring higher power levels.
High power readings should definitely be limited to very short periods, to prevent overheating.
The RF is sampled from the dummy load with a short piece of Teflon coax.

There’s a rubber duck antenna included, but this is pretty useless unless it’s almost in contact with the transmitting antenna, as there’s no input amplification. It might be handy for detecting RF emissions from power supplies, etc.

For the total cost involved I’m not expecting miracles as far as accuracy is concerned, (the manual states +/-10% on power readings).
The frequency readout does seem to be pretty much spot on though, and the ability to calibrate against a known source is handy if I need some more accuracy in the future.

I’ve also done an SWR test on the dummy load, and the results aren’t good.

At 145.500 MHz, the SWR is 3:1, while at 433.500 it’s closer to 4:1. This is probably due to the lower than 50Ω I measured at the meter’s connector.
These SWR readings also wander around somewhat as the load resistor warms up under power.

I’ll probably also replace the AAA cells with a LiPo cell & associated charge/protection circuitry, to make the unit chargeable via USB. Avoiding disposable batteries is the goal.

Posted on 1 Comment

SainSmart Frequency Meter

Thanks to Lewis, M3HHY for lending me this one 🙂

Here’s a quick look at a Sainsmart frequency counter module. These are useful little gadgets, showing the locked frequency on a small LCD display.

It’s built around an ATMega328 microcontroller (µC), and an MB501L Prescaler IC. The circuit for this is very simple, and is easily traced out from the board.

Frequency Counter
Frequency Counter

Here’s the back of the board, with the µC on the left & the prescaler IC on the right. This uses a rather novel method for calibration, which is the trimmer capacitor next to the crystal. This trimmer varies the frequency of the µC’s oscillator, affecting the calibration.

Input protection is provided by a pair of 1N4148 diodes in inverse parallel. These will clamp the input to +/-1v.
The prescaler IC is set to 1/64 divide ratio. This means that for an input frequency of 433MHz, it will output a frequency of 6.765625MHz to the µC.

The software in the µC will then calculate the input frequency from this intermediate frequency. This is done because the ATMega controllers aren’t very cabable of measuring such high frequencies.

The calculated frequency is then displayed on the LCD. This is a standard HD44780 display module.

LCD
LCD

Power is provided by a 9v PP3 battery, which is then regulated down by a standard LM7805 linear regulator.

Readout
Readout

I’ve found it’s not very accurate at all at the lower frequencies, when I fed it 40MHz from a signal generator it displayed a frequency of around 74MHz. This is probably due to the prescaler & the software not being configured for such a low input. In the case for 40MHz input the scaled frequency would have been 625kHz.

 

Posted on Leave a comment

Raspberry Pi Geiger Counter

Geiger Counter Setup
Geiger Counter Setup

Here’s my latest project with the Pi: interfacing it with the Sparkfun Geiger counter & outputting the resulting data to a character LCD.

The geiger counter is interfaced with it’s USB port, with the random number generator firmware. A Python script reads from the serial port & every minute outputs CPM & µSv/h data to the display.

The Python code is a mash of a few different projects I found online, for different geiger counters & some of my own customisations & code to write the info to the display & convert CPM into µSv/h.

This also writes all the data into a file at /var/log/radlog.txt

The code for this is below:

import time
import sys
import serial
import os
import RPIO
from RPLCD import CharLCD
from subprocess import * 
from datetime import datetime

# configuration settings

logfile = "/var/log/radlog" # location to save log data
serial_port = "/dev/ttyUSB0"
lcd = CharLCD(pin_rs=15, pin_rw=18, pin_e=16, pins_data=[21, 22, 23, 24], numbering_mode=RPIO.BOARD, cols=16, rows=4, dotsize=10) #Init LCD with physical parameters

f = open(logfile,"a")

ser = serial.Serial(serial_port,9600,timeout=1)

one = 0

#Init LCD with initial values.
lcd.cursor_pos = (0, 1)
lcd.write_string("Geiger Counter")
lcd.cursor_pos = (1, 2)
lcd.write_string("Initializing")
lcd.cursor_pos = (2,-3)
lcd.write_string("Please Wait...")
lcd.cursor_pos = (3, 0)
lcd.write_string(str(0) +" uSv/h")
f.write("Geiger Counter Initialized\n")
f.flush()
while 1==1:
  stamp = int(time.time())
  stamp == round(stamp,0)
  stamp = stamp + 60
  count = 0  
  while 1==1:
      ct = int(time.time())
      ct == round(ct,0)
      if ct > stamp:  break
      #Read from serial port
      bit = ser.read(1)
      if bit != "":
          count = count + 1
          #Conversion of counts per minute to uSv/hr
          usvh = count * 0.01
  at = str(time.asctime())
  t = str(time.time())
  #Write line to log file & print info to console
  f.write("["+at+"."+t+"] "+str(count) + " CPM " +str(usvh) + " uSv/h\n")
  f.flush()
  print "["+at+"."+t+"] Count "+str(count) + " " + str(usvh) +" uSv/hr"
  #Send measurement info to LCD
  lcd.clear()
  lcd.cursor_pos = (0, 0)
  lcd.write_string(datetime.now().strftime('%b %d  %H:%M:%S\n'))
  lcd.cursor_pos = (1, 0)
  lcd.write_string("Radiation Level:")
  lcd.cursor_pos = (2, 1)
  lcd.write_string(str(count) +" CPM")
  lcd.cursor_pos = (3, -1)
  lcd.write_string(str(usvh) +" uSv/h")
Info Display
Info Display