Move M907-M910 to cpp

This commit is contained in:
Scott Lahteine 2017-09-17 18:45:21 -05:00
parent 2e89685154
commit 6e0503eab2
9 changed files with 101 additions and 58 deletions

View file

@ -58,6 +58,10 @@
#include "module/tool_change.h" #include "module/tool_change.h"
#endif #endif
#if ENABLED(DIGIPOT_I2C)
#include "feature/digipot/digipot.h"
#endif
#if ENABLED(BEZIER_CURVE_SUPPORT) #if ENABLED(BEZIER_CURVE_SUPPORT)
#include "module/planner_bezier.h" #include "module/planner_bezier.h"
#endif #endif
@ -206,11 +210,6 @@ millis_t max_inactive_time = 0,
* *************************************************************************** * ***************************************************************************
*/ */
#if ENABLED(DIGIPOT_I2C)
extern void digipot_i2c_set_current(uint8_t channel, float current);
extern void digipot_i2c_init();
#endif
void setup_killpin() { void setup_killpin() {
#if HAS_KILL #if HAS_KILL
SET_INPUT_PULLUP(KILL_PIN); SET_INPUT_PULLUP(KILL_PIN);
@ -359,16 +358,6 @@ void quickstop_stepper() {
SYNC_PLAN_POSITION_KINEMATIC(); SYNC_PLAN_POSITION_KINEMATIC();
} }
#include "gcode/feature/digipot/M907.h"
#if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
#include "gcode/feature/digipot/M908.h"
#if ENABLED(DAC_STEPPER_CURRENT) // As with Printrbot RevF
#include "gcode/feature/digipot/M909.h"
#include "gcode/feature/digipot/M910.h"
#endif
#endif
#if HAS_MICROSTEPS #if HAS_MICROSTEPS
#include "gcode/control/M350.h" #include "gcode/control/M350.h"
#include "gcode/control/M351.h" #include "gcode/control/M351.h"

View file

@ -20,8 +20,10 @@
* *
*/ */
void gcode_M909() { #ifndef __DIGIPOT_H__
#define __DIGIPOT_H__
dac_print_values(); void digipot_i2c_set_current(const uint8_t channel, const float current);
void digipot_i2c_init();
} #endif // __DIGIPOT_H__

View file

@ -20,11 +20,11 @@
* *
*/ */
#include "../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#if ENABLED(DIGIPOT_I2C) && ENABLED(DIGIPOT_MCP4018) #if ENABLED(DIGIPOT_I2C) && ENABLED(DIGIPOT_MCP4018)
#include "../core/enum.h" #include "../../core/enum.h"
#include "Stream.h" #include "Stream.h"
#include "utility/twi.h" #include "utility/twi.h"
#include <SlowSoftI2CMaster.h> //https://github.com/stawel/SlowSoftI2CMaster #include <SlowSoftI2CMaster.h> //https://github.com/stawel/SlowSoftI2CMaster
@ -88,7 +88,7 @@ static void i2c_send(const uint8_t channel, const byte v) {
} }
// This is for the MCP4018 I2C based digipot // This is for the MCP4018 I2C based digipot
void digipot_i2c_set_current(uint8_t channel, float current) { void digipot_i2c_set_current(const uint8_t channel, const float current) {
i2c_send(channel, current_to_wiper(min(max(current, 0.0f), float(DIGIPOT_A4988_MAX_CURRENT)))); i2c_send(channel, current_to_wiper(min(max(current, 0.0f), float(DIGIPOT_A4988_MAX_CURRENT))));
} }

View file

