AD8318 output constant at 2.15 Volts

Based on a YouTube video, I purchased an AD8318 on Amazon to measure RF signals for an RSSI. I tried powering the board with a 9 volt battery and then a 3 cell Lipo. Results don't change with the battery source. I have a ducky antenna attached to the SMA input on the AD8318 PCB. I connected the Out signal designated on the PCB to A0 (and the grounds were connected) and read that integer value to be about 465 which is pretty close to the 2.1 Volts expected from the datasheet on the AD8318 when no RF signal is present (that is 465/1023*5 = 2.27). But this value did not seem to change when my cell phone was placed on the antenna and a call was made. So I measured the voltage on the OUT and measured 2.15 Volts. I can get this value to drop to 2.14 and 2.13 Volts when a 100mW antenna is placed right next to the antenna on the AD8318 SMA connector (both are 915 MHz antennas). I must have some fundamental misunderstanding, the item I have is flawed, or the sensitivity of the AD8313 makes it nearly worthless. Does anyone see the problem? I'm clueless. I'm new on this forum - please let me know if I am doing something improper. And thanks in advance for any insights.

I can see neither your code, or your wiring! So I can't comment.

I will upload the code and a photo of circuit when back at my computer - need to figure out how to do that anyway. But it might be somewhat anticlimactic in that the code is a loop with two lines:

  1. analogRead of A0
  2. Serial.println of the read integer value

The circuit is power and ground connections and one other wire: the sensor output line to A0.

I think the problem is more about the sensor operation, but connecting it to a Nano seems very useful.

Sounds to me like the item is not working correctly, but you could also try placing it near an active microwave oven to test. There is usually enough leakage to light an LED using a loop antenna and a microwave detector diode (idea taken from here).



More links please.

Is this your module ?
It has a 78L05 to make 5V for the AD8318.

Manufacturer's page of the AD8318:
AD8318: 4.5 to 5.5V, analog output voltage seems to be 0.5 to 2.1V. The 2.1V indicates no power (-65dBm or less).
An Arduino board should be able to read that without any problem.

When the Arduino use the 5V as reference (it is the default) and the Arduino board is powered by the USB cable, then the 5V changes. A lower voltage of the 5V results in a higher value of analogRead(). That is normal.

Do you know if the module is sensitive enough to be used with an antenna ? Is there someone else, perhaps with a Youtube video, that shows that such a module is working ? Perhaps the AD8318 has an internal impedance of 50 Ω. Perhaps the module is wrong and the pins have the wrong function. I took a glance at the datasheet, but I don't understand what the AD8318 can do.

  Read the AD8318 RF sensor

int sensorPin = A0;    // OUT signal connected to A0
int sensorValue = 0;  // initial value 

