/* ===================================================================*/ LDD_TError PwmLdd3_SetDutyUS(LDD_TDeviceData *DeviceDataPtr, uint16_t Time) { PwmLdd3_TDeviceData *DeviceDataPrv = (PwmLdd3_TDeviceData *)DeviceDataPtr; LDD_TimerUnit_Tfloat rtval; /* Result of multiplication */ /* Time test - this test can be disabled by setting the "Ignore range checking" property to the "yes" value in the "Configuration inspector" */ if (Time > 0x186AU) { /* Is the given value out of range? */ return ERR_PARAM_RANGE; /* If yes then error */ } rtval = Time * 10.485894219446F; /* Multiply given value and actual clock configuration coefficient */ if (rtval > 0xFFFFUL) { /* Is the result greater than 65535 ? */ DeviceDataPrv->RatioStore = 0xFFFFU; /* If yes then use maximal possible value */ } else { DeviceDataPrv->RatioStore = (uint16_t)rtval; } SetRatio(DeviceDataPtr); /* Calculate and set up new appropriate values of the duty register */ return ERR_OK; /* OK */ }
/* ** =================================================================== ** Method : M_1_SetRatio16 (component PWM) ** Description : ** This method sets a new duty-cycle ratio. Ratio is expressed ** as a 16-bit unsigned integer number. 0 - FFFF value is ** proportional to ratio 0 - 100%. The method is available ** only if it is not selected list of predefined values in ** <Starting pulse width> property. ** Note: Calculated duty depends on the timer possibilities and ** on the selected period. ** Parameters : ** NAME - DESCRIPTION ** Ratio - Ratio to set. 0 - 65535 value is ** proportional to ratio 0 - 100% ** Returns : ** --- - Error code, possible codes: ** ERR_OK - OK ** ERR_SPEED - This device does not work in ** the active speed mode ** =================================================================== */ byte M_1_SetRatio16(word Ratio) { ActualRatio.Value = Ratio; /* Store new value of the ratio */ SetRatio(); /* Calculate and set up new appropriate values of the compare and modulo registers */ return ERR_OK; /* OK */ }
/* ** =================================================================== ** Method : Servo2_SetRatio16 (bean PWM) ** ** Description : ** This method sets a new duty-cycle ratio. ** Parameters : ** NAME - DESCRIPTION ** Ratio - Ratio is expressed as an 16-bit unsigned integer ** number. 0 - 65535 value is proportional ** to ratio 0 - 100% ** Note: Calculated duty depends on the timer possibilities ** and on the selected period. ** Returns : ** --- - Error code, possible codes: ** ERR_OK - OK ** ERR_SPEED - This device does not work in ** the active speed mode ** =================================================================== */ byte Servo2_SetRatio16(word Ratio) { RatioStore = Ratio; /* Store new value of the ratio */ SetRatio(); /* Calculate and set up new appropriate values of the duty and period registers */ return ERR_OK; /* OK */ }
/* ** =================================================================== ** Method : MotorD1_SetRatio8 (component PWM) ** ** Description : ** This method sets a new duty-cycle ratio. Ratio is expressed ** as an 8-bit unsigned integer number. 0 - FF value is ** proportional to ratio 0 - 100%. The method is available ** only if it is not selected list of predefined values in ** <Starting pulse width> property. ** Note: Calculated duty depends on the timer capabilities and ** on the selected period. ** Parameters : ** NAME - DESCRIPTION ** Ratio - Ratio to set. 0 - 255 value is ** proportional to ratio 0 - 100% ** Returns : ** --- - Error code, possible codes: ** ERR_OK - OK ** ERR_SPEED - This device does not work in ** the active speed mode ** =================================================================== */ byte MotorD1_SetRatio8(byte Ratio) { ActualRatio = ((word)Ratio << 0x08U) + Ratio; /* Store new value of the ratio */ SetRatio(); /* Calculate and set up new appropriate values of the compare and modulo registers */ return ERR_OK; /* OK */ }