## Monday, November 28, 2011

### Tutorial – Parallax Ping))) Ultrasonic Sensor

This is chapter forty-five (!) of a series originally titled “Getting Started/Moving Forward with Arduino!” by John Boxall – a series of articles on the Arduino universe. The first chapter is here, the complete series is detailed here.

Welcome back

Whilst being a passenger in a vehicle with a ‘reversing sensors’, I became somewhat curious as to how the sensors operated and how we can make use of them. So for this chapter we will investigate an ultrasonic sensor from Parallax called the Ping)))™ Ultrasonic Distance Sensor. It can measure distances between ~2cm and ~3m in length. Here is our example sensor:

(Memories of Number Five …)

Parallax have done a lot of work, the board contains not just the bare sensor hardware but controller circuitry as well:

Which is great as it leaves us with only three pins – 5V, GND and signal. More on those in a moment, but first…

How does it work?

Good question. The unit sends out an ultrasonic (a sound that has a frequency which is higher than can be heard by the human ear) burst of sound from one transducer (the round silver things) and waits for it bounce off an object and return – which is detected by the other transducer. The board will then return to us the period of time taken for this process to take, which we can interpret to determine the distance between the sensor and the object from which the ultrasonic sound bounced from.

The Ping))) only measures a distance when requested – to do this we send a very short HIGH pulse of five microseconds to the signal pin. After a brief moment a pulse will come from the board on the same signal pin. The period of this second pulse is the amount of time the sound took to travel out and back from the sensor – so we divide it by two to calculate the distance. Finally, as the the speed of sound is 340 metres per second, the Arduino sketch can calculate the distance to whatever units required.

It may sound complex, but it is not –  so let’s run through the theory of operation with an example. Using our digital storage oscillscope we have measured the waveforms on the signal pin during a typical measurement. Consider the following example of measuring a distance of 12cm (click image to enlarge):

You can see the 5uS pulse in the centre and the pulse returned from the sensor board on the right. Now to zoom in on the returned pulse (click image to enlarge):

Without being too picky the pulse is roughly 720uS (microseconds) long – the duration of ultrasonic sound’s return trip from the sensor board. So we divide this by two to find the time to travel the distance – 360uS. Recall the speed of sound is 340 metres per second – which converts to 29.412 uS per centimetre. So, 360uS divided by 29.412 uS gives 12.239902081… centimetres. Rounded that gives us 12 centimetres. Easy!

Finally, there are some limitations to using the Ping))) sensor. Download the data sheet (pdf) and read pages three to five for information on how to effectively mount the sensor and the sensitivity results from factory resting.

How do we use it with Arduino

As described previously we first need to send a 5uS pulse, then listen for the return pulse. The following sketch does just that, then converts the data to centimetres and displays the result on the serial monitor. The code has been commented to explain each step.

Example 45.1

`// Example 45.1 - tronixstuff.wordpress.com - CC by-sa-nc // Connect Ping))) signal pin to Arduino digital 8`
`int signal=8; int distance; unsigned long pulseduration=0;`
`void setup() { pinMode(signal, OUTPUT); Serial.begin(9600); }`
`void measureDistance() { // set pin as output so we can send a pulse pinMode(signal, OUTPUT);`
`// set output to LOW digitalWrite(signal, LOW); delayMicroseconds(5);  // now send the 5uS pulse out to activate Ping))) digitalWrite(signal, HIGH); delayMicroseconds(5); digitalWrite(signal, LOW);  // now we need to change the digital pin // to input to read the incoming pulse pinMode(signal, INPUT);  // finally, measure the length of the incoming pulse pulseduration=pulseIn(signal, HIGH); }`
`void loop() { // get the raw measurement data from Ping))) measureDistance();  // divide the pulse length by half pulseduration=pulseduration/2;   // now convert to centimetres. We're metric here people... distance = int(pulseduration/29);  // Display on serial monitor Serial.print("Distance - "); Serial.print(distance); Serial.println(" cm"); delay(500); }`

And the results of some hand-waving in the serial monitor:

So there you have it – you can now measure distance with a degree of accuracy. However that image above isn’t very exciting – instead let’s use a 7-segment display shield to get things up in lights. The shield uses the NXP SAA1064LED display driver IC (explained quite well here). You can download the demonstration sketch from here. And now for the video:

So there you have it – now the use of the sensor is up to your imagination. Stay tuned using the methods below to see what we get up to with this sensor in the future.

Have fun and keep checking into tronixstuff.com. Why not follow things on twitterGoogle+, subscribe  for email updates or RSS using the links on the right-hand column, or join our Google Group – dedicated to the projects and related items on this website. Sign up – it’s free, helpful to each other –  and we can all learn something.

## Tuesday, November 22, 2011

### Using an ATtiny as an Arduino

Welcome back

In the last few weeks an article about how to use either an Atmel ATtiny45 or ATtiny85 microcontroller with Arduino software took my interest. The team at the High-Low Tech Group at MIT had published the information and examples on how to do this, and it looked like fun – so the purpose of this article is to document my experience with the ATtiny and Arduino. All credit goes to the interesting people at the MIT HLT Group for their article and of course to Alessandro Saporetti for his work on making all this possible.