void setup() {
  // declare the ledPin as an OUTPUT:

void loop() {
  // read the sensor OUT signal line
  sensorValue = analogRead(sensorPin);
  // Display the result

This image shows the circuit for the AD8313 and Nano being used. The Nano is receiving only USB power, but power and Nano grounds are common.

Koepel and jremington – thank you for your helpful comments. jremington - I will try putting my antenna near the microwave, but I am beginning to believe the item I have is faulty as you suggest. In terms of links, the Amazon product that Koepel linked is the one I purchased. The video that got me started is: Build A RF Field Strength Meter - YouTube and it is a very nice explanation. I did use the diode from the video circuit diagram but that had no impact on the results either.
I am using a 9V or 3-cell LiPo to power only the AD8318 board. It does have a regulator on the board which is why it can take 7-15 Volts as the supply. Koepel - I don’t think I understand the sentence about the 5V reference. It is my understanding that the default 5 reference for the ADC give the dame readings independent of the Nano’s power being the USB, Vin, or both. Is that not true?
Koepel – I saw that the Amazon product information does list a 50 Ohm impedance. All the vidoes use the same ducky type antenna used for 915 MHz or 433 MHz telemetry and that’s what I used also. I did try with no antenna and got the same results. There are a handful of videos using PCB’s with the same hardware and the same antennas. I did check continuity to insure the ground of the signal output (OUT) and that of the power input GND are common – so the connections seem to be right and agree with the videos. I think I will return the item to Amazon and see if a replacement works as I think it’s supposed to.

It is my understanding that the default 5 reference for the ADC give the dame readings independent of the Nano's power being the USB, Vin, or both. Is that not true?

No, that is not true. The Arduino ADC is ratiometric, so the result depends on the ADC reference voltage, which defaults to the supply voltage.

On the Nano there is an automatic switch between regulated 5V and USB power, so the "5 V" reference depends on how it is powered.

Most, if not all Arduinos, have a fixed internal reference voltage that you may optionally use. The reference is stable, but it usually has to be calibrated. On the original Arduino Nano the reference is about 1.1V.

Yes, the 1.1V reference is built into the 328P chip

Internal reference voltages of nominally 1.1V or AVCC are provided On-chip. The voltage reference may be
externally decoupled at the AREF pin by a capacitor for better noise performance.

Other chips have other choices.
Selectable 2.56V or 1.1V ADC reference voltage

Selectable 2.56V or 1.1V ADC Reference Voltage

Selectable 2.56V ADC Reference Voltage

bridget1, that video explains it. But he does not use Arduino code.

In his code, he has this:
210 = no signal
283 = full signal
I don't know if those number are the same as the 10-bit from analogRead(), but it is just a small range.

Based on a YouTube video, I purchased an AD8318 on Amazon to measure RF signals for an RSSI.

That log converter only goes down to -55dBm or so, won't see anything off the air at those levels unless
the transmitter is a few feet away or so.

Typical receive antenna power levels could -150 to -80dBm or so in various applications.

With the phone that close though, suggests you might have fried the front-end (unlikely unless
the 50 ohm load resistor is missing), or there's a broken connection?

Just a thought - was the source of the AD8318 module reputable?

Another quick thought, the AD8318 is silicon-germanium, so will be exquisitely
static-sensitive. Easy to destroy through improper handling.

After a good deal of contemplation and work, I have come to realize that one should not take a youTube video at face value. The AD8318 does work as advertised, but use of a voltmeter to confirm operation is not helpful since the voltage levels output by the AD8318 are not continuous (I don’t know if that’s due to the RF source or the AD8318 and board circuitry), the effective voltage that a meter will display is deceptive. Another issue is that cell phone transmissions are either sparse or very low power and do not register very well on the AD8318. The video I watched showed a cell phone triggering the circuit continuously and that simply does not happen - at least in my experience. Much better is to use an RC transmitter as that transmission does show up very well. One must use the serial plotter to diagnose what is actually happening. So the sketch I am going to attach along with the circuit shown earlier does work, but to see results. Thanks for all the inputs.

  Read the AD8318 RF sensor and turn on LEDs according to signal 
  strength received. The AQD8318 spec sheet asy it will output 
  between 2.1 and 0.5 Volts.  The value is 2.1 when not RF is 
  present and 0.5 when the max RF signal is seen.  Because of 
  the intermittent nature of RF transmissions (I think that's 
  the reasoning anyway), the values one might see with a meter 
  not in aggreement with the signal strengthe that is present.  
  The duty cycle seems to smear the strength an reduce the reading.
  This sketch should be used in conjection with my board layout.

int sensorPin = A0;    // OUT signal from AD8318 connected to A0
int sensorValue = 0;  // initial value 

const int cnt = 10; // Define the averaging window length
unsigned long oldTime = 0; // Initialize the time set at the end of the loop

// Initialize the times when each sensor is read
long timeValue[8] = {0,0,0,0,0,0,0,0};  

int LEDpin[8];  // Use 8 LEDs
long TimeSense;  // The time when the Sensor value is taken
int Window = 500;  // Number of ms that the LED remains on after it strength has been seen

// Set the threshold values for each LED
long threshValue[8] = {450,400,350,300,250,200,150,100};

// Setup ********************************************************************
void setup() {
  // declare the ledPin as an OUTPUT:
  long Temp = millis();
  for (int i=0; i<8; i++) {
    timeValue[i] = Temp;
    LEDpin[i] = i+2;

// Loop ************************************************************************
void loop() {
  // Initialize the high, low and average value
  long avgValue = 0;
  long lowValue = 1023;
  long highValue = 0;
  // read the sensor, the time taken, and a windowed average
  for (int i=0; i<cnt; i++) {
    sensorValue = analogRead(sensorPin);
    TimeSense = millis();
    if (sensorValue<lowValue) lowValue = sensorValue;
    if (sensorValue>highValue) highValue = sensorValue;
    avgValue = avgValue + sensorValue;
  avgValue = avgValue/cnt;

  // The following print statements are set up to allow the serial plotter 
  // to create plots of the high, low and average values
  // Display the result
  Serial.print("LV: ");
  Serial.print("AV: ");
  Serial.print("HV: ");

  // Determine which LEDs to light up
  for (int j=0; j<8; j++) {
    if (avgValue <= threshValue[j]) {
      timeValue[j] = TimeSense;

  // If the average value has been below the threshold for an LED, then turn on that LED
  for (int k=0; k<8; k++) {
    if (avgValue < threshValue[k]) timeValue[k] = TimeSense;
    if (millis()-timeValue[k]<=Window) {
    else {
  // reset the average value
  avgValue = 0;
  lowValue = 1023;
  highValue = 0;
  oldTime = millis();

I have come to realize that one should not take a youTube video at face value

Welcome to the club! Glad you have it sorted out.

GSM uses time-division-multiple-access, so is bursts of packet-trains spaced in time, and more
recent protocols use a variety of modulation schemes, often packetized in similar ways too.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.