Add Azteeg X3 Pro as motherboard 68
Add digipot i2c control for MCP4451 Allow M907 to set i2c digipot currents in amps Fix Makefile to allow Azteeg motherboards Fix Makefile to allow Wire libraries only Add beeper pin for Azteeg X3 Pro
This commit is contained in:
parent
e1ae7952eb
commit
b819fc53ca
9 changed files with 384 additions and 274 deletions
|
@ -52,6 +52,7 @@
|
|||
// 65 = Azteeg X1
|
||||
// 66 = Melzi with ATmega1284 (MaKr3d version)
|
||||
// 67 = Azteeg X3
|
||||
// 68 = Azteeg X3 Pro
|
||||
// 7 = Ultimaker
|
||||
// 71 = Ultimaker (Older electronics. Pre 1.5.4. This is rare)
|
||||
// 77 = 3Drag Controller
|
||||
|
|
|
@ -268,6 +268,12 @@
|
|||
// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
|
||||
#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
|
||||
|
||||
// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
|
||||
#define DIGIPOT_I2C
|
||||
// Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
|
||||
#define DIGIPOT_I2C_NUM_CHANNELS 8
|
||||
// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
|
||||
#define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
|
||||
|
||||
//===========================================================================
|
||||
//=============================Additional Features===========================
|
||||
|
|
|
@ -55,7 +55,10 @@ UPLOAD_PORT ?= /dev/arduino
|
|||
BUILD_DIR ?= applet
|
||||
|
||||
# This defines whether Liquid_TWI2 support will be built
|
||||
LIQUID_TWI2 ?= 0
|
||||
LIQUID_TWI2 ?= 0
|
||||
|
||||
# this defines if Wire is needed
|
||||
WIRE ?= 0
|
||||
|
||||
############################################################################
|
||||
# Below here nothing should be changed...
|
||||
|
@ -174,6 +177,14 @@ else ifeq ($(HARDWARE_MOTHERBOARD),301)
|
|||
HARDWARE_VARIANT ?= arduino
|
||||
MCU ?= atmega2560
|
||||
|
||||
# Azteeg
|
||||
else ifeq ($(HARDWARE_MOTHERBOARD),67)
|
||||
HARDWARE_VARIANT ?= arduino
|
||||
MCU ?= atmega2560
|
||||
else ifeq ($(HARDWARE_MOTHERBOARD),68)
|
||||
HARDWARE_VARIANT ?= arduino
|
||||
MCU ?= atmega2560
|
||||
|
||||
endif
|
||||
|
||||
# Be sure to regenerate speed_lookuptable.h with create_speed_lookuptable.py
|
||||
|
@ -213,6 +224,10 @@ VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Wire
|
|||
VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Wire/utility
|
||||
VPATH += $(ARDUINO_INSTALL_DIR)/libraries/LiquidTWI2
|
||||
endif
|
||||
ifeq ($(WIRE), 1)
|
||||
VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Wire
|
||||
VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Wire/utility
|
||||
endif
|
||||
else
|
||||
VPATH += $(HARDWARE_DIR)/libraries/LiquidCrystal
|
||||
VPATH += $(HARDWARE_DIR)/libraries/SPI
|
||||
|
@ -221,6 +236,10 @@ VPATH += $(HARDWARE_DIR)/libraries/Wire
|
|||
VPATH += $(HARDWARE_DIR)/libraries/Wire/utility
|
||||
VPATH += $(HARDWARE_DIR)/libraries/LiquidTWI2
|
||||
endif
|
||||
ifeq ($(WIRE, 1)
|
||||
VPATH += $(HARDWARE_DIR)/libraries/Wire
|
||||
VPATH += $(HARDWARE_DIR)/libraries/Wire/utility
|
||||
endif
|
||||
endif
|
||||
ifeq ($(HARDWARE_VARIANT), arduino)
|
||||
HARDWARE_SUB_VARIANT ?= mega
|
||||
|
@ -241,7 +260,7 @@ CXXSRC = WMath.cpp WString.cpp Print.cpp Marlin_main.cpp \
|
|||
MarlinSerial.cpp Sd2Card.cpp SdBaseFile.cpp SdFatUtil.cpp \
|
||||
SdFile.cpp SdVolume.cpp motion_control.cpp planner.cpp \
|
||||
stepper.cpp temperature.cpp cardreader.cpp ConfigurationStore.cpp \
|
||||
watchdog.cpp SPI.cpp Servo.cpp Tone.cpp ultralcd.cpp
|
||||
watchdog.cpp SPI.cpp Servo.cpp Tone.cpp ultralcd.cpp digipot_mcp4451.cpp
|
||||
ifeq ($(LIQUID_TWI2), 0)
|
||||
CXXSRC += LiquidCrystal.cpp
|
||||
else
|
||||
|
@ -249,6 +268,11 @@ SRC += twi.c
|
|||
CXXSRC += Wire.cpp LiquidTWI2.cpp
|
||||
endif
|
||||
|
||||
ifeq ($(WIRE), 1)
|
||||
SRC += twi.c
|
||||
CXXSRC += Wire.cpp
|
||||
endif
|
||||
|
||||
#Check for Arduino 1.0.0 or higher and use the correct sourcefiles for that version
|
||||
ifeq ($(shell [ $(ARDUINO_VERSION) -ge 100 ] && echo true), true)
|
||||
CXXSRC += main.cpp
|
||||
|
|
|
@ -235,4 +235,9 @@ extern unsigned long stoptime;
|
|||
// Handling multiple extruders pins
|
||||
extern uint8_t active_extruder;
|
||||
|
||||
#ifdef DIGIPOT_I2C
|
||||
extern void digipot_i2c_set_current( int channel, float current );
|
||||
extern void digipot_i2c_init();
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -50,3 +50,7 @@
|
|||
#if defined(DIGIPOTSS_PIN) && DIGIPOTSS_PIN > -1
|
||||
#include <SPI.h>
|
||||
#endif
|
||||
|
||||
#if defined(DIGIPOT_I2C)
|
||||
#include <Wire.h>
|
||||
#endif
|
||||
|
|
|
@ -50,3 +50,7 @@
|
|||
#if defined(DIGIPOTSS_PIN) && DIGIPOTSS_PIN > -1
|
||||
#include <SPI.h>
|
||||
#endif
|
||||
|
||||
#if defined(DIGIPOT_I2C)
|
||||
#include <Wire.h>
|
||||
#endif
|
||||
|
|
|
@ -492,6 +492,10 @@ void setup()
|
|||
#if defined(CONTROLLERFAN_PIN) && CONTROLLERFAN_PIN > -1
|
||||
SET_OUTPUT(CONTROLLERFAN_PIN); //Set pin used for driver cooling fan
|
||||
#endif
|
||||
|
||||
#ifdef DIGIPOT_I2C
|
||||
digipot_i2c_init();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -2841,6 +2845,12 @@ void process_commands()
|
|||
#ifdef MOTOR_CURRENT_PWM_E_PIN
|
||||
if(code_seen('E')) digipot_current(2, code_value());
|
||||
#endif
|
||||
#ifdef DIGIPOT_I2C
|
||||
// this one uses actual amps in floating point
|
||||
for(int i=0;i<NUM_AXIS;i++) if(code_seen(axis_codes[i])) digipot_i2c_set_current(i, code_value());
|
||||
// for each additional extruder (named B,C,D,E..., channels 4,5,6,7...)
|
||||
for(int i=NUM_AXIS;i<DIGIPOT_I2C_NUM_CHANNELS;i++) if(code_seen('B'+i-NUM_AXIS)) digipot_i2c_set_current(i, code_value());
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case 908: // M908 Control digital trimpot directly.
|
||||
|
|
54
Marlin/digipot_mcp4451.cpp
Normal file
54
Marlin/digipot_mcp4451.cpp
Normal file
|
@ -0,0 +1,54 @@
|
|||
#include "Configuration.h"
|
||||
|
||||
#ifdef DIGIPOT_I2C
|
||||
#include "Stream.h"
|
||||
#include "utility/twi.h"
|
||||
#include "Wire.h"
|
||||
|
||||
// Settings for the I2C based DIGIPOT (MCP4451) on Azteeg X3 Pro
|
||||
#define DIGIPOT_I2C_FACTOR 106.7
|
||||
#define DIGIPOT_I2C_MAX_CURRENT 2.5
|
||||
|
||||
static byte current_to_wiper( float current ){
|
||||
return byte(ceil(float((DIGIPOT_I2C_FACTOR*current))));
|
||||
}
|
||||
|
||||
static void i2c_send(byte addr, byte a, byte b)
|
||||
{
|
||||
Wire.beginTransmission(addr);
|
||||
Wire.write(a);
|
||||
Wire.write(b);
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
// This is for the MCP4451 I2C based digipot
|
||||
void digipot_i2c_set_current( int channel, 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,
|
||||
// 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
|
||||
if(channel >= 4) {
|
||||
addr= 0x2E; // channel 4-7
|
||||
channel-= 4;
|
||||
}
|
||||
|
||||
// Initial setup
|
||||
i2c_send( addr, 0x40, 0xff );
|
||||
i2c_send( addr, 0xA0, 0xff );
|
||||
|
||||
// Set actual wiper value
|
||||
byte addresses[4] = { 0x00, 0x10, 0x60, 0x70 };
|
||||
i2c_send( addr, addresses[channel], current_to_wiper(current) );
|
||||
}
|
||||
|
||||
void digipot_i2c_init()
|
||||
{
|
||||
const float digipot_motor_current[] = DIGIPOT_I2C_MOTOR_CURRENTS;
|
||||
Wire.begin();
|
||||
// setup initial currents as defined in Configuration_adv.h
|
||||
for(int i=0;i<=sizeof(digipot_motor_current)/sizeof(float);i++) {
|
||||
digipot_i2c_set_current(i, digipot_motor_current[i]);
|
||||
}
|
||||
}
|
||||
#endif
|
|
@ -375,7 +375,7 @@
|
|||
* Arduino Mega pin assignment
|
||||
*
|
||||
****************************************************************************************/
|
||||
#if MOTHERBOARD == 3 || MOTHERBOARD == 33 || MOTHERBOARD == 34 || MOTHERBOARD == 35 || MOTHERBOARD == 77 || MOTHERBOARD == 67
|
||||
#if MOTHERBOARD == 3 || MOTHERBOARD == 33 || MOTHERBOARD == 34 || MOTHERBOARD == 35 || MOTHERBOARD == 77 || MOTHERBOARD == 67 || MOTHERBOARD == 68
|
||||
#define KNOWN_BOARD 1
|
||||
|
||||
//////////////////FIX THIS//////////////
|
||||
|
@ -391,7 +391,7 @@
|
|||
// #define RAMPS_V_1_0
|
||||
|
||||
|
||||
#if MOTHERBOARD == 33 || MOTHERBOARD == 34 || MOTHERBOARD == 35 || MOTHERBOARD == 77 || MOTHERBOARD == 67
|
||||
#if MOTHERBOARD == 33 || MOTHERBOARD == 34 || MOTHERBOARD == 35 || MOTHERBOARD == 77 || MOTHERBOARD == 67 || MOTHERBOARD == 68
|
||||
|
||||
#define LARGE_FLASH true
|
||||
|
||||
|
@ -477,7 +477,7 @@
|
|||
#define LED_PIN 13
|
||||
#endif
|
||||
|
||||
#if MOTHERBOARD == 33 || MOTHERBOARD == 35 || MOTHERBOARD == 67
|
||||
#if MOTHERBOARD == 33 || MOTHERBOARD == 35 || MOTHERBOARD == 67 || MOTHERBOARD == 68
|
||||
#define FAN_PIN 9 // (Sprinter config)
|
||||
#else
|
||||
#define FAN_PIN 4 // IO pin. Buffer needed
|
||||
|
@ -534,8 +534,6 @@
|
|||
#endif
|
||||
#define TEMP_BED_PIN 14 // ANALOG NUMBERING
|
||||
|
||||
|
||||
|
||||
#ifdef NUM_SERVOS
|
||||
#define SERVO0_PIN 11
|
||||
|
||||
|
@ -552,6 +550,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#if MOTHERBOARD == 68
|
||||
#define BEEPER 33
|
||||
#endif
|
||||
|
||||
#ifdef TEMP_STAT_LEDS
|
||||
#if MOTHERBOARD == 67
|
||||
#define STAT_LED_RED 6
|
||||
|
|
Reference in a new issue