Introduction

Before anyone gets too excited – there are a few limitations to doing this…

Limitation one – the ATtiny has “tiny” in the name for a reason:

it's the one on the left!

Therefore we have less I/O pins to play with. Consider the pinout for the ATtiny from the data sheet:

So as you can see we have thee analogue inputs (pins 7, 3 and 2) and two digital outputs with PWM (pins 5 and 6). Pin 4 is GND, and pin 8 is 5V.

Limitation two – memory. The ATtiny45 has 4096 bytes of flash memory available, the -85 has 8192. So you may not be controlling your home-built R2D2 with it.

Limitation three – available Arduino functions. As stated by the HLT article, the following commands are supported:

• `pinMode()`
• `digitalWrite()`
• `digitalRead()`
• `analogRead()`
• `analogWrite()`
• `shiftOut()`
• `pulseIn()`
• `millis()`
• `micros()`
• `delay()`
• `delayMicroseconds()`

So please keep the limitations in mind when planning your ATtiny project.

Getting Started

Hardware

The ATtiny needs to be wired up a certain way to allow the Arduino to act as a programmer.

For those with an Arduino Duemilanove/Freetronics TwentyTen (click schematic to enlarge):

For those with an Arduino Uno/Freetronics Eleven/EtherTen etc. (click schematic to enlarge):

Note the Uno version of the schematic has a 10uF electrolytic capacitor between Arduino RST and GND. Follow the schematics above each time you want to program the ATtiny. For more frequent use they would be an excellent candidate for a protoshield.

Software

From a software perspective, to use the ATtinys you need to add some files to your Arduino IDE. First, download this zip file. Create a folder called “hardware” in the the folder where you save your sketches. If you are unsure of this location, in the Arduino IDE select the File>Preferences option and you will see the following:

The top field “Sketchbook location:” will tell you where to put the files.

Next, extract the contents of the downloaded .zip file into the newly-created hardware folder. Finally, plug in your Arduino board, load the IDE and upload the ArduinoISP sketch which is in the File>Examples menu. Whenever you want to upload a sketch to your ATtiny, you need to upload the ArduinoISP sketch to your Arduino first. Consider this sketch the “bridge” between the IDE and the ATtiny.

Next, create your sketch. Note the following pin number allocations:

• digital pin zero is physical pin five (also PWM)
• digital pin one is physical pin six (also PWM)
• analogue input two is physical pin seven
• analogue input three is physical pin two
• analogue input four is physical pin three

Before uploading your sketch – you need to select the correct board type. Select Tools>Board>ATtiny45 (or 85) (w/ Arduino as ISP). Then upload as normal. You will see an error message in the status window of the IDE as such:

The message is “normal” in this situation, so nothing to worry about.

For a quick demonstration, load the Blink example sketch – File>Examples>1. Basics>Blink. Change the pin number for the digital output from 13 to 0. For example:

`void setup() { pinMode(0, OUTPUT); }`
`void loop() { digitalWrite(0, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(0, LOW); // set the LED off delay(1000); // wait for a second }`

Upload the sketch using the method as described earlier. The matching circuit is:

Although it’s only a blinking LED, by making it work you have mastered the process. However, for the non-believers:

Final example

We test the digital outputs with digital and PWM outputs using two LEDs instead of one:

And the sketch:

`void setup() { pinMode(0, OUTPUT); pinMode(1, OUTPUT); } void loop() { for (int a=0; a<6; a++) { digitalWrite(0, HIGH); // set the LED on digitalWrite(1, LOW); // set the LED on delay(100); // wait for a second digitalWrite(0, LOW); // set the LED off digitalWrite(1, HIGH); // set the LED on delay(100); // wait for a second } for (int z=0; z<3; z++) { for (int a=0; a<256; a++) { analogWrite(0, a); analogWrite(1, a); delay(1); } for (int a=255; a>=0; --a) { analogWrite(0, a); analogWrite(1, a); delay(1); } } }`

And a quick demonstration video:

So there you have it – another interesting derivative of the Arduino system. Once again, thanks and credit to Alesssandro Saporetti and the MIT HLT Group for their published information.

Have fun and keep checking into tronixstuff.com. Why not follow things on twitterGoogle+, subscribe  for email updates or RSS using the links on the right-hand column, or join our Google Group – dedicated to the projects and related items on this website. Sign up – it’s free, helpful to each other –  and we can all learn something.

## Friday, November 11, 2011

### Tutorial: Arduino and Numeric Keypads – Part Two

This is an addendum to chapter forty-two of a series originally titled “Getting Started/Moving Forward with Arduino!” by John Boxall – a series of articles on the Arduino universe. The first chapter is here, the complete series is detailed here. Any files from tutorials will be found here.

Welcome back fellow arduidans!

This is the second part of our numeric keypad tutorial – in which we use the larger keypads with four rows of four buttons. For example:

