779 lines
31 KiB
Plaintext
779 lines
31 KiB
Plaintext
/* Notice to developers: this file is intentionally included twice. */
|
|
|
|
/** \file
|
|
\brief Sample Configuration
|
|
|
|
\note this sample uses AIO0 for both X_STEP and thermistor, and is intended to be an example only!
|
|
*/
|
|
|
|
/*
|
|
CONTENTS
|
|
|
|
1. Mechanical/Hardware
|
|
2. Acceleration settings
|
|
3. Pinouts
|
|
4. Temperature sensors
|
|
5. Heaters
|
|
6. Communication options
|
|
7. Miscellaneous
|
|
8. Appendix A - PWMable pins and mappings
|
|
*/
|
|
|
|
/***************************************************************************\
|
|
* *
|
|
* 1. MECHANICAL/HARDWARE *
|
|
* *
|
|
\***************************************************************************/
|
|
|
|
/*
|
|
Set your microcontroller type in Makefile! atmega168/atmega328p/atmega644p/atmega1280
|
|
|
|
If you want to port this to a new chip, start off with arduino.h and see how you go.
|
|
*/
|
|
#ifndef __AVR_ATmega644__
|
|
#ifndef __AVR_ATmega644P__
|
|
#ifndef __AVR_ATmega1284P__
|
|
#error GEN7 has an ATmega 644, 644P or 1284P. Set your CPU type in the \
|
|
Makefile or select your board in the Arduino IDE!
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
/** \def CPU_TYPE
|
|
CPU types a user should be able to choose from in configtool. All
|
|
commented out.
|
|
*/
|
|
//#define CPU_TYPE xxxx
|
|
|
|
/** \def F_CPU_OPT
|
|
CPU clock frequencies a user should be able to choose from in configtool.
|
|
All commented out.
|
|
*/
|
|
//#define F_CPU_OPT xxxx
|
|
|
|
/** \def F_CPU
|
|
CPU clock rate
|
|
*/
|
|
#ifndef F_CPU
|
|
#define F_CPU 20000000UL
|
|
#endif
|
|
|
|
/** \def MOTHERBOARD
|
|
This is the motherboard, as opposed to the extruder. See extruder/ directory for GEN3 extruder firmware
|
|
*/
|
|
#define MOTHERBOARD
|
|
|
|
|
|
/** \def KINEMATICS
|
|
|
|
This defines the type of kinematics your printer uses. That's essential!
|
|
|
|
Valid values (see dda_kinematics.h):
|
|
|
|
KINEMATICS_STRAIGHT Motors move axis directions directly. This is the
|
|
traditional type, found in many printers, including
|
|
Mendel, Prusa i3, Mendel90, Ormerod, Mantis.
|
|
|
|
KINEMATICS_COREXY A bot using CoreXY kinematics. Typical for CoreXY are
|
|
long and crossing toothed belts and a print head moving
|
|
on the X-Y-plane.
|
|
*/
|
|
#define KINEMATICS_STRAIGHT
|
|
//#define KINEMATICS_COREXY
|
|
|
|
|
|
/** \def STEPS_PER_M
|
|
steps per meter ( = steps per mm * 1000 )
|
|
|
|
calculate these values appropriate for your machine
|
|
|
|
for threaded rods, this is
|
|
(steps motor per turn) / (pitch of the thread) * 1000
|
|
|
|
for belts, this is
|
|
(steps per motor turn) / (number of gear teeth) / (belt module) * 1000
|
|
|
|
half-stepping doubles the number, quarter stepping requires * 4, etc.
|
|
|
|
valid range = 20 to 4'0960'000 (0.02 to 40960 steps/mm)
|
|
|
|
all numbers are integers, so no decimal point, please :-)
|
|
*/
|
|
#define STEPS_PER_M_X 71111 // 9 teeth 5 mm
|
|
#define STEPS_PER_M_Y 71111 // 9 teeth 5 mm
|
|
#define STEPS_PER_M_Z 2844444 // 9 -> 20 teeth -> M8
|
|
|
|
/// http://blog.arcol.hu/?p=157 may help with this one
|
|
#define STEPS_PER_M_E 320000
|
|
|
|
/*
|
|
Values depending on the capabilities of your stepper motors and other mechanics.
|
|
All numbers are integers, no decimals allowed.
|
|
|
|
Units are mm/min
|
|
*/
|
|
|
|
/// used for G0 rapid moves and as a cap for all other feedrates
|
|
#define MAXIMUM_FEEDRATE_X 20000
|
|
#define MAXIMUM_FEEDRATE_Y 2000
|
|
#define MAXIMUM_FEEDRATE_Z 1000
|
|
#define MAXIMUM_FEEDRATE_E 20000
|
|
|
|
/// Used when doing precision endstop search and as default feedrate.
|
|
#define SEARCH_FEEDRATE_X 200
|
|
#define SEARCH_FEEDRATE_Y 200
|
|
#define SEARCH_FEEDRATE_Z 50
|
|
// no SEARCH_FEEDRATE_E, as E can't be searched
|
|
|
|
/** \def ENDSTOP_CLEARANCE_X
|
|
\def ENDSTOP_CLEARANCE_Y
|
|
\def ENDSTOP_CLEARANCE_Z
|
|
|
|
When hitting an endstop, Teacup properly decelerates instead of doing an
|
|
aprupt stop to save your mechanics. Ineviteably, this means it overshoots
|
|
the endstop trigger point by some distance.
|
|
|
|
To deal with this, Teacup adapts homing movement speeds to what your
|
|
endstops can deal with. The higher the allowed acceleration ( = deceleration,
|
|
see #define ACCELERATION) and the more clearance the endstop comes with,
|
|
the faster Teacup will do homing movements.
|
|
|
|
Set here how many micrometers (mm * 1000) your endstop allows the carriage
|
|
to overshoot the trigger point. Typically 1000 or 2000 for mechanical
|
|
endstops, more for optical ones. You can set it to zero, in which case
|
|
SEARCH_FEEDRATE_{XYZ} is used, but expect very slow homing movements.
|
|
|
|
Units: micrometers
|
|
Sane values: 0 to 20000 (0 to 20 mm)
|
|
Valid range: 0 to 1000000
|
|
*/
|
|
#define ENDSTOP_CLEARANCE_X 5000
|
|
#define ENDSTOP_CLEARANCE_Y 5000
|
|
#define ENDSTOP_CLEARANCE_Z 200
|
|
|
|
/**
|
|
Soft axis limits, in mm.
|
|
Define them to your machine's size relative to what your host considers to be the origin.
|
|
*/
|
|
|
|
//#define X_MIN 0.0
|
|
//#define X_MAX 200.0
|
|
|
|
//#define Y_MIN 0.0
|
|
//#define Y_MAX 200.0
|
|
|
|
//#define Z_MIN 0.0
|
|
//#define Z_MAX 140.0
|
|
|
|
/** \def E_ABSOLUTE
|
|
Some G-Code creators produce relative length commands for the extruder, others absolute ones. G-Code using absolute lengths can be recognized when there are G92 E0 commands from time to time. If you have G92 E0 in your G-Code, define this flag.
|
|
|
|
This is the startup default and can be changed with M82/M83 while running.
|
|
*/
|
|
// #define E_ABSOLUTE
|
|
|
|
|
|
|
|
/***************************************************************************\
|
|
* *
|
|
* 2. ACCELERATION *
|
|
* *
|
|
* Choose optionally one of ACCELERATION_REPRAP, ACCELERATION_RAMPING or *
|
|
* ACCELERATION_TEMPORAL. With none of them defined, movements are done *
|
|
* without acceleration. Recommended is ACCELERATION_RAMPING. *
|
|
* *
|
|
* LOOKAHEAD is experimental for now and works in conjunction with *
|
|
* ACCELERATION_RAMPING, only. That's why it's off by default. *
|
|
* *
|
|
* Also don't forget to adjust ACCELERATION to the capabilities of your *
|
|
* printer. The default is very moderate to be on the safe side. *
|
|
* *
|
|
\***************************************************************************/
|
|
|
|
//#define ACCELERATION_SPLIT
|
|
|
|
/** \def ACCELERATION_REPRAP
|
|
acceleration, reprap style.
|
|
Each movement starts at the speed of the previous command and accelerates or decelerates linearly to reach target speed at the end of the movement.
|
|
*/
|
|
// #define ACCELERATION_REPRAP
|
|
|
|
/** \def ACCELERATION_RAMPING
|
|
acceleration and deceleration ramping.
|
|
Each movement starts at (almost) no speed, linearly accelerates to target speed and decelerates just in time to smoothly stop at the target. alternative to ACCELERATION_REPRAP
|
|
*/
|
|
#define ACCELERATION_RAMPING
|
|
|
|
/** \def ACCELERATION
|
|
how fast to accelerate when using ACCELERATION_RAMPING.
|
|
given in mm/s^2, decimal allowed, useful range 1. to 10'000. Start with 10. for milling (high precision) or 1000. for printing
|
|
*/
|
|
#define ACCELERATION 50.
|
|
|
|
/** \def ACCELERATION_TEMPORAL
|
|
temporal step algorithm
|
|
This algorithm causes the timer to fire when any axis needs to step, instead of synchronising to the axis with the most steps ala bresenham.
|
|
|
|
This algorithm is not a type of acceleration, and I haven't worked out how to integrate acceleration with it.
|
|
However it does control step timing, so acceleration algorithms seemed appropriate
|
|
|
|
The Bresenham algorithm is great for drawing lines, but not so good for steppers - In the case where X steps 3 times to Y's two, Y experiences massive jitter as it steps in sync with X every 2 out of 3 X steps. This is a worst-case, but the problem exists for most non-45/90 degree moves. At higher speeds, the jitter /will/ cause position loss and unnecessary vibration.
|
|
This algorithm instead calculates when a step occurs on any axis, and sets the timer to that value.
|
|
|
|
// TODO: figure out how to add acceleration to this algorithm
|
|
*/
|
|
// #define ACCELERATION_TEMPORAL
|
|
|
|
/** \def LOOKAHEAD
|
|
Define this to enable look-ahead during *ramping* acceleration to smoothly
|
|
transition between moves instead of performing a dead stop every move.
|
|
Enabling look-ahead requires about 3600 bytes of flash memory.
|
|
*/
|
|
#define LOOKAHEAD
|
|
|
|
/** \def MAX_JERK_X
|
|
\def MAX_JERK_Y
|
|
\def MAX_JERK_Z
|
|
\def MAX_JERK_E
|
|
|
|
When performing look-ahead, we need to decide what an acceptable jerk to the
|
|
mechanics is. Look-ahead attempts to instantly change direction at movement
|
|
crossings, which means instant changes in the speed of the axes participating
|
|
in the movement. Define here how big the speed bumps on each of the axes is
|
|
allowed to be.
|
|
|
|
If you want a full stop before and after moving a specific axis, define
|
|
MAX_JERK of this axis to 0. This is often wanted for the Z axis. If you want
|
|
to ignore jerk on an axis, define it to twice the maximum feedrate of this
|
|
axis.
|
|
|
|
Having these values too low results in more than neccessary slowdown at
|
|
movement crossings, but is otherwise harmless. Too high values can result
|
|
in stepper motors suddenly stalling. If angles between movements in your
|
|
G-code are small and your printer runs through entire curves full speed,
|
|
there's no point in raising the values.
|
|
|
|
Units: mm/min
|
|
Sane values: 0 to 400
|
|
Valid range: 0 to 65535
|
|
*/
|
|
#define MAX_JERK_X 20
|
|
#define MAX_JERK_Y 20
|
|
#define MAX_JERK_Z 0
|
|
#define MAX_JERK_E 20
|
|
|
|
|
|
/***************************************************************************\
|
|
* *
|
|
* 3. PINOUTS *
|
|
* *
|
|
\***************************************************************************/
|
|
|
|
/** \def USE_INTERNAL_PULLUPS
|
|
|
|
Most controller chips feature internal pullup resistors on their input pins,
|
|
which get used for endstops by turning on this switch. Don't turn it on when
|
|
using endstops which need no pull resistor, e.g. optical endstops, because
|
|
pull resistors are counterproductive there.
|
|
|
|
One can't use USE_INTERNAL_PULLUPS and USE_INTERNAL_PULLDOWNS at the same
|
|
time, of course.
|
|
*/
|
|
//#define USE_INTERNAL_PULLUPS
|
|
|
|
/** \def USE_INTERNAL_PULLDOWNS
|
|
|
|
Some controller chips feature internal pulldown resistors on their input
|
|
pins, which get used for endstops by turning on this switch. Don't turn it
|
|
on when using endstops which need no pull resistor, e.g. optical endstops,
|
|
because pull resistors are counterproductive there.
|
|
|
|
One can't use USE_INTERNAL_PULLDOWNS and USE_INTERNAL_PULLUPS at the same
|
|
time, of course.
|
|
*/
|
|
//#define USE_INTERNAL_PULLDOWNS
|
|
|
|
/** \def Z_AUTODISABLE
|
|
Automatically disable Z axis when not in use. This is useful for printers
|
|
with a self-locking Z axis, e.g. the various Mendel derivates.
|
|
|
|
Other printers have a heavy Z axis or a not self-locking spindle. In that
|
|
case you should not activate this.
|
|
|
|
This option has no effect on controllers with a common stepper enable pin.
|
|
*/
|
|
#define Z_AUTODISABLE
|
|
|
|
/*
|
|
user defined pins
|
|
adjust to suit your electronics,
|
|
or adjust your electronics to suit this
|
|
*/
|
|
|
|
//#define TX_ENABLE_PIN xxxx
|
|
//#define RX_ENABLE_PIN xxxx
|
|
|
|
#define X_STEP_PIN DIO29
|
|
#define X_DIR_PIN DIO28
|
|
#define X_MIN_PIN DIO0
|
|
//#define X_MAX_PIN xxxx
|
|
//#define X_ENABLE_PIN xxxx
|
|
//#define X_INVERT_DIR
|
|
//#define X_INVERT_MIN
|
|
//#define X_INVERT_MAX
|
|
//#define X_INVERT_ENABLE
|
|
|
|
#define Y_STEP_PIN DIO27
|
|
#define Y_DIR_PIN DIO26
|
|
#define Y_MIN_PIN DIO1
|
|
//#define Y_MAX_PIN xxxx
|
|
//#define Y_ENABLE_PIN xxxx
|
|
//#define Y_INVERT_DIR
|
|
//#define Y_INVERT_MIN
|
|
//#define Y_INVERT_MAX
|
|
//#define Y_INVERT_ENABLE
|
|
|
|
#define Z_STEP_PIN DIO23
|
|
#define Z_DIR_PIN DIO22
|
|
#define Z_MIN_PIN DIO2
|
|
//#define Z_MAX_PIN xxxx
|
|
//#define Z_ENABLE_PIN xxxx
|
|
//#define Z_INVERT_DIR
|
|
//#define Z_INVERT_MIN
|
|
//#define Z_INVERT_MAX
|
|
//#define Z_INVERT_ENABLE
|
|
|
|
#define E_STEP_PIN DIO19
|
|
#define E_DIR_PIN DIO18
|
|
//#define E_ENABLE_PIN
|
|
//#define E_INVERT_DIR
|
|
//#define E_INVERT_ENABLE
|
|
|
|
#define PS_ON_PIN DIO15
|
|
//#define PS_INVERT_ON
|
|
//#define PS_MOSFET_PIN xxxx
|
|
#define STEPPER_ENABLE_PIN DIO25
|
|
#define STEPPER_INVERT_ENABLE
|
|
|
|
/** \def DEBUG_LED_PIN
|
|
|
|
Enable flashing of a LED during motor stepping.
|
|
|
|
Disabled by default. Uncommenting this makes the binary a few bytes larger
|
|
and adds a few cycles to the step timing interrrupt in timer.c. Also used
|
|
for precision profiling (profiling works even without actually having such
|
|
a LED in hardware), see
|
|
http://reprap.org/wiki/Teacup_Firmware#Doing_precision_profiling
|
|
*/
|
|
#define DEBUG_LED_PIN DIO21
|
|
|
|
/** \def SD_CARD_SELECT_PIN
|
|
|
|
Chip Select pin of the SD card.
|
|
|
|
SD cards work over SPI and have a Chip Select or Slave Select (SS) pin.
|
|
Choose this pin according to where on the board your SD card adapter is
|
|
connected. Disabling this pin also disables SD card support and makes the
|
|
firmware binary about 4.5 kB smaller.
|
|
|
|
Connecting a device to SPI actually uses 4 signal lines, the other three
|
|
pins are choosen by Teacup automatically.
|
|
*/
|
|
//#define SD_CARD_SELECT_PIN xxxx
|
|
|
|
/** \def MCP3008_SELECT_PIN
|
|
|
|
Chip Select pin of the MCP3008 ADC.
|
|
|
|
MCP3008/4 analog-digital converter works over SPI and has a Chip Select pin.
|
|
Choose this pin according to where the MCP3008 is connected. Setting this
|
|
pin is required only if at least one temperature sensor of type MCP3008 is
|
|
configured. Else it's ignored.
|
|
*/
|
|
//#define MCP3008_SELECT_PIN xxxx
|
|
|
|
|
|
|
|
/***************************************************************************\
|
|
* *
|
|
* 4. TEMPERATURE SENSORS *
|
|
* *
|
|
\***************************************************************************/
|
|
|
|
/** \def TEMP_HYSTERESIS
|
|
|
|
Actual temperature must be target +/- this hysteresis before target
|
|
temperature is considered to be achieved. Also, BANG_BANG tries to stay
|
|
within half of this hysteresis.
|
|
|
|
Unit: degree Celsius
|
|
*/
|
|
#define TEMP_HYSTERESIS 10
|
|
|
|
/**
|
|
TEMP_RESIDENCY_TIME: actual temperature must be close to target (within
|
|
set temperature +- TEMP_HYSTERESIS) for this long before target is achieved
|
|
(and a M116 succeeds). Unit is seconds.
|
|
*/
|
|
#define TEMP_RESIDENCY_TIME 60
|
|
|
|
/** \def TEMP_EWMA
|
|
Smooth noisy temperature sensors. Good hardware shouldn't be noisy. Set to
|
|
1000 for unfiltered data (and a 140 bytes smaller binary).
|
|
|
|
Instrument Engineer's Handbook, 4th ed, Vol 2 p126 says values of
|
|
50 to 100 are typical. Smaller is smoother but slower adjusting, larger is
|
|
quicker but rougher. If you need to use this, set the PID parameter to zero
|
|
(M132 S0) to make the PID loop insensitive to noise.
|
|
|
|
Valid range: 1 to 1000
|
|
*/
|
|
#define TEMP_EWMA 1000
|
|
|
|
/** \def TEMP_MAX6675 TEMP_THERMISTOR TEMP_AD595 TEMP_PT100 TEMP_INTERCOM
|
|
\def TEMP_MCP3008
|
|
|
|
Which temperature sensor types are you using? Leave all used ones
|
|
uncommented, comment out all others to save binary size and enhance
|
|
performance.
|
|
*/
|
|
//#define TEMP_MAX6675
|
|
#define TEMP_THERMISTOR
|
|
//#define TEMP_AD595
|
|
//#define TEMP_PT100
|
|
//#define TEMP_INTERCOM
|
|
//#define TEMP_MCP3008
|
|
|
|
/** \def TEMP_SENSOR_PIN
|
|
Temperature sensor pins a user should be able to choose from in configtool.
|
|
All commented out.
|
|
*/
|
|
//#define TEMP_SENSOR_PIN xxxx
|
|
|
|
/***************************************************************************\
|
|
* *
|
|
* Define your temperature sensors here. One line for each sensor, only *
|
|
* limited by the number of available ATmega pins. *
|
|
* *
|
|
* Types are same as TEMP_ list above - TT_MAX6675, TT_THERMISTOR, TT_AD595, *
|
|
* TT_PT100, TT_INTERCOM. See list in temp.c. *
|
|
* *
|
|
* The "additional" field is used for TT_THERMISTOR only. It defines the *
|
|
* name of the table(s) in thermistortable.h to use. This name is arbitrary, *
|
|
* often used names include THERMISTOR_EXTRUDER and THERMISTOR_BED. Also, *
|
|
* several sensors can share the same table, which saves binary size. *
|
|
* *
|
|
* For a GEN3 set temp_type to TT_INTERCOM and temp_pin to AIO0. The pin *
|
|
* won't be used in this case. *
|
|
* *
|
|
\***************************************************************************/
|
|
|
|
#ifndef DEFINE_TEMP_SENSOR
|
|
#define DEFINE_TEMP_SENSOR(...)
|
|
#endif
|
|
|
|
// name type pin additional
|
|
DEFINE_TEMP_SENSOR(extruder, TT_THERMISTOR, AIO1, THERMISTOR_EXTRUDER)
|
|
DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO0, THERMISTOR_EXTRUDER)
|
|
|
|
|
|
|
|
/***************************************************************************\
|
|
* *
|
|
* 5. HEATERS *
|
|
* *
|
|
\***************************************************************************/
|
|
|
|
/** \def REPORT_TARGET_TEMPS
|
|
With this enabled, M105 commands will return the current temperatures along
|
|
with the target temps, separated by a slash: ok T:xxx.x/xxx.x B:xxx.x/xxx.x
|
|
With this disabled, only temps will be returned: ok T:xxx.x B:xxx.x
|
|
Enabling adds 78 bytes to the image.
|
|
*/
|
|
#define REPORT_TARGET_TEMPS
|
|
|
|
/** \def HEATER_SANITY_CHECK
|
|
check if heater responds to changes in target temperature, disable and spit errors if not
|
|
largely untested, please comment in forum if this works, or doesn't work for you!
|
|
*/
|
|
// #define HEATER_SANITY_CHECK
|
|
|
|
/***************************************************************************\
|
|
* *
|
|
* Define your heaters and devices here. *
|
|
* *
|
|
* To attach a heater to a temp sensor above, simply use exactly the same *
|
|
* name - copy+paste is your friend. Some common names are 'extruder', *
|
|
* 'bed', 'fan', 'motor', ... names with special meaning can be found *
|
|
* in gcode_process.c. Currently, these are: *
|
|
* HEATER_extruder (M104) *
|
|
* HEATER_bed (M140) *
|
|
* HEATER_fan (M106) *
|
|
* *
|
|
* Devices don't neccessarily have a temperature sensor, e.g. fans or *
|
|
* milling spindles. Operate such devices by setting their power (M106), *
|
|
* instead of setting their temperature (M104). *
|
|
* *
|
|
* Also note, the index of a heater (M106 P#) can differ from the index of *
|
|
* its attached temperature sensor (M104 P#) in case sensor-less devices *
|
|
* are defined or the order of the definitions differs. The first defined *
|
|
* device has the index 0 (zero). *
|
|
* *
|
|
* Set 'invert' to 0 for normal heaters. Setting it to 1 inverts the pin *
|
|
* signal for this pin, e.g. for a MOSFET with a driver. *
|
|
* *
|
|
* Set 'pwm' to ... *
|
|
* 1 for using PWM on a PWM-able pin and on/off on other pins. *
|
|
* 0 for using on/off on a PWM-able pin, too. *
|
|
* Using PWM usually gives smoother temperature control but can conflict *
|
|
* with slow switches, like solid state relays. PWM frequency can be *
|
|
* influenced globally with FAST_PWM, see below. *
|
|
* *
|
|
\***************************************************************************/
|
|
|
|
/** \def HEATER_PIN
|
|
Heater pins a user should be able to choose from in configtool. All
|
|
commented out.
|
|
*/
|
|
//#define HEATER_PIN xxxx
|
|
|
|
/** \def HEATER_MAX_ACTIVE
|
|
Enable heater_max value.
|
|
|
|
When you have a heater which has very huge power, you can reduce it.
|
|
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
|
the heater has 120W. To reduce it again to 40W set the heater_max to 25%.
|
|
|
|
heater_max values are allowed between 1 and 100.
|
|
*/
|
|
|
|
//DEFINE_HEATERS_START
|
|
// #define HEATER_MAX_ACTIVE
|
|
|
|
// name pin invert pwm
|
|
DEFINE_HEATER(extruder, DIO4, 0, 2, 100)
|
|
DEFINE_HEATER(bed, DIO3, 0, 2, 100)
|
|
|
|
/// and now because the c preprocessor isn't as smart as it could be,
|
|
/// uncomment the ones you've listed above and comment the rest.
|
|
/// NOTE: these are used to enable various capability-specific chunks of code, you do NOT need to create new entries unless you are adding new capabilities elsewhere in the code!
|
|
/// so if you list a bed above, uncomment HEATER_BED, but if you list a chamber you do NOT need to create HEATED_CHAMBER
|
|
/// I have searched high and low for a way to make the preprocessor do this for us, but so far I have not found a way.
|
|
|
|
#define HEATER_EXTRUDER HEATER_extruder
|
|
#define HEATER_BED HEATER_bed
|
|
|
|
|
|
|
|
/***************************************************************************\
|
|
* *
|
|
* 6. COMMUNICATION OPTIONS *
|
|
* *
|
|
\***************************************************************************/
|
|
|
|
/** \def BAUD
|
|
Baud rate for the serial RS232 protocol connection to the host. Usually
|
|
115200, other common values are 19200, 38400 or 57600. Ignored when USB_SERIAL
|
|
is defined.
|
|
*/
|
|
#define BAUD 38400
|
|
|
|
/** \def USB_SERIAL
|
|
Define this for using USB instead of the serial RS232 protocol. Works on
|
|
USB-equipped ATmegas, like the ATmega32U4, only.
|
|
*/
|
|
// #define USB_SERIAL
|
|
|
|
/** \def XONXOFF
|
|
Xon/Xoff flow control.
|
|
Redundant when using RepRap Host for sending GCode, but mandatory when sending GCode files with a plain terminal emulator, like GtkTerm (Linux), CoolTerm (Mac) or HyperTerminal (Windows).
|
|
Can also be set in Makefile
|
|
*/
|
|
// #define XONXOFF
|
|
|
|
|
|
|
|
/***************************************************************************\
|
|
* *
|
|
* 7. MISCELLANEOUS OPTIONS *
|
|
* *
|
|
\***************************************************************************/
|
|
|
|
/** \def EECONFIG
|
|
EECONFIG: Enable EEPROM configuration storage.
|
|
|
|
Enabled by default. Commenting this out makes the binary several hundred
|
|
bytes smaller, so you might want to disable EEPROM storage on small MCUs,
|
|
like the ATmega168.
|
|
*/
|
|
#define EECONFIG
|
|
|
|
/** \def BANG_BANG
|
|
BANG_BANG
|
|
drops PID loop from heater control, reduces code size significantly (1300 bytes!)
|
|
may allow DEBUG on '168
|
|
*/
|
|
// #define BANG_BANG
|
|
/** \def BANG_BANG_ON
|
|
BANG_BANG_ON
|
|
PWM value for 'on'
|
|
*/
|
|
// #define BANG_BANG_ON 200
|
|
/** \def BANG_BANG_OFF
|
|
BANG_BANG_OFF
|
|
PWM value for 'off'
|
|
*/
|
|
// #define BANG_BANG_OFF 45
|
|
|
|
/**
|
|
move buffer size, in number of moves
|
|
note that each move takes a fair chunk of ram (69 bytes as of this writing) so don't make the buffer too big - a bigger serial readbuffer may help more than increasing this unless your gcodes are more than 70 characters long on average.
|
|
however, a larger movebuffer will probably help with lots of short consecutive moves, as each move takes a bunch of math (hence time) to set up so a longer buffer allows more of the math to be done during preceding longer moves
|
|
*/
|
|
#define MOVEBUFFER_SIZE 16
|
|
|
|
/** \def DC_EXTRUDER
|
|
DC extruder
|
|
If you have a DC motor extruder, configure it as a "heater" above and define this value as the index or name. You probably also want to comment out E_STEP_PIN and E_DIR_PIN in the Pinouts section above.
|
|
*/
|
|
// #define DC_EXTRUDER HEATER_motor
|
|
// #define DC_EXTRUDER_PWM 180
|
|
|
|
/** \def USE_WATCHDOG
|
|
Teacup implements a watchdog, which has to be reset every 250ms or it will reboot the controller. As rebooting (and letting the GCode sending application trying to continue the build with a then different Home point) is probably even worse than just hanging, and there is no better restore code in place, this is disabled for now.
|
|
*/
|
|
// #define USE_WATCHDOG
|
|
|
|
/**
|
|
temperature history count. This is how many temperature readings to keep in order to calculate derivative in PID loop
|
|
higher values make PID derivative term more stable at the expense of reaction time
|
|
*/
|
|
#define TH_COUNT 8
|
|
|
|
/** \def FAST_PWM
|
|
Teacup offers two PWM frequencies, 76(61) Hz and 78000(62500) Hz on a
|
|
20(16) MHz electronics. The slower one is the default, as it's the safer
|
|
choice. Drawback is, in a quiet environment you might notice the heaters
|
|
and your power supply humming.
|
|
|
|
Uncomment this option if you want to get rid of this humming or want
|
|
faster PWM for other reasons.
|
|
|
|
See also: http://reprap.org/wiki/Gen7_Research#MOSFET_heat_and_PWM
|
|
*/
|
|
// #define FAST_PWM
|
|
|
|
/// this is the scaling of internally stored PID values. 1024L is a good value
|
|
#define PID_SCALE 1024L
|
|
|
|
/** \def ENDSTOP_STEPS
|
|
number of steps to run into the endstops intentionally
|
|
As Endstops trigger false alarm sometimes, Teacup debounces them by counting a number of consecutive positives. Valid range is 1...255. Use 4 or less for reliable endstops, 8 or even more for flaky ones.
|
|
*/
|
|
#define ENDSTOP_STEPS 4
|
|
|
|
/** \def CANNED_CYCLE
|
|
|
|
G-code commands in this string will be executed over and over again, without
|
|
user interaction or even a serial connection. It's purpose is e.g. for
|
|
exhibitions or when using Teacup for other purposes than printing. You can
|
|
add any G-code supported by Teacup.
|
|
|
|
Note: don't miss these newlines (\n) and backslashes (\).
|
|
*/
|
|
/*
|
|
#define CANNED_CYCLE "G1 X100 F3000\n" \
|
|
"G4 P500\n" \
|
|
"G1 X0\n" \
|
|
"G4 P500\n"
|
|
*/
|
|
|
|
|
|
|
|
/***************************************************************************\
|
|
* *
|
|
* 8. DISPLAY SUPPORT *
|
|
* *
|
|
\***************************************************************************/
|
|
|
|
/** \def DISPLAY_BUS_4BIT DISPLAY_BUS_8BIT DISPLAY_BUS_I2C DISPLAY_BUS_SPI
|
|
|
|
The bus used to connect the display to the controller. This is a property
|
|
of the display. With most displays there can be only one correct choice.
|
|
|
|
Comment in the one in use, comment out all others. If there is no display,
|
|
comment out all of them to remove display code for better performance.
|
|
*/
|
|
//#define DISPLAY_BUS_4BIT
|
|
//#define DISPLAY_BUS_8BIT
|
|
//#define DISPLAY_BUS_I2C
|
|
//#define DISPLAY_BUS_SPI
|
|
|
|
/** \def DISPLAY_RS_PIN DISPLAY_RW_PIN DISPLAY_E_PIN
|
|
\def DISPLAY_D4_PIN DISPLAY_D5_PIN DISPLAY_D6_PIN DISPLAY_D7_PIN
|
|
|
|
Pins necessary for the 4-bit parallel display bus. Taken into account with
|
|
DISPLAY_BUS_4BIT defined, only.
|
|
*/
|
|
//#define DISPLAY_RS_PIN xxxx
|
|
//#define DISPLAY_RW_PIN xxxx
|
|
//#define DISPLAY_E_PIN xxxx
|
|
//#define DISPLAY_D4_PIN xxxx
|
|
//#define DISPLAY_D5_PIN xxxx
|
|
//#define DISPLAY_D6_PIN xxxx
|
|
//#define DISPLAY_D7_PIN xxxx
|
|
|
|
/** \def DISPLAY_TYPE_SSD1306 DISPLAY_TYPE_HD44780
|
|
|
|
The type of display in use. There can be only one choice. Taken into account
|
|
only if one of DISPLAY_BUS_xxx is defined.
|
|
|
|
Comment in the display in use, comment out all others. If there is no
|
|
display, comment out all of DISPLAY_BUS_xxx.
|
|
*/
|
|
//#define DISPLAY_TYPE_SSD1306
|
|
//#define DISPLAY_TYPE_HD44780
|
|
|
|
|
|
|
|
/***************************************************************************\
|
|
* *
|
|
* 9. APPENDIX A - PWMABLE PINS AND MAPPINGS *
|
|
* *
|
|
* *
|
|
* list of PWM-able pins and corresponding timers *
|
|
* timer1 is used for step timing so don't use OC1A/OC1B *
|
|
* they are omitted from this listing for that reason *
|
|
* *
|
|
* For the atmega168/328, timer/pin mappings are as follows *
|
|
* *
|
|
* OCR0A - PD6 - DIO6 *
|
|
* OCR0B - PD5 - DIO5 *
|
|
* OCR2A - PB3 - DIO11 *
|
|
* OCR2B - PD3 - DIO3 *
|
|
* *
|
|
* For the atmega644, timer/pin mappings are as follows *
|
|
* *
|
|
* OCR0A - PB3 - DIO3 *
|
|
* OCR0B - PB4 - DIO4 *
|
|
* OCR2A - PD7 - DIO15 *
|
|
* OCR2B - PD6 - DIO14 *
|
|
* *
|
|
* For the atmega1280, timer/pin mappings are as follows *
|
|
* *
|
|
* OCR0A - PB7 - DIO13 *
|
|
* OCR0B - PG5 - DIO4 *
|
|
* OCR2A - PB4 - DIO10 *
|
|
* OCR2B - PH6 - DIO9 *
|
|
* OCR3AL - PE3 - DIO5 *
|
|
* OCR3BL - PE4 - DIO2 *
|
|
* OCR3CL - PE5 - DIO3 *
|
|
* OCR4AL - PH3 - DIO6 *
|
|
* OCR4BL - PH4 - DIO7 *
|
|
* OCR4CL - PH5 - DIO8 *
|
|
* OCR5AL - PL3 - DIO46 *
|
|
* OCR5BL - PL4 - DIO45 *
|
|
* OCR5CL - PL5 - DIO44 *
|
|
* *
|
|
\***************************************************************************/
|