25#ifdef VARIABLE_SPINDLE
32 #ifdef VARIABLE_SPINDLE
35 SPINDLE_PWM_DDR |= (1<<SPINDLE_PWM_BIT);
36 SPINDLE_TCCRA_REGISTER = SPINDLE_TCCRA_INIT_MASK;
37 SPINDLE_TCCRB_REGISTER = SPINDLE_TCCRB_INIT_MASK;
38 #ifdef USE_SPINDLE_DIR_AS_ENABLE_PIN
39 SPINDLE_ENABLE_DDR |= (1<<SPINDLE_ENABLE_BIT);
41 #ifndef ENABLE_DUAL_AXIS
42 SPINDLE_DIRECTION_DDR |= (1<<SPINDLE_DIRECTION_BIT);
47 SPINDLE_ENABLE_DDR |= (1<<SPINDLE_ENABLE_BIT);
48 #ifndef ENABLE_DUAL_AXIS
49 SPINDLE_DIRECTION_DDR |= (1<<SPINDLE_DIRECTION_BIT);
59 #ifdef VARIABLE_SPINDLE
60 #ifdef USE_SPINDLE_DIR_AS_ENABLE_PIN
62 #ifdef INVERT_SPINDLE_ENABLE_PIN
68 if (SPINDLE_TCCRA_REGISTER & (1<<SPINDLE_COMB_BIT)) {
69 #ifdef ENABLE_DUAL_AXIS
72 if (SPINDLE_DIRECTION_PORT & (1<<SPINDLE_DIRECTION_BIT)) {
return(
SPINDLE_STATE_CCW); }
78 #ifdef INVERT_SPINDLE_ENABLE_PIN
79 if (
bit_isfalse(SPINDLE_ENABLE_PORT,(1<<SPINDLE_ENABLE_BIT))) {
81 if (
bit_istrue(SPINDLE_ENABLE_PORT,(1<<SPINDLE_ENABLE_BIT))) {
83 #ifdef ENABLE_DUAL_AXIS
86 if (SPINDLE_DIRECTION_PORT & (1<<SPINDLE_DIRECTION_BIT)) {
return(
SPINDLE_STATE_CCW); }
100 #ifdef VARIABLE_SPINDLE
101 SPINDLE_TCCRA_REGISTER &= ~(1<<SPINDLE_COMB_BIT);
102 #ifdef USE_SPINDLE_DIR_AS_ENABLE_PIN
103 #ifdef INVERT_SPINDLE_ENABLE_PIN
104 SPINDLE_ENABLE_PORT |= (1<<SPINDLE_ENABLE_BIT);
106 SPINDLE_ENABLE_PORT &= ~(1<<SPINDLE_ENABLE_BIT);
110 #ifdef INVERT_SPINDLE_ENABLE_PIN
111 SPINDLE_ENABLE_PORT |= (1<<SPINDLE_ENABLE_BIT);
113 SPINDLE_ENABLE_PORT &= ~(1<<SPINDLE_ENABLE_BIT);
119#ifdef VARIABLE_SPINDLE
124 SPINDLE_OCR_REGISTER = pwm_value;
125 #ifdef SPINDLE_ENABLE_OFF_WITH_ZERO_SPEED
126 if (pwm_value == SPINDLE_PWM_OFF_VALUE) {
129 SPINDLE_TCCRA_REGISTER |= (1<<SPINDLE_COMB_BIT);
130 #ifdef INVERT_SPINDLE_ENABLE_PIN
131 SPINDLE_ENABLE_PORT &= ~(1<<SPINDLE_ENABLE_BIT);
133 SPINDLE_ENABLE_PORT |= (1<<SPINDLE_ENABLE_BIT);
137 if (pwm_value == SPINDLE_PWM_OFF_VALUE) {
138 SPINDLE_TCCRA_REGISTER &= ~(1<<SPINDLE_COMB_BIT);
140 SPINDLE_TCCRA_REGISTER |= (1<<SPINDLE_COMB_BIT);
146 #ifdef ENABLE_PIECEWISE_LINEAR_SPINDLE
156 pwm_value = SPINDLE_PWM_MAX_VALUE;
159 pwm_value = SPINDLE_PWM_OFF_VALUE;
162 pwm_value = SPINDLE_PWM_MIN_VALUE;
200 pwm_value = SPINDLE_PWM_MAX_VALUE;
204 pwm_value = SPINDLE_PWM_OFF_VALUE;
207 pwm_value = SPINDLE_PWM_MIN_VALUE;
225#ifdef VARIABLE_SPINDLE
235 #ifdef VARIABLE_SPINDLE
242 #if !defined(USE_SPINDLE_DIR_AS_ENABLE_PIN) && !defined(ENABLE_DUAL_AXIS)
244 SPINDLE_DIRECTION_PORT &= ~(1<<SPINDLE_DIRECTION_BIT);
246 SPINDLE_DIRECTION_PORT |= (1<<SPINDLE_DIRECTION_BIT);
250 #ifdef VARIABLE_SPINDLE
257 #if (defined(USE_SPINDLE_DIR_AS_ENABLE_PIN) && \
258 !defined(SPINDLE_ENABLE_OFF_WITH_ZERO_SPEED)) || !defined(VARIABLE_SPINDLE)
261 #ifdef INVERT_SPINDLE_ENABLE_PIN
262 SPINDLE_ENABLE_PORT &= ~(1<<SPINDLE_ENABLE_BIT);
264 SPINDLE_ENABLE_PORT |= (1<<SPINDLE_ENABLE_BIT);
276#ifdef VARIABLE_SPINDLE
#define SPINDLE_ENABLE_CCW
#define SPINDLE_ENABLE_CW
#define bit_isfalse(x, mask)
#define bit_istrue(x, mask)
void protocol_buffer_synchronize()
#define BITFLAG_LASER_MODE
uint8_t spindle_get_state()
void spindle_set_speed(uint8_t pwm_value)
uint8_t spindle_compute_pwm_value(float rpm)
static float pwm_gradient
#define spindle_set_state(state, rpm)
void _spindle_set_state(uint8_t state)
#define SPINDLE_STATE_DISABLE
#define SPINDLE_STATE_CCW
#define spindle_sync(state, rpm)
void _spindle_sync(uint8_t state)
uint8_t report_ovr_counter
uint8_t spindle_speed_ovr