Again, the keypad looks like a refugee from the 1980s – however it serves a purpose. Notice that there are eight connections at the bottom instead of seven – the extra connection is for the extra column of buttons – A~D. This example again came from Futurlec. For this tutorial you will need the data sheet for the pinouts, so download it from here (.pdf).

Now for our first example – just to check all is well. From a hardware perspective you will need:

Connect the keypad to the Arduino in the following manner:
• Keypad row 1 (pin eight) to Arduino digital 5
• Keypad row 2 (pin 1) to Arduino digital 4
• Keypad row 3 (pin 2) to Arduino digital 3
• Keypad row 4 (pin 4) to Arduino digital 2
• Keypad column 1 (pin 3) to Arduino digital 9
• Keypad column 2 (pin 5) to Arduino digital 8
• Keypad column 3 (pin 6) to Arduino digital 7
• Keypad column 4 (pin 7) to Arduino digital 6
Now for the sketch – take note how we have accommodated for the larger numeric keypad:
• the extra column in the array char keys[]
• the extra pin in the array colPins[]
• and the byte COLS = 4.

Example 42.3

`/* Example 42.3 - Numeric keypad and I2C LCD http://tronixstuff.wordpress.com/tutorials > chapter 42a Uses Keypad library for Arduino  http://www.arduino.cc/playground/Code/Keypad  by Mark Stanley, Alexander Brevig */  #include "Keypad.h" #include "Wire.h" // for I2C LCD #include "LiquidCrystal_I2C.h" // for I2C bus LCD module http://bit.ly/eNf7jM LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display  const byte ROWS = 4; //four rows const byte COLS = 4; //four columns char keys[ROWS][COLS] = {{'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'}}; byte rowPins[ROWS] = { 5, 4, 3, 2}; //connect to the row pinouts of the keypad byte colPins[COLS] = { 9, 8, 7, 6}; //connect to the column pinouts of the keypad int count=0;  Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );  void setup() { Serial.begin(9600); lcd.init();          // initialize the lcd lcd.backlight(); // turn on LCD backlight }  void loop() { char key = keypad.getKey(); if (key != NO_KEY) { lcd.print(key); Serial.print(key); count++; if (count==17) { lcd.clear(); count=0; } } }`

And our action video:

Now for another example – we will repeat the keypad switch from chapter 42 – but allow the letters into the PIN, and use the LCD instead of LEDs for the status. In the following example, the PIN is 12AD56. Please remember that the functions correctPIN() and incorrectPIN() are example functions for resulting PIN entry – you would replace these with your own requirements, such as turning something on or off.  You can download the sketch from here.

Example 42.4

`// Example 42.4 - Six-character keypad switch // http://tronixstuff.wordpress.com/tutorials > chapter 42a  #include "Keypad.h" #include "Wire.h" // for I2C LCD #include "LiquidCrystal_I2C.h" // for I2C bus LCD module http://bit.ly/eNf7jM LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display  const byte ROWS = 4; //four rows const byte COLS = 4; //four columns char keys[ROWS][COLS] = {{'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'}}; byte rowPins[ROWS] = { 5, 4, 3, 2}; //connect to the row pinouts of the keypad byte colPins[COLS] = { 9, 8, 7, 6}; //connect to the column pinouts of the keypad  Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );  char PIN[6]={'1','2','A','D','5','6'}; // our secret (!) number char attempt[6]={ 0,0,0,0,0,0}; // used for comparison int z=0;  void setup() { lcd.init();          // initialize the lcd lcd.backlight(); // turn on LCD backlight lcd.print("  Enter PIN..."); }  void correctPIN() // do this if correct PIN entered { lcd.print("* Correct PIN *"); delay(1000); lcd.clear(); lcd.print("  Enter PIN..."); }  void incorrectPIN() // do this if incorrect PIN entered { lcd.print(" * Try again *"); delay(1000); lcd.clear(); lcd.print("  Enter PIN..."); }  void checkPIN() { int correct=0; for (int q=0; q<6; q++) { if (attempt[q]==PIN[q]) { correct++; } } if (correct==6) { correctPIN(); } else { incorrectPIN(); } for (int zz=0; zz<6; zz++) // wipe attempt { attempt[zz]=0; } }  void readKeypad() { char key = keypad.getKey(); if (key != NO_KEY) { switch(key) { case '*': z=0; break; case '#': delay(100); // for extra debounce lcd.clear(); checkPIN(); break; default: attempt[z]=key; z++; } } }  void loop() { readKeypad(); }`

Now let’s see it in action:

So now you have the ability to use twelve and sixteen-button keypads with your Arduino systems.

Have fun and keep checking into tronixstuff.com. Why not follow things on twitterGoogle+, subscribe  for email updates or RSS using the links on the right-hand column, or join our Google Group – dedicated to the projects and related items on this website. Sign up – it’s free, helpful to each other –  and we can all learn something.

## Friday, November 4, 2011

### October 2011 Competition Results

