.dmx-calc-wrapper {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
max-width: 800px;
margin: 20px auto;
padding: 25px;
border: 1px solid #e0e0e0;
border-radius: 12px;
background-color: #fdfdfd;
color: #333;
box-shadow: 0 4px 15px rgba(0,0,0,0.05);
}
.dmx-calc-wrapper h2, .dmx-calc-wrapper h3 {
color: #1a1a1a;
border-bottom: 2px solid #2c3e50;
padding-bottom: 8px;
}
.dmx-calc-form {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-bottom: 25px;
background: #f8f9fa;
padding: 20px;
border-radius: 8px;
}
.dmx-input-group {
display: flex;
flex-direction: column;
}
.dmx-input-group label {
font-weight: 600;
margin-bottom: 8px;
font-size: 14px;
}
.dmx-input-group input {
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 16px;
}
.dmx-btn-container {
grid-column: span 2;
text-align: center;
}
.dmx-btn {
background-color: #2c3e50;
color: white;
padding: 12px 30px;
border: none;
border-radius: 6px;
font-size: 16px;
cursor: pointer;
transition: background 0.3s;
}
.dmx-btn:hover {
background-color: #34495e;
}
.dmx-results {
margin-top: 25px;
padding: 20px;
background: #fff;
border: 2px solid #2c3e50;
border-radius: 8px;
display: none;
}
.dmx-results h3 {
margin-top: 0;
color: #2c3e50;
}
.dip-switch-grid {
display: flex;
gap: 4px;
margin-top: 10px;
}
.dip-switch {
width: 25px;
height: 45px;
border: 1px solid #000;
background: #ddd;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
font-size: 10px;
}
.dip-on { background: #27ae60; color: white; }
.dip-off { background: #c0392b; color: white; }
.fixture-table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
}
.fixture-table th, .fixture-table td {
border: 1px solid #ddd;
padding: 8px;
text-align: center;
}
.fixture-table th { background: #f2f2f2; }
.dmx-content {
margin-top: 40px;
line-height: 1.6;
}
.warning { color: #e67e22; font-weight: bold; }
@media (max-width: 600px) {
.dmx-calc-form { grid-template-columns: 1fr; }
.dmx-btn-container { grid-column: span 1; }
}
DMX-512 Address & Dip Switch Calculator
Addressing Results
| # |
Start Address |
End Address |
Binary / Dip Switches |
How to Use the DMX Calculator
This DMX calculator helps lighting technicians, stage designers, and DJs efficiently map out their lighting rigs. Proper addressing is critical to ensure that each fixture responds independently to your lighting console's commands.
Core Concepts:
- Starting Address: The first channel assigned to the first fixture in your chain.
- Fixture Footprint: The number of DMX channels a single fixture requires (e.g., a simple RGB light uses 3 channels, while a complex moving head might use 24+).
- DMX Universe: A single DMX universe contains 512 total channels. If your patch exceeds 512, you must move to a second universe.
Understanding Dip Switches
Older DMX fixtures use a 9-switch or 10-switch binary system to set the address. Each switch represents a power of 2 (1, 2, 4, 8, 16, 32, 64, 128, 256). By flipping these switches to the "ON" position, you sum the values to reach your desired DMX address. For example, to set address 5, you turn ON switch 1 (value 1) and switch 3 (value 4).
Practical Example:
Imagine you have 6 LED PAR cans, and each requires 7 channels. If you start your first light at Address 1:
- Fixture 1: Address 1 (Channels 1-7)
- Fixture 2: Address 8 (Channels 8-14)
- Fixture 3: Address 15 (Channels 15-21)
- …and so on.
Our calculator automatically generates this list and provides the binary dip switch settings for every fixture in your chain.
function calculateDMX() {
var start = parseInt(document.getElementById('startAddress').value);
var channels = parseInt(document.getElementById('fixtureChannels').value);
var count = parseInt(document.getElementById('fixtureCount').value);
var universe = document.getElementById('dmxUniverse').value;
if (isNaN(start) || isNaN(channels) || isNaN(count) || start < 1 || channels < 1 || count < 1) {
alert("Please enter valid positive numbers.");
return;
}
var resultsDiv = document.getElementById('dmxResults');
var summary = document.getElementById('resultsSummary');
var fixtureBody = document.getElementById('fixtureBody');
var dipVisual = document.getElementById('dipVisual');
fixtureBody.innerHTML = "";
resultsDiv.style.display = "block";
var currentStart = start;
var totalChannelsUsed = channels * count;
var lastAddress = start + totalChannelsUsed – 1;
var summaryText = "
Universe " + universe + " Summary: Total channels required: " + totalChannelsUsed + ". ";
if (lastAddress > 512) {
summaryText += "
Warning: Addresses exceed the 512-channel limit of a single universe!";
} else {
summaryText += "Final channel in use: " + lastAddress + ".";
}
summary.innerHTML = summaryText;
// Build Table and generate first fixture's dip switch visual
for (var i = 1; i <= count; i++) {
var end = currentStart + channels – 1;
var binary = getDipSwitches(currentStart);
var row = "
";
row += "| " + i + " | ";
row += "" + currentStart + " | ";
row += "" + end + " | ";
row += "" + binary + " | ";
row += "
";
fixtureBody.innerHTML += row;
if (i === 1) {
renderDipVisual(currentStart);
}
currentStart = end + 1;
}
}
function getDipSwitches(address) {
var switches = [];
var tempAddr = address;
var values = [1, 2, 4, 8, 16, 32, 64, 128, 256];
for (var i = 0; i < 9; i++) {
if ((address & (1 << i))) {
switches.push("1");
} else {
switches.push("0");
}
}
return switches.join("");
}
function renderDipVisual(address) {
var container = document.getElementById('dipVisual');
container.innerHTML = "
Visual Dip Switch Guide (Fixture 1, Address " + address + "):";
var grid = container.querySelector('.dip-switch-grid');
var values = [1, 2, 4, 8, 16, 32, 64, 128, 256];
for (var i = 0; i < 9; i++) {
var isOn = (address & (1 << i));
var dip = document.createElement('div');
dip.className = "dip-switch " + (isOn ? "dip-on" : "dip-off");
dip.innerHTML = "
" + (isOn ? "ON" : "OFF") + "" + (i + 1) + "";
grid.appendChild(dip);
}
}