docs: public void setFrequency(BigDecimal targetFrequency, BigDecimal frequencyCorrectionFactor) {
          validateFrequency(targetFrequency);
          frequency = targetFrequency;
          periodDurationMicros = calculatePeriodDuration();
          int prescale = calculatePrescale(frequencyCorrectionFactor);
          int oldMode;
          try {
              oldMode = device.read(PCA9685A_MODE1);
              int newMode = (oldMode & 0x7F) | 0x10; // sleep
              device.write(PCA9685A_MODE1, (byte) newMode); // go to sleep
              device.write(PCA9685A_PRESCALE, (byte) prescale);
              device.write(PCA9685A_MODE1, (byte) oldMode);
              Thread.sleep(1);
              device.write(PCA9685A_MODE1, (byte) (oldMode | 0x80));
          } catch (IOException e) {
              throw new RuntimeException("Unable to set prescale value [" + prescale + "]", e);
          } catch (InterruptedException e) {
              throw new RuntimeException(e);
          }
      }