October has now passed by (too quickly!) and it is time to announce the winners of the October competition. Congratulations to all those who entered – there was some great examples of creativity and enthusiasm. Although less people entered this month, the standard of entries was very high – which made judging very difficult. However with some deliberation we narrowed it down to three entries:

First Prize:

Congratulations to Nick P from New York, USA for his entry:

Droid ‘bot assassin,
Misses elevated mark.
Forgot third axis.

Nick will receive a Freetronics USBDroid and one Terminal Shield:

Designed in Australia and manufactured to the highest quality standards the USBDroid combines the functionality of the Freetronics Eleven along with a USB host-mode controller and a microSD memory card slot all merged together into a single, integrated board that is 100% Arduino compatible. This is the ideal platform for developing peripherals or projects based around Android devices with ADK (Android Developer Kit) functionality, but without requiring a USB host controller shield stacked onto an Arduino. Connect your Android phone for all kinds of controller and networking features, and other USB devices like game controllers, Bluetooth dongles, digital cameras, etc. All the good things about the Eleven are included:

• Gold-plated PCB.
• Top and bottom parts overlays.
• Top-spec ATmega328P MCU.
• D13 pin isolated with a MOSFET so you can use it as an input.
• Robust power filtering.
• Sexy rounded corners.
• PC communications with the Mini-USB connector: no more shorts against shields!
• And of course the USB Host connector to go out to your Android phone and other USB devices.

In addition we’ve included a high current onboard power supply so you can charge your Android device directly off the USBDroid. Available now from a Freetronics reseller near you.

The Terminal Shield breaks out all the Arduino headers to handy screw terminals, making it really easy to connect external wires without using a soldering iron. Ideal for quick experiments or for robust connections! The center area of the shield is also a huge prototyping area, allowing you to add your own parts to suit your project. A blue “power” LED shows when your Arduino is powered up, and there are also red, green, and blue general-purpose LEDs with current-limiting resistors. The Terminal Shield comes with all the supporting components already fitted as surface-mount parts so you can start using it right away, and we even provide stackable headers to allow you to mount another shield on top.

Features

• Gold-plated surface: solders easily and very resistant to finger oil, etc.
• Large prototyping area with through-plated holes.
• Clearly marked GND and 5V rails beside prototyping area.
• Blue surface-mount “power on” LED.
• 2 × 100nF power supply smoothing capacitors pre-fitted as surface-mount parts.
• Reset button wired through to the Arduino so you can reset it even with the shield mounted over the top.
• 3 general-purpose surface-mount LEDs (red, green, blue) with current limiting resistors pre-fitted: driveHIGH to illuminate.
• Overlay printed on both the top and the bottom of the board so you don’t have to turn it over to see what you’re soldering onto.
• Sexy rounded corners.
Second Prize:

Congratulations to James from Christchurch, New Zealand for his entry:

Ether Ten, what shall I make?
Why, remote access.
My home is automated.

James will receive a Freetronics EtherTen and the new AM3X 3-Axis Accelerometer Module:

This is the mother of all Arduino-compatible boards. Designed in Australia and manufactured to the highest quality standards the EtherTen replaces three boards – consider having an Arduino Uno SMD, Ethernet shield with PoE, and a microSD shield – all on the one board. From the Freetronics website:

The EtherTen is a 100% Arduino compatible board that can talk to the world. Do Twitter updates automatically, serve web pages, connect to web services, display sensor data online, and control devices using a web browser. The Freetronics EtherTen uses the same ATmega328P as the Duemilanove and the same Wiznet W5100 chip used by the official Arduino Ethernet Shield, so it’s 100% compatible with the Ethernet library and sketches. Any project you would previously have built with an Arduino and an Ethernet shield stacked together, you can now do all in a single, integrated board.

We’ve even added a micro SD card slot so you can store web content on the card, or log data to it.

All the good things about the Eleven and the Ethernet Shield have been combined into this one device so please see those pages for all the specific details, but the highlights include:

• Gold-plated PCB.
• Top and bottom parts overlays.
• Top-spec ATmega328P MCU.
• Mini-USB connector: no more shorts against shields!
• D13 pin isolated with a MOSFET so you can use it as an input.
• Power-over-Ethernet support, both cheapie DIY or full 802.3af standards-compliant.
• Ethernet activity indicators on the PCB and the jack.
• 10/100base-T auto-selection.
• Fully compatible with standard Ethernet library.
• Reset management chip.
• Fixed SPI behavior on Ethernet chipset.
• Robust power filtering.
• Sexy rounded corners.

Note that just like our Ethernet Shield with PoE support, the EtherTen provides a number of options for different Power over Ethernet. You can use the supplied jumpers and feed 7-12Vdc down the wire for cheap DIY version, or you can fit our PoE Regulator 24V and feed a bit more voltage down the wire, or you can use our PoE Regulator 802.3AF along with a proper commercial PoE injector or switch. It’s up to you.

Which way is up?