@ -20,13 +20,13 @@
* *
*/ */
#include "../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#if ENABLED(DIGIPOT_I2C) && DISABLED(DIGIPOT_MCP4018) #if ENABLED(DIGIPOT_I2C) && DISABLED(DIGIPOT_MCP4018)
#include "Stream.h" #include "Stream.h"
#include "utility/twi.h" #include "utility/twi.h"
#include "Wire.h" #include <Wire.h>
// Settings for the I2C based DIGIPOT (MCP4451) on Azteeg X3 Pro // Settings for the I2C based DIGIPOT (MCP4451) on Azteeg X3 Pro
#if MB(5DPRINT) #if MB(5DPRINT)
@ -49,15 +49,10 @@ static void i2c_send(const byte addr, const byte a, const byte b) {
} }
// This is for the MCP4451 I2C based digipot // This is for the MCP4451 I2C based digipot
void digipot_i2c_set_current(uint8_t channel, float current) { void digipot_i2c_set_current(const uint8_t channel, const float current) {
current = min((float) max(current, 0.0f), DIGIPOT_I2C_MAX_CURRENT);
// these addresses are specific to Azteeg X3 Pro, can be set to others, // these addresses are specific to Azteeg X3 Pro, can be set to others,
// In this case first digipot is at address A0=0, A1= 0, second one is at A0=0, A1= 1 // In this case first digipot is at address A0=0, A1= 0, second one is at A0=0, A1= 1
byte addr = 0x2C; // channel 0-3 const byte addr = channel < 4 ? 0x2C : 0x2E; // channel 0-3 vs 4-7
if (channel >= 4) {
addr = 0x2E; // channel 4-7
channel -= 4;
}
// Initial setup // Initial setup
i2c_send(addr, 0x40, 0xFF); i2c_send(addr, 0x40, 0xFF);
@ -65,7 +60,7 @@ void digipot_i2c_set_current(uint8_t channel, float current) {
// Set actual wiper value // Set actual wiper value
byte addresses[4] = { 0x00, 0x10, 0x60, 0x70 }; byte addresses[4] = { 0x00, 0x10, 0x60, 0x70 };
i2c_send(addr, addresses[channel], current_to_wiper(current)); i2c_send(addr, addresses[channel & 0x3], current_to_wiper(min((float) max(current, 0.0f), DIGIPOT_I2C_MAX_CURRENT)));
} }
void digipot_i2c_init() { void digipot_i2c_init() {

View file

@ -20,10 +20,24 @@
* *
*/ */
#include "../../gcode.h"
#if HAS_DIGIPOTSS || HAS_MOTOR_CURRENT_PWM
#include "../../../module/stepper.h"
#endif
#if ENABLED(DIGIPOT_I2C)
#include "../../../feature/digipot/digipot.h"
#endif
#if ENABLED(DAC_STEPPER_CURRENT)
#include "../../../feature/dac/stepper_dac.h"
#endif
/** /**
* M907: Set digital trimpot motor current using axis codes X, Y, Z, E, B, S * M907: Set digital trimpot motor current using axis codes X, Y, Z, E, B, S
*/ */
void gcode_M907() { void GcodeSuite::M907() {
#if HAS_DIGIPOTSS #if HAS_DIGIPOTSS
LOOP_XYZE(i) if (parser.seen(axis_codes[i])) stepper.digipot_current(i, parser.value_int()); LOOP_XYZE(i) if (parser.seen(axis_codes[i])) stepper.digipot_current(i, parser.value_int());

View file

@ -20,20 +20,36 @@
* *
*/ */
#include "../../../inc/MarlinConfig.h"
#if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
#include "../../gcode.h"
#if HAS_DIGIPOTSS
#include "../../../module/stepper.h"
#endif
#if ENABLED(DAC_STEPPER_CURRENT)
#include "../../../feature/dac/stepper_dac.h"
#endif
/** /**
* M908: Control digital trimpot directly (M908 P<pin> S<current>) * M908: Control digital trimpot directly (M908 P<pin> S<current>)
*/ */
void gcode_M908() { void GcodeSuite::M908() {
#if HAS_DIGIPOTSS #if HAS_DIGIPOTSS
stepper.digitalPotWrite( stepper.digitalPotWrite(
parser.intval('P'), parser.intval('P'),
parser.intval('S') parser.intval('S')
); );
#endif #endif
#ifdef DAC_STEPPER_CURRENT #if ENABLED(DAC_STEPPER_CURRENT)
dac_current_raw( dac_current_raw(
parser.byteval('P', -1), parser.byteval('P', -1),
parser.ushortval('S', 0) parser.ushortval('S', 0)
); );
#endif #endif
} }
#endif // HAS_DIGIPOTSS || DAC_STEPPER_CURRENT

View file

@ -0,0 +1,36 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../inc/MarlinConfig.h"
#if ENABLED(DAC_STEPPER_CURRENT)
#include "../../gcode.h"
#include "../../../feature/dac/stepper_dac.h"
void GcodeSuite::M909() {
dac_print_values();
}
#endif // DAC_STEPPER_CURRENT

View file

@ -20,8 +20,17 @@
* *
*/ */
void gcode_M910() { #include "../../../inc/MarlinConfig.h"
#if ENABLED(DAC_STEPPER_CURRENT)
#include "../../gcode.h"
#include "../../../feature/dac/stepper_dac.h"
void GcodeSuite::M910() {
dac_commit_eeprom(); dac_commit_eeprom();
} }
#endif // DAC_STEPPER_CURRENT

View file

@ -122,10 +122,6 @@ extern void gcode_M165();
extern void gcode_M350(); extern void gcode_M350();
extern void gcode_M351(); extern void gcode_M351();
extern void gcode_M355(); extern void gcode_M355();
extern void gcode_M907();
extern void gcode_M908();
extern void gcode_M909();
extern void gcode_M910();
extern void gcode_M999(); extern void gcode_M999();
extern void gcode_T(uint8_t tmp_extruder); extern void gcode_T(uint8_t tmp_extruder);
@ -655,29 +651,15 @@ void GcodeSuite::process_next_command() {
case 900: M900(); break; // M900: Set advance K factor. case 900: M900(); break; // M900: Set advance K factor.
#endif #endif
case 907: // M907: Set digital trimpot motor current using axis codes. case 907: M907(); break; // M907: Set digital trimpot motor current using axis codes.
gcode_M907();
break;
#if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT) #if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
case 908: M908(); break; // M908: Control digital trimpot directly.
case 908: // M908: Control digital trimpot directly.
gcode_M908();
break;
#if ENABLED(DAC_STEPPER_CURRENT) // As with Printrbot RevF #if ENABLED(DAC_STEPPER_CURRENT) // As with Printrbot RevF
case 909: M909(); break; // M909: Print digipot/DAC current value
case 909: // M909: Print digipot/DAC current value case 910: M910(); break; // M910: Commit digipot/DAC value to external EEPROM
gcode_M909(); #endif
break;
case 910: // M910: Commit digipot/DAC value to external EEPROM
gcode_M910();
break;
#endif #endif
#endif // HAS_DIGIPOTSS || DAC_STEPPER_CURRENT
#if ENABLED(HAVE_TMC2130) #if ENABLED(HAVE_TMC2130)
case 906: M906(); break; // M906: Set motor current in milliamps using axis codes X, Y, Z, E case 906: M906(); break; // M906: Set motor current in milliamps using axis codes X, Y, Z, E