Welcome! Log In Create A New Profile


Teacup Bug or wrong Setting

Posted by Dj EKI 
Teacup Bug or wrong Setting
April 16, 2017 12:35PM
I still had a very old version and it worked perfectly. Unfortunately I changed something on the code and it does not work anymore. So I downloaded the new Teacup.

If I press X Home, then it goes to the end stop, but it then buzzes loudly and it no longer responds.
With Y happens the same. I can only reset my Arduino Uno.
Z works. I can give further commands, but with X and Y it does not work. Z Homing breaks hard, there is no (#define ENDSTOP_STEPS 4) to notice.

Here are my settings:

*                                                                           *
* 6. MECHANICAL/HARDWARE                                                    *
*                                                                           *


  This defines the type of kinematics your printer uses. That's essential!

  Valid values (see dda_kinematics.h):

    Motors move axis directions directly. This is the
    traditional type, found in many printers, including
    Mendel, Prusa i3, Mendel90, Ormerod, Mantis.

    A bot using CoreXY kinematics. Typical for CoreXY
    are long and crossing toothed belts and a print head
    moving on the X-Y-plane.

  Steps per meter ( = steps per mm * 1000 ), calculate these values
  appropriate for your machine.

  All numbers are integers, so no decimal point, please :-)

    Valid range: 20 to 4'0960'000 (0.02 to 40960 steps/mm)
#define STEPS_PER_M_X            533333
#define STEPS_PER_M_Y            533333
#define STEPS_PER_M_Z            533333
#define STEPS_PER_M_E            48000

  Used for G0 rapid moves and as a cap for all other feedrates.
#define MAXIMUM_FEEDRATE_X       900
#define MAXIMUM_FEEDRATE_Y       900
#define MAXIMUM_FEEDRATE_Z       900
#define MAXIMUM_FEEDRATE_E       900

  Used when doing precision endstop search and as default feedrate. No
  SEARCH_FEEDRATE_E, as E can't be searched.
#define SEARCH_FEEDRATE_X        200
#define SEARCH_FEEDRATE_Y        200
#define SEARCH_FEEDRATE_Z        50


  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      20
#define ENDSTOP_CLEARANCE_Y      20
#define ENDSTOP_CLEARANCE_Z      20

  Soft axis limits. Define them to your machine's size relative to what your
  G-code considers to be the origin (typically the bed's center or the bed's
  front left corner).

  Note that relocating the origin at runtime with G92 will also relocate these

  Not defining them at all will disable limits checking and make the binary
  about 250 bytes smaller. Enabling only some of them is perfectly fine.

    Units: millimeters
    Sane values: according to printer build room size
    Valid range: -1000.0 to 1000.0
#define X_MIN                    -100
#define X_MAX                    200

#define Y_MIN                    -80
#define Y_MAX                    200

#define Z_MIN                    0
#define Z_MAX                    59.7