This tiny 3-axis accelerometer module can operate in either +/-1.5g or +/-6g ranges, giving your project the ability to tell which way is up. Ideal for robotics projects, tilt sensors, vehicle dataloggers, and whatever else you can dream up. It has independent X, Y, and Z axis outputs ready to connect directly to analog inputs on an Arduino, and we’ve included an onboard 3.3V regulator so that you can run it from either 5V or 3.3V. It even has a “zero g!” output to detect when the device is in free-fall, so you could connect that to an “interrupt” pin on an Arduino to have your project react immediately if it’s dropped!

Very cool.

The module includes mounting holes suitable for M3 or 1/8″ bolts, and a flat rear face so you can easily glue it to any surface. Available here now or at a Freetronics reseller near you.

Third Prize:

Congratulations to CV Rao from New Delhi, India for their entry:

To play with my daughter.
A game of detective and murderer,
Along with her lovely mother.

With Trippy RGB sketch uploaded, this is the Snootlab games platform based on the Mitch Altman original design, it can receive original Snootlab collaborative games. This badge can be used for soldering workshop and electronic board programming. Being a badge, it can be worn as a pendant. More details on the dedicated website zombadge.com.

Once again thanks to everyone for their entries. We had a few ineligible entries and two rude ones. Such is the Internet!

And of course thanks to our sponsors Freetronics and Snootlab

Stay tuned for the November competition which will be announced shortly.

So have fun and keep checking into tronixstuff.com. Why not follow things on twitterGoogle+, subscribe  for email updates or RSS using the links on the right-hand column, or join our Google Group – dedicated to the projects and related items on this website. Sign up – it’s free, helpful to each other –  and we can all learn something.

## Wednesday, November 2, 2011

### Review – Agilent Infiniivision MSO-X 3024A Mixed Signal Oscilloscope

Initial Impressions

Unlike smaller instruments the packaging is plain and non-descript, however the MSO is protected very well for global shipping and arrived in perfect condition. Inclusions will vary depending on the particular model, however all come with a calibration certificate, user guide on CD and a power lead.

Four passive 300MHz probes are included with the MSO-X3024A:

Due to the constant upgrading of the firmware the lack of a printed user manual is no surprise. You can download the manual as well as the service, programming and  educational lab guides from the documents section of the product web page - which make good reading to get a feel for the unit.

Now for a tour around the unit. Coming from a smaller DSO or an analogue model, the first thing that strikes you is the display. 8.5” diagonal with 800×480 resolution:

Unlike cheaper brands the larger screen is not extrapolating data from a smaller image – each pixel is separately used. The front panel is clean and uncluttered. Each button and knob feels solid and responsive, and if pressed and held down, a small help window appears with information about the item pressed. Note that each analogue channel has independent controls for vertical position and V/div sensitivity (the minimum sensitivity is 1mV/division). This saves a lot of time and possible confusion when working on time-sensitive applications.

Around the back we find the cooling van ventilation on the left, the IEC AC power socket on the bottom-right, manufacturing data and so on. The fan is just audible, however the noise from a desktop computer drowns it out. On the far right near the top are separate USB connections for device and host mode, and the external trigger input and output sockets. Apart from the trigger out signal the socket can also be set to give a 5V pulse on a mask test failure or the optional WaveGen sync pulse.

Below this is a space for a Kensington lock cable, and the optional modules – the VGA/LAN adaptor or the GPIB bus module. On the right is my old faithful GW 20 MHz analogue CRO.

Finally, there is a compartment on the top of the unit that can hold two probes comfortably, and four at a pinch:

As the unit is can be considered a small computer, it takes time to boot up – just over thirty seconds. (The operating system is Windows CE version 6.0). The user-interface is quite simple considering the capability of the unit. The six soft-keys below the display are used well, and also can call a separate list of options under each button.

When such a list is presented, you can also use the “Push to select” knob on the right hand side of the display to select an option and lock in by pressing the knob in. Below the soft keys from left to right are: BNC output for the optional function generator, digital inputs for logic analyser, USB socket for saving data to a USB drive, probe points for calibration and demonstration use, and four probe sockets. Connections exist that can interface with optional Agilent active probes.

Specifications

This instrument falls within the range of Agilent’s new Infiniivision 3000-series oscilloscopes. The range begins with the DSO-X3012A with 100MHz bandwidth and two channels, through to the DSO-X3054A with 500 MHz bandwidth and four channels. Furthermore the range is extended with the MSO-X models that include a sixteen channel logic analyser.

Some of you will know there is also the Infiniivision 2000-series, and wonder why one would acquire a 3000-series. There are three excellent reasons for doing so:

1. Waveform update rate is 50000 per second on a 2000, one million per second on a 3000;
2. Memory depth on a 2000 is 100 kilopoints; 3000s have 2Mpts standard or 4Mpts optional;
3. Eight vs. sixteen digital channels when specified as an MSO-X model.

Getting Started and general use

The process from cutting open the packaging to measuring a signal is quite simple – just plug it in, connect probes and go – however some probe compensation is required, which is explained quite well in the manual. There are strong tilting bales under the front side which can be used to face the unit upwards. At this point the unit is ready to go – you can start measuring by using the Auto Scale function and let the MSO-X3024A determine the appropriate display settings.

