 			digitalWrite(PIN_ROW_LATCH, LOW);
 			digitalWrite(PIN_ROW_LATCH, HIGH);
 		}
-	
-		// Main screen turn on!
-		cur_pin = pin_col[col_i];
-		digitalWrite(cur_pin, LOW);
-	} else {
-		// Just latch new data in without blanking.
-		digitalWrite(PIN_COL_LATCH, HIGH);
-	}
+		// Pick correct column
+		digitalWrite(PIN_COL_BIT2, col_i & 0b100);
+		digitalWrite(PIN_COL_BIT1, col_i & 0b010);
+		digitalWrite(PIN_COL_BIT0, col_i & 0b001);
+      	}
+
+	// Main screen turn on! (force OC1A on)
+	TCCR1A = (1 << COM1A1) | (1 << COM1A0);
+	TCCR1C = (1 << FOC1A);
+  
+	// Say we want to turn off when we hit the target even if interrupt doesn't run
+	TCCR1A = (1 << COM1A1);
 
 	// Restart timer counter
 	TCNT1 = 0;
+	
+	// Set run length
+	OCR1A = pwm_lengths[pwm_i];
 	
 	/* After turning on the screen, we have "plenty" of CPU cycles
 	 * to spend. Preparing a new segment to display.

	 * 3. Rows
	 * 4. Flip frame, if available, otherwise; repeat.
	 */
	pwm_i++;
	if (pwm_i >= ARRAY_SIZE(pwm_lengths)) {
		pwm_i = 0;


void setup() {
	// Enable output pins for LED display
	pinMode(PIN_COL_BIT0, OUTPUT);
	pinMode(PIN_COL_BIT1, OUTPUT);
	pinMode(PIN_COL_BIT2, OUTPUT);
	pinMode(9, OUTPUT); // OC1A main screen turn on
	pinMode(PIN_ROW_LATCH, OUTPUT);
	pinMode(PIN_COL_LATCH, OUTPUT);

