     ctrl = spi_communicate(MX7219_NOP, 0);
 
     spi_communicate(MX7219_DIGIT_0 + 0, ctrl);
-    spi_communicate(MX7219_DIGIT_0 + 1, a0_7);
-    spi_communicate(MX7219_DIGIT_0 + 2, a8_15);
-    spi_communicate(MX7219_DIGIT_0 + 3, a16_24);
-    spi_communicate(MX7219_DIGIT_0 + 4, chase & 0xff);
-    spi_communicate(MX7219_DIGIT_0 + 5, (chase>>8) & 0xff);
+
+    if(ctrl & HALT_MASK) {
+        spi_communicate(MX7219_DIGIT_0 + 1, a0_7);
+        spi_communicate(MX7219_DIGIT_0 + 2, a8_15);
+        spi_communicate(MX7219_DIGIT_0 + 3, a16_24);
+        spi_communicate(MX7219_DIGIT_0 + 4, chase & 0xff);
+        spi_communicate(MX7219_DIGIT_0 + 5, (chase>>8) & 0xff);
+    }
 
     unsigned long now = millis();
     if(now > next_tick) {

        if(chase >= 1UL<<16) {
            chase = 1;
        }
    }
}


#define TICK_DELAY 30
unsigned long next_tick = millis() + TICK_DELAY;

#define HALT_MASK (1<<6)

void loop() {
    byte a0_7, a8_15, a16_24, ctrl;

