Troubleshooting

Compiler error

(.vectors+0x90): relocation truncated to fit: R_AVR_13_PCREL or similar

Bad news for you. It is a compiler bug. The appears and disappears when you change configuration or arrangement of functions. The only real solution is to switch to a version without that error.

  1.  Download the latest WinAVR from http://sourceforge.net/projects/winavr/files/ tested with http://sourceforge.net/projects/winavr/files/WinAVR/20100110/
  2. Install this to a location like C:\WinAVR.
  3. Close any running Arduino IDE.
  4. Locate the existing tool-chain directory.  It should be in {ArduinoRootFolder}\hardware\tools.
  5.  Rename the single sub-directory named avr to avrold.
  6. Create a new sub-directory named avr.
  7. Move the entire contents of your WinAVR directory (C:\WinAVR\*) to the newly created avr directory ({ArduinoRootFolder}\hardware\tools\avr\*).
  8. Copy avrdude.conf from {ArduinoRootFolder}\hardware\tools\avrold\etc to {ArduinoRootFolder}\hardware\tools\avr\etc (you may have to first create etc).
  9. Copy avrold/bin/avrdude.exe to avr/bin. The avrdude from winavr can’t cope with the newer conf file in Arduino 1.x.
  10. Restart Arduino and compile. This error should be gone now.

Connection problems

If you get no connection at all, you have one of the following problems:

  • Baud rate of firmware doesn‘t match the host baud rate.
  • Wrong parity/stop bits setting in host.
  • No driver for serial port connection installed.
  • Wrong port for communication selected.
  • You have activated EEPROM settings you need the baudrate stored there, not the one from your configuration file.

If you get a communication started but you see resend requests, your communication is losing data during transfer. Now it depends on how often you get these errors. If you get many resend requests, your host may be sending too many data at once. In Repetier-Host you can set, how large the receive buffer is. Setting this value too high will cause many resend requests. A save number is 63 byte, which is the new standard in Arduino 1.0. In earlier versions 127 byte was the default value.

I can only move in one direction

This can happen, if your end stops are triggered. If they do without a reason, you have programmed the wrong signal for the end stop. Invert the setting for that axis.

#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors

// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
//set to true to invert the logic of the endstops
#define ENDSTOP_X_MIN_INVERTING false
#define ENDSTOP_Y_MIN_INVERTING false
#define ENDSTOP_Z_MIN_INVERTING false
#define ENDSTOP_X_MAX_INVERTING false
#define ENDSTOP_Y_MAX_INVERTING false
#define ENDSTOP_Z_MAX_INVERTING false

My print gets skewed, layers are misaligned

This is a very common problem, especially with the first prints. The real problem is, that there are many possible reasons for this and not all of them are firmware related. The most common reasons, without special order are:

  • The pulley isn‘t fixed on the motor and can rotate with some force.
  • The belt is loose and slips over the pulley.
  • Cables of end stop and motor are parallel and close together. The stepper current can cause crosstalk activating the end stops.
  • The stepper driver overheats – add cooling or reduce current.
  • Your motors are losing steps, because
    • your driver current setting is to low.
    • movements need large forces. Reasons are rods not parallel, blocking etc.
    • Your jerk settings in the firmware is too high.
    • Acceleration in firmware settings is too high.
    • Speed is too high. With increasing speed the motor loses torque.