Haltech ECU Oscilloscope

Nexus Software Programmer › FunctionsUpdated Sep 2026

Every current Haltech Elite and Nexus ECU has a basic oscilloscope built in, and it's one of the most useful fault-finding tools you already own. Here's how we set it up in NSP to look at crank, cam, injector and ignition signals without reaching for a separate scope.

Why a scope beats a gauge

A normal channel in NSP gives you a number: RPM, voltage, pressure. That's fine until the number is wrong and you need to know why. An oscilloscope draws the actual voltage against time, so you can see the shape of a signal: whether a crank sensor is producing clean teeth, whether a missing-tooth gap is where it should be, whether noise is creeping in, and how the crank and cam line up with each other.

The scope built into current Haltech Elite and Nexus ECUs does this inside NSP, using the inputs the ECU is already reading. For most trigger and sensor diagnosis it saves you from pulling out a standalone scope.

Getting connected

  1. Install NSP on your laptop if you haven't already. It's available from Haltech's website.
  2. Connect the ECU to the laptop with the USB cable.
  3. Turn the ignition on, but don't start the engine yet.
  4. Open NSP, connect to the ECU and open the oscilloscope tool.

Setting everything up with key on, engine off gives you time to choose channels and scales before the signals start moving. Then crank or start the engine and watch.

The settings, grouped by job

Choosing what to look at

SettingWhat it doesOur advice
Channel 1-4Picks the signal on each of the four traces: trigger voltage, home voltage, an ignition or injector output, SPI voltage and so onFor a no-start, put trigger on one channel and home on another
Show Channel 1-4Turns each trace on or offHide what you don't need so the rest is easier to read

Sizing the picture

SettingWhat it doesOur advice
ScaleVolts per vertical grid division. At 1 V/div, each horizontal grid line is one volt apartMatch it to the signal. A 12V square wave reads well at 5 or 10 V/div. At 1 V/div it fills the screen and crowds the other channels
Y-offsetSlides each trace up or down relative to the othersStack traces so you can compare the edges of two signals at a glance
Time baseTime per horizontal grid division. At 50 ms/div, each vertical grid line is 50 milliseconds apartAt an idle of roughly 900 RPM, 50 ms/div shows about one full engine cycle, which is one turn of the cam. Shorten it as RPM rises

Freezing the display at the right moment

The trigger settings decide when the scope draws a new picture. Without them, a fast signal just scrolls past. With them, you can hold the waveform steady on a particular event.

SettingWhat it does
Trigger channelWhich of the four traces the scope watches to decide when to capture
Trigger thresholdThe voltage on that channel that starts a capture
Trigger mode: AutoKeeps redrawing all the time, whether or not the threshold is crossed
Trigger mode: NormalRedraws each time the threshold is crossed
Trigger mode: SingleCaptures once, on the first crossing, then holds
Rising / falling edgeIn Normal and Single, whether the crossing counts when the voltage is going up through the threshold or coming down through it
Trigger horizontal positionMoves where the trigger point sits on screen. The "T" marker along the bottom shows it
Force TriggerIgnores all of the above and starts drawing immediately

Auto is the easiest place to start. Once you can see the signal, switch to Normal and set the threshold part way up the waveform to lock the display. Single is ideal for catching one rare event, such as an intermittent dropout, because it holds the evidence on screen instead of drawing over it.

Measuring and saving

  • Show Time Cursors adds two vertical lines you can drag across the trace. The readout gives the time between them, which is how you measure tooth spacing, pulse width or the delay between crank and cam events.
  • Start Logging to PC (F6) records the scope trace into an NSP PC log so you can replay it later or send it to your tuner.
  • Run scope pauses and resumes the live display.

A worked example: checking a crank and cam signal

Say an engine cranks but won't fire and the trigger error counter is climbing. Here's how we'd approach it:

  1. Set channel 1 to trigger voltage and channel 2 to home voltage. Turn channels 3 and 4 off.
  2. Pick a scale that suits each sensor. A reluctor's output grows with speed, so start with a larger V/div and zoom in if it looks small. A Hall sensor's square wave should sit comfortably inside a 5 V/div scale.
  3. Use Y-offset to put the crank trace above the cam trace.
  4. Set the time base so you can see more than one cam event at cranking speed, then crank the engine.
  5. Look for evenly spaced crank teeth, a clear missing-tooth gap if the wheel has one, and a cam pulse that lands in the same place every cycle.
  6. Hit F6 to log it so you have a record.

Ragged or missing teeth usually mean a sensor, air gap or wiring issue. Spikes between teeth point to electrical noise, which is where the trigger glitch filter and proper shielding come in.

Troubleshooting

SymptomUsually
Flat line on a channelWrong channel selected, channel hidden, or no signal reaching the ECU
Trace clipped or off the screenScale set too small for the signal, or Y-offset pushing it out of view
Signal just a blurTime base far too long for the engine speed
Display never updatesNormal or Single mode with a threshold the signal never reaches. Try Auto or Force Trigger

Oscilloscope FAQ

Does the built-in scope replace a standalone oscilloscope?

For signals the ECU already reads, it covers most everyday diagnosis. For probing wires the ECU can't see, a dedicated scope like the USB Stingray 2-channel scope is still handy.

Can I send my scope capture to a tuner?

Yes. Log it with F6 and send the PC log. If you're stuck on a trigger problem, get in touch and we'll take a look. See also our engine trigger systems explained article.