---
title: "Calibration & Homing"
description: How the dish establishes its position reference and what to do when it gets lost
sidebar:
  order: 3
---

import { Steps, Aside } from '@astrojs/starlight/components';

The Winegard dishes use stepper motors with no absolute position encoders. They determine their position by **homing** -- driving each axis until a mechanical stall is detected, then counting steps from that reference point. If the position reference is lost (power failure, missed steps, uncalibrated boot), the firmware has no idea where the dish is pointing.

## Power-up calibration

On a normal power-up with the tracker enabled, the dish runs a full calibration sequence automatically:

<Steps>

1. **Bootloader initializes.** Firmware loads, peripherals (SPI for motor drivers, SPI for DVB tuner) are configured.

2. **Elevation homes first.** The EL motor drives upward until it stalls against the mechanical hard stop. The firmware uses a 2-second stall detection timeout. This is the EL reference position (65.00 degrees on the G2, per NVS index 103).

3. **Azimuth homes second.** The AZ motor drives in one direction until it stalls (8-second timeout). This establishes the AZ reference and cable wrap limits.

4. **Cable wrap limits are set.** On the Carryout G2, homing output reports `wrap_min:-42333  wrap_max:2333` (centidegrees), giving a total range of approximately 446.66 degrees.

5. **TV satellite search begins.** The firmware starts scanning for DirecTV/DISH satellites. This is where you [disable the search](/guides/disabling-search/).

</Steps>

<Aside type="caution" title="Expect grinding sounds">
The Carryout and Carryout G2 use motor stalling (not limit switches) to detect mechanical boundaries. The stall detection works by driving the motor at a known current and watching for the step position to stop advancing. You will hear audible grinding during this process -- this is normal and expected. The original Carryout calibration takes approximately 10-15 minutes. The G2 is faster.
</Aside>

## Carryout G2 boot sequence (detailed)

The G2's boot process is well-documented from serial capture:

1. Bootloader v1.01 starts
2. SPI1 init at 4 MHz -- configures the two A3981 stepper motor driver ICs (mode 0x03)
3. Motor init -- System=12Inch, master=40000 steps/rev (AZ), slave=24960 steps/rev (EL), ratio=1.602564
4. SPI2 init at 6.857 MHz -- configures the BCM4515 DVB tuner (mode 0x03)
5. `EXTENDED_DVB_DEBUG ENABLED`
6. DVB init -- AP RAM FW verified, BCM4515 ID 0x4515 Rev B0, FW v113.37, strap 0x25018
7. Auto-search config -- blind scan, 18000-24000 ksps, rolloff 0.35
8. `Enabled LNB STB`
9. `Ant ID - 12-IN G2`
10. NVS load from flash
11. EL home (stall detect, 2s timeout)
12. AZ home (stall detect, 8s timeout)
13. `Antenna Facing Front`
14. `TRK>` prompt appears (if tracker disabled) or search starts

## When NVS 20 is TRUE (tracker disabled)

If you've set NVS 20 to TRUE to [permanently disable the TV search](/guides/disabling-search/), the firmware skips the homing sequence entirely. The motors stay uncalibrated, and the AZ position register contains **2147483647** (INT_MAX) -- a sentinel value meaning "position unknown."

This means you must home the motors manually before issuing any move commands.

### Manual homing (Carryout G2)

The G2 has an explicit `h <id>` homing command in the motor submenu:

```
TRK> mot
MOT> h 0
```

This homes motor 0 (azimuth). Wait for it to complete -- the motor will drive until it stalls, then report its reference position.

```
MOT> h 1
```

This homes motor 1 (elevation). Same stall-detect process, shorter timeout (2s vs 8s for AZ).

After both motors are homed, position queries with `a` will return valid angles instead of INT_MAX.

<Aside type="caution" title="Do not skip homing">
Running motor commands on an uncalibrated axis is dangerous. The firmware has no idea where the dish is -- commanding `a 0 180` when the position register says 2147483647 may attempt to drive the motor billions of steps, deadlocking the shell and requiring a power cycle. The ADC `scan` command is especially hazardous on uncalibrated axes.
</Aside>

## EL recalibration via IDU buttons

On the Trav'ler (with the indoor display unit), elevation can be recalibrated through the IDU menu:

<Steps>

1. Press **POWER** to turn on the IDU.

2. Press and hold **ENTER** for 2 seconds to open the User Menu.

3. Navigate to **INSTALLATION**.

4. Select **Calibrate EL**.

5. Confirm the hard stop position when prompted.

</Steps>

This re-establishes the EL reference by driving to the mechanical stop, similar to the automatic homing but initiated manually through the user interface.

## Cable wrap protection

The azimuth motor has a limited rotational range before the internal cables wrap too tightly and risk damage. The firmware tracks this and reverses direction at the wrap limits.

On the Carryout G2, confirmed wrap limits are:

| Parameter | Value | Degrees |
|-----------|-------|---------|
| `wrap_min` | -42333 centidegrees | -423.33 degrees |
| `wrap_max` | 2333 centidegrees | 23.33 degrees |
| **Total range** | 44666 centidegrees | **~446.66 degrees** |

The wrap manager can be queried and controlled from the motor submenu:

```
MOT> w 0
```

Shows the current wrap status for motor 0 (AZ). Use `w 0 ON` or `w 0 OFF` to enable or disable wrap protection (disabling is not recommended).

The SK-1000 (full-size Trav'ler) has a wrap range of 0-455 degrees.

## Elevation limits

Each variant has firmware-enforced elevation limits:

| Variant | Min Elevation | Max Elevation |
|---------|--------------|--------------|
| HAL 0.0.00 | 15 degrees | 90 degrees |
| HAL 2.05 | 15 degrees | 90 degrees |
| Trav'ler Pro | 12 degrees | 75 degrees (hardware cap) |
| Carryout (2003) | 22 degrees | 73 degrees (NVS 102 override) |
| Carryout G2 | 18 degrees | 65 degrees |

On the G2, these are stored in NVS indices 101 (min) and 102 (max). They can be read with:

```
MOT> elminmaxhome
Min: 18.00  Max: 65.00  Home: 65.00
```

## Emergency manual stow

Last resort only, for when the dish is deployed and firmware is unresponsive.

<Steps>

1. Get a **5/16" socket** with a **6" extension**.

2. Insert the socket into the **auxiliary drive hole** on the motor assembly.

3. Turn **clockwise slowly** to drive the arm down.

4. **Ensure the arm faces the "rear" label** before lowering to avoid collision with the base.

</Steps>

<Aside type="caution" title="Risk of motor damage">
Improper execution of manual stow can strip the motor gearing or bend the arm. Only use this procedure when you cannot power the dish or command a software stow. The firmware `stow` command is always preferred.
</Aside>