However there is no fun in that – the vertical scale can be manually adjusted between 1 mV and 50V per division, the horizontal between 2 nanoseconds and 50 seconds per division. These values can be selected rapidly or (by pressing the knob in) in a fine method for more precise values. If working with more than one channel, each can be labelled using a pre-set description or select a label from a list. One can also alter the display between X-Y, horizontal and roll modes.

Each channel has separate controls for coupling – DC/AC but no GND, as the earth point is shown on the LCD. Impedance can be 1M or 50 ohm. One can also limit bandwidth to 20MHz to remove high-frequency interference.

Capturing data is very easy, you can save images as .png or .bmp files in grey scale or colour , data in .csv form and so on. You can also assign popular functions to a “Quick Action” button – one press and it is done. For example I use this as a “save bitmap” button to send the screen image to the USB drive. If the optional LAN/VGA module is installed screens can be captured by the host computer via the network. Finally there is a very basic file explorer available to find files on the USB drive as well.

Waveforms can also be stored and used later on as references for other measurements. When reviewed they appear as an orange trace – for example R1:

The horizontal zoom mode activated using keys to the right of the horizontal control is very useful. Agilent call this “Mega Zoom” and it certainly works. Consider the following screen shot – the 32.768kHz square-wave from a Maxim DS1307 real-time clock is being analysed:

The time base is 10uS per division – and using the zoom we can get down to two nanoseconds per division and investigate the ringing on fall of the square-wave. This is great for investigating complex signals over short periods. Awesome.

Capturing infrequent events is made simple by the combination of the one million waveforms per second sampling rate, and the use of infinite display persistence. In the following example a clock with very infrequent glitch is being sampled. By setting persistence to infinite, as soon as the infrequent glitch occurs it can be displayed and held on the screen. For example:

Triggering

There is a plethora of triggering options available. Standard modes include: edge, edge then edge, pulse-width (customisable), pattern trigger (for logic analyser – you can create your own patter of high, low, or doesn’t matter with comparison operators for duration), hex bus trigger, OR trigger, customisable rise/fall time trigger, nth edge burst trigger which allows  you to nth edge of a burst after an idle time, runt trigger on positive or negative pulse, setup and hold trigger, on video signals (PAL, PAL-M, NTSC, SECAM), and USB packets. Phew. Furthermore, if you have any of the optional decoding and analysis licenses, they include triggering on the matching signal type (see later).

Math modes

Performing math waveforms on analogue channels is done via a seperate Math button, and the operations available are addition, subtraction, multiplication, differentiation, integration, square root and FFT.

Waveform statistics

When the time comes to further analyse your measurement data, there area variety of measurements that can be taken, and they can be displayed individually, such as in the following:

or all in a summary screen:

Or you can manually use the cursors to determine information about any part of a wave form, for example:

Logic Analyser

Everything required is included with the MSO-X3024A for the sixteen channel logic analyser, including a very long dual-head probe cable:

as well as sixteen grabbers and some extension runs:

Setup and use was surprisingly simple, just connect the probe cable head to ground, insert grabbers onto the ends of each channel wire, and connect to the signal pins to analyse. You can have all sixteen channels and the four analogue channels active at once, however when doing so the screen is quite busy. You can adjust the height  for each digital channel. Here we are measuring two analogue and eight digital channels:

As always there are many forms of customisation. Automatic scaling is available the same as analogue measurement. You can set the threshold levels for high and low, and presets exist for TTL, CMOS, ECL and your own custom levels. The cable is very well-built (made in the USA) and the socket on the MSO is a standard, very solid IDC connector. Thanks to the use of the IDC connector you could also make your own probes or extension cable for the analyser. Digital channels can also be combined and displayed as a data bus, with the data values shown in hexadecimal or binary – for example:

Options

Both the 2000- and 3000-series Infiniivision units have a variety of options and upgrades available either at the time of purchase or later on. Agilent have been clever and installed all the software-based options in the unit – when required they are “unlocked” by entering a licence key given after purchase. Trial 14-day licenses are generally available if you want to test an option before purchase. You can also upgrade the bandwidth after purchase – for example if you started with a 100MHz a licence key purchase will upgrade you to 200MHz , or 350 to 500MHz. However if you wish to upgrade a 200MHz to 350/500, this needs to be performed at at Agilent service facility. Surprisingly the logic analyser upgrade that converts a DSO-X to an MSO-X is user-installable. For more information on the upgrade options and procedures please visit here.

A simple yet useful option – it doubles the total memory depth to 4 Mpts interleaved.

LAN/VGA Module (DSOXLAN)

This options really opens up the MSO to the world (and is a lot of fun..) – it is inserted into the port at the rear of the unit:

VGA output is very simple – no setup required. Just plug in your monitor or projector and you’re ready to go -for example, with a 22″ LCD monitor:

The educational benefits of the LAN/VGA module are immediately apparent – instead of having twenty classmates huddle around one MSO while the instructor demonstrates the unit, the display can be show on the classroom projector or a large monitor. The MSO display is still fully active while VGA output is used.

LAN connection via Ethernet was also very simple. The MSO can automatically connect to the network if you have a router with DHCP server. Otherwise you can use the Utility>I/O>LAN Settings function to enter various TCP/IP settings and view the MSO’s MAC address.

Once connected you can have complete control of the MSO over your network. Apart from saving screen shots:

There is a “simple” remote control interface that contains all the controls in a standard menu-driven environment:

Or you can have a realistic reproduction of the entire MSO on your screen:

The full remote panel is completely identical – it’s “just like being there”. The ability to monitor your MSO from other areas could be very useful. For example using the mask testing in a QC area and watching the results in an office; or an educator monitoring students’ use of the MSO.

Furthermore you can view various data about the MSO, such as calibration date and temperature drift since calibration, installed options, serial number, etc. remotely via the web interface.

GPIB Module (DSOXGPIB)

This allows you to connect your MSO to an IEEE-488 communications bus for connection to less contemporary equipment.

Segmented Memory Option (DSOX3SGM)

This options allows you to capture infrequent multiple events over time. For example, you want to locate some 15 mS pulses that occur a few times over the space of an hour. All you need to do is set the triggering to pulse-width, specify the minimum/maximum pulse width to trigger from, then hit Acquire>Segmented, the number of segments to use and you’re off. When the pulses have been captured, you can return and analyse each one as normal. The unit records the start time and elapsed time for each segment, and you can still use zoom, etc., to examine the pulse. For example:

Embedded Serial Triggering and Analysis (DSOX3EMBD)

Debugging I2C and SPI buses are no longer a chore with this option. For example with I2C just probe you SDA and SCK lines, adjust the thresholds in the menu option and you’re set. Apart from displaying the bytes of data below the actual waveform, there is a “Lister” which allows you to scroll back and forth along the captured data along with correlating times. In the following example a Maxim DS1307 RTC IC has been polled:

The Lister details all – in the example we sent a zero to address 0×68, which caused the DS1307 to return the seven bytes of time and date data. This is an extremely useful option and is very useful when working with a range of sensors and other parts that use the I2C bus. The SPI bus analysis operates in exactly the same manner. Adding this option also allows triggering on I2C data as well.

FlexRay Triggering and Analysis (DSOX3FLEX)

The optional FlexRay measurement applications offer integrated FlexRay serial bus triggering, hardware-based decoding and analysis. The FlexRay measurement tools help you more efficiently debug and characterize your FlexRay physical layer network by having the ability to trigger on and time-correlate FlexRay communication with your physical layer signals. So if you are working on the ECU of your Rolls-Royce or new BMW 7-series, you can use an MSO that matches the quality of the vehicle under examination. Here is an example of the FlexRay being monitored in the lister:

RS232/UART Serial Decode and Trigger (COMP/MSOX3000-232)

This option allows RS232, 422, 485 and UART decoding and triggering, as well as the use of the Lister to analyse the data. For example:

This option adds more math functions to enhance your waveform analysis, including: divide, base-10 logarithm, natural logarithm and exponential.

CAN/LIN Triggering and Serial Decode (DSOX3AUTO)

Again, allows decoding of automotive CAN and LIN bus signals, and the use of the Lister. For example:

Military Standard 1553 and ARINC429 Standards Serial Triggering and Decoding (DSOX3AERO)

The option exists for decoding and triggering of the above bus types. According to Agilent the Mil-STD 1553 serial bus is primarily used to interconnect avionics equipment in military aircraft and spacecraft(!). This bus is based on tri-level signaling (high, low, & idle) and requires dual-threshold triggering, which the 3000X supports. This bus is also implemented as a redundant multi-lane bus (dual-bus analysis), which is also supported by the 3000X.

The ARINC 429 serial bus is used to interconnect avionics equipment in civilian aircraft (Boeing & Airbus). This bus is also based on tri-level signaling (high, low, & null) and requires dual-threshold triggering, which the 3000X supports. Since ARINC 429 is a point-to-point bus, multi-lane analysis is also required to capture both send and receive data. So if you need this capability – Agilent has you covered. Although my home is near RAAF Williamtown I suspect they won’t let me test this option, so a stock image will have to do:

Video Triggering and Analysis Application (DSOX3VID)

The DSOX3VIDEO option provides triggering on an array of HDTV standards, including:

• 480p/60, 567p/50, 720p/50, 720p/60
• 1080i/50, 1080i/60
• 1080p/24, 1080p/25, 1080p/30, 1080p/50, 1080p/60
• Generic (custom bi-level and tri-level sync video standards)

The 3000X Series oscilloscope already comes standard with NTSC, PAL, PAL-M, and SECAM support. Example of video analysis:

Audio Serial Triggering and Analysis (DSOX3AUDIO)

And not surprisingly this is an option to allow decoding of and triggering from I2S digital audio data. For example:

