/// <summary>
        /// Reads the pre-scale register and calculates the <see cref="Frequency"/> (and related properties)
        /// based on <see cref="ClockSpeed"/>.
        /// </summary>
        /// <returns>
        /// Frequency in Hz. Related properties are also udpated.
        /// </returns>
        public float ReadFrequency()
        {
            // Read pre-scale register
            var preScale = Hardware.WriteReadByte((byte)NxpPca9685Register.PreScale);

            // Calculate frequency
            var frequency = CalculateFrequency(preScale, ClockSpeed);

            // Update related properties
            Frequency    = frequency;
            PwmMsMinimum = NxpPca9685ChannelValue.CalculateMilliseconds(Frequency, 0);
            PwmMsMaximum = NxpPca9685ChannelValue.CalculateMilliseconds(Frequency, NxpPca9685ChannelValue.Maximum);

            // Return result
            return(frequency);
        }