float GetPinResolution(uint8_t pin) { TimerData td = timer_to_pwm_data[digitalPinToTimer(pin)]; double baseTenRes = 0; if(td.ChannelRegLoc) { //getting a base 10 resolution td.Is16Bit? (baseTenRes = _SFR_MEM16(td.TimerTopRegLoc)) : (baseTenRes = _SFR_MEM8(td.TimerTopRegLoc)); //change the base and return return toBaseTwo(baseTenRes); } else { return 0; } }
float GetPinResolution(uint8_t pin) { uint8_t timer = digitalPinToTimer(pin); uint16_t top; switch(timer) { case TIMER0B: top = Timer0_GetTop(); break; case TIMER1A: top = Timer1_GetTop(); break; case TIMER1B: top = Timer1_GetTop(); break; case TIMER2B: top = Timer2_GetTop(); default: return 0; } return toBaseTwo(top); }
float GetResolution_16(const int16_t timerOffset) { return toBaseTwo(ICR_16(timerOffset)); }
float GetResolution_8(const int16_t timerOffset) { return toBaseTwo(OCRA_8(timerOffset)); }
float GetResolution_16() { return toBaseTwo(ICR1); }