Something is weird here... I had the cluster out of the car because I was tired of walking back and forth to the garage for every tiny code change... That's when I got the smooth sweep. The gauge starts at 600, increases by one segment up to 3000, then two segments the rest of the way to 7000. I thought I was done with the precariously alligator-clipped bench setup, so I put it back in the car, may or may not have made changes to the code, can't remember... And now we're back to 5-7 segment chunks instead of 1-2. I'm finished fiddling for the day. Here's where I ended:

Code:
int rpm = 0;

void setup() {
  Serial.begin(8192);
}


uint8_t get_cs(uint8_t *barray) {
  int x = 0;
  int sum = 0;
  int len = *(&barray + 1) - barray;
  for (x = 0; x < len; x++) sum += barray[x];
  return ( 256 - ( sum % 256 ) );
}

void loop() {
  if (Serial.availableForWrite() > 0) {
    delay(10);
    rpm++;
    uint8_t msb = (byte)((rpm >> 8) & 0xFFu);
    uint8_t lsb = (byte)(rpm & 0xFFu);

    //byte msg1[12] = {0x05, 0x5F, 0x00, 0x20, 0x00, 0x3C, 0x80, 0x00, 0x00, 0x02, 0x00, 0x01};
    //byte msg1_cs = get_cs(msg1);

    uint8_t msg2[5] = {0x0A, 0x58, 0x00, msb, lsb};
    uint8_t msg2_cs = get_cs(msg2);

    //byte msg3[4] = {0xF0, 0x56, 0xF4, 0xC6};

    Serial.write(msg2, 5);
    Serial.write(msg2_cs);
  }
}