This is another interesting and useful option, idea for quality testing, benchmarking and so on. First you create a mask by measuring the ideal waveform, and then feed in the signal to be compared with the ideal mask. Mask limit testing can operate at up to 280000 comparisons per second. You can view pass/fail statistics, minimum sigma and so on, for example – a perfect test:

… then a change of frequency for a few cycles:

Furthermore you can specify the number of tests, change source channel, specify action upon errors, etc. Finally you can create and save to USB your own mask file for use later on – which can also be modified on a PC using any text editor software. Or for other monitoring options the external trigger socket on the read of the MSO can be configured to give a 5V pulse on a mask test failure.

If you have the LAN/VGA module you could place the MSO on in a lab or factory situation and monitor the testing over the network using a PC – very handy for QC managers or those who need to move about the workplace and still monitor testing in real time.

20MHz Function Generator/Arbitrary Waveform Generator (DSOX3WAVEGEN)

The “WaveGen” function is a versatile option that offers a highly controllable 20 MHz function generator and arbitrary waveform generator. It offers eleven different types of waveform: sine, square, ramp, pulse, DC, noise, sine cardinal, exponential rise and fall, cardiac and gaussian pulse.

The frequency can be adjusted between 100mHz to 20 MHz in 100 mHz steps; period from 50ns to 10s; full offset, amplitude and symmetry control; as well as logic level preset outputs (such as TTL, CMOS 5V, 3.3V etc.) Finally the WaveGen can be operated independently to normal measurement tasks, which is useful for ideal vs. actual comparisons and so on. Output is from the BNC socket at the bottom-left of the front pane and sync is also availble from the rear BNC socket. The arbitrary waveform generator is very simple to use  - and copied waveforms can be edited or have noise added to them to replicate real-world waveforms.

Power Measurement (DSOX3PWR)

This is a power measurement and analysis option that is integrated into the unit and provides a quick and easy way of analysing the reliability and efficiency of switching power supplies. It also includes a user license for U1881A-003 PC-based power measurement and analysis software that provides even more powerful insight into power supply measurement. With this option you can:

• Measure switching loss and conduction loss at the switching device (to help improve efficiency)
• Analyse dI/dt and dV/dt slew rate (for reliable operation)
• Automate oscilloscope set-up for ripple measurements (to eliminate tedious manual oscilloscope set up)
• Perform pre- compliance testing to IEC 61000- 3- 2 standards (to reduce compliance testing time)
• Analyse line power with total harmonic distortion, true power, apparent power, power factor, and crest factor tests (to quickly provide power quality information)
• Measure output noise (ripple)
• Analyse modulation using the on- time and off- time information of a Pulse Width Modulation (PWM) signal (to help characterize the active power factor)
• Measure how well a circuit rejects ripple coming from the input power supply at various frequencies with the Power Supply Rejection Ratio (PSRR) measurement.

Etch-a-sketch

Well not a feature as such, but it exists if you know where to find it:

Initial Conclusions

There is no doubt that the Infiniivision 3000-series are a great line of instruments. The waveform sample rate, memory size and bandwidth options are very competitive, and the ability to add various options is convenient and also helps lower the final cost for purchasing departments. (Start with the base model then hit them up for the options over time)

However there are a few things that could use improvement. Although the display is excellent – the right-hand column with “Agilent” at the top is always displayed. This is a waste of LCD space and there should be an option to turn it off, allowing waveforms to be displayed across the entire screen. If a \$400 Rigol can do this, so should a \$5000+ Agilent. The build unit of the unit is good, no problems are evident however it could be a little more “solid”; and the option of a clear shield for the LCD would be a great idea to protect against forceful and dirty fingers.

Furthermore the ground demonstration terminal suffers from metal fatigue very quickly, it already is somewhat chipped and may need replacing if you used it quite often. Finally, it would have been nice to see Agilent include the a carry bag – already people have asked to borrow the unit and to wander around with it in the box is somewhat awkward.

For those who rely on their test equipment will have the peace of mind that Chinese discount suppliers cannot give you – Agilent support exists and will not ignore you once a sale has been made. It doesn’t take long to find a tale of woe on an Internet forum from someone who imported their own “high-spec” DSO via eBay or direct east-Asian sellers only to find there are no firmware updates, competent English-speaking support or warranty of any kind. Furthermore, the ability to combine many functions in the one piece of equipment saves space, time and reduces your support channel back to one supplier. There is also an iPhone “app” that may be of interest – however as an Android user I haven’t tried it.

The saying “Quality is remembered long after price is forgotten” certainly holds true – and at the end of the day combined with the mix of standard and optional features at various price points – the Agilent Infiniivision MSO-X 3024A rises to the top echelon of test equipment.

As stated earlier if you have any questions or feedback please leave the in the comment section below. The Agilent Technologies Infiniivision MSO-X 3024A Mixed Signal Oscilloscope used in this review is a promotional consideration received from Agilent and element-14 via their Road Test program.

Agilent Test and Measurement equipment is available from your local element-14Farnell or Newark distributor.