/** \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

  ACCELERATION_TEMPORAL. With none of them defined, movements are done
  without acceleration. Recommended is ACCELERATION_RAMPING.

  How fast to accelerate when using ACCELERATION_RAMPING. Start with 10 for
  milling (high precision) or 1000 for printing.

    Units: mm/s^2
    Useful range: 1 to 10'000
#define ACCELERATION             1000

/** \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.

  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

  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               200
#define MAX_JERK_Y               200
#define MAX_JERK_Z               0
#define MAX_JERK_E               200

*                                                                           *
* 7. MISCELLANEOUS OPTIONS                                                  *
*                                                                           *


  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.

  time, of course.


  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.

  time, of course.

  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.

  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

  Actual temperature must be close to target (within set temperature
  +- TEMP_HYSTERESIS) for this long before target is achieved (and a M116

    Unit: 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                100

  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.

  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!

/** \def 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
  Drops PID loop from heater control, reduces code size significantly
  (1300 bytes!).
//#define BANG_BANG

/** \def BANG_BANG_ON
  PWM value for Bang Bang 'on'.
//#define BANG_BANG_ON             200

/** \def BANG_BANG_OFF
  PWM value for Bang Bang 'off'.
//#define BANG_BANG_OFF            45

  Move buffer size, in number of moves.

  Note that each move takes a fair chunk of ram (107 bytes as of this writing),
  so don't make the buffer too big. 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          8

  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

  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

/** \def TH_COUNT
  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 and reduces MOSFET heating. 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 and can afford
  a hotter MOSFET or want faster PWM for other reasons.

  See also: [reprap.org]
//#define FAST_PWM

/** \def PID_SCALE
  This is the scaling of internally stored PID values. 1024L is a good value.
#define PID_SCALE                1024L

  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.

  Use 4 or less for reliable endstops, 8 or even more for flaky ones.

    Valid range: 1...255.
#define ENDSTOP_STEPS            4

  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"

* *
* 1. CPU *
* *

/** \def CPU_TYPE
CPU types a user should be able to choose from in configtool. All
commented out.
//#define CPU_TYPE atmega168
//#define CPU_TYPE atmega168p
//#define CPU_TYPE atmega328
//#define CPU_TYPE atmega328p

/** \def CPU
CPU actually present on the board.
#define CPU atmega328p

/** \def F_CPU_OPT
CPU clock frequencies a user should be able to choose from in configtool.
All commented out.
//#define F_CPU_OPT 16000000UL

/** \def F_CPU
Actual CPU clock rate. #ifndef required for Arduino compatibility.
#ifndef F_CPU
#define F_CPU 16000000UL

This is the motherboard, as opposed to the extruder. See extruder/ directory
for GEN3 extruder firmware.

* *
* 2. PINOUTS *
* *

//#define TX_ENABLE_PIN DIO12
//#define RX_ENABLE_PIN DIO13

#define X_STEP_PIN DIO2
#define X_DIR_PIN DIO5
#define X_MIN_PIN DIO9
//#define X_MAX_PIN xxxx
//#define X_ENABLE_PIN DIO8
//#define X_INVERT_DIR
//#define X_INVERT_MIN
//#define X_INVERT_MAX

#define Y_STEP_PIN DIO3
#define Y_DIR_PIN DIO6
#define Y_MIN_PIN DIO10
//#define Y_MAX_PIN xxxx
//#define Y_ENABLE_PIN DIO8
//#define Y_INVERT_DIR
//#define Y_INVERT_MIN
//#define Y_INVERT_MAX

#define Z_STEP_PIN DIO4
#define Z_DIR_PIN DIO7
//#define Z_MIN_PIN AIO1
#define Z_MAX_PIN AIO1
//#define Z_ENABLE_PIN DIO8
//#define Z_INVERT_DIR
//#define Z_INVERT_MIN
//#define Z_INVERT_MAX

#define E_STEP_PIN DIO12
#define E_DIR_PIN DIO13
//#define E_ENABLE_PIN DIO8
//#define E_INVERT_DIR

#define PS_ON_PIN DIO8
//#define PS_INVERT_ON
//#define PS_MOSFET_PIN xxxx
//#define STEPPER_ENABLE_PIN xxxx

/** \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
//#define DEBUG_LED_PIN DIO13


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

* *
* *


\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
//#define TEMP_MAX6675
#define TEMP_AD595
//#define TEMP_PT100
//#define TEMP_MCP3008

Temperature sensor pins a user should be able to choose from in configtool.
All commented out.

Define your temperature sensors here. One line for each sensor, only
limited by the number of available ATmega pins.

Name must match the name of the corresponding heater. If a heater "extruder"
exists, a temperature sensor of that name has to exist as well. Same for
heater "bed". There can be one sensor without corresponding heater, name it

Types are same as TEMP_ list above - TT_MAX6675, TT_THERMISTOR, TT_AD595,
TT_PT100, TT_INTERCOM, TT_MCP3008. See list in temp.c.

The "additional" field is used for TT_THERMISTOR and TT_MCP3008 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.
// name type pin additional
DEFINE_TEMP_SENSOR(extruder, TT_AD595, AIO0, 0)

// Beta algorithm r0 beta r2 vadc
// Steinhart-Hart rp t0 r0 t1 r1 t2 r2

* *
* 4. HEATERS *
* *

#define DEFINE_HEATER(...)

/** \def HEATER_PIN
Heater pins a user should be able to choose from in configtool. All
commented out.
//#define HEATER_PIN DIO3
//#define HEATER_PIN DIO5
//#define HEATER_PIN DIO6

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.
// name pin invert pwm
DEFINE_HEATER(extruder, DIO11, 0, 1)


* *
* *

/** \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 115200

/** \def XONXOFF
Xon/Xoff flow control.

Redundant when using RepRap Host for sending G-code, but mandatory when
sending G-code files with a plain terminal emulator, like GtkTerm (Linux),
CoolTerm (Mac) or HyperTerminal (Windows).
//#define XONXOFF

/** \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

* *
* *


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


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


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

Edited 1 time(s). Last edit at 04/16/2017 12:42PM by Dj EKI.
Re: Teacup Bug or wrong Setting
April 17, 2017 02:28PM

The homeing part didn't change for pretty long time. So I would guess it's a problem on your side.
It's more common to add long files as an attachment. Formatting in the file and this discussion is more clear to read.

Anyhow, the #define ENDSTOP_STEPS 4 is misinterpreted. This is the number of steps after the endstop is hit and gets active for the firmware. Software debouncing.
For a softer stop of your axis you should increase #define ENDSTOP_CLEARANCE_XYZ. 20 is pretty close to instant stop. Try 1000.

So now we need to know why your endstops don't work. What kind of endstops do you use? When you are using simple switches connected to ground and the input-pin you should also enable internal pullups.

Edited 2 time(s). Last edit at 04/17/2017 08:54PM by Wurstnase.

Triffid Hunter's Calibration Guide --> X <-- Drill for new Monitor Most important Gcode.
Re: Teacup Bug or wrong Setting
May 22, 2017 11:07AM
sorry for the late answer. What could be the cause of the motors buzzing out when the end stops are reached? It is then only a continuous tone to hear from the engines. My end stops are Optical and with PullUp.The old firmware worked very well, only the new one no longer.

Wenn du Deutsch reden kannst, würde ich gerne so mit dir weiter reden smiling smiley

Edited 1 time(s). Last edit at 05/22/2017 11:08AM by Dj EKI.
Re: Teacup Bug or wrong Setting
May 28, 2017 08:39AM
I have now noticed that the old setting no longer matches the new one. Now the motors have to be inverted.
I've changed the now.

This time I added a video so you know what's going on. As I said, the old firmware worked great.

Ich habe jetzt bemerkt, dass die alte Einstellung nicht mehr mit der neuen übereinstimmt. Jetzt müssen die Motoren invertiert werden.
Die habe ich jetzt umgestellt.

Diesmal habe ich ein Video hinzugefügt, damit ihr wisst, was da los ist. Wie gesagt, die alte Firmware funktionierte super.
Re: Teacup Bug or wrong Setting
May 30, 2017 02:48AM
When the bed reach the terminal switches send M119 command and see what protenrface will return..

They must be triggered.. Also do that when bed is not in terminal switches.. They should be "opened"

Of course that depends from the type and connection of your switches.. If they are NO or NC

Even though you should check if their state is changing when are active..
Re: Teacup Bug or wrong Setting
May 30, 2017 09:18AM
I drive first "Z" home. "Z" is open. Then I drive "Y" home. Then I try to send M119, but there is no answer. I disconnect the connection and restore it. Then I send M119 and get this message:
X_min: open y_min: triggered z_max: open.

On my video is to see how it reaches "Y" end stops and stops. Unfortunately, it does not react anymore and only buzzes loudly. If the end stops were not, the carriage would leave the rails.
Re: Teacup Bug or wrong Setting
May 31, 2017 08:04AM
Can anyone please send me the older version? The Old Version works, but i have delete this...
The Old Version without Python install.

Edited 1 time(s). Last edit at 05/31/2017 08:05AM by Dj EKI.
Re: Teacup Bug or wrong Setting
June 01, 2017 12:26AM
I drive first "Z" home. "Z" is open. Then I drive "Y" home. Then I try to send M119, but there is no answer. I disconnect the connection and restore it. Then I send M119 and get this message:
X_min: open y_min: triggered z_max: open.

On my video is to see how it reaches "Y" end stops and stops. Unfortunately, it does not react anymore and only buzzes loudly. If the end stops were not, the carriage would leave the rails.

i think that the problem is with your end stop ... do you have a multimeter? (i guess you have)
test if the end stop works when you trigger it with your hand . if it is work then check if you have the same connection to all of your end stops (if x y and z axes endstop switches are connected with the same method as Normaly open or Normaly closed )
if there are the same then check in the control panel of teacup that is responsible for the board pins if you have the same settings for all endstops ..
maybe you have some to work as inverted and the others not.. that is why working in z axes and not in y axes . but you must be sure that all the end stops are connected the same

also check if you have activate the ''use internal pullups'' this is also important depending who you have choose to connect your end stops

i dont think that has to do with the firmware than your connections...

the Y axes make that sound because reach endstop and Firmware dont get the right signal from end stop to stop the motor , so continues working but cant go anywhere because endstop switch stops it mechanically
Re: Teacup Bug or wrong Setting
June 01, 2017 03:55PM
if the micro doesn't respond when an endstop is hit this is often hardware. The endstop is plugged in so that endstop shorts +5v to gnd not signal to gnd as it should. Ie 3 pin endstop plug is in backwards.
Sorry, only registered users may post in this forum.

Click here to login