Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
MarlinKimbra
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
machinery
MarlinKimbra
Commits
86d3dd96
Commit
86d3dd96
authored
Mar 17, 2015
by
MagoKimbra
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update code
parent
ba8f964e
Changes
36
Hide whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
1076 additions
and
996 deletions
+1076
-996
Configuration_Cartesian.h
MarlinKimbra/Configuration_Cartesian.h
+14
-2
Configuration_Corexy.h
MarlinKimbra/Configuration_Corexy.h
+14
-2
Configuration_Scara.h
MarlinKimbra/Configuration_Scara.h
+14
-2
Marlin.h
MarlinKimbra/Marlin.h
+3
-0
MarlinSerial.cpp
MarlinKimbra/MarlinSerial.cpp
+1
-1
MarlinSerial.h
MarlinKimbra/MarlinSerial.h
+2
-2
Marlin_main.cpp
MarlinKimbra/Marlin_main.cpp
+118
-83
Sd2Card.cpp
MarlinKimbra/Sd2Card.cpp
+9
-9
Sd2PinMap.h
MarlinKimbra/Sd2PinMap.h
+4
-4
SdBaseFile.h
MarlinKimbra/SdBaseFile.h
+2
-2
SdVolume.cpp
MarlinKimbra/SdVolume.cpp
+1
-1
dogm_lcd_implementation.h
MarlinKimbra/dogm_lcd_implementation.h
+3
-3
language_an.h
MarlinKimbra/language_an.h
+11
-4
language_ca.h
MarlinKimbra/language_ca.h
+7
-0
language_de.h
MarlinKimbra/language_de.h
+7
-0
language_en.h
MarlinKimbra/language_en.h
+7
-0
language_es.h
MarlinKimbra/language_es.h
+7
-0
language_eu.h
MarlinKimbra/language_eu.h
+7
-0
language_fi.h
MarlinKimbra/language_fi.h
+7
-0
language_fr.h
MarlinKimbra/language_fr.h
+7
-0
language_it.h
MarlinKimbra/language_it.h
+7
-0
language_nl.h
MarlinKimbra/language_nl.h
+7
-0
language_pl.h
MarlinKimbra/language_pl.h
+7
-0
language_pt-br.h
MarlinKimbra/language_pt-br.h
+7
-0
language_pt.h
MarlinKimbra/language_pt.h
+13
-6
language_ru.h
MarlinKimbra/language_ru.h
+7
-0
pins.h
MarlinKimbra/pins.h
+50
-46
pins2tool.h
MarlinKimbra/pins2tool.h
+1
-1
planner.cpp
MarlinKimbra/planner.cpp
+12
-11
stepper.cpp
MarlinKimbra/stepper.cpp
+569
-769
stepper.h
MarlinKimbra/stepper.h
+8
-8
temperature.cpp
MarlinKimbra/temperature.cpp
+19
-19
temperature.h
MarlinKimbra/temperature.h
+1
-1
ultralcd.cpp
MarlinKimbra/ultralcd.cpp
+101
-3
ultralcd.h
MarlinKimbra/ultralcd.h
+5
-0
ultralcd_implementation_hitachi_HD44780.h
MarlinKimbra/ultralcd_implementation_hitachi_HD44780.h
+17
-17
No files found.
MarlinKimbra/Configuration_Cartesian.h
View file @
86d3dd96
...
@@ -123,17 +123,29 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the lo
...
@@ -123,17 +123,29 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the lo
#define AUTO_BED_LEVELING_GRID
#define AUTO_BED_LEVELING_GRID
#ifdef AUTO_BED_LEVELING_GRID
#ifdef AUTO_BED_LEVELING_GRID
// Use one of these defines to specify the origin
// for a topographical map to be printed for your bed.
enum
{
OriginBackLeft
,
OriginFrontLeft
,
OriginBackRight
,
OriginFrontRight
};
#define TOPO_ORIGIN OriginFrontLeft
#define MIN_PROBE_EDGE 10 // The probe square sides can be no smaller than this
#define MIN_PROBE_EDGE 10 // The probe square sides can be no smaller than this
// Set the number of grid points per dimension
// You probably don't need more than 3 (squared=9)
#define AUTO_BED_LEVELING_GRID_POINTS 2
#define AUTO_BED_LEVELING_GRID_POINTS 2
#else // not AUTO_BED_LEVELING_GRID
#else // not AUTO_BED_LEVELING_GRID
// with no grid, just probe 3 arbitrary points. A simple cross-product
// is used to estimate the plane of the print bed
// Arbitrary points to probe. A simple cross-product
// is used to estimate the plane of the bed.
#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_Y 20
#define ABL_PROBE_PT_2_Y 20
#define ABL_PROBE_PT_3_X 170
#define ABL_PROBE_PT_3_X 170
#define ABL_PROBE_PT_3_Y 20
#define ABL_PROBE_PT_3_Y 20
#endif // AUTO_BED_LEVELING_GRID
#endif // AUTO_BED_LEVELING_GRID
// Offsets to the probe relative to the extruder tip (Hotend - Probe)
// Offsets to the probe relative to the extruder tip (Hotend - Probe)
...
...
MarlinKimbra/Configuration_Corexy.h
View file @
86d3dd96
...
@@ -123,17 +123,29 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the lo
...
@@ -123,17 +123,29 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the lo
#define AUTO_BED_LEVELING_GRID
#define AUTO_BED_LEVELING_GRID
#ifdef AUTO_BED_LEVELING_GRID
#ifdef AUTO_BED_LEVELING_GRID
// Use one of these defines to specify the origin
// for a topographical map to be printed for your bed.
enum
{
OriginBackLeft
,
OriginFrontLeft
,
OriginBackRight
,
OriginFrontRight
};
#define TOPO_ORIGIN OriginFrontLeft
#define MIN_PROBE_EDGE 10 // The probe square sides can be no smaller than this
#define MIN_PROBE_EDGE 10 // The probe square sides can be no smaller than this
// Set the number of grid points per dimension
// You probably don't need more than 3 (squared=9)
#define AUTO_BED_LEVELING_GRID_POINTS 2
#define AUTO_BED_LEVELING_GRID_POINTS 2
#else // not AUTO_BED_LEVELING_GRID
#else // not AUTO_BED_LEVELING_GRID
// with no grid, just probe 3 arbitrary points. A simple cross-product
// is used to estimate the plane of the print bed
// Arbitrary points to probe. A simple cross-product
// is used to estimate the plane of the bed.
#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_Y 20
#define ABL_PROBE_PT_2_Y 20
#define ABL_PROBE_PT_3_X 170
#define ABL_PROBE_PT_3_X 170
#define ABL_PROBE_PT_3_Y 20
#define ABL_PROBE_PT_3_Y 20
#endif // AUTO_BED_LEVELING_GRID
#endif // AUTO_BED_LEVELING_GRID
// Offsets to the probe relative to the extruder tip (Hotend - Probe)
// Offsets to the probe relative to the extruder tip (Hotend - Probe)
...
...
MarlinKimbra/Configuration_Scara.h
View file @
86d3dd96
...
@@ -147,17 +147,29 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the lo
...
@@ -147,17 +147,29 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the lo
#define AUTO_BED_LEVELING_GRID
#define AUTO_BED_LEVELING_GRID
#ifdef AUTO_BED_LEVELING_GRID
#ifdef AUTO_BED_LEVELING_GRID
// Use one of these defines to specify the origin
// for a topographical map to be printed for your bed.
enum
{
OriginBackLeft
,
OriginFrontLeft
,
OriginBackRight
,
OriginFrontRight
};
#define TOPO_ORIGIN OriginFrontLeft
#define MIN_PROBE_EDGE 10 // The probe square sides can be no smaller than this
#define MIN_PROBE_EDGE 10 // The probe square sides can be no smaller than this
// Set the number of grid points per dimension
// You probably don't need more than 3 (squared=9)
#define AUTO_BED_LEVELING_GRID_POINTS 2
#define AUTO_BED_LEVELING_GRID_POINTS 2
#else // not AUTO_BED_LEVELING_GRID
#else // not AUTO_BED_LEVELING_GRID
// with no grid, just probe 3 arbitrary points. A simple cross-product
// is used to estimate the plane of the print bed
// Arbitrary points to probe. A simple cross-product
// is used to estimate the plane of the bed.
#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_Y 20
#define ABL_PROBE_PT_2_Y 20
#define ABL_PROBE_PT_3_X 170
#define ABL_PROBE_PT_3_X 170
#define ABL_PROBE_PT_3_Y 20
#define ABL_PROBE_PT_3_Y 20
#endif // AUTO_BED_LEVELING_GRID
#endif // AUTO_BED_LEVELING_GRID
// Offsets to the probe relative to the extruder tip (Hotend - Probe)
// Offsets to the probe relative to the extruder tip (Hotend - Probe)
...
...
MarlinKimbra/Marlin.h
View file @
86d3dd96
...
@@ -32,6 +32,9 @@
...
@@ -32,6 +32,9 @@
#include "WProgram.h"
#include "WProgram.h"
#endif
#endif
#define BIT(b) (1<<(b))
#define TEST(n,b) (((n)&BIT(b))!=0)
// Arduino < 1.0.0 does not define this, so we need to do it ourselves
// Arduino < 1.0.0 does not define this, so we need to do it ourselves
#ifndef analogInputToDigitalPin
#ifndef analogInputToDigitalPin
#define analogInputToDigitalPin(p) ((p) + 0xA0)
#define analogInputToDigitalPin(p) ((p) + 0xA0)
...
...
MarlinKimbra/MarlinSerial.cpp
View file @
86d3dd96
...
@@ -76,7 +76,7 @@ void MarlinSerial::begin(long baud) {
...
@@ -76,7 +76,7 @@ void MarlinSerial::begin(long baud) {
#endif
#endif
if
(
useU2X
)
{
if
(
useU2X
)
{
M_UCSRxA
=
1
<<
M_U2Xx
;
M_UCSRxA
=
BIT
(
M_U2Xx
)
;
baud_setting
=
(
F_CPU
/
4
/
baud
-
1
)
/
2
;
baud_setting
=
(
F_CPU
/
4
/
baud
-
1
)
/
2
;
}
else
{
}
else
{
M_UCSRxA
=
0
;
M_UCSRxA
=
0
;
...
...
MarlinKimbra/MarlinSerial.h
View file @
86d3dd96
...
@@ -97,14 +97,14 @@ class MarlinSerial { //: public Stream
...
@@ -97,14 +97,14 @@ class MarlinSerial { //: public Stream
}
}
FORCE_INLINE
void
write
(
uint8_t
c
)
{
FORCE_INLINE
void
write
(
uint8_t
c
)
{
while
(
!
((
M_UCSRxA
)
&
(
1
<<
M_UDREx
)
))
while
(
!
TEST
(
M_UCSRxA
,
M_UDREx
))
;
;
M_UDRx
=
c
;
M_UDRx
=
c
;
}
}
FORCE_INLINE
void
checkRx
(
void
)
{
FORCE_INLINE
void
checkRx
(
void
)
{
if
(
(
M_UCSRxA
&
(
1
<<
M_RXCx
))
!=
0
)
{
if
(
TEST
(
M_UCSRxA
,
M_RXCx
)
)
{
unsigned
char
c
=
M_UDRx
;
unsigned
char
c
=
M_UDRx
;
int
i
=
(
unsigned
int
)(
rx_buffer
.
head
+
1
)
%
RX_BUFFER_SIZE
;
int
i
=
(
unsigned
int
)(
rx_buffer
.
head
+
1
)
%
RX_BUFFER_SIZE
;
...
...
MarlinKimbra/Marlin_main.cpp
View file @
86d3dd96
...
@@ -1166,6 +1166,24 @@ bool extruder_duplication_enabled = false; // used in mode 2
...
@@ -1166,6 +1166,24 @@ bool extruder_duplication_enabled = false; // used in mode 2
#endif // SCARA
#endif // SCARA
}
}
static
void
do_blocking_move_to
(
float
x
,
float
y
,
float
z
)
{
float
oldFeedRate
=
feedrate
;
feedrate
=
homing_feedrate
[
Z_AXIS
];
current_position
[
Z_AXIS
]
=
z
;
plan_buffer_line
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
current_position
[
Z_AXIS
],
current_position
[
E_AXIS
],
feedrate
/
60
,
active_extruder
,
active_driver
);
st_synchronize
();
feedrate
=
XY_TRAVEL_SPEED
;
current_position
[
X_AXIS
]
=
x
;
current_position
[
Y_AXIS
]
=
y
;
plan_buffer_line
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
current_position
[
Z_AXIS
],
current_position
[
E_AXIS
],
feedrate
/
60
,
active_extruder
,
active_driver
);
st_synchronize
();
feedrate
=
oldFeedRate
;
}
#ifdef ENABLE_AUTO_BED_LEVELING
#ifdef ENABLE_AUTO_BED_LEVELING
#ifdef AUTO_BED_LEVELING_GRID
#ifdef AUTO_BED_LEVELING_GRID
static
void
set_bed_level_equation_lsq
(
double
*
plane_equation_coefficients
)
{
static
void
set_bed_level_equation_lsq
(
double
*
plane_equation_coefficients
)
{
...
@@ -1252,24 +1270,6 @@ bool extruder_duplication_enabled = false; // used in mode 2
...
@@ -1252,24 +1270,6 @@ bool extruder_duplication_enabled = false; // used in mode 2
plan_set_position
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
current_position
[
Z_AXIS
],
current_position
[
E_AXIS
]);
plan_set_position
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
current_position
[
Z_AXIS
],
current_position
[
E_AXIS
]);
}
}
static
void
do_blocking_move_to
(
float
x
,
float
y
,
float
z
)
{
float
oldFeedRate
=
feedrate
;
feedrate
=
homing_feedrate
[
Z_AXIS
];
current_position
[
Z_AXIS
]
=
z
;
plan_buffer_line
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
current_position
[
Z_AXIS
],
current_position
[
E_AXIS
],
feedrate
/
60
,
active_extruder
,
active_driver
);
st_synchronize
();
feedrate
=
xy_travel_speed
;
current_position
[
X_AXIS
]
=
x
;
current_position
[
Y_AXIS
]
=
y
;
plan_buffer_line
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
current_position
[
Z_AXIS
],
current_position
[
E_AXIS
],
feedrate
/
60
,
active_extruder
,
active_driver
);
st_synchronize
();
feedrate
=
oldFeedRate
;
}
static
void
do_blocking_move_relative
(
float
offset_x
,
float
offset_y
,
float
offset_z
)
{
static
void
do_blocking_move_relative
(
float
offset_x
,
float
offset_y
,
float
offset_z
)
{
do_blocking_move_to
(
current_position
[
X_AXIS
]
+
offset_x
,
current_position
[
Y_AXIS
]
+
offset_y
,
current_position
[
Z_AXIS
]
+
offset_z
);
do_blocking_move_to
(
current_position
[
X_AXIS
]
+
offset_x
,
current_position
[
Y_AXIS
]
+
offset_y
,
current_position
[
Z_AXIS
]
+
offset_z
);
}
}
...
@@ -2365,66 +2365,107 @@ inline void gcode_G28(boolean home_x=false, boolean home_y=false) {
...
@@ -2365,66 +2365,107 @@ inline void gcode_G28(boolean home_x=false, boolean home_y=false) {
#if Z_HOME_DIR < 0 // If homing towards BED do Z last
#if Z_HOME_DIR < 0 // If homing towards BED do Z last
#ifndef Z_SAFE_HOMING
#ifndef Z_SAFE_HOMING
if
(
code_seen
(
'M'
)
&&
!
(
home_x
||
home_y
))
{
// Manual G28
if
(
code_seen
(
'M'
)
&&
!
(
home_x
||
home_y
))
{
// Manual G28 bed level
#ifdef ULTIPANEL
#ifdef ULTIPANEL
if
(
home_all_axis
)
{
SERIAL_ECHOLN
(
" --LEVEL PLATE SCRIPT--"
);
boolean
zig
=
true
;
set_ChangeScreen
(
true
);
int
xGridSpacing
=
(
RIGHT_PROBE_BED_POSITION
-
LEFT_PROBE_BED_POSITION
);
while
(
!
lcd_clicked
())
{
int
yGridSpacing
=
(
BACK_PROBE_BED_POSITION
-
FRONT_PROBE_BED_POSITION
);
set_pageShowInfo
(
0
);
for
(
int
yProbe
=
FRONT_PROBE_BED_POSITION
;
yProbe
<=
BACK_PROBE_BED_POSITION
;
yProbe
+=
yGridSpacing
)
{
lcd_update
();
int
xProbe
,
xInc
;
if
(
zig
)
{
// zig
xProbe
=
LEFT_PROBE_BED_POSITION
;
xInc
=
xGridSpacing
;
zig
=
false
;
}
else
// zag
{
xProbe
=
RIGHT_PROBE_BED_POSITION
;
xInc
=
-
xGridSpacing
;
zig
=
true
;
}
for
(
int
xCount
=
0
;
xCount
<
2
;
xCount
++
)
{
destination
[
X_AXIS
]
=
xProbe
;
destination
[
Y_AXIS
]
=
yProbe
;
destination
[
Z_AXIS
]
=
5
*
home_dir
(
Z_AXIS
)
*
(
-
1
);
feedrate
=
XY_TRAVEL_SPEED
;
current_position
[
Z_AXIS
]
=
0
;
plan_set_position
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
current_position
[
Z_AXIS
],
current_position
[
E_AXIS
]);
plan_buffer_line
(
destination
[
X_AXIS
],
destination
[
Y_AXIS
],
destination
[
Z_AXIS
],
destination
[
E_AXIS
],
feedrate
/
60
,
active_extruder
,
active_driver
);
st_synchronize
();
current_position
[
X_AXIS
]
=
destination
[
X_AXIS
];
current_position
[
Y_AXIS
]
=
destination
[
Y_AXIS
];
HOMEAXIS
(
Z
);
lcd_setstatus
(
"Press button "
);
boolean
beepbutton
=
true
;
while
(
!
lcd_clicked
())
{
manage_heater
();
manage_inactivity
();
lcd_update
();
if
(
beepbutton
)
{
#if BEEPER > 0
SET_OUTPUT
(
BEEPER
);
WRITE
(
BEEPER
,
HIGH
);
delay
(
100
);
WRITE
(
BEEPER
,
LOW
);
delay
(
3
);
#else
#if !defined(LCD_FEEDBACK_FREQUENCY_HZ) || !defined(LCD_FEEDBACK_FREQUENCY_DURATION_MS)
lcd_buzz
(
1000
/
6
,
100
);
#else
lcd_buzz
(
LCD_FEEDBACK_FREQUENCY_DURATION_MS
,
LCD_FEEDBACK_FREQUENCY_HZ
);
#endif
#endif
beepbutton
=
false
;
}
}
xProbe
+=
xInc
;
}
}
lcd_setstatus
(
"Finish "
);
enquecommands_P
(
PSTR
(
"G28 X0 Y0
\n
G4 P0
\n
G4 P0
\n
G4 P0"
));
}
}
saved_feedrate
=
feedrate
;
saved_feedmultiply
=
feedmultiply
;
feedmultiply
=
100
;
previous_millis_cmd
=
millis
();
enable_endstops
(
true
);
for
(
int8_t
i
=
0
;
i
<
NUM_AXIS
;
i
++
)
{
destination
[
i
]
=
current_position
[
i
];
}
feedrate
=
0.0
;
#if Z_HOME_DIR > 0 // If homing away from BED do Z first
HOMEAXIS
(
Z
);
#endif
HOMEAXIS
(
X
);
HOMEAXIS
(
Y
);
#if Z_HOME_DIR < 0
HOMEAXIS
(
Z
);
#endif
plan_set_position
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
current_position
[
Z_AXIS
],
current_position
[
E_AXIS
]);
#ifdef ENDSTOPS_ONLY_FOR_HOMING
enable_endstops
(
false
);
#endif
feedrate
=
saved_feedrate
;
feedmultiply
=
saved_feedmultiply
;
previous_millis_cmd
=
millis
();
endstops_hit_on_purpose
();
plan_set_position
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
current_position
[
Z_AXIS
],
current_position
[
E_AXIS
]);
do_blocking_move_to
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
Z_MIN_POS
+
5
);
// PROBE FIRST POINT
set_pageShowInfo
(
1
);
set_ChangeScreen
(
true
);
do_blocking_move_to
(
LEFT_PROBE_BED_POSITION
,
FRONT_PROBE_BED_POSITION
,
current_position
[
Z_AXIS
]);
do_blocking_move_to
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
Z_MIN_POS
);
while
(
!
lcd_clicked
())
{
manage_heater
();
manage_inactivity
();
}
// PROBE SECOND POINT
set_ChangeScreen
(
true
);
set_pageShowInfo
(
2
);
do_blocking_move_to
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
Z_MIN_POS
+
5
);
do_blocking_move_to
(
RIGHT_PROBE_BED_POSITION
,
FRONT_PROBE_BED_POSITION
,
current_position
[
Z_AXIS
]);
do_blocking_move_to
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
Z_MIN_POS
);
while
(
!
lcd_clicked
())
{
manage_heater
();
manage_inactivity
();
}
// PROBE THIRD POINT
set_ChangeScreen
(
true
);
set_pageShowInfo
(
3
);
do_blocking_move_to
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
Z_MIN_POS
+
5
);
do_blocking_move_to
(
RIGHT_PROBE_BED_POSITION
,
BACK_PROBE_BED_POSITION
,
current_position
[
Z_AXIS
]);
do_blocking_move_to
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
Z_MIN_POS
);
while
(
!
lcd_clicked
())
{
manage_heater
();
manage_inactivity
();
}
// PROBE FOURTH POINT
set_ChangeScreen
(
true
);
set_pageShowInfo
(
4
);
do_blocking_move_to
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
Z_MIN_POS
+
5
);
do_blocking_move_to
(
LEFT_PROBE_BED_POSITION
,
BACK_PROBE_BED_POSITION
,
current_position
[
Z_AXIS
]);
do_blocking_move_to
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
Z_MIN_POS
);
while
(
!
lcd_clicked
())
{
manage_heater
();
manage_inactivity
();
}
// PROBE CENTER
set_ChangeScreen
(
true
);
set_pageShowInfo
(
5
);
do_blocking_move_to
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
Z_MIN_POS
+
5
);
do_blocking_move_to
((
X_MAX_POS
-
X_MIN_POS
)
/
2
,
(
Y_MAX_POS
-
Y_MIN_POS
)
/
2
,
current_position
[
Z_AXIS
]);
do_blocking_move_to
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
Z_MIN_POS
);
while
(
!
lcd_clicked
())
{
manage_heater
();
manage_inactivity
();
}
// FINISH MANUAL BED LEVEL
set_ChangeScreen
(
true
);
set_pageShowInfo
(
6
);
do_blocking_move_to
(
current_position
[
X_AXIS
],
current_position
[
Y_AXIS
],
Z_MIN_POS
+
5
);
enquecommands_P
(
PSTR
(
"G28 X0 Y0
\n
G4 P0
\n
G4 P0
\n
G4 P0"
));
#endif // ULTIPANEL
#endif // ULTIPANEL
}
}
else
if
((
home_all_axis
)
||
(
code_seen
(
axis_codes
[
Z_AXIS
])))
else
if
((
home_all_axis
)
||
(
code_seen
(
axis_codes
[
Z_AXIS
])))
...
@@ -2593,12 +2634,6 @@ inline void gcode_G28(boolean home_x=false, boolean home_y=false) {
...
@@ -2593,12 +2634,6 @@ inline void gcode_G28(boolean home_x=false, boolean home_y=false) {
* Usage: "G29 E" or "G29 e"
* Usage: "G29 E" or "G29 e"
*
*
*/
*/
// Use one of these defines to specify the origin
// for a topographical map to be printed for your bed.
enum
{
OriginBackLeft
,
OriginFrontLeft
,
OriginBackRight
,
OriginFrontRight
};
#define TOPO_ORIGIN OriginFrontLeft
inline
void
gcode_G29
()
{
inline
void
gcode_G29
()
{
// Prevent user from running a G29 without first homing in X and Y
// Prevent user from running a G29 without first homing in X and Y
...
@@ -2624,7 +2659,7 @@ inline void gcode_G28(boolean home_x=false, boolean home_y=false) {
...
@@ -2624,7 +2659,7 @@ inline void gcode_G28(boolean home_x=false, boolean home_y=false) {
#ifdef AUTO_BED_LEVELING_GRID
#ifdef AUTO_BED_LEVELING_GRID
bool
topo_flag
=
verbose_level
>
2
||
code_seen
(
'T'
)
||
code_seen
(
't'
);
bool
topo_flag
=
code_seen
(
'T'
)
||
code_seen
(
't'
);
if
(
verbose_level
>
0
)
SERIAL_PROTOCOLPGM
(
"G29 Auto Bed Leveling
\n
"
);
if
(
verbose_level
>
0
)
SERIAL_PROTOCOLPGM
(
"G29 Auto Bed Leveling
\n
"
);
...
...
MarlinKimbra/Sd2Card.cpp
View file @
86d3dd96
...
@@ -35,14 +35,14 @@
...
@@ -35,14 +35,14 @@
*/
*/
static
void
spiInit
(
uint8_t
spiRate
)
{
static
void
spiInit
(
uint8_t
spiRate
)
{
// See avr processor documentation
// See avr processor documentation
SPCR
=
(
1
<<
SPE
)
|
(
1
<<
MSTR
)
|
(
spiRate
>>
1
);
SPCR
=
BIT
(
SPE
)
|
BIT
(
MSTR
)
|
(
spiRate
>>
1
);
SPSR
=
spiRate
&
1
||
spiRate
==
6
?
0
:
1
<<
SPI2X
;
SPSR
=
spiRate
&
1
||
spiRate
==
6
?
0
:
BIT
(
SPI2X
)
;
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
/** SPI receive a byte */
/** SPI receive a byte */
static
uint8_t
spiRec
()
{
static
uint8_t
spiRec
()
{
SPDR
=
0XFF
;
SPDR
=
0XFF
;
while
(
!
(
SPSR
&
(
1
<<
SPIF
)
))
{
/* Intentionally left empty */
}
while
(
!
TEST
(
SPSR
,
SPIF
))
{
/* Intentionally left empty */
}
return
SPDR
;
return
SPDR
;
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
...
@@ -52,18 +52,18 @@ void spiRead(uint8_t* buf, uint16_t nbyte) {
...
@@ -52,18 +52,18 @@ void spiRead(uint8_t* buf, uint16_t nbyte) {
if
(
nbyte
--
==
0
)
return
;
if
(
nbyte
--
==
0
)
return
;
SPDR
=
0XFF
;
SPDR
=
0XFF
;
for
(
uint16_t
i
=
0
;
i
<
nbyte
;
i
++
)
{
for
(
uint16_t
i
=
0
;
i
<
nbyte
;
i
++
)
{
while
(
!
(
SPSR
&
(
1
<<
SPIF
)
))
{
/* Intentionally left empty */
}
while
(
!
TEST
(
SPSR
,
SPIF
))
{
/* Intentionally left empty */
}
buf
[
i
]
=
SPDR
;
buf
[
i
]
=
SPDR
;
SPDR
=
0XFF
;
SPDR
=
0XFF
;
}
}
while
(
!
(
SPSR
&
(
1
<<
SPIF
)
))
{
/* Intentionally left empty */
}
while
(
!
TEST
(
SPSR
,
SPIF
))
{
/* Intentionally left empty */
}
buf
[
nbyte
]
=
SPDR
;
buf
[
nbyte
]
=
SPDR
;
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
/** SPI send a byte */
/** SPI send a byte */
static
void
spiSend
(
uint8_t
b
)
{
static
void
spiSend
(
uint8_t
b
)
{
SPDR
=
b
;
SPDR
=
b
;
while
(
!
(
SPSR
&
(
1
<<
SPIF
)
))
{
/* Intentionally left empty */
}
while
(
!
TEST
(
SPSR
,
SPIF
))
{
/* Intentionally left empty */
}
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
/** SPI send block - only one call so force inline */
/** SPI send block - only one call so force inline */
...
@@ -71,12 +71,12 @@ static inline __attribute__((always_inline))
...
@@ -71,12 +71,12 @@ static inline __attribute__((always_inline))
void
spiSendBlock
(
uint8_t
token
,
const
uint8_t
*
buf
)
{
void
spiSendBlock
(
uint8_t
token
,
const
uint8_t
*
buf
)
{
SPDR
=
token
;
SPDR
=
token
;
for
(
uint16_t
i
=
0
;
i
<
512
;
i
+=
2
)
{
for
(
uint16_t
i
=
0
;
i
<
512
;
i
+=
2
)
{
while
(
!
(
SPSR
&
(
1
<<
SPIF
)
))
{
/* Intentionally left empty */
}
while
(
!
TEST
(
SPSR
,
SPIF
))
{
/* Intentionally left empty */
}
SPDR
=
buf
[
i
];
SPDR
=
buf
[
i
];
while
(
!
(
SPSR
&
(
1
<<
SPIF
)
))
{
/* Intentionally left empty */
}
while
(
!
TEST
(
SPSR
,
SPIF
))
{
/* Intentionally left empty */
}
SPDR
=
buf
[
i
+
1
];
SPDR
=
buf
[
i
+
1
];
}
}
while
(
!
(
SPSR
&
(
1
<<
SPIF
)
))
{
/* Intentionally left empty */
}
while
(
!
TEST
(
SPSR
,
SPIF
))
{
/* Intentionally left empty */
}
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
#else // SOFTWARE_SPI
#else // SOFTWARE_SPI
...
...
MarlinKimbra/Sd2PinMap.h
View file @
86d3dd96
...
@@ -334,9 +334,9 @@ static inline __attribute__((always_inline))
...
@@ -334,9 +334,9 @@ static inline __attribute__((always_inline))
void
setPinMode
(
uint8_t
pin
,
uint8_t
mode
)
{
void
setPinMode
(
uint8_t
pin
,
uint8_t
mode
)
{
if
(
__builtin_constant_p
(
pin
)
&&
pin
<
digitalPinCount
)
{
if
(
__builtin_constant_p
(
pin
)
&&
pin
<
digitalPinCount
)
{
if
(
mode
)
{
if
(
mode
)
{
*
digitalPinMap
[
pin
].
ddr
|=
1
<<
digitalPinMap
[
pin
].
bit
;
*
digitalPinMap
[
pin
].
ddr
|=
BIT
(
digitalPinMap
[
pin
].
bit
)
;
}
else
{
}
else
{
*
digitalPinMap
[
pin
].
ddr
&=
~
(
1
<<
digitalPinMap
[
pin
].
bit
);
*
digitalPinMap
[
pin
].
ddr
&=
~
BIT
(
digitalPinMap
[
pin
].
bit
);
}
}
}
else
{
}
else
{
badPinNumber
();
badPinNumber
();
...
@@ -354,9 +354,9 @@ static inline __attribute__((always_inline))
...
@@ -354,9 +354,9 @@ static inline __attribute__((always_inline))
void
fastDigitalWrite
(
uint8_t
pin
,
uint8_t
value
)
{
void
fastDigitalWrite
(
uint8_t
pin
,
uint8_t
value
)
{
if
(
__builtin_constant_p
(
pin
)
&&
pin
<
digitalPinCount
)
{
if
(
__builtin_constant_p
(
pin
)
&&
pin
<
digitalPinCount
)
{
if
(
value
)
{
if
(
value
)
{
*
digitalPinMap
[
pin
].
port
|=
1
<<
digitalPinMap
[
pin
].
bit
;
*
digitalPinMap
[
pin
].
port
|=
BIT
(
digitalPinMap
[
pin
].
bit
)
;
}
else
{
}
else
{
*
digitalPinMap
[
pin
].
port
&=
~
(
1
<<
digitalPinMap
[
pin
].
bit
);
*
digitalPinMap
[
pin
].
port
&=
~
BIT
(
digitalPinMap
[
pin
].
bit
);
}
}
}
else
{
}
else
{
badPinNumber
();
badPinNumber
();
...
...
MarlinKimbra/SdBaseFile.h
View file @
86d3dd96
...
@@ -171,9 +171,9 @@ static inline uint8_t FAT_SECOND(uint16_t fatTime) {
...
@@ -171,9 +171,9 @@ static inline uint8_t FAT_SECOND(uint16_t fatTime) {
return
2
*
(
fatTime
&
0X1F
);
return
2
*
(
fatTime
&
0X1F
);
}
}
/** Default date for file timestamps is 1 Jan 2000 */
/** Default date for file timestamps is 1 Jan 2000 */
uint16_t
const
FAT_DEFAULT_DATE
=
((
2000
-
1980
)
<<
9
)
|
(
1
<<
5
)
|
1
;
uint16_t
const
FAT_DEFAULT_DATE
=
((
2000
-
1980
)
<<
9
)
|
BIT
(
5
)
|
1
;
/** Default time for file timestamp is 1 am */
/** Default time for file timestamp is 1 am */
uint16_t
const
FAT_DEFAULT_TIME
=
(
1
<<
11
);
uint16_t
const
FAT_DEFAULT_TIME
=
BIT
(
11
);
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
/**
/**
* \class SdBaseFile
* \class SdBaseFile
...
...
MarlinKimbra/SdVolume.cpp
View file @
86d3dd96
...
@@ -360,7 +360,7 @@ bool SdVolume::init(Sd2Card* dev, uint8_t part) {
...
@@ -360,7 +360,7 @@ bool SdVolume::init(Sd2Card* dev, uint8_t part) {
blocksPerCluster_
=
fbs
->
sectorsPerCluster
;
blocksPerCluster_
=
fbs
->
sectorsPerCluster
;
// determine shift that is same as multiply by blocksPerCluster_
// determine shift that is same as multiply by blocksPerCluster_
clusterSizeShift_
=
0
;
clusterSizeShift_
=
0
;
while
(
blocksPerCluster_
!=
(
1
<<
clusterSizeShift_
))
{
while
(
blocksPerCluster_
!=
BIT
(
clusterSizeShift_
))
{
// error if not power of 2
// error if not power of 2
if
(
clusterSizeShift_
++
>
7
)
goto
fail
;
if
(
clusterSizeShift_
++
>
7
)
goto
fail
;
}
}
...
...
MarlinKimbra/dogm_lcd_implementation.h
View file @
86d3dd96
...
@@ -24,9 +24,9 @@
...
@@ -24,9 +24,9 @@
#define BLEN_A 0
#define BLEN_A 0
#define BLEN_B 1
#define BLEN_B 1
#define BLEN_C 2
#define BLEN_C 2
#define EN_A
(1<<
BLEN_A)
#define EN_A
BIT(
BLEN_A)
#define EN_B
(1<<
BLEN_B)
#define EN_B
BIT(
BLEN_B)
#define EN_C
(1<<
BLEN_C)
#define EN_C
BIT(
BLEN_C)
#define LCD_CLICKED (buttons&EN_C)
#define LCD_CLICKED (buttons&EN_C)
#endif
#endif
...
...
MarlinKimbra/language_an.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS "Amortar motors"
#define MSG_DISABLE_STEPPERS "Amortar motors"
#define MSG_AUTO_HOME "Levar a l'orichen"
#define MSG_AUTO_HOME "Levar a l'orichen"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_ORIGIN "Establir zero"
#define MSG_SET_ORIGIN "Establir zero"
#define MSG_PREHEAT_PLA "Precalentar PLA"
#define MSG_PREHEAT_PLA "Precalentar PLA"
...
@@ -49,9 +56,9 @@
...
@@ -49,9 +56,9 @@
#define MSG_FAN_SPEED "Ixoriador"
#define MSG_FAN_SPEED "Ixoriador"
#define MSG_FLOW "Fluxo"
#define MSG_FLOW "Fluxo"
#define MSG_CONTROL "Control"
#define MSG_CONTROL "Control"
#define MSG_MIN "
\002
Min"
#define MSG_MIN "
" STR_THERMOMETER "
Min"
#define MSG_MAX "
\002
Max"
#define MSG_MAX "
" STR_THERMOMETER "
Max"
#define MSG_FACTOR "
\002
Fact"
#define MSG_FACTOR "
" STR_THERMOMETER "
Fact"
#define MSG_AUTOTEMP "Autotemp"
#define MSG_AUTOTEMP "Autotemp"
#define MSG_ON "On"
#define MSG_ON "On"
#define MSG_OFF "Off"
#define MSG_OFF "Off"
...
@@ -82,7 +89,7 @@
...
@@ -82,7 +89,7 @@
#define MSG_TEMPERATURE "Temperatura"
#define MSG_TEMPERATURE "Temperatura"
#define MSG_MOTION "Movimiento"
#define MSG_MOTION "Movimiento"
#define MSG_VOLUMETRIC "Filament"
#define MSG_VOLUMETRIC "Filament"
#define MSG_VOLUMETRIC_ENABLED "E in mm
3"
#define MSG_VOLUMETRIC_ENABLED "E in mm
" STR_h3
#define MSG_FILAMENT_SIZE_EXTRUDER "Fil. Dia."
#define MSG_FILAMENT_SIZE_EXTRUDER "Fil. Dia."
#define MSG_CONTRAST "Contrast"
#define MSG_CONTRAST "Contrast"
#define MSG_STORE_EPROM "Alzar Memoria"
#define MSG_STORE_EPROM "Alzar Memoria"
...
...
MarlinKimbra/language_ca.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS "Apagar motors"
#define MSG_DISABLE_STEPPERS "Apagar motors"
#define MSG_AUTO_HOME "Home global"
#define MSG_AUTO_HOME "Home global"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_ORIGIN "Establir origen"
#define MSG_SET_ORIGIN "Establir origen"
#define MSG_PREHEAT_PLA "Preescalfar PLA"
#define MSG_PREHEAT_PLA "Preescalfar PLA"
...
...
MarlinKimbra/language_de.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS "Stepper abschalt."
#define MSG_DISABLE_STEPPERS "Stepper abschalt."
#define MSG_AUTO_HOME "Auto Nullpunkt"
#define MSG_AUTO_HOME "Auto Nullpunkt"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_ORIGIN "Setze Nullpunkt"
#define MSG_SET_ORIGIN "Setze Nullpunkt"
#define MSG_PREHEAT_PLA "Vorwärmen PLA"
#define MSG_PREHEAT_PLA "Vorwärmen PLA"
...
...
MarlinKimbra/language_en.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS "Disable steppers"
#define MSG_DISABLE_STEPPERS "Disable steppers"
#define MSG_AUTO_HOME "Auto home"
#define MSG_AUTO_HOME "Auto home"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_ORIGIN "Set origin"
#define MSG_SET_ORIGIN "Set origin"
#define MSG_PREHEAT_PLA "Preheat PLA"
#define MSG_PREHEAT_PLA "Preheat PLA"
...
...
MarlinKimbra/language_es.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS "Apagar motores"
#define MSG_DISABLE_STEPPERS "Apagar motores"
#define MSG_AUTO_HOME "Llevar al origen"
#define MSG_AUTO_HOME "Llevar al origen"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Ajustar offsets"
#define MSG_SET_HOME_OFFSETS "Ajustar offsets"
#define MSG_SET_ORIGIN "Establecer cero"
#define MSG_SET_ORIGIN "Establecer cero"
#define MSG_PREHEAT_PLA "Precalentar PLA"
#define MSG_PREHEAT_PLA "Precalentar PLA"
...
...
MarlinKimbra/language_eu.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS "Itzali motoreak"
#define MSG_DISABLE_STEPPERS "Itzali motoreak"
#define MSG_AUTO_HOME "Hasierara joan"
#define MSG_AUTO_HOME "Hasierara joan"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_ORIGIN "Hasiera ipini"
#define MSG_SET_ORIGIN "Hasiera ipini"
#define MSG_PREHEAT_PLA "Aurreberotu PLA"
#define MSG_PREHEAT_PLA "Aurreberotu PLA"
...
...
MarlinKimbra/language_fi.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS "Vapauta moottorit"
#define MSG_DISABLE_STEPPERS "Vapauta moottorit"
#define MSG_AUTO_HOME "Aja referenssiin"
#define MSG_AUTO_HOME "Aja referenssiin"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_ORIGIN "Aseta origo"
#define MSG_SET_ORIGIN "Aseta origo"
#define MSG_PREHEAT_PLA "Esil" STR_ae "mmit" STR_ae " PLA"
#define MSG_PREHEAT_PLA "Esil" STR_ae "mmit" STR_ae " PLA"
...
...
MarlinKimbra/language_fr.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS "Arreter moteurs"
#define MSG_DISABLE_STEPPERS "Arreter moteurs"
#define MSG_AUTO_HOME "Home auto."
#define MSG_AUTO_HOME "Home auto."
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_ORIGIN "Regler origine"
#define MSG_SET_ORIGIN "Regler origine"
#define MSG_PREHEAT_PLA "Prechauffage PLA"
#define MSG_PREHEAT_PLA "Prechauffage PLA"
...
...
MarlinKimbra/language_it.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS "Disabilita Motori"
#define MSG_DISABLE_STEPPERS "Disabilita Motori"
#define MSG_AUTO_HOME "Auto Home"
#define MSG_AUTO_HOME "Auto Home"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Setta offset home"
#define MSG_SET_HOME_OFFSETS "Setta offset home"
#define MSG_SET_ORIGIN "Imposta Origine"
#define MSG_SET_ORIGIN "Imposta Origine"
#define MSG_PREHEAT_PLA "Preriscalda PLA"
#define MSG_PREHEAT_PLA "Preriscalda PLA"
...
...
MarlinKimbra/language_nl.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS "Motoren uit"
#define MSG_DISABLE_STEPPERS "Motoren uit"
#define MSG_AUTO_HOME "Auto home"
#define MSG_AUTO_HOME "Auto home"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_ORIGIN "Nulpunt instellen"
#define MSG_SET_ORIGIN "Nulpunt instellen"
#define MSG_PREHEAT_PLA "PLA voorverwarmen"
#define MSG_PREHEAT_PLA "PLA voorverwarmen"
...
...
MarlinKimbra/language_pl.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS "Wylacz silniki"
#define MSG_DISABLE_STEPPERS "Wylacz silniki"
#define MSG_AUTO_HOME "Auto. poz. zerowa"
#define MSG_AUTO_HOME "Auto. poz. zerowa"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_ORIGIN "Ustaw punkt zero"
#define MSG_SET_ORIGIN "Ustaw punkt zero"
#define MSG_PREHEAT_PLA "Rozgrzej PLA"
#define MSG_PREHEAT_PLA "Rozgrzej PLA"
...
...
MarlinKimbra/language_pt-br.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS " Apagar motores"
#define MSG_DISABLE_STEPPERS " Apagar motores"
#define MSG_AUTO_HOME "Ir para origen"
#define MSG_AUTO_HOME "Ir para origen"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_ORIGIN "Estabelecer orig."
#define MSG_SET_ORIGIN "Estabelecer orig."
#define MSG_PREHEAT_PLA "Pre-aquecer PLA"
#define MSG_PREHEAT_PLA "Pre-aquecer PLA"
...
...
MarlinKimbra/language_pt.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS " Desligar motores"
#define MSG_DISABLE_STEPPERS " Desligar motores"
#define MSG_AUTO_HOME "Ir para home"
#define MSG_AUTO_HOME "Ir para home"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Def. home offsets"
#define MSG_SET_HOME_OFFSETS "Def. home offsets"
#define MSG_SET_ORIGIN "Estabelecer orig."
#define MSG_SET_ORIGIN "Estabelecer orig."
#define MSG_PREHEAT_PLA "Pre-aquecer PLA"
#define MSG_PREHEAT_PLA "Pre-aquecer PLA"
...
@@ -44,14 +51,14 @@
...
@@ -44,14 +51,14 @@
#define MSG_MOVE_1MM "Mover 1mm"
#define MSG_MOVE_1MM "Mover 1mm"
#define MSG_MOVE_10MM "Mover 10mm"
#define MSG_MOVE_10MM "Mover 10mm"
#define MSG_SPEED "Velocidade"
#define MSG_SPEED "Velocidade"
#define MSG_NOZZLE "
\002
Bico"
#define MSG_NOZZLE "Bico"
#define MSG_BED "
\002
Base"
#define MSG_BED "Base"
#define MSG_FAN_SPEED "Velocidade do ar."
#define MSG_FAN_SPEED "Velocidade do ar."
#define MSG_FLOW "Fluxo"
#define MSG_FLOW "Fluxo"
#define MSG_CONTROL "Control
o \003
"
#define MSG_CONTROL "Control"
#define MSG_MIN "
\002
Min"
#define MSG_MIN "
" STR_THERMOMETER "
Min"
#define MSG_MAX "
\002
Max"
#define MSG_MAX "
" STR_THERMOMETER "
Max"
#define MSG_FACTOR "
\002
Fact"
#define MSG_FACTOR "
" STR_THERMOMETER "
Fact"
#define MSG_AUTOTEMP "Autotemp"
#define MSG_AUTOTEMP "Autotemp"
#define MSG_ON "On "
#define MSG_ON "On "
#define MSG_OFF "Off"
#define MSG_OFF "Off"
...
...
MarlinKimbra/language_ru.h
View file @
86d3dd96
...
@@ -16,6 +16,13 @@
...
@@ -16,6 +16,13 @@
#define MSG_DISABLE_STEPPERS "Выкл. двигатели"
#define MSG_DISABLE_STEPPERS "Выкл. двигатели"
#define MSG_AUTO_HOME "Парковка"
#define MSG_AUTO_HOME "Парковка"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_BED_SETTING "Bed Setting"
#define MSG_LP_INTRO " Leveling bed... Press to start "
#define MSG_LP_1 " Adjust first point & Press the button"
#define MSG_LP_2 " Adjust second point & Press the button"
#define MSG_LP_3 " Adjust third point & Press the button"
#define MSG_LP_4 " Adjust fourth point & Press the button"
#define MSG_LP_5 " Is it ok? Press to end"
#define MSG_LP_6 " BED leveled!"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_HOME_OFFSETS "Set home offsets"
#define MSG_SET_ORIGIN "Запомнить ноль"
#define MSG_SET_ORIGIN "Запомнить ноль"
#define MSG_PREHEAT_PLA "Преднагрев PLA"
#define MSG_PREHEAT_PLA "Преднагрев PLA"
...
...
MarlinKimbra/pins.h
View file @
86d3dd96
...
@@ -4363,6 +4363,8 @@ DaveX plan for Teensylu/printrboard-type pinouts (ref teensylu & sprinter) for a
...
@@ -4363,6 +4363,8 @@ DaveX plan for Teensylu/printrboard-type pinouts (ref teensylu & sprinter) for a
#endif // 99
#endif // 99
/****************************************************************************************/
/****************************************************************************************/
/****************************************************************************************
/****************************************************************************************
********************************* END MOTHERBOARD ***************************************
********************************* END MOTHERBOARD ***************************************
/****************************************************************************************/
/****************************************************************************************/
...
@@ -4371,52 +4373,6 @@ DaveX plan for Teensylu/printrboard-type pinouts (ref teensylu & sprinter) for a
...
@@ -4371,52 +4373,6 @@ DaveX plan for Teensylu/printrboard-type pinouts (ref teensylu & sprinter) for a
#error Unknown MOTHERBOARD value in configuration.h
#error Unknown MOTHERBOARD value in configuration.h
#endif
#endif
/****************************************************************************************
************************************* FEATURE *******************************************
/****************************************************************************************/
#ifdef SINGLENOZZLE
#undef HEATER_1_PIN
#undef HEATER_2_PIN
#undef HEATER_3_PIN
#define HEATER_1_PIN -1
#define HEATER_2_PIN -1
#define HEATER_3_PIN -1
#undef TEMP_1_PIN
#undef TEMP_2_PIN
#undef TEMP_3_PIN
#define TEMP_1_PIN -1
#define TEMP_2_PIN -1
#define TEMP_3_PIN -1
#endif //SINGLENOZZLE
#ifdef MKR4
#if (EXTRUDERS == 2) && (DRIVER_EXTRUDERS==1) // Use this for one driver and two extruder
#define E0E1_CHOICE_PIN 5
#elif (EXTRUDERS == 3) && (DRIVER_EXTRUDERS==2) // Use this for two driver and 3 extruder
#define E0E2_CHOICE_PIN 5
#elif (EXTRUDERS == 4) && (DRIVER_EXTRUDERS==2) // Use this for two driver and 4 extruder
#define E0E2_CHOICE_PIN 5
#define E1E3_CHOICE_PIN 6
#endif //EXTRUDERS
#endif //MKR4
#ifdef NPR2
#define E_MIN_PIN 19
#endif //NPR2
#ifdef LASERBEAM
#define LASER_PWR_PIN 42
#define LASER_TTL_PIN 44
#endif
#ifdef FILAMENT_END_SWITCH
#define PAUSE_PIN 19
#endif
/****************************************************************************************/
#ifndef HEATER_1_PIN
#ifndef HEATER_1_PIN
#define HEATER_1_PIN -1
#define HEATER_1_PIN -1
#endif
#endif
...
@@ -4485,6 +4441,54 @@ DaveX plan for Teensylu/printrboard-type pinouts (ref teensylu & sprinter) for a
...
@@ -4485,6 +4441,54 @@ DaveX plan for Teensylu/printrboard-type pinouts (ref teensylu & sprinter) for a
#define Z_MAX_PIN -1
#define Z_MAX_PIN -1
#endif //Z_HOME_DIR > 0
#endif //Z_HOME_DIR > 0
#endif //!DELTA
#endif //!DELTA
/****************************************************************************************/
/****************************************************************************************
************************************* FEATURE *******************************************
/****************************************************************************************/
#ifdef SINGLENOZZLE
#undef HEATER_1_PIN
#undef HEATER_2_PIN
#undef HEATER_3_PIN
#define HEATER_1_PIN -1
#define HEATER_2_PIN -1
#define HEATER_3_PIN -1
#undef TEMP_1_PIN
#undef TEMP_2_PIN
#undef TEMP_3_PIN
#define TEMP_1_PIN -1
#define TEMP_2_PIN -1
#define TEMP_3_PIN -1
#endif //SINGLENOZZLE
#ifdef MKR4
#if (EXTRUDERS == 2) && (DRIVER_EXTRUDERS==1) // Use this for one driver and two extruder
#define E0E1_CHOICE_PIN 5
#elif (EXTRUDERS == 3) && (DRIVER_EXTRUDERS==2) // Use this for two driver and 3 extruder
#define E0E2_CHOICE_PIN 5
#elif (EXTRUDERS == 4) && (DRIVER_EXTRUDERS==2) // Use this for two driver and 4 extruder
#define E0E2_CHOICE_PIN 5
#define E1E3_CHOICE_PIN 6
#endif //EXTRUDERS
#endif //MKR4
#ifdef NPR2
#define E_MIN_PIN 19
#endif //NPR2
#ifdef LASERBEAM
#define LASER_PWR_PIN 42
#define LASER_TTL_PIN 44
#endif
#ifdef FILAMENT_END_SWITCH
#define PAUSE_PIN 19
#endif
/****************************************************************************************/
#include "pins2tool.h"
#include "pins2tool.h"
...
...
MarlinKimbra/pins2tool.h
View file @
86d3dd96
...
@@ -40,4 +40,4 @@
...
@@ -40,4 +40,4 @@
//============================================================================
//============================================================================
\ No newline at end of file
MarlinKimbra/planner.cpp
View file @
86d3dd96
...
@@ -664,37 +664,37 @@ block->steps_y = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-positi
...
@@ -664,37 +664,37 @@ block->steps_y = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-positi
#ifndef COREXY
#ifndef COREXY
if
(
target
[
X_AXIS
]
<
position
[
X_AXIS
])
if
(
target
[
X_AXIS
]
<
position
[
X_AXIS
])
{
{
block
->
direction_bits
|=
(
1
<<
X_AXIS
);
block
->
direction_bits
|=
BIT
(
X_AXIS
);
}
}
if
(
target
[
Y_AXIS
]
<
position
[
Y_AXIS
])
if
(
target
[
Y_AXIS
]
<
position
[
Y_AXIS
])
{
{
block
->
direction_bits
|=
(
1
<<
Y_AXIS
);
block
->
direction_bits
|=
BIT
(
Y_AXIS
);
}
}
#else //COREXY
#else //COREXY
if
(
target
[
X_AXIS
]
<
position
[
X_AXIS
])
if
(
target
[
X_AXIS
]
<
position
[
X_AXIS
])
{
{
block
->
direction_bits
|=
(
1
<<
X_HEAD
);
block
->
direction_bits
|=
BIT
(
X_HEAD
);
}
}
if
(
target
[
Y_AXIS
]
<
position
[
Y_AXIS
])
if
(
target
[
Y_AXIS
]
<
position
[
Y_AXIS
])
{
{
block
->
direction_bits
|=
(
1
<<
Y_HEAD
);
block
->
direction_bits
|=
BIT
(
Y_HEAD
);
}
}
if
((
target
[
X_AXIS
]
-
position
[
X_AXIS
])
+
(
target
[
Y_AXIS
]
-
position
[
Y_AXIS
])
<
0
)
if
((
target
[
X_AXIS
]
-
position
[
X_AXIS
])
+
(
target
[
Y_AXIS
]
-
position
[
Y_AXIS
])
<
0
)
{
{
block
->
direction_bits
|=
(
1
<<
X_AXIS
);
block
->
direction_bits
|=
BIT
(
X_AXIS
);
}
}
if
((
target
[
X_AXIS
]
-
position
[
X_AXIS
])
-
(
target
[
Y_AXIS
]
-
position
[
Y_AXIS
])
<
0
)
if
((
target
[
X_AXIS
]
-
position
[
X_AXIS
])
-
(
target
[
Y_AXIS
]
-
position
[
Y_AXIS
])
<
0
)
{
{
block
->
direction_bits
|=
(
1
<<
Y_AXIS
);
block
->
direction_bits
|=
BIT
(
Y_AXIS
);
}
}
#endif //COREXY
#endif //COREXY
if
(
target
[
Z_AXIS
]
<
position
[
Z_AXIS
])
if
(
target
[
Z_AXIS
]
<
position
[
Z_AXIS
])
{
{
block
->
direction_bits
|=
(
1
<<
Z_AXIS
);
block
->
direction_bits
|=
BIT
(
Z_AXIS
);
}
}
if
(
target
[
E_AXIS
]
<
position
[
E_AXIS
])
if
(
target
[
E_AXIS
]
<
position
[
E_AXIS
])
{
{
block
->
direction_bits
|=
(
1
<<
E_AXIS
);
block
->
direction_bits
|=
BIT
(
E_AXIS
);
}
}
block
->
active_driver
=
driver
;
block
->
active_driver
=
driver
;
...
@@ -934,7 +934,7 @@ Having the real displacement of the head, we can calculate the total movement le
...
@@ -934,7 +934,7 @@ Having the real displacement of the head, we can calculate the total movement le
old_direction_bits
=
block
->
direction_bits
;
old_direction_bits
=
block
->
direction_bits
;
segment_time
=
lround
((
float
)
segment_time
/
speed_factor
);
segment_time
=
lround
((
float
)
segment_time
/
speed_factor
);
if
((
direction_change
&
(
1
<<
X_AXIS
))
==
0
)
if
((
direction_change
&
BIT
(
X_AXIS
))
==
0
)
{
{
x_segment_time
[
0
]
+=
segment_time
;
x_segment_time
[
0
]
+=
segment_time
;
}
}
...
@@ -944,7 +944,7 @@ Having the real displacement of the head, we can calculate the total movement le
...
@@ -944,7 +944,7 @@ Having the real displacement of the head, we can calculate the total movement le
x_segment_time
[
1
]
=
x_segment_time
[
0
];
x_segment_time
[
1
]
=
x_segment_time
[
0
];
x_segment_time
[
0
]
=
segment_time
;
x_segment_time
[
0
]
=
segment_time
;
}
}
if
((
direction_change
&
(
1
<<
Y_AXIS
))
==
0
)
if
((
direction_change
&
BIT
(
Y_AXIS
))
==
0
)
{
{
y_segment_time
[
0
]
+=
segment_time
;
y_segment_time
[
0
]
+=
segment_time
;
}
}
...
@@ -1185,7 +1185,8 @@ void set_extrude_min_temp(float temp) { extrude_min_temp = temp; }
...
@@ -1185,7 +1185,8 @@ void set_extrude_min_temp(float temp) { extrude_min_temp = temp; }
#endif
#endif
// Calculate the steps/s^2 acceleration rates, based on the mm/s^s
// Calculate the steps/s^2 acceleration rates, based on the mm/s^s
void
reset_acceleration_rates
()
{
void
reset_acceleration_rates
()
{
for
(
int8_t
i
=
0
;
i
<
3
+
EXTRUDERS
;
i
++
)
{
for
(
int8_t
i
=
0
;
i
<
3
+
EXTRUDERS
;
i
++
)
{
axis_steps_per_sqr_second
[
i
]
=
max_acceleration_units_per_sq_second
[
i
]
*
axis_steps_per_unit
[
i
];
axis_steps_per_sqr_second
[
i
]
=
max_acceleration_units_per_sq_second
[
i
]
*
axis_steps_per_unit
[
i
];
}
}
...
...
MarlinKimbra/stepper.cpp
View file @
86d3dd96
...
@@ -29,46 +29,47 @@
...
@@ -29,46 +29,47 @@
#include "language.h"
#include "language.h"
#include "cardreader.h"
#include "cardreader.h"
#include "speed_lookuptable.h"
#include "speed_lookuptable.h"
#if
defined(DIGIPOTSS_PIN) && DIGIPOTSS_PIN > -1
#if
HAS_DIGIPOTSS
#include <SPI.h>
#include <SPI.h>
#endif
#endif
//===========================================================================
//===========================================================================
//=============================
public variables
============================
//=============================
public variables
============================
//===========================================================================
//===========================================================================
block_t
*
current_block
;
// A pointer to the block currently being traced
block_t
*
current_block
;
// A pointer to the block currently being traced
//===========================================================================
//===========================================================================
//=============================
private variables =
===========================
//=============================
private variables
===========================
//===========================================================================
//===========================================================================
//static makes it impossible to be called from outside of this file by extern.!
//static makes it impossible to be called from outside of this file by extern.!
// Variables used by The Stepper Driver Interrupt
// Variables used by The Stepper Driver Interrupt
static
unsigned
char
out_bits
;
// The next stepping-bits to be output
static
unsigned
char
out_bits
;
// The next stepping-bits to be output
static
long
counter_x
,
// Counter variables for the bresenham line tracer
counter_y
,
// Counter variables for the bresenham line tracer
counter_z
,
static
long
counter_x
,
counter_y
,
counter_z
,
counter_e
;
counter_e
;
volatile
static
unsigned
long
step_events_completed
;
// The number of step events executed in the current block
volatile
static
unsigned
long
step_events_completed
;
// The number of step events executed in the current block
#ifdef ADVANCE
#ifdef ADVANCE
static
long
advance_rate
,
advance
,
final_advance
=
0
;
static
long
advance_rate
,
advance
,
final_advance
=
0
;
static
long
old_advance
=
0
;
static
long
old_advance
=
0
;
static
long
e_steps
[
4
];
static
long
e_steps
[
4
];
#endif
#endif
static
long
acceleration_time
,
deceleration_time
;
static
long
acceleration_time
,
deceleration_time
;
//static unsigned long accelerate_until, decelerate_after, acceleration_rate, initial_rate, final_rate, nominal_rate;
//static unsigned long accelerate_until, decelerate_after, acceleration_rate, initial_rate, final_rate, nominal_rate;
static
unsigned
short
acc_step_rate
;
// needed for dec
ele
ration start point
static
unsigned
short
acc_step_rate
;
// needed for dec
cela
ration start point
static
char
step_loops
;
static
char
step_loops
;
static
unsigned
short
OCR1A_nominal
;
static
unsigned
short
OCR1A_nominal
;
static
unsigned
short
step_loops_nominal
;
static
unsigned
short
step_loops_nominal
;
volatile
long
endstops_trigsteps
[
3
]
=
{
0
,
0
,
0
};
volatile
long
endstops_trigsteps
[
3
]
=
{
0
};
volatile
long
endstops_stepsTotal
,
endstops_stepsDone
;
volatile
long
endstops_stepsTotal
,
endstops_stepsDone
;
static
volatile
bool
endstop_x_hit
=
false
;
static
volatile
bool
endstop_x_hit
=
false
;
static
volatile
bool
endstop_y_hit
=
false
;
static
volatile
bool
endstop_y_hit
=
false
;
static
volatile
bool
endstop_z_hit
=
false
;
static
volatile
bool
endstop_z_hit
=
false
;
#ifdef NPR2
#ifdef NPR2
static
volatile
bool
endstop_e_hit
=
false
;
static
volatile
bool
endstop_e_hit
=
false
;
...
@@ -82,201 +83,232 @@ static volatile bool endstop_z_hit=false;
...
@@ -82,201 +83,232 @@ static volatile bool endstop_z_hit=false;
int
motor_current_setting
[
3
]
=
DEFAULT_PWM_MOTOR_CURRENT
;
int
motor_current_setting
[
3
]
=
DEFAULT_PWM_MOTOR_CURRENT
;
#endif
#endif
static
bool
old_x_min_endstop
=
false
;
static
bool
old_x_min_endstop
=
false
,
static
bool
old_x_max_endstop
=
false
;
old_x_max_endstop
=
false
,
static
bool
old_y_min_endstop
=
false
;
old_y_min_endstop
=
false
,
static
bool
old_y_max_endstop
=
false
;
old_y_max_endstop
=
false
,
static
bool
old_z_min_endstop
=
false
;
old_z_min_endstop
=
false
,
static
bool
old_z_max_endstop
=
false
;
old_z_max_endstop
=
false
;
static
bool
check_endstops
=
true
;
static
bool
check_endstops
=
true
;
volatile
long
count_position
[
NUM_AXIS
]
=
{
0
,
0
,
0
,
0
};
volatile
long
count_position
[
NUM_AXIS
]
=
{
0
};
volatile
signed
char
count_direction
[
NUM_AXIS
]
=
{
1
,
1
,
1
,
1
};
volatile
signed
char
count_direction
[
NUM_AXIS
]
=
{
1
};
//===========================================================================
//===========================================================================
//============================
Functions ====
================================
//============================
==== functions
================================
//===========================================================================
//===========================================================================
#define CHECK_ENDSTOPS if(check_endstops)
#ifdef DUAL_X_CARRIAGE
#define X_APPLY_DIR(v,ALWAYS) \
if (extruder_duplication_enabled || ALWAYS) { \
X_DIR_WRITE(v); \
X2_DIR_WRITE(v); \
} \
else{ \
if (current_block->active_driver) \
X2_DIR_WRITE(v); \
else \
X_DIR_WRITE(v); \
}
#define X_APPLY_STEP(v,ALWAYS) \
if (extruder_duplication_enabled || ALWAYS) { \
X_STEP_WRITE(v); \
X2_STEP_WRITE(v); \
} \
else { \
if (current_block->active_driver != 0) \
X2_STEP_WRITE(v); \
else \
X_STEP_WRITE(v); \
}
#else
#define X_APPLY_DIR(v,Q) X_DIR_WRITE(v)
#define X_APPLY_STEP(v,Q) X_STEP_WRITE(v)
#endif
#ifdef Y_DUAL_STEPPER_DRIVERS
#define Y_APPLY_DIR(v,Q) Y_DIR_WRITE(v), Y2_DIR_WRITE((v) != INVERT_Y2_VS_Y_DIR)
#define Y_APPLY_STEP(v,Q) Y_STEP_WRITE(v), Y2_STEP_WRITE(v)
#else
#define Y_APPLY_DIR(v,Q) Y_DIR_WRITE(v)
#define Y_APPLY_STEP(v,Q) Y_STEP_WRITE(v)
#endif
#ifdef Z_DUAL_STEPPER_DRIVERS
#define Z_APPLY_DIR(v,Q) Z_DIR_WRITE(v), Z2_DIR_WRITE(v)
#define Z_APPLY_STEP(v,Q) Z_STEP_WRITE(v), Z2_STEP_WRITE(v)
#else
#define Z_APPLY_DIR(v,Q) Z_DIR_WRITE(v)
#define Z_APPLY_STEP(v,Q) Z_STEP_WRITE(v)
#endif
#define E_APPLY_STEP(v,Q) E_STEP_WRITE(v)
// intRes = intIn1 * intIn2 >> 16
// intRes = intIn1 * intIn2 >> 16
// uses:
// uses:
// r26 to store 0
// r26 to store 0
// r27 to store the byte 1 of the 24 bit result
// r27 to store the byte 1 of the 24 bit result
#define MultiU16X8toH16(intRes, charIn1, intIn2) \
#define MultiU16X8toH16(intRes, charIn1, intIn2) \
asm volatile ( \
asm volatile ( \
"clr r26 \n\t" \
"clr r26 \n\t" \
"mul %A1, %B2 \n\t" \
"mul %A1, %B2 \n\t" \
"movw %A0, r0 \n\t" \
"movw %A0, r0 \n\t" \
"mul %A1, %A2 \n\t" \
"mul %A1, %A2 \n\t" \
"add %A0, r1 \n\t" \
"add %A0, r1 \n\t" \
"adc %B0, r26 \n\t" \
"adc %B0, r26 \n\t" \
"lsr r0 \n\t" \
"lsr r0 \n\t" \
"adc %A0, r26 \n\t" \
"adc %A0, r26 \n\t" \
"adc %B0, r26 \n\t" \
"adc %B0, r26 \n\t" \
"clr r1 \n\t" \
"clr r1 \n\t" \
: \
: \
"=&r" (intRes) \
"=&r" (intRes) \
: \
: \
"d" (charIn1), \
"d" (charIn1), \
"d" (intIn2) \
"d" (intIn2) \
: \
: \
"r26" \
"r26" \
)
)
// intRes = longIn1 * longIn2 >> 24
// intRes = longIn1 * longIn2 >> 24
// uses:
// uses:
// r26 to store 0
// r26 to store 0
// r27 to store the byte 1 of the 48bit result
// r27 to store the byte 1 of the 48bit result
#define MultiU24X24toH16(intRes, longIn1, longIn2) \
#define MultiU24X24toH16(intRes, longIn1, longIn2) \
asm volatile ( \
asm volatile ( \
"clr r26 \n\t" \
"clr r26 \n\t" \
"mul %A1, %B2 \n\t" \
"mul %A1, %B2 \n\t" \
"mov r27, r1 \n\t" \
"mov r27, r1 \n\t" \
"mul %B1, %C2 \n\t" \
"mul %B1, %C2 \n\t" \
"movw %A0, r0 \n\t" \
"movw %A0, r0 \n\t" \
"mul %C1, %C2 \n\t" \
"mul %C1, %C2 \n\t" \
"add %B0, r0 \n\t" \
"add %B0, r0 \n\t" \
"mul %C1, %B2 \n\t" \
"mul %C1, %B2 \n\t" \
"add %A0, r0 \n\t" \
"add %A0, r0 \n\t" \
"adc %B0, r1 \n\t" \
"adc %B0, r1 \n\t" \
"mul %A1, %C2 \n\t" \
"mul %A1, %C2 \n\t" \
"add r27, r0 \n\t" \
"add r27, r0 \n\t" \
"adc %A0, r1 \n\t" \
"adc %A0, r1 \n\t" \
"adc %B0, r26 \n\t" \
"adc %B0, r26 \n\t" \
"mul %B1, %B2 \n\t" \
"mul %B1, %B2 \n\t" \
"add r27, r0 \n\t" \
"add r27, r0 \n\t" \
"adc %A0, r1 \n\t" \
"adc %A0, r1 \n\t" \
"adc %B0, r26 \n\t" \
"adc %B0, r26 \n\t" \
"mul %C1, %A2 \n\t" \
"mul %C1, %A2 \n\t" \
"add r27, r0 \n\t" \
"add r27, r0 \n\t" \
"adc %A0, r1 \n\t" \
"adc %A0, r1 \n\t" \
"adc %B0, r26 \n\t" \
"adc %B0, r26 \n\t" \
"mul %B1, %A2 \n\t" \
"mul %B1, %A2 \n\t" \
"add r27, r1 \n\t" \
"add r27, r1 \n\t" \
"adc %A0, r26 \n\t" \
"adc %A0, r26 \n\t" \
"adc %B0, r26 \n\t" \
"adc %B0, r26 \n\t" \
"lsr r27 \n\t" \
"lsr r27 \n\t" \
"adc %A0, r26 \n\t" \
"adc %A0, r26 \n\t" \
"adc %B0, r26 \n\t" \
"adc %B0, r26 \n\t" \
"clr r1 \n\t" \
"clr r1 \n\t" \
: \
: \
"=&r" (intRes) \
"=&r" (intRes) \
: \
: \
"d" (longIn1), \
"d" (longIn1), \
"d" (longIn2) \
"d" (longIn2) \
: \
: \
"r26" , "r27" \
"r26" , "r27" \
)
)
// Some useful constants
// Some useful constants
#define ENABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 |=
(1<<
OCIE1A)
#define ENABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 |=
BIT(
OCIE1A)
#define DISABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 &= ~
(1<<
OCIE1A)
#define DISABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 &= ~
BIT(
OCIE1A)
#ifdef NPR2
#ifdef NPR2
void
checkHitEndstops
()
{
void
endstops_hit_on_purpose
()
{
if
(
endstop_x_hit
||
endstop_y_hit
||
endstop_z_hit
||
endstop_e_hit
)
{
endstop_x_hit
=
endstop_y_hit
=
endstop_z_hit
=
endstop_e_hit
=
false
;
SERIAL_ECHO_START
;
SERIAL_ECHOPGM
(
MSG_ENDSTOPS_HIT
);
if
(
endstop_x_hit
)
{
SERIAL_ECHOPAIR
(
" X:"
,(
float
)
endstops_trigsteps
[
X_AXIS
]
/
axis_steps_per_unit
[
X_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"X"
);
}
if
(
endstop_y_hit
)
{
SERIAL_ECHOPAIR
(
" Y:"
,(
float
)
endstops_trigsteps
[
Y_AXIS
]
/
axis_steps_per_unit
[
Y_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"Y"
);
}
if
(
endstop_z_hit
)
{
SERIAL_ECHOPAIR
(
" Z:"
,(
float
)
endstops_trigsteps
[
Z_AXIS
]
/
axis_steps_per_unit
[
Z_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"Z"
);
}
if
(
endstop_e_hit
)
{
SERIAL_ECHOPAIR
(
" E:"
,(
float
)
endstops_trigsteps
[
E_AXIS
]
/
axis_steps_per_unit
[
E_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"E"
);
}
SERIAL_ECHOLN
(
""
);
endstop_x_hit
=
false
;
endstop_y_hit
=
false
;
endstop_z_hit
=
false
;
endstop_e_hit
=
false
;
#if defined(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) && defined(SDSUPPORT)
if
(
abort_on_endstop_hit
)
{
card
.
sdprinting
=
false
;
card
.
closefile
();
quickStop
();
setTargetHotend0
(
0
);
setTargetHotend1
(
0
);
setTargetHotend2
(
0
);
setTargetHotend3
(
0
);
setTargetBed
(
0
);
}
#endif
}
}
}
void
endstops_hit_on_purpose
()
void
checkHitEndstops
()
{
{
if
(
endstop_x_hit
||
endstop_y_hit
||
endstop_z_hit
||
endstop_e_hit
)
{
endstop_x_hit
=
false
;
SERIAL_ECHO_START
;
endstop_y_hit
=
false
;
SERIAL_ECHOPGM
(
MSG_ENDSTOPS_HIT
);
endstop_z_hit
=
false
;
if
(
endstop_x_hit
)
{
endstop_e_hit
=
false
;
SERIAL_ECHOPAIR
(
" X:"
,
(
float
)
endstops_trigsteps
[
X_AXIS
]
/
axis_steps_per_unit
[
X_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"X"
);
}
if
(
endstop_y_hit
)
{
SERIAL_ECHOPAIR
(
" Y:"
,
(
float
)
endstops_trigsteps
[
Y_AXIS
]
/
axis_steps_per_unit
[
Y_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"Y"
);
}
if
(
endstop_z_hit
)
{
SERIAL_ECHOPAIR
(
" Z:"
,
(
float
)
endstops_trigsteps
[
Z_AXIS
]
/
axis_steps_per_unit
[
Z_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"Z"
);
}
if
(
endstop_e_hit
)
{
SERIAL_ECHOPAIR
(
" E:"
,
(
float
)
endstops_trigsteps
[
E_AXIS
]
/
axis_steps_per_unit
[
E_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"E"
);
}
SERIAL_ECHOLN
(
""
);
endstops_hit_on_purpose
();
#if defined(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) && defined(SDSUPPORT)
if
(
abort_on_endstop_hit
)
{
card
.
sdprinting
=
false
;
card
.
closefile
();
quickStop
();
setTargetHotend0
(
0
);
setTargetHotend1
(
0
);
setTargetHotend2
(
0
);
setTargetHotend3
(
0
);
setTargetBed
(
0
);
}
#endif
}
}
}
#else // NOT NPR2
#else // NOT NPR2
void
checkHitEndstops
()
void
endstops_hit_on_purpose
()
{
{
endstop_x_hit
=
endstop_y_hit
=
endstop_z_hit
=
false
;
if
(
endstop_x_hit
||
endstop_y_hit
||
endstop_z_hit
)
{
SERIAL_ECHO_START
;
SERIAL_ECHOPGM
(
MSG_ENDSTOPS_HIT
);
if
(
endstop_x_hit
)
{
SERIAL_ECHOPAIR
(
" X:"
,(
float
)
endstops_trigsteps
[
X_AXIS
]
/
axis_steps_per_unit
[
X_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"X"
);
}
if
(
endstop_y_hit
)
{
SERIAL_ECHOPAIR
(
" Y:"
,(
float
)
endstops_trigsteps
[
Y_AXIS
]
/
axis_steps_per_unit
[
Y_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"Y"
);
}
if
(
endstop_z_hit
)
{
SERIAL_ECHOPAIR
(
" Z:"
,(
float
)
endstops_trigsteps
[
Z_AXIS
]
/
axis_steps_per_unit
[
Z_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"Z"
);
}
SERIAL_EOL
;
endstop_x_hit
=
false
;
endstop_y_hit
=
false
;
endstop_z_hit
=
false
;
#if defined(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) && defined(SDSUPPORT)
if
(
abort_on_endstop_hit
)
{
card
.
sdprinting
=
false
;
card
.
closefile
();
quickStop
();
setTargetHotend0
(
0
);
setTargetHotend1
(
0
);
setTargetHotend2
(
0
);
setTargetHotend3
(
0
);
setTargetBed
(
0
);
}
#endif
}
}
}
void
endstops_hit_on_purpose
()
void
checkHitEndstops
()
{
{
if
(
endstop_x_hit
||
endstop_y_hit
||
endstop_z_hit
)
{
endstop_x_hit
=
false
;
SERIAL_ECHO_START
;
endstop_y_hit
=
false
;
SERIAL_ECHOPGM
(
MSG_ENDSTOPS_HIT
);
endstop_z_hit
=
false
;
if
(
endstop_x_hit
)
{
SERIAL_ECHOPAIR
(
" X:"
,
(
float
)
endstops_trigsteps
[
X_AXIS
]
/
axis_steps_per_unit
[
X_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"X"
);
}
if
(
endstop_y_hit
)
{
SERIAL_ECHOPAIR
(
" Y:"
,
(
float
)
endstops_trigsteps
[
Y_AXIS
]
/
axis_steps_per_unit
[
Y_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"Y"
);
}
if
(
endstop_z_hit
)
{
SERIAL_ECHOPAIR
(
" Z:"
,
(
float
)
endstops_trigsteps
[
Z_AXIS
]
/
axis_steps_per_unit
[
Z_AXIS
]);
LCD_MESSAGEPGM
(
MSG_ENDSTOPS_HIT
"Z"
);
}
SERIAL_EOL
;
endstops_hit_on_purpose
();
#if defined(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) && defined(SDSUPPORT)
if
(
abort_on_endstop_hit
)
{
card
.
sdprinting
=
false
;
card
.
closefile
();
quickStop
();
setTargetHotend0
(
0
);
setTargetHotend1
(
0
);
setTargetHotend2
(
0
);
setTargetHotend3
(
0
);
setTargetBed
(
0
);
}
#endif
}
}
}
#endif // NOT NPR2
#endif // NOT NPR2
void
enable_endstops
(
bool
check
)
void
enable_endstops
(
bool
check
)
{
check_endstops
=
check
;
}
{
check_endstops
=
check
;
}
// __________________________
// __________________________
// /| |\ _________________ ^
// /| |\ _________________ ^
...
@@ -301,23 +333,23 @@ void st_wake_up() {
...
@@ -301,23 +333,23 @@ void st_wake_up() {
FORCE_INLINE
unsigned
short
calc_timer
(
unsigned
short
step_rate
)
{
FORCE_INLINE
unsigned
short
calc_timer
(
unsigned
short
step_rate
)
{
unsigned
short
timer
;
unsigned
short
timer
;
if
(
step_rate
>
MAX_STEP_FREQUENCY
)
step_rate
=
MAX_STEP_FREQUENCY
;
if
(
step_rate
>
MAX_STEP_FREQUENCY
)
step_rate
=
MAX_STEP_FREQUENCY
;
if
(
step_rate
>
20000
)
{
// If steprate > 20kHz >> step 4 times
if
(
step_rate
>
20000
)
{
// If steprate > 20kHz >> step 4 times
step_rate
=
(
step_rate
>>
2
)
&
0x3fff
;
step_rate
=
(
step_rate
>>
2
)
&
0x3fff
;
step_loops
=
4
;
step_loops
=
4
;
}
}
else
if
(
step_rate
>
10000
)
{
// If steprate > 10kHz >> step 2 times
else
if
(
step_rate
>
10000
)
{
// If steprate > 10kHz >> step 2 times
step_rate
=
(
step_rate
>>
1
)
&
0x7fff
;
step_rate
=
(
step_rate
>>
1
)
&
0x7fff
;
step_loops
=
2
;
step_loops
=
2
;
}
}
else
{
else
{
step_loops
=
1
;
step_loops
=
1
;
}
}
if
(
step_rate
<
(
F_CPU
/
500000
))
step_rate
=
(
F_CPU
/
500000
);
if
(
step_rate
<
(
F_CPU
/
500000
))
step_rate
=
(
F_CPU
/
500000
);
step_rate
-=
(
F_CPU
/
500000
);
// Correct for minimal speed
step_rate
-=
(
F_CPU
/
500000
);
// Correct for minimal speed
if
(
step_rate
>=
(
8
*
256
))
{
// higher step rate
if
(
step_rate
>=
(
8
*
256
))
{
// higher step rate
unsigned
short
table_address
=
(
unsigned
short
)
&
speed_lookuptable_fast
[(
unsigned
char
)(
step_rate
>>
8
)][
0
];
unsigned
short
table_address
=
(
unsigned
short
)
&
speed_lookuptable_fast
[(
unsigned
char
)(
step_rate
>>
8
)][
0
];
unsigned
char
tmp_step_rate
=
(
step_rate
&
0x00ff
);
unsigned
char
tmp_step_rate
=
(
step_rate
&
0x00ff
);
unsigned
short
gain
=
(
unsigned
short
)
pgm_read_word_near
(
table_address
+
2
);
unsigned
short
gain
=
(
unsigned
short
)
pgm_read_word_near
(
table_address
+
2
);
...
@@ -330,7 +362,7 @@ FORCE_INLINE unsigned short calc_timer(unsigned short step_rate) {
...
@@ -330,7 +362,7 @@ FORCE_INLINE unsigned short calc_timer(unsigned short step_rate) {
timer
=
(
unsigned
short
)
pgm_read_word_near
(
table_address
);
timer
=
(
unsigned
short
)
pgm_read_word_near
(
table_address
);
timer
-=
(((
unsigned
short
)
pgm_read_word_near
(
table_address
+
2
)
*
(
unsigned
char
)(
step_rate
&
0x0007
))
>>
3
);
timer
-=
(((
unsigned
short
)
pgm_read_word_near
(
table_address
+
2
)
*
(
unsigned
char
)(
step_rate
&
0x0007
))
>>
3
);
}
}
if
(
timer
<
100
)
{
timer
=
100
;
MYSERIAL
.
print
(
MSG_STEPPER_TOO_HIGH
);
MYSERIAL
.
println
(
step_rate
);
}
//(20kHz this should never happen)
if
(
timer
<
100
)
{
timer
=
100
;
MYSERIAL
.
print
(
MSG_STEPPER_TOO_HIGH
);
MYSERIAL
.
println
(
step_rate
);
}
//(20kHz this should never happen)
return
timer
;
return
timer
;
}
}
...
@@ -353,49 +385,45 @@ FORCE_INLINE void trapezoid_generator_reset() {
...
@@ -353,49 +385,45 @@ FORCE_INLINE void trapezoid_generator_reset() {
acceleration_time
=
calc_timer
(
acc_step_rate
);
acceleration_time
=
calc_timer
(
acc_step_rate
);
OCR1A
=
acceleration_time
;
OCR1A
=
acceleration_time
;
// SERIAL_ECHO_START;
// SERIAL_ECHO_START;
// SERIAL_ECHOPGM("advance :");
// SERIAL_ECHOPGM("advance :");
// SERIAL_ECHO(current_block->advance/256.0);
// SERIAL_ECHO(current_block->advance/256.0);
// SERIAL_ECHOPGM("advance rate :");
// SERIAL_ECHOPGM("advance rate :");
// SERIAL_ECHO(current_block->advance_rate/256.0);
// SERIAL_ECHO(current_block->advance_rate/256.0);
// SERIAL_ECHOPGM("initial advance :");
// SERIAL_ECHOPGM("initial advance :");
// SERIAL_ECHO(current_block->initial_advance/256.0);
// SERIAL_ECHO(current_block->initial_advance/256.0);
// SERIAL_ECHOPGM("final advance :");
// SERIAL_ECHOPGM("final advance :");
// SERIAL_ECHOLN(current_block->final_advance/256.0);
// SERIAL_ECHOLN(current_block->final_advance/256.0);
}
}
// "The Stepper Driver Interrupt" - This timer interrupt is the workhorse.
// "The Stepper Driver Interrupt" - This timer interrupt is the workhorse.
// It pops blocks from the block_buffer and executes them by pulsing the stepper pins appropriately.
// It pops blocks from the block_buffer and executes them by pulsing the stepper pins appropriately.
ISR
(
TIMER1_COMPA_vect
)
ISR
(
TIMER1_COMPA_vect
)
{
{
// If there is no current block, attempt to pop one from the buffer
// If there is no current block, attempt to pop one from the buffer
if
(
current_block
==
NULL
)
{
if
(
!
current_block
)
{
// Anything in the buffer?
// Anything in the buffer?
current_block
=
plan_get_current_block
();
current_block
=
plan_get_current_block
();
if
(
current_block
!=
NULL
)
{
if
(
current_block
)
{
current_block
->
busy
=
true
;
current_block
->
busy
=
true
;
trapezoid_generator_reset
();
trapezoid_generator_reset
();
counter_x
=
-
(
current_block
->
step_event_count
>>
1
);
counter_x
=
-
(
current_block
->
step_event_count
>>
1
);
counter_y
=
counter_x
;
counter_y
=
counter_z
=
counter_e
=
counter_x
;
counter_z
=
counter_x
;
counter_e
=
counter_x
;
step_events_completed
=
0
;
step_events_completed
=
0
;
#ifdef Z_LATE_ENABLE
#ifdef Z_LATE_ENABLE
if
(
current_block
->
steps_z
>
0
)
{
if
(
current_block
->
steps_z
>
0
)
{
enable_z
();
enable_z
();
OCR1A
=
2000
;
//1ms wait
OCR1A
=
2000
;
//1ms wait
return
;
return
;
}
}
#endif
#endif
//
#ifdef ADVANCE
//
#ifdef ADVANCE
//
e_steps[current_block->active_driver] = 0;
//
e_steps[current_block->active_driver] = 0;
//
#endif
//
#endif
}
}
else
{
else
{
OCR1A
=
2000
;
// 1kHz.
OCR1A
=
2000
;
// 1kHz.
}
}
}
}
...
@@ -404,147 +432,96 @@ ISR(TIMER1_COMPA_vect)
...
@@ -404,147 +432,96 @@ ISR(TIMER1_COMPA_vect)
out_bits
=
current_block
->
direction_bits
;
out_bits
=
current_block
->
direction_bits
;
// Set the direction bits (X_AXIS=A_AXIS and Y_AXIS=B_AXIS for COREXY)
// Set the direction bits (X_AXIS=A_AXIS and Y_AXIS=B_AXIS for COREXY)
if
((
out_bits
&
(
1
<<
X_AXIS
))
!=
0
)
{
if
(
TEST
(
out_bits
,
X_AXIS
))
{
#ifdef DUAL_X_CARRIAGE
X_APPLY_DIR
(
INVERT_X_DIR
,
0
);
if
(
extruder_duplication_enabled
){
count_direction
[
X_AXIS
]
=
-
1
;
X_DIR_WRITE
(
INVERT_X_DIR
);
X2_DIR_WRITE
(
INVERT_X_DIR
);
}
else
{
if
(
current_block
->
active_extruder
!=
0
)
X2_DIR_WRITE
(
INVERT_X_DIR
);
else
X_DIR_WRITE
(
INVERT_X_DIR
);
}
#else
X_DIR_WRITE
(
INVERT_X_DIR
);
#endif
count_direction
[
X_AXIS
]
=-
1
;
}
}
else
{
else
{
#ifdef DUAL_X_CARRIAGE
X_APPLY_DIR
(
!
INVERT_X_DIR
,
0
);
if
(
extruder_duplication_enabled
){
count_direction
[
X_AXIS
]
=
1
;
X_DIR_WRITE
(
!
INVERT_X_DIR
);
X2_DIR_WRITE
(
!
INVERT_X_DIR
);
}
else
{
if
(
current_block
->
active_extruder
!=
0
)
X2_DIR_WRITE
(
!
INVERT_X_DIR
);
else
X_DIR_WRITE
(
!
INVERT_X_DIR
);
}
#else
X_DIR_WRITE
(
!
INVERT_X_DIR
);
#endif
count_direction
[
X_AXIS
]
=
1
;
}
}
if
((
out_bits
&
(
1
<<
Y_AXIS
))
!=
0
){
Y_DIR_WRITE
(
INVERT_Y_DIR
);
#ifdef Y_DUAL_STEPPER_DRIVERS
Y2_DIR_WRITE
(
!
(
INVERT_Y_DIR
==
INVERT_Y2_VS_Y_DIR
));
#endif
count_direction
[
Y_AXIS
]
=-
1
;
}
else
{
Y_DIR_WRITE
(
!
INVERT_Y_DIR
);
#ifdef Y_DUAL_STEPPER_DRIVERS
Y2_DIR_WRITE
((
INVERT_Y_DIR
==
INVERT_Y2_VS_Y_DIR
));
#endif
count_direction
[
Y_AXIS
]
=
1
;
if
(
TEST
(
out_bits
,
Y_AXIS
))
{
Y_APPLY_DIR
(
INVERT_Y_DIR
,
0
);
count_direction
[
Y_AXIS
]
=
-
1
;
}
else
{
Y_APPLY_DIR
(
!
INVERT_Y_DIR
,
0
);
count_direction
[
Y_AXIS
]
=
1
;
}
}
CHECK_ENDSTOPS
{
// check X and Y Endstops
#define UPDATE_ENDSTOP(axis,AXIS,minmax,MINMAX) \
bool axis ##_## minmax ##_endstop = (READ(AXIS ##_## MINMAX ##_PIN) != AXIS ##_## MINMAX ##_ENDSTOP_INVERTING); \
if (axis ##_## minmax ##_endstop && old_## axis ##_## minmax ##_endstop && (current_block->steps_## axis > 0)) { \
endstops_trigsteps[AXIS ##_AXIS] = count_position[AXIS ##_AXIS]; \
endstop_## axis ##_hit = true; \
step_events_completed = current_block->step_event_count; \
} \
old_## axis ##_## minmax ##_endstop = axis ##_## minmax ##_endstop;
// Check X and Y endstops
if
(
check_endstops
)
{
#ifndef COREXY
#ifndef COREXY
if
(
(
out_bits
&
(
1
<<
X_AXIS
))
!=
0
)
if
(
TEST
(
out_bits
,
X_AXIS
))
// stepping along -X axis (regular cartesians bot
)
#else
#else
if
(
!
((
current_block
->
steps_x
==
current_block
->
steps_y
)
&&
((
out_bits
&
(
1
<<
X_AXIS
))
>>
X_AXIS
!=
(
out_bits
&
(
1
<<
Y_AXIS
))
>>
Y_AXIS
)))
// Head direction in -X axis for CoreXY bots.
if
((
out_bits
&
(
1
<<
X_HEAD
))
!=
0
)
// If DeltaX == -DeltaY, the movement is only in Y axis
if
(
current_block
->
steps_x
!=
current_block
->
steps_y
||
(
TEST
(
out_bits
,
X_AXIS
)
==
TEST
(
out_bits
,
Y_AXIS
)))
if
(
TEST
(
out_bits
,
X_HEAD
))
#endif
#endif
{
// -direction
{
// -direction
#ifdef DUAL_X_CARRIAGE
#ifdef DUAL_X_CARRIAGE
// with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
// with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
if
((
current_block
->
active_extruder
==
0
&&
X_HOME_DIR
==
-
1
)
||
(
current_block
->
active_extruder
!=
0
&&
X2_HOME_DIR
==
-
1
))
if
((
current_block
->
active_extruder
==
0
&&
X_HOME_DIR
==
-
1
)
||
(
current_block
->
active_extruder
!=
0
&&
X2_HOME_DIR
==
-
1
))
#endif
#endif
{
{
#if defined(X_MIN_PIN) && X_MIN_PIN > -1
#if defined(X_MIN_PIN) && X_MIN_PIN >= 0
bool
x_min_endstop
=
(
READ
(
X_MIN_PIN
)
!=
X_MIN_ENDSTOP_INVERTING
);
UPDATE_ENDSTOP
(
x
,
X
,
min
,
MIN
);
if
(
x_min_endstop
&&
old_x_min_endstop
&&
(
current_block
->
steps_x
>
0
))
{
#endif
endstops_trigsteps
[
X_AXIS
]
=
count_position
[
X_AXIS
];
endstop_x_hit
=
true
;
step_events_completed
=
current_block
->
step_event_count
;
}
}
old_x_min_endstop
=
x_min_endstop
;
#endif
}
}
}
else
{
// +direction
else
{
// +direction
#ifdef DUAL_X_CARRIAGE
#ifdef DUAL_X_CARRIAGE
// with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
// with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
if
((
current_block
->
active_driver
==
0
&&
X_HOME_DIR
==
1
)
||
(
current_block
->
active_extruder
!=
0
&&
X2_HOME_DIR
==
1
))
if
((
current_block
->
active_extruder
==
0
&&
X_HOME_DIR
==
1
)
||
(
current_block
->
active_extruder
!=
0
&&
X2_HOME_DIR
==
1
))
#endif
{
#if defined(X_MAX_PIN) && X_MAX_PIN > -1
bool
x_max_endstop
=
(
READ
(
X_MAX_PIN
)
!=
X_MAX_ENDSTOP_INVERTING
);
if
(
x_max_endstop
&&
old_x_max_endstop
&&
(
current_block
->
steps_x
>
0
))
{
endstops_trigsteps
[
X_AXIS
]
=
count_position
[
X_AXIS
];
endstop_x_hit
=
true
;
step_events_completed
=
current_block
->
step_event_count
;
}
old_x_max_endstop
=
x_max_endstop
;
#endif
#endif
{
#if defined(X_MAX_PIN) && X_MAX_PIN >= 0
UPDATE_ENDSTOP
(
x
,
X
,
max
,
MAX
);
#endif
}
}
}
}
#ifndef COREXY
#ifndef COREXY
if
((
out_bits
&
(
1
<<
Y_AXIS
))
!=
0
)
// -direction
if
(
TEST
(
out_bits
,
Y_AXIS
))
// -direction
#else
#else
if
(
!
((
current_block
->
steps_x
==
current_block
->
steps_y
)
&&
((
out_bits
&
(
1
<<
X_AXIS
))
>>
X_AXIS
==
(
out_bits
&
(
1
<<
Y_AXIS
))
>>
Y_AXIS
)))
// Head direction in -Y axis for CoreXY bots.
if
((
out_bits
&
(
1
<<
Y_HEAD
))
!=
0
)
// If DeltaX == DeltaY, the movement is only in X axis
#endif
if
(
current_block
->
steps_x
!=
current_block
->
steps_y
||
(
TEST
(
out_bits
,
X_AXIS
)
!=
TEST
(
out_bits
,
Y_AXIS
)))
{
// -direction
if
(
TEST
(
out_bits
,
Y_HEAD
))
#if defined(Y_MIN_PIN) && Y_MIN_PIN > -1
bool
y_min_endstop
=
(
READ
(
Y_MIN_PIN
)
!=
Y_MIN_ENDSTOP_INVERTING
);
if
(
y_min_endstop
&&
old_y_min_endstop
&&
(
current_block
->
steps_y
>
0
))
{
endstops_trigsteps
[
Y_AXIS
]
=
count_position
[
Y_AXIS
];
endstop_y_hit
=
true
;
step_events_completed
=
current_block
->
step_event_count
;
}
old_y_min_endstop
=
y_min_endstop
;
#endif
}
else
{
// +direction
#if defined(Y_MAX_PIN) && Y_MAX_PIN > -1
bool
y_max_endstop
=
(
READ
(
Y_MAX_PIN
)
!=
Y_MAX_ENDSTOP_INVERTING
);
if
(
y_max_endstop
&&
old_y_max_endstop
&&
(
current_block
->
steps_y
>
0
))
{
endstops_trigsteps
[
Y_AXIS
]
=
count_position
[
Y_AXIS
];
endstop_y_hit
=
true
;
step_events_completed
=
current_block
->
step_event_count
;
}
old_y_max_endstop
=
y_max_endstop
;
#endif
#endif
}
{
// -direction
#if defined(Y_MIN_PIN) && Y_MIN_PIN >= 0
UPDATE_ENDSTOP
(
y
,
Y
,
min
,
MIN
);
#endif
}
else
{
// +direction
#if defined(Y_MAX_PIN) && Y_MAX_PIN >= 0
UPDATE_ENDSTOP
(
y
,
Y
,
max
,
MAX
);
#endif
}
}
}
if
(
(
out_bits
&
(
1
<<
Z_AXIS
))
!=
0
)
{
// -direction
if
(
TEST
(
out_bits
,
Z_AXIS
)
)
{
// -direction
Z_DIR_WRITE
(
INVERT_Z_DIR
);
Z_DIR_WRITE
(
INVERT_Z_DIR
);
#ifdef Z_DUAL_STEPPER_DRIVERS
#ifdef Z_DUAL_STEPPER_DRIVERS
Z2_DIR_WRITE
(
INVERT_Z_DIR
);
Z2_DIR_WRITE
(
INVERT_Z_DIR
);
#endif
#endif
count_direction
[
Z_AXIS
]
=-
1
;
count_direction
[
Z_AXIS
]
=
-
1
;
CHECK_ENDSTOPS
{
if
(
check_endstops
)
{
#if defined(Z_MIN_PIN) && Z_MIN_PIN > -1
#if defined(Z_MIN_PIN) && Z_MIN_PIN >= 0
bool
z_min_endstop
=
(
READ
(
Z_MIN_PIN
)
!=
Z_MIN_ENDSTOP_INVERTING
);
UPDATE_ENDSTOP
(
z
,
Z
,
min
,
MIN
);
if
(
z_min_endstop
&&
old_z_min_endstop
&&
(
current_block
->
steps_z
>
0
))
{
endstops_trigsteps
[
Z_AXIS
]
=
count_position
[
Z_AXIS
];
endstop_z_hit
=
true
;
step_events_completed
=
current_block
->
step_event_count
;
}
old_z_min_endstop
=
z_min_endstop
;
#endif
#endif
}
}
}
}
...
@@ -554,26 +531,20 @@ ISR(TIMER1_COMPA_vect)
...
@@ -554,26 +531,20 @@ ISR(TIMER1_COMPA_vect)
Z2_DIR_WRITE
(
!
INVERT_Z_DIR
);
Z2_DIR_WRITE
(
!
INVERT_Z_DIR
);
#endif
#endif
count_direction
[
Z_AXIS
]
=
1
;
count_direction
[
Z_AXIS
]
=
1
;
CHECK_ENDSTOPS
{
if
(
check_endstops
)
{
#if defined(Z_MAX_PIN) && Z_MAX_PIN > -1
#if defined(Z_MAX_PIN) && Z_MAX_PIN >= 0
bool
z_max_endstop
=
(
READ
(
Z_MAX_PIN
)
!=
Z_MAX_ENDSTOP_INVERTING
);
UPDATE_ENDSTOP
(
z
,
Z
,
max
,
MAX
);
if
(
z_max_endstop
&&
old_z_max_endstop
&&
(
current_block
->
steps_z
>
0
))
{
endstops_trigsteps
[
Z_AXIS
]
=
count_position
[
Z_AXIS
];
endstop_z_hit
=
true
;
step_events_completed
=
current_block
->
step_event_count
;
}
old_z_max_endstop
=
z_max_endstop
;
#endif
#endif
}
}
}
}
#ifndef ADVANCE
#ifndef ADVANCE
if
(
(
out_bits
&
(
1
<<
E_AXIS
))
!=
0
)
{
// -direction
if
(
TEST
(
out_bits
,
E_AXIS
)
)
{
// -direction
REV_E_DIR
();
REV_E_DIR
();
count_direction
[
E_AXIS
]
=-
1
;
count_direction
[
E_AXIS
]
=-
1
;
#ifdef NPR2
#ifdef NPR2
CHECK_ENDSTOPS
{
if
(
check_endstops
)
{
#if defined(E_MIN_PIN) && E_MIN_PIN > -1
#if defined(E_MIN_PIN) && E_MIN_PIN > -1
bool
e_min_endstop
=
(
READ
(
E_MIN_PIN
)
!=
E_MIN_ENDSTOP_INVERTING
);
bool
e_min_endstop
=
(
READ
(
E_MIN_PIN
)
!=
E_MIN_ENDSTOP_INVERTING
);
if
(
e_min_endstop
&&
old_e_min_endstop
&&
(
current_block
->
steps_e
>
0
))
{
if
(
e_min_endstop
&&
old_e_min_endstop
&&
(
current_block
->
steps_e
>
0
))
{
...
@@ -592,7 +563,8 @@ ISR(TIMER1_COMPA_vect)
...
@@ -592,7 +563,8 @@ ISR(TIMER1_COMPA_vect)
}
}
#endif //!ADVANCE
#endif //!ADVANCE
for
(
int8_t
i
=
0
;
i
<
step_loops
;
i
++
)
{
// Take multiple steps per interrupt (For high speed moves)
// Take multiple steps per interrupt (For high speed moves)
for
(
int8_t
i
=
0
;
i
<
step_loops
;
i
++
)
{
#ifndef AT90USB
#ifndef AT90USB
MSerial
.
checkRx
();
// Check for serial chars.
MSerial
.
checkRx
();
// Check for serial chars.
#endif
#endif
...
@@ -601,140 +573,63 @@ ISR(TIMER1_COMPA_vect)
...
@@ -601,140 +573,63 @@ ISR(TIMER1_COMPA_vect)
counter_e
+=
current_block
->
steps_e
;
counter_e
+=
current_block
->
steps_e
;
if
(
counter_e
>
0
)
{
if
(
counter_e
>
0
)
{
counter_e
-=
current_block
->
step_event_count
;
counter_e
-=
current_block
->
step_event_count
;
if
((
out_bits
&
(
1
<<
E_AXIS
))
!=
0
)
{
// - direction
e_steps
[
current_block
->
active_driver
]
+=
TEST
(
out_bits
,
E_AXIS
)
?
-
1
:
1
;
e_steps
[
current_block
->
active_driver
]
--
;
}
else
{
e_steps
[
current_block
->
active_driver
]
++
;
}
}
}
#endif //ADVANCE
#endif //ADVANCE
#ifdef CONFIG_STEPPERS_TOSHIBA
#ifdef CONFIG_STEPPERS_TOSHIBA
/* The toshiba stepper controller require much longer pulses
/**
* tjerfore we 'stage' decompose the pulses between high, and
* The Toshiba stepper controller require much longer pulses.
* low instead of doing each in turn. The extra tests add enough
* So we 'stage' decompose the pulses between high and low
* lag to allow it work with without needing NOPs
* instead of doing each in turn. The extra tests add enough
*/
* lag to allow it work with without needing NOPs
counter_x
+=
current_block
->
steps_x
;
*/
if
(
counter_x
>
0
)
X_STEP_WRITE
(
HIGH
);
counter_x
+=
current_block
->
steps_x
;
if
(
counter_x
>
0
)
X_STEP_WRITE
(
HIGH
);
counter_y
+=
current_block
->
steps_y
;
counter_y
+=
current_block
->
steps_y
;
if
(
counter_y
>
0
)
Y_STEP_WRITE
(
HIGH
);
if
(
counter_y
>
0
)
Y_STEP_WRITE
(
HIGH
);
counter_z
+=
current_block
->
steps_z
;
counter_z
+=
current_block
->
steps_z
;
if
(
counter_z
>
0
)
Z_STEP_WRITE
(
HIGH
);
if
(
counter_z
>
0
)
Z_STEP_WRITE
(
HIGH
);
#ifndef ADVANCE
counter_e
+=
current_block
->
steps_e
;
#ifndef ADVANCE
if
(
counter_e
>
0
)
E_STEP_WRITE
(
HIGH
);
counter_e
+=
current_block
->
steps_e
;
#endif
if
(
counter_e
>
0
)
WRITE_E_STEP
(
HIGH
);
#endif //!ADVANCE
if
(
counter_x
>
0
)
{
counter_x
-=
current_block
->
step_event_count
;
count_position
[
X_AXIS
]
+=
count_direction
[
X_AXIS
];
X_STEP_WRITE
(
LOW
);
}
if
(
counter_y
>
0
)
{
counter_y
-=
current_block
->
step_event_count
;
count_position
[
Y_AXIS
]
+=
count_direction
[
Y_AXIS
];
Y_STEP_WRITE
(
LOW
);
}
if
(
counter_z
>
0
)
{
counter_z
-=
current_block
->
step_event_count
;
count_position
[
Z_AXIS
]
+=
count_direction
[
Z_AXIS
];
Z_STEP_WRITE
(
LOW
);
}
#ifndef ADVANCE
#define STEP_IF_COUNTER(axis, AXIS) \
if
(
counter_e
>
0
)
{
if (counter_## axis > 0) {
counter_e
-=
current_block
->
step_event_count
;
counter_
##
axis
-=
current_block
->
step_event_count
;
\
count_position
[
E_AXIS
]
+=
count_direction
[
E_AXIS
];
count_position
[
AXIS
##
_AXIS
]
+=
count_direction
[
AXIS
##
_AXIS
];
\
WRITE_E_STEP
(
LOW
);
AXIS
##
_STEP_WRITE
(
LOW
);
}
#endif //!ADVANCE
#else
counter_x
+=
current_block
->
steps_x
;
if
(
counter_x
>
0
)
{
#ifdef DUAL_X_CARRIAGE
if
(
extruder_duplication_enabled
){
X_STEP_WRITE
(
!
INVERT_X_STEP_PIN
);
X2_STEP_WRITE
(
!
INVERT_X_STEP_PIN
);
}
else
{
if
(
current_block
->
active_driver
!=
0
)
X2_STEP_WRITE
(
!
INVERT_X_STEP_PIN
);
else
X_STEP_WRITE
(
!
INVERT_X_STEP_PIN
);
}
#else
X_STEP_WRITE
(
!
INVERT_X_STEP_PIN
);
#endif
counter_x
-=
current_block
->
step_event_count
;
count_position
[
X_AXIS
]
+=
count_direction
[
X_AXIS
];
#ifdef DUAL_X_CARRIAGE
if
(
extruder_duplication_enabled
){
X_STEP_WRITE
(
INVERT_X_STEP_PIN
);
X2_STEP_WRITE
(
INVERT_X_STEP_PIN
);
}
else
{
if
(
current_block
->
active_driver
!=
0
)
X2_STEP_WRITE
(
INVERT_X_STEP_PIN
);
else
X_STEP_WRITE
(
INVERT_X_STEP_PIN
);
}
}
#else
X_STEP_WRITE
(
INVERT_X_STEP_PIN
);
#endif
}
counter_y
+=
current_block
->
steps_y
;
STEP_IF_COUNTER
(
x
,
X
);
if
(
counter_y
>
0
)
{
STEP_IF_COUNTER
(
y
,
Y
);
Y_STEP_WRITE
(
!
INVERT_Y_STEP_PIN
);
STEP_IF_COUNTER
(
z
,
Z
);
#ifndef ADVANCE
#ifdef Y_DUAL_STEPPER_DRIVERS
STEP_IF_COUNTER
(
e
,
E
);
Y2_STEP_WRITE
(
!
INVERT_Y_STEP_PIN
);
#endif
#endif
counter_y
-=
current_block
->
step_event_count
;
#else // !CONFIG_STEPPERS_TOSHIBA
count_position
[
Y_AXIS
]
+=
count_direction
[
Y_AXIS
];
Y_STEP_WRITE
(
INVERT_Y_STEP_PIN
);
#ifdef Y_DUAL_STEPPER_DRIVERS
Y2_STEP_WRITE
(
INVERT_Y_STEP_PIN
);
#endif
}
counter_z
+=
current_block
->
steps_z
;
if
(
counter_z
>
0
)
{
Z_STEP_WRITE
(
!
INVERT_Z_STEP_PIN
);
#ifdef Z_DUAL_STEPPER_DRIVERS
Z2_STEP_WRITE
(
!
INVERT_Z_STEP_PIN
);
#endif
counter_z
-=
current_block
->
step_event_count
;
#define APPLY_MOVEMENT(axis, AXIS) \
count_position
[
Z_AXIS
]
+=
count_direction
[
Z_AXIS
];
counter_## axis += current_block->steps_## axis; \
Z_STEP_WRITE
(
INVERT_Z_STEP_PIN
);
if (counter_## axis > 0) { \
AXIS ##_APPLY_STEP(!INVERT_## AXIS ##_STEP_PIN,0); \
counter_## axis -= current_block->step_event_count; \
count_position[AXIS ##_AXIS] += count_direction[AXIS ##_AXIS]; \
AXIS ##_APPLY_STEP(INVERT_## AXIS ##_STEP_PIN,0); \
}
#ifdef Z_DUAL_STEPPER_DRIVERS
APPLY_MOVEMENT
(
x
,
X
);
Z2_STEP_WRITE
(
INVERT_Z_STEP_PIN
);
APPLY_MOVEMENT
(
y
,
Y
);
APPLY_MOVEMENT
(
z
,
Z
);
#ifndef ADVANCE
APPLY_MOVEMENT
(
e
,
E
);
#endif
#endif
}
#ifndef ADVANCE
#endif // CONFIG_STEPPERS_TOSHIBA
counter_e
+=
current_block
->
steps_e
;
step_events_completed
++
;
if
(
counter_e
>
0
)
{
if
(
step_events_completed
>=
current_block
->
step_event_count
)
break
;
WRITE_E_STEP
(
!
INVERT_E_STEP_PIN
);
counter_e
-=
current_block
->
step_event_count
;
count_position
[
E_AXIS
]
+=
count_direction
[
E_AXIS
];
WRITE_E_STEP
(
INVERT_E_STEP_PIN
);
}
#endif //!ADVANCE
#endif // CONFIG_STEPPERS_TOSHIBA
step_events_completed
+=
1
;
if
(
step_events_completed
>=
current_block
->
step_event_count
)
break
;
}
}
// Calculare new timer value
// Calculare new timer value
unsigned
short
timer
;
unsigned
short
timer
;
...
@@ -745,7 +640,7 @@ ISR(TIMER1_COMPA_vect)
...
@@ -745,7 +640,7 @@ ISR(TIMER1_COMPA_vect)
acc_step_rate
+=
current_block
->
initial_rate
;
acc_step_rate
+=
current_block
->
initial_rate
;
// upper limit
// upper limit
if
(
acc_step_rate
>
current_block
->
nominal_rate
)
if
(
acc_step_rate
>
current_block
->
nominal_rate
)
acc_step_rate
=
current_block
->
nominal_rate
;
acc_step_rate
=
current_block
->
nominal_rate
;
// step_rate to timer interval
// step_rate to timer interval
...
@@ -756,16 +651,17 @@ ISR(TIMER1_COMPA_vect)
...
@@ -756,16 +651,17 @@ ISR(TIMER1_COMPA_vect)
for
(
int8_t
i
=
0
;
i
<
step_loops
;
i
++
)
{
for
(
int8_t
i
=
0
;
i
<
step_loops
;
i
++
)
{
advance
+=
advance_rate
;
advance
+=
advance_rate
;
}
}
//if(advance > current_block->advance) advance = current_block->advance;
//if
(advance > current_block->advance) advance = current_block->advance;
// Do E steps + advance steps
// Do E steps + advance steps
e_steps
[
current_block
->
active_driver
]
+=
((
advance
>>
8
)
-
old_advance
);
e_steps
[
current_block
->
active_driver
]
+=
((
advance
>>
8
)
-
old_advance
);
old_advance
=
advance
>>
8
;
old_advance
=
advance
>>
8
;
#endif
#endif
}
}
else
if
(
step_events_completed
>
(
unsigned
long
int
)
current_block
->
decelerate_after
)
{
else
if
(
step_events_completed
>
(
unsigned
long
int
)
current_block
->
decelerate_after
)
{
MultiU24X24toH16
(
step_rate
,
deceleration_time
,
current_block
->
acceleration_rate
);
MultiU24X24toH16
(
step_rate
,
deceleration_time
,
current_block
->
acceleration_rate
);
if
(
step_rate
>
acc_step_rate
)
{
// Check step_rate stays positive
if
(
step_rate
>
acc_step_rate
)
{
// Check step_rate stays positive
step_rate
=
current_block
->
final_rate
;
step_rate
=
current_block
->
final_rate
;
}
}
else
{
else
{
...
@@ -773,7 +669,7 @@ ISR(TIMER1_COMPA_vect)
...
@@ -773,7 +669,7 @@ ISR(TIMER1_COMPA_vect)
}
}
// lower limit
// lower limit
if
(
step_rate
<
current_block
->
final_rate
)
if
(
step_rate
<
current_block
->
final_rate
)
step_rate
=
current_block
->
final_rate
;
step_rate
=
current_block
->
final_rate
;
// step_rate to timer interval
// step_rate to timer interval
...
@@ -784,7 +680,7 @@ ISR(TIMER1_COMPA_vect)
...
@@ -784,7 +680,7 @@ ISR(TIMER1_COMPA_vect)
for
(
int8_t
i
=
0
;
i
<
step_loops
;
i
++
)
{
for
(
int8_t
i
=
0
;
i
<
step_loops
;
i
++
)
{
advance
-=
advance_rate
;
advance
-=
advance_rate
;
}
}
if
(
advance
<
final_advance
)
advance
=
final_advance
;
if
(
advance
<
final_advance
)
advance
=
final_advance
;
// Do E steps + advance steps
// Do E steps + advance steps
e_steps
[
current_block
->
active_driver
]
+=
((
advance
>>
8
)
-
old_advance
);
e_steps
[
current_block
->
active_driver
]
+=
((
advance
>>
8
)
-
old_advance
);
old_advance
=
advance
>>
8
;
old_advance
=
advance
>>
8
;
...
@@ -877,216 +773,205 @@ ISR(TIMER1_COMPA_vect)
...
@@ -877,216 +773,205 @@ ISR(TIMER1_COMPA_vect)
}
}
#endif // ADVANCE
#endif // ADVANCE
void
st_init
()
void
st_init
()
{
{
digipot_init
();
//Initialize Digipot Motor Current
digipot_init
();
//Initialize Digipot Motor Current
microstep_init
();
//Initialize Microstepping Pins
microstep_init
();
//Initialize Microstepping Pins
// initialise TMC Steppers
// initialise TMC Steppers
#ifdef HAVE_TMCDRIVER
#ifdef HAVE_TMCDRIVER
tmc_init
();
tmc_init
();
#endif
#endif
// initialise L6470 Steppers
// initialise L6470 Steppers
#ifdef HAVE_L6470DRIVER
#ifdef HAVE_L6470DRIVER
L6470_init
();
L6470_init
();
#endif
#endif
//Initialize Dir Pins
//
Initialize Dir Pins
#if defined(X_DIR_PIN) && X_DIR_PIN >
-1
#if defined(X_DIR_PIN) && X_DIR_PIN >
= 0
X_DIR_INIT
;
X_DIR_INIT
;
#endif
#endif
#if defined(X2_DIR_PIN) && X2_DIR_PIN >
-1
#if defined(X2_DIR_PIN) && X2_DIR_PIN >
= 0
X2_DIR_INIT
;
X2_DIR_INIT
;
#endif
#endif
#if defined(Y_DIR_PIN) && Y_DIR_PIN >
-1
#if defined(Y_DIR_PIN) && Y_DIR_PIN >
= 0
Y_DIR_INIT
;
Y_DIR_INIT
;
#if defined(Y_DUAL_STEPPER_DRIVERS) && defined(Y2_DIR_PIN) && Y2_DIR_PIN >= 0
#if defined(Y_DUAL_STEPPER_DRIVERS) && defined(Y2_DIR_PIN) && (Y2_DIR_PIN > -1)
Y2_DIR_INIT
;
Y2_DIR_INIT
;
#endif
#endif
#endif
#endif
#if defined(Z_DIR_PIN) && Z_DIR_PIN >
-1
#if defined(Z_DIR_PIN) && Z_DIR_PIN >
= 0
Z_DIR_INIT
;
Z_DIR_INIT
;
#if defined(Z_DUAL_STEPPER_DRIVERS) && defined(Z2_DIR_PIN) &&
(Z2_DIR_PIN > -1)
#if defined(Z_DUAL_STEPPER_DRIVERS) && defined(Z2_DIR_PIN) &&
Z2_DIR_PIN >= 0
Z2_DIR_INIT
;
Z2_DIR_INIT
;
#endif
#endif
#endif
#endif
#if defined(E0_DIR_PIN) && E0_DIR_PIN >
-1
#if defined(E0_DIR_PIN) && E0_DIR_PIN >
= 0
E0_DIR_INIT
;
E0_DIR_INIT
;
#endif
#endif
#if defined(E1_DIR_PIN) &&
(E1_DIR_PIN > -1)
#if defined(E1_DIR_PIN) &&
E1_DIR_PIN >= 0
E1_DIR_INIT
;
E1_DIR_INIT
;
#endif
#endif
#if defined(E2_DIR_PIN) &&
(E2_DIR_PIN > -1)
#if defined(E2_DIR_PIN) &&
E2_DIR_PIN >= 0
E2_DIR_INIT
;
E2_DIR_INIT
;
#endif
#endif
#if defined(E3_DIR_PIN) &&
(E3_DIR_PIN > -1)
#if defined(E3_DIR_PIN) &&
E3_DIR_PIN >= 0
E3_DIR_INIT
;
E3_DIR_INIT
;
#endif
#endif
//Initialize Enable Pins - steppers default to disabled.
//Initialize Enable Pins - steppers default to disabled.
#if defined(X_ENABLE_PIN) && X_ENABLE_PIN >
-1
#if defined(X_ENABLE_PIN) && X_ENABLE_PIN >
= 0
X_ENABLE_INIT
;
X_ENABLE_INIT
;
if
(
!
X_ENABLE_ON
)
X_ENABLE_WRITE
(
HIGH
);
if
(
!
X_ENABLE_ON
)
X_ENABLE_WRITE
(
HIGH
);
#endif
#endif
#if defined(X2_ENABLE_PIN) && X2_ENABLE_PIN >
-1
#if defined(X2_ENABLE_PIN) && X2_ENABLE_PIN >
= 0
X2_ENABLE_INIT
;
X2_ENABLE_INIT
;
if
(
!
X_ENABLE_ON
)
X2_ENABLE_WRITE
(
HIGH
);
if
(
!
X_ENABLE_ON
)
X2_ENABLE_WRITE
(
HIGH
);
#endif
#endif
#if defined(Y_ENABLE_PIN) && Y_ENABLE_PIN >
-1
#if defined(Y_ENABLE_PIN) && Y_ENABLE_PIN >
= 0
Y_ENABLE_INIT
;
Y_ENABLE_INIT
;
if
(
!
Y_ENABLE_ON
)
Y_ENABLE_WRITE
(
HIGH
);
if
(
!
Y_ENABLE_ON
)
Y_ENABLE_WRITE
(
HIGH
);
#if defined(Y_DUAL_STEPPER_DRIVERS) && defined(Y2_ENABLE_PIN) &&
(Y2_ENABLE_PIN > -1)
#if defined(Y_DUAL_STEPPER_DRIVERS) && defined(Y2_ENABLE_PIN) &&
Y2_ENABLE_PIN >= 0
Y2_ENABLE_INIT
;
Y2_ENABLE_INIT
;
if
(
!
Y_ENABLE_ON
)
Y2_ENABLE_WRITE
(
HIGH
);
if
(
!
Y_ENABLE_ON
)
Y2_ENABLE_WRITE
(
HIGH
);
#endif
#endif
#endif
#endif
#if defined(Z_ENABLE_PIN) && Z_ENABLE_PIN >
-1
#if defined(Z_ENABLE_PIN) && Z_ENABLE_PIN >
= 0
Z_ENABLE_INIT
;
Z_ENABLE_INIT
;
if
(
!
Z_ENABLE_ON
)
Z_ENABLE_WRITE
(
HIGH
);
if
(
!
Z_ENABLE_ON
)
Z_ENABLE_WRITE
(
HIGH
);
#if defined(Z_DUAL_STEPPER_DRIVERS) && defined(Z2_ENABLE_PIN) && (Z2_ENABLE_PIN > -1)
#if defined(Z_DUAL_STEPPER_DRIVERS) && defined(Z2_ENABLE_PIN) && Z2_ENABLE_PIN >= 0
Z2_ENABLE_INIT
;
Z2_ENABLE_INIT
;
if
(
!
Z_ENABLE_ON
)
Z2_ENABLE_WRITE
(
HIGH
);
if
(
!
Z_ENABLE_ON
)
Z2_ENABLE_WRITE
(
HIGH
);
#endif
#endif
#endif
#endif
#if defined(E0_ENABLE_PIN) &&
(E0_ENABLE_PIN > -1)
#if defined(E0_ENABLE_PIN) &&
E0_ENABLE_PIN >= 0
E0_ENABLE_INIT
;
E0_ENABLE_INIT
;
if
(
!
E_ENABLE_ON
)
E0_ENABLE_WRITE
(
HIGH
);
if
(
!
E_ENABLE_ON
)
E0_ENABLE_WRITE
(
HIGH
);
#endif
#endif
#if defined(E1_ENABLE_PIN) &&
(E1_ENABLE_PIN > -1)
#if defined(E1_ENABLE_PIN) &&
E1_ENABLE_PIN >= 0
E1_ENABLE_INIT
;
E1_ENABLE_INIT
;
if
(
!
E_ENABLE_ON
)
E1_ENABLE_WRITE
(
HIGH
);
if
(
!
E_ENABLE_ON
)
E1_ENABLE_WRITE
(
HIGH
);
#endif
#endif
#if defined(E2_ENABLE_PIN) &&
(E2_ENABLE_PIN > -1)
#if defined(E2_ENABLE_PIN) &&
E2_ENABLE_PIN >= 0
E2_ENABLE_INIT
;
E2_ENABLE_INIT
;
if
(
!
E_ENABLE_ON
)
E2_ENABLE_WRITE
(
HIGH
);
if
(
!
E_ENABLE_ON
)
E2_ENABLE_WRITE
(
HIGH
);
#endif
#endif
#if defined(E3_ENABLE_PIN) &&
(E3_ENABLE_PIN > -1)
#if defined(E3_ENABLE_PIN) &&
E3_ENABLE_PIN >= 0
E3_ENABLE_INIT
;
E3_ENABLE_INIT
;
if
(
!
E_ENABLE_ON
)
E3_ENABLE_WRITE
(
HIGH
);
if
(
!
E_ENABLE_ON
)
E3_ENABLE_WRITE
(
HIGH
);
#endif
#endif
//Choice E0-E1 or E0-E2 or E1-E3 pin
//Choice E0-E1 or E0-E2 or E1-E3 pin
#if defined(E0E1_CHOICE_PIN) && (E0E1_CHOICE_PIN >
-1
)
#if defined(E0E1_CHOICE_PIN) && (E0E1_CHOICE_PIN >
= 0
)
OUT_WRITE
(
E0E1_CHOICE_PIN
,
LOW
);
OUT_WRITE
(
E0E1_CHOICE_PIN
,
LOW
);
#endif
#endif
#if defined(E0E2_CHOICE_PIN) && (E0E2_CHOICE_PIN >
-1
)
#if defined(E0E2_CHOICE_PIN) && (E0E2_CHOICE_PIN >
= 0
)
OUT_WRITE
(
E0E2_CHOICE_PIN
,
LOW
);
OUT_WRITE
(
E0E2_CHOICE_PIN
,
LOW
);
#endif
#endif
#if defined(E1E3_CHOICE_PIN) && (E1E3_CHOICE_PIN >
-1
)
#if defined(E1E3_CHOICE_PIN) && (E1E3_CHOICE_PIN >
= 0
)
OUT_WRITE
(
E1E3_CHOICE_PIN
,
LOW
);
OUT_WRITE
(
E1E3_CHOICE_PIN
,
LOW
);
#endif
#endif
//endstops and pullups
//endstops and pullups
#if defined(X_MIN_PIN) && X_MIN_PIN >
-1
#if defined(X_MIN_PIN) && X_MIN_PIN >
= 0
SET_INPUT
(
X_MIN_PIN
);
SET_INPUT
(
X_MIN_PIN
);
#ifdef ENDSTOPPULLUP_XMIN
#ifdef ENDSTOPPULLUP_XMIN
WRITE
(
X_MIN_PIN
,
HIGH
);
WRITE
(
X_MIN_PIN
,
HIGH
);
#endif
#endif
#endif
#endif
#if defined(Y_MIN_PIN) && Y_MIN_PIN >
-1
#if defined(Y_MIN_PIN) && Y_MIN_PIN >
= 0
SET_INPUT
(
Y_MIN_PIN
);
SET_INPUT
(
Y_MIN_PIN
);
#ifdef ENDSTOPPULLUP_YMIN
#ifdef ENDSTOPPULLUP_YMIN
WRITE
(
Y_MIN_PIN
,
HIGH
);
WRITE
(
Y_MIN_PIN
,
HIGH
);
#endif
#endif
#endif
#endif
#if defined(Z_MIN_PIN) && Z_MIN_PIN >
-1
#if defined(Z_MIN_PIN) && Z_MIN_PIN >
= 0
SET_INPUT
(
Z_MIN_PIN
);
SET_INPUT
(
Z_MIN_PIN
);
#ifdef ENDSTOPPULLUP_ZMIN
#ifdef ENDSTOPPULLUP_ZMIN
WRITE
(
Z_MIN_PIN
,
HIGH
);
WRITE
(
Z_MIN_PIN
,
HIGH
);
#endif
#endif
#endif
#endif
#if defined(E_MIN_PIN) && E_MIN_PIN >
-1
#if defined(E_MIN_PIN) && E_MIN_PIN >
= 0
SET_INPUT
(
E_MIN_PIN
);
SET_INPUT
(
E_MIN_PIN
);
#ifdef ENDSTOPPULLUP_EMIN
#ifdef ENDSTOPPULLUP_EMIN
WRITE
(
E_MIN_PIN
,
HIGH
);
WRITE
(
E_MIN_PIN
,
HIGH
);
#endif
#endif
#endif
#endif
#if defined(X_MAX_PIN) && X_MAX_PIN >
-1
#if defined(X_MAX_PIN) && X_MAX_PIN >
= 0
SET_INPUT
(
X_MAX_PIN
);
SET_INPUT
(
X_MAX_PIN
);
#ifdef ENDSTOPPULLUP_XMAX
#ifdef ENDSTOPPULLUP_XMAX
WRITE
(
X_MAX_PIN
,
HIGH
);
WRITE
(
X_MAX_PIN
,
HIGH
);
#endif
#endif
#endif
#endif
#if defined(Y_MAX_PIN) && Y_MAX_PIN >
-1
#if defined(Y_MAX_PIN) && Y_MAX_PIN >
= 0
SET_INPUT
(
Y_MAX_PIN
);
SET_INPUT
(
Y_MAX_PIN
);
#ifdef ENDSTOPPULLUP_YMAX
#ifdef ENDSTOPPULLUP_YMAX
WRITE
(
Y_MAX_PIN
,
HIGH
);
WRITE
(
Y_MAX_PIN
,
HIGH
);
#endif
#endif
#endif
#endif
#if defined(Z_MAX_PIN) && Z_MAX_PIN >
-1
#if defined(Z_MAX_PIN) && Z_MAX_PIN >
= 0
SET_INPUT
(
Z_MAX_PIN
);
SET_INPUT
(
Z_MAX_PIN
);
#ifdef ENDSTOPPULLUP_ZMAX
#ifdef ENDSTOPPULLUP_ZMAX
WRITE
(
Z_MAX_PIN
,
HIGH
);
WRITE
(
Z_MAX_PIN
,
HIGH
);
#endif
#endif
#endif
#endif
#define AXIS_INIT(axis, AXIS, PIN) \
AXIS ##_STEP_INIT; \
AXIS ##_STEP_WRITE(INVERT_## PIN ##_STEP_PIN); \
disable_## axis()
//Initialize Step Pins
#define E_AXIS_INIT(NUM) AXIS_INIT(e## NUM, E## NUM, E)
#if defined(X_STEP_PIN) && (X_STEP_PIN > -1)
X_STEP_INIT
;
// Initialize Step Pins
X_STEP_WRITE
(
INVERT_X_STEP_PIN
);
#if defined(X_STEP_PIN) && X_STEP_PIN >= 0
disable_x
(
);
AXIS_INIT
(
x
,
X
,
X
);
#endif
#endif
#if defined(X2_STEP_PIN) && (X2_STEP_PIN > -1)
#if defined(X2_STEP_PIN) && X2_STEP_PIN >= 0
X2_STEP_INIT
;
AXIS_INIT
(
x
,
X2
,
X
);
X2_STEP_WRITE
(
INVERT_X_STEP_PIN
);
disable_x
();
#endif
#endif
#if defined(Y_STEP_PIN) && (Y_STEP_PIN > -1)
#if defined(Y_STEP_PIN) && Y_STEP_PIN >= 0
Y_STEP_INIT
;
#if defined(Y_DUAL_STEPPER_DRIVERS) && defined(Y2_STEP_PIN) && Y2_STEP_PIN >= 0
Y_STEP_WRITE
(
INVERT_Y_STEP_PIN
);
#if defined(Y_DUAL_STEPPER_DRIVERS) && defined(Y2_STEP_PIN) && (Y2_STEP_PIN > -1)
Y2_STEP_INIT
;
Y2_STEP_INIT
;
Y2_STEP_WRITE
(
INVERT_Y_STEP_PIN
);
Y2_STEP_WRITE
(
INVERT_Y_STEP_PIN
);
#endif
#endif
disable_y
(
);
AXIS_INIT
(
y
,
Y
,
Y
);
#endif
#endif
#if defined(Z_STEP_PIN) && (Z_STEP_PIN > -1)
#if defined(Z_STEP_PIN) && Z_STEP_PIN >= 0
Z_STEP_INIT
;
#if defined(Z_DUAL_STEPPER_DRIVERS) && defined(Z2_STEP_PIN) && Z2_STEP_PIN >= 0
Z_STEP_WRITE
(
INVERT_Z_STEP_PIN
);
#if defined(Z_DUAL_STEPPER_DRIVERS) && defined(Z2_STEP_PIN) && (Z2_STEP_PIN > -1)
Z2_STEP_INIT
;
Z2_STEP_INIT
;
Z2_STEP_WRITE
(
INVERT_Z_STEP_PIN
);
Z2_STEP_WRITE
(
INVERT_Z_STEP_PIN
);
#endif
#endif
disable_z
(
);
AXIS_INIT
(
z
,
Z
,
Z
);
#endif
#endif
#if defined(E0_STEP_PIN) && (E0_STEP_PIN > -1)
#if defined(E0_STEP_PIN) && E0_STEP_PIN >= 0
E0_STEP_INIT
;
E_AXIS_INIT
(
0
);
E0_STEP_WRITE
(
INVERT_E_STEP_PIN
);
disable_e0
();
#endif
#endif
#if defined(E1_STEP_PIN) && (E1_STEP_PIN > -1)
#if defined(E1_STEP_PIN) && E1_STEP_PIN >= 0
E1_STEP_INIT
;
E_AXIS_INIT
(
1
);
E1_STEP_WRITE
(
INVERT_E_STEP_PIN
);
disable_e1
();
#endif
#endif
#if defined(E2_STEP_PIN) && (E2_STEP_PIN > -1)
#if defined(E2_STEP_PIN) && E2_STEP_PIN >= 0
E2_STEP_INIT
;
E_AXIS_INIT
(
2
);
E2_STEP_WRITE
(
INVERT_E_STEP_PIN
);
disable_e2
();
#endif
#endif
#if defined(E3_STEP_PIN) && (E3_STEP_PIN > -1)
#if defined(E3_STEP_PIN) && E3_STEP_PIN >= 0
E3_STEP_INIT
;
E_AXIS_INIT
(
3
);
E3_STEP_WRITE
(
INVERT_E_STEP_PIN
);
disable_e3
();
#endif
#endif
// waveform generation = 0100 = CTC
// waveform generation = 0100 = CTC
TCCR1B
&=
~
(
1
<<
WGM13
);
TCCR1B
&=
~
BIT
(
WGM13
);
TCCR1B
|=
(
1
<<
WGM12
);
TCCR1B
|=
BIT
(
WGM12
);
TCCR1A
&=
~
(
1
<<
WGM11
);
TCCR1A
&=
~
BIT
(
WGM11
);
TCCR1A
&=
~
(
1
<<
WGM10
);
TCCR1A
&=
~
BIT
(
WGM10
);
// output mode = 00 (disconnected)
// output mode = 00 (disconnected)
TCCR1A
&=
~
(
3
<<
COM1A0
);
TCCR1A
&=
~
(
3
<<
COM1A0
);
...
@@ -1104,15 +989,15 @@ void st_init()
...
@@ -1104,15 +989,15 @@ void st_init()
ENABLE_STEPPER_DRIVER_INTERRUPT
();
ENABLE_STEPPER_DRIVER_INTERRUPT
();
#ifdef ADVANCE
#ifdef ADVANCE
#if defined(TCCR0A) && defined(WGM01)
#if defined(TCCR0A) && defined(WGM01)
TCCR0A
&=
~
(
1
<<
WGM01
);
TCCR0A
&=
~
BIT
(
WGM01
);
TCCR0A
&=
~
(
1
<<
WGM00
);
TCCR0A
&=
~
BIT
(
WGM00
);
#endif
#endif
e_steps
[
0
]
=
0
;
e_steps
[
0
]
=
0
;
e_steps
[
1
]
=
0
;
e_steps
[
1
]
=
0
;
e_steps
[
2
]
=
0
;
e_steps
[
2
]
=
0
;
e_steps
[
3
]
=
0
;
e_steps
[
3
]
=
0
;
TIMSK0
|=
(
1
<<
OCIE0A
);
TIMSK0
|=
BIT
(
OCIE0A
);
#endif //ADVANCE
#endif //ADVANCE
enable_endstops
(
true
);
// Start with endstops active. After homing they can be disabled
enable_endstops
(
true
);
// Start with endstops active. After homing they can be disabled
...
@@ -1121,17 +1006,15 @@ void st_init()
...
@@ -1121,17 +1006,15 @@ void st_init()
// Block until all buffered steps are executed
// Block until all buffered steps are executed
void
st_synchronize
()
void
st_synchronize
()
{
{
while
(
blocks_queued
())
{
while
(
blocks_queued
())
{
manage_heater
();
manage_heater
();
manage_inactivity
();
manage_inactivity
();
lcd_update
();
lcd_update
();
}
}
}
}
void
st_set_position
(
const
long
&
x
,
const
long
&
y
,
const
long
&
z
,
const
long
&
e
)
void
st_set_position
(
const
long
&
x
,
const
long
&
y
,
const
long
&
z
,
const
long
&
e
)
{
{
CRITICAL_SECTION_START
;
CRITICAL_SECTION_START
;
count_position
[
X_AXIS
]
=
x
;
count_position
[
X_AXIS
]
=
x
;
count_position
[
Y_AXIS
]
=
y
;
count_position
[
Y_AXIS
]
=
y
;
...
@@ -1140,15 +1023,13 @@ void st_set_position(const long &x, const long &y, const long &z, const long &e)
...
@@ -1140,15 +1023,13 @@ void st_set_position(const long &x, const long &y, const long &z, const long &e)
CRITICAL_SECTION_END
;
CRITICAL_SECTION_END
;
}
}
void
st_set_e_position
(
const
long
&
e
)
void
st_set_e_position
(
const
long
&
e
)
{
{
CRITICAL_SECTION_START
;
CRITICAL_SECTION_START
;
count_position
[
E_AXIS
]
=
e
;
count_position
[
E_AXIS
]
=
e
;
CRITICAL_SECTION_END
;
CRITICAL_SECTION_END
;
}
}
long
st_get_position
(
uint8_t
axis
)
long
st_get_position
(
uint8_t
axis
)
{
{
long
count_pos
;
long
count_pos
;
CRITICAL_SECTION_START
;
CRITICAL_SECTION_START
;
count_pos
=
count_position
[
axis
];
count_pos
=
count_position
[
axis
];
...
@@ -1157,15 +1038,15 @@ long st_get_position(uint8_t axis)
...
@@ -1157,15 +1038,15 @@ long st_get_position(uint8_t axis)
}
}
#ifdef ENABLE_AUTO_BED_LEVELING
#ifdef ENABLE_AUTO_BED_LEVELING
float
st_get_position_mm
(
uint8_t
axis
)
{
float
st_get_position_mm
(
uint8_t
axis
)
{
float
steper_position_in_steps
=
st_get_position
(
axis
);
float
steper_position_in_steps
=
st_get_position
(
axis
);
return
steper_position_in_steps
/
axis_steps_per_unit
[
axis
];
return
steper_position_in_steps
/
axis_steps_per_unit
[
axis
];
}
}
#endif // ENABLE_AUTO_BED_LEVELING
#endif // ENABLE_AUTO_BED_LEVELING
void
finishAndDisableSteppers
()
void
finishAndDisableSteppers
()
{
{
st_synchronize
();
st_synchronize
();
disable_x
();
disable_x
();
disable_y
();
disable_y
();
...
@@ -1176,17 +1057,15 @@ void finishAndDisableSteppers()
...
@@ -1176,17 +1057,15 @@ void finishAndDisableSteppers()
disable_e3
();
disable_e3
();
}
}
void
quickStop
()
void
quickStop
()
{
{
DISABLE_STEPPER_DRIVER_INTERRUPT
();
DISABLE_STEPPER_DRIVER_INTERRUPT
();
while
(
blocks_queued
())
while
(
blocks_queued
())
plan_discard_current_block
();
plan_discard_current_block
();
current_block
=
NULL
;
current_block
=
NULL
;
ENABLE_STEPPER_DRIVER_INTERRUPT
();
ENABLE_STEPPER_DRIVER_INTERRUPT
();
}
}
#ifdef NPR2
#ifdef NPR2
void
colorstep
(
long
csteps
,
const
bool
direction
){
void
colorstep
(
long
csteps
,
const
bool
direction
)
{
enable_e1
();
enable_e1
();
//setup new step
//setup new step
WRITE
(
E1_DIR_PIN
,(
INVERT_E1_DIR
)
^
direction
);
WRITE
(
E1_DIR_PIN
,(
INVERT_E1_DIR
)
^
direction
);
...
@@ -1201,150 +1080,77 @@ void quickStop()
...
@@ -1201,150 +1080,77 @@ void quickStop()
#endif //NPR2
#endif //NPR2
#ifdef BABYSTEPPING
#ifdef BABYSTEPPING
void
babystep
(
const
uint8_t
axis
,
const
bool
direction
)
{
//MUST ONLY BE CALLED BY A ISR, it depends on that no other ISR interrupts this
//store initial pin states
switch
(
axis
)
{
case
X_AXIS
:
{
enable_x
();
uint8_t
old_x_dir_pin
=
X_DIR_READ
;
//if dualzstepper, both point to same direction.
//setup new step
X_DIR_WRITE
((
INVERT_X_DIR
)
^
direction
);
#ifdef DUAL_X_CARRIAGE
X2_DIR_WRITE
((
INVERT_X_DIR
)
^
direction
);
#endif
//perform step
X_STEP_WRITE
(
!
INVERT_X_STEP_PIN
);
#ifdef DUAL_X_CARRIAGE
X2_STEP_WRITE
(
!
INVERT_X_STEP_PIN
);
#endif
_delay_us
(
1U
);
// wait 1 microsecond
// MUST ONLY BE CALLED BY AN ISR,
// No other ISR should ever interrupt this!
X_STEP_WRITE
(
INVERT_X_STEP_PIN
);
void
babystep
(
const
uint8_t
axis
,
const
bool
direction
)
{
#ifdef DUAL_X_CARRIAGE
X2_STEP_WRITE
(
INVERT_X_STEP_PIN
);
#define BABYSTEP_AXIS(axis, AXIS, INVERT) { \
#endif
enable_## axis(); \
uint8_t old_pin = AXIS ##_DIR_READ; \
AXIS ##_APPLY_DIR(INVERT_## AXIS ##_DIR^direction^INVERT, true); \
AXIS ##_APPLY_STEP(!INVERT_## AXIS ##_STEP_PIN, true); \
_delay_us(1U); \
AXIS ##_APPLY_STEP(INVERT_## AXIS ##_STEP_PIN, true); \
AXIS ##_APPLY_DIR(old_pin, true); \
}
//get old pin state back.
switch
(
axis
)
{
X_DIR_WRITE
(
old_x_dir_pin
);
#ifdef DUAL_X_CARRIAGE
X2_DIR_WRITE
(
old_x_dir_pin
);
#endif
}
case
X_AXIS
:
break
;
BABYSTEP_AXIS
(
x
,
X
,
false
);
case
Y_AXIS
:
break
;
{
enable_y
();
uint8_t
old_y_dir_pin
=
Y_DIR_READ
;
//if dualzstepper, both point to same direction.
//setup new step
Y_DIR_WRITE
((
INVERT_Y_DIR
)
^
direction
);
#ifdef DUAL_Y_CARRIAGE
Y2_DIR_WRITE
((
INVERT_Y_DIR
)
^
direction
);
#endif
//perform step
Y_STEP_WRITE
(
!
INVERT_Y_STEP_PIN
);
#ifdef DUAL_Y_CARRIAGE
Y2_STEP_WRITE
(
!
INVERT_Y_STEP_PIN
);
#endif
_delay_us
(
1U
);
// wait 1 microsecond
case
Y_AXIS
:
BABYSTEP_AXIS
(
y
,
Y
,
false
);
break
;
case
Z_AXIS
:
{
Y_STEP_WRITE
(
INVERT_Y_STEP_PIN
);
#ifndef DELTA
#ifdef DUAL_Y_CARRIAGE
Y2_STEP_WRITE
(
INVERT_Y_STEP_PIN
);
#endif
//get old pin state back.
BABYSTEP_AXIS
(
z
,
Z
,
BABYSTEP_INVERT_Z
);
Y_DIR_WRITE
(
old_y_dir_pin
);
#ifdef DUAL_Y_CARRIAGE
Y2_DIR_WRITE
(
old_y_dir_pin
);
#endif
}
#else // DELTA
break
;
#ifndef DELTA
case
Z_AXIS
:
{
enable_z
();
uint8_t
old_z_dir_pin
=
Z_DIR_READ
;
//if dualzstepper, both point to same direction.
//setup new step
Z_DIR_WRITE
((
INVERT_Z_DIR
)
^
direction
^
BABYSTEP_INVERT_Z
);
#ifdef Z_DUAL_STEPPER_DRIVERS
Z2_DIR_WRITE
((
INVERT_Z_DIR
)
^
direction
^
BABYSTEP_INVERT_Z
);
#endif
//perform step
Z_STEP_WRITE
(
!
INVERT_Z_STEP_PIN
);
#ifdef Z_DUAL_STEPPER_DRIVERS
Z2_STEP_WRITE
(
!
INVERT_Z_STEP_PIN
);
#endif
_delay_us
(
1U
);
// wait 1 microsecond
bool
z_direction
=
direction
^
BABYSTEP_INVERT_Z
;
Z_STEP_WRITE
(
INVERT_Z_STEP_PIN
);
enable_x
();
#ifdef Z_DUAL_STEPPER_DRIVERS
enable_y
();
Z2_STEP_WRITE
(
INVERT_Z_STEP_PIN
);
enable_z
();
#endif
uint8_t
old_x_dir_pin
=
X_DIR_READ
,
old_y_dir_pin
=
Y_DIR_READ
,
old_z_dir_pin
=
Z_DIR_READ
;
//setup new step
X_DIR_WRITE
(
INVERT_X_DIR
^
z_direction
);
Y_DIR_WRITE
(
INVERT_Y_DIR
^
z_direction
);
Z_DIR_WRITE
(
INVERT_Z_DIR
^
z_direction
);
//perform step
X_STEP_WRITE
(
!
INVERT_X_STEP_PIN
);
Y_STEP_WRITE
(
!
INVERT_Y_STEP_PIN
);
Z_STEP_WRITE
(
!
INVERT_Z_STEP_PIN
);
_delay_us
(
1U
);
X_STEP_WRITE
(
INVERT_X_STEP_PIN
);
Y_STEP_WRITE
(
INVERT_Y_STEP_PIN
);
Z_STEP_WRITE
(
INVERT_Z_STEP_PIN
);
//get old pin state back.
X_DIR_WRITE
(
old_x_dir_pin
);
Y_DIR_WRITE
(
old_y_dir_pin
);
Z_DIR_WRITE
(
old_z_dir_pin
);
//get old pin state back.
#endif
Z_DIR_WRITE
(
old_z_dir_pin
);
#ifdef Z_DUAL_STEPPER_DRIVERS
Z2_DIR_WRITE
(
old_z_dir_pin
);
#endif
}
break
;
default
:
break
;
}
}
}
break
;
#else //DELTA
case
Z_AXIS
:
{
enable_x
();
enable_y
();
enable_z
();
uint8_t
old_x_dir_pin
=
X_DIR_READ
;
uint8_t
old_y_dir_pin
=
Y_DIR_READ
;
uint8_t
old_z_dir_pin
=
Z_DIR_READ
;
//setup new step
X_DIR_WRITE
((
INVERT_X_DIR
)
^
direction
^
BABYSTEP_INVERT_Z
);
Y_DIR_WRITE
((
INVERT_Y_DIR
)
^
direction
^
BABYSTEP_INVERT_Z
);
Z_DIR_WRITE
((
INVERT_Z_DIR
)
^
direction
^
BABYSTEP_INVERT_Z
);
//perform step
X_STEP_WRITE
(
!
INVERT_X_STEP_PIN
);
Y_STEP_WRITE
(
!
INVERT_Y_STEP_PIN
);
Z_STEP_WRITE
(
!
INVERT_Z_STEP_PIN
);
_delay_us
(
1U
);
// wait 1 microsecond
X_STEP_WRITE
(
INVERT_X_STEP_PIN
);
Y_STEP_WRITE
(
INVERT_Y_STEP_PIN
);
Z_STEP_WRITE
(
INVERT_Z_STEP_PIN
);
//get old pin state back.
X_DIR_WRITE
(
old_x_dir_pin
);
Y_DIR_WRITE
(
old_y_dir_pin
);
Z_DIR_WRITE
(
old_z_dir_pin
);
}
break
;
#endif
default
:
break
;
}
}
#endif //BABYSTEPPING
#endif //BABYSTEPPING
void
digitalPotWrite
(
int
address
,
int
value
)
// From Arduino DigitalPotControl example
// From Arduino DigitalPotControl example
{
void
digitalPotWrite
(
int
address
,
int
value
)
{
#if
defined(DIGIPOTSS_PIN) && DIGIPOTSS_PIN > -1
#if
HAS_DIGIPOTSS
digitalWrite
(
DIGIPOTSS_PIN
,
LOW
);
// take the SS pin low to select the chip
digitalWrite
(
DIGIPOTSS_PIN
,
LOW
);
// take the SS pin low to select the chip
SPI
.
transfer
(
address
);
// send in the address and value via SPI:
SPI
.
transfer
(
address
);
// send in the address and value via SPI:
SPI
.
transfer
(
value
);
SPI
.
transfer
(
value
);
...
@@ -1353,16 +1159,17 @@ void digitalPotWrite(int address, int value) // From Arduino DigitalPotControl e
...
@@ -1353,16 +1159,17 @@ void digitalPotWrite(int address, int value) // From Arduino DigitalPotControl e
#endif
#endif
}
}
void
digipot_init
()
//
Initialize Digipot Motor Current
//
Initialize Digipot Motor Current
{
void
digipot_init
()
{
#if
defined(DIGIPOTSS_PIN) && DIGIPOTSS_PIN > -1
#if
HAS_DIGIPOTSS
const
uint8_t
digipot_motor_current
[]
=
DIGIPOT_MOTOR_CURRENT
;
const
uint8_t
digipot_motor_current
[]
=
DIGIPOT_MOTOR_CURRENT
;
SPI
.
begin
();
SPI
.
begin
();
pinMode
(
DIGIPOTSS_PIN
,
OUTPUT
);
pinMode
(
DIGIPOTSS_PIN
,
OUTPUT
);
for
(
int
i
=
0
;
i
<=
4
;
i
++
)
for
(
int
i
=
0
;
i
<=
4
;
i
++
)
{
//digitalPotWrite(digipot_ch[i], digipot_motor_current[i]);
//digitalPotWrite(digipot_ch[i], digipot_motor_current[i]);
digipot_current
(
i
,
digipot_motor_current
[
i
]);
digipot_current
(
i
,
digipot_motor_current
[
i
]);
}
#endif
#endif
#ifdef MOTOR_CURRENT_PWM_XY_PIN
#ifdef MOTOR_CURRENT_PWM_XY_PIN
pinMode
(
MOTOR_CURRENT_PWM_XY_PIN
,
OUTPUT
);
pinMode
(
MOTOR_CURRENT_PWM_XY_PIN
,
OUTPUT
);
...
@@ -1376,69 +1183,64 @@ void digipot_init() //Initialize Digipot Motor Current
...
@@ -1376,69 +1183,64 @@ void digipot_init() //Initialize Digipot Motor Current
#endif
#endif
}
}
void
digipot_current
(
uint8_t
driver
,
int
current
)
void
digipot_current
(
uint8_t
driver
,
int
current
)
{
{
#if HAS_DIGIPOTSS
#if defined(DIGIPOTSS_PIN) && DIGIPOTSS_PIN > -1
const
uint8_t
digipot_ch
[]
=
DIGIPOT_CHANNELS
;
const
uint8_t
digipot_ch
[]
=
DIGIPOT_CHANNELS
;
digitalPotWrite
(
digipot_ch
[
driver
],
current
);
digitalPotWrite
(
digipot_ch
[
driver
],
current
);
#endif
#endif
#ifdef MOTOR_CURRENT_PWM_XY_PIN
#ifdef MOTOR_CURRENT_PWM_XY_PIN
if
(
driver
==
0
)
analogWrite
(
MOTOR_CURRENT_PWM_XY_PIN
,
(
long
)
current
*
255L
/
(
long
)
MOTOR_CURRENT_PWM_RANGE
);
switch
(
driver
)
{
if
(
driver
==
1
)
analogWrite
(
MOTOR_CURRENT_PWM_Z_PIN
,
(
long
)
current
*
255L
/
(
long
)
MOTOR_CURRENT_PWM_RANGE
);
case
0
:
analogWrite
(
MOTOR_CURRENT_PWM_XY_PIN
,
255L
*
current
/
MOTOR_CURRENT_PWM_RANGE
);
break
;
if
(
driver
==
2
)
analogWrite
(
MOTOR_CURRENT_PWM_E_PIN
,
(
long
)
current
*
255L
/
(
long
)
MOTOR_CURRENT_PWM_RANGE
);
case
1
:
analogWrite
(
MOTOR_CURRENT_PWM_Z_PIN
,
255L
*
current
/
MOTOR_CURRENT_PWM_RANGE
);
break
;
case
2
:
analogWrite
(
MOTOR_CURRENT_PWM_E_PIN
,
255L
*
current
/
MOTOR_CURRENT_PWM_RANGE
);
break
;
}
#endif
#endif
}
}
void
microstep_init
()
void
microstep_init
()
{
{
const
uint8_t
microstep_modes
[]
=
MICROSTEP_MODES
;
const
uint8_t
microstep_modes
[]
=
MICROSTEP_MODES
;
#if defined(E1_MS1_PIN) && E1_MS1_PIN >
-1
#if defined(E1_MS1_PIN) && E1_MS1_PIN >
= 0
pinMode
(
E1_MS1_PIN
,
OUTPUT
);
pinMode
(
E1_MS1_PIN
,
OUTPUT
);
pinMode
(
E1_MS2_PIN
,
OUTPUT
);
pinMode
(
E1_MS2_PIN
,
OUTPUT
);
#endif
#endif
#if defined(X_MS1_PIN) && X_MS1_PIN >
-1
#if defined(X_MS1_PIN) && X_MS1_PIN >
= 0
pinMode
(
X_MS1_PIN
,
OUTPUT
);
pinMode
(
X_MS1_PIN
,
OUTPUT
);
pinMode
(
X_MS2_PIN
,
OUTPUT
);
pinMode
(
X_MS2_PIN
,
OUTPUT
);
pinMode
(
Y_MS1_PIN
,
OUTPUT
);
pinMode
(
Y_MS1_PIN
,
OUTPUT
);
pinMode
(
Y_MS2_PIN
,
OUTPUT
);
pinMode
(
Y_MS2_PIN
,
OUTPUT
);
pinMode
(
Z_MS1_PIN
,
OUTPUT
);
pinMode
(
Z_MS1_PIN
,
OUTPUT
);
pinMode
(
Z_MS2_PIN
,
OUTPUT
);
pinMode
(
Z_MS2_PIN
,
OUTPUT
);
pinMode
(
E0_MS1_PIN
,
OUTPUT
);
pinMode
(
E0_MS1_PIN
,
OUTPUT
);
pinMode
(
E0_MS2_PIN
,
OUTPUT
);
pinMode
(
E0_MS2_PIN
,
OUTPUT
);
for
(
int
i
=
0
;
i
<=
4
;
i
++
)
microstep_mode
(
i
,
microstep_modes
[
i
]);
for
(
int
i
=
0
;
i
<=
4
;
i
++
)
microstep_mode
(
i
,
microstep_modes
[
i
]);
#endif
#endif
}
}
void
microstep_ms
(
uint8_t
driver
,
int8_t
ms1
,
int8_t
ms2
)
void
microstep_ms
(
uint8_t
driver
,
int8_t
ms1
,
int8_t
ms2
)
{
{
if
(
ms1
>=
0
)
switch
(
driver
)
{
if
(
ms1
>
-
1
)
switch
(
driver
)
case
0
:
digitalWrite
(
X_MS1_PIN
,
ms1
);
break
;
{
case
1
:
digitalWrite
(
Y_MS1_PIN
,
ms1
);
break
;
case
0
:
digitalWrite
(
X_MS1_PIN
,
ms1
);
break
;
case
2
:
digitalWrite
(
Z_MS1_PIN
,
ms1
);
break
;
case
1
:
digitalWrite
(
Y_MS1_PIN
,
ms1
);
break
;
case
3
:
digitalWrite
(
E0_MS1_PIN
,
ms1
);
break
;
case
2
:
digitalWrite
(
Z_MS1_PIN
,
ms1
);
break
;
#if defined(E1_MS1_PIN) && E1_MS1_PIN >= 0
case
3
:
digitalWrite
(
E0_MS1_PIN
,
ms1
);
break
;
case
4
:
digitalWrite
(
E1_MS1_PIN
,
ms1
);
break
;
#if defined(E1_MS1_PIN) && E1_MS1_PIN > -1
case
4
:
digitalWrite
(
E1_MS1_PIN
,
ms1
);
break
;
#endif
#endif
}
}
if
(
ms2
>
-
1
)
switch
(
driver
)
if
(
ms2
>=
0
)
switch
(
driver
)
{
{
case
0
:
digitalWrite
(
X_MS2_PIN
,
ms2
);
break
;
case
0
:
digitalWrite
(
X_MS2_PIN
,
ms2
);
break
;
case
1
:
digitalWrite
(
Y_MS2_PIN
,
ms2
);
break
;
case
1
:
digitalWrite
(
Y_MS2_PIN
,
ms2
);
break
;
case
2
:
digitalWrite
(
Z_MS2_PIN
,
ms2
);
break
;
case
2
:
digitalWrite
(
Z_MS2_PIN
,
ms2
);
break
;
case
3
:
digitalWrite
(
E0_MS2_PIN
,
ms2
);
break
;
case
3
:
digitalWrite
(
E0_MS2_PIN
,
ms2
);
break
;
#if defined(E1_MS2_PIN) && E1_MS2_PIN >= 0
#if defined(E1_MS2_PIN) && E1_MS2_PIN > -1
case
4
:
digitalWrite
(
E1_MS2_PIN
,
ms2
);
break
;
case
4
:
digitalWrite
(
E1_MS2_PIN
,
ms2
);
break
;
#endif
#endif
}
}
}
}
void
microstep_mode
(
uint8_t
driver
,
uint8_t
stepping_mode
)
void
microstep_mode
(
uint8_t
driver
,
uint8_t
stepping_mode
)
{
{
switch
(
stepping_mode
)
{
switch
(
stepping_mode
)
{
case
1
:
microstep_ms
(
driver
,
MICROSTEP1
);
break
;
case
1
:
microstep_ms
(
driver
,
MICROSTEP1
);
break
;
case
2
:
microstep_ms
(
driver
,
MICROSTEP2
);
break
;
case
2
:
microstep_ms
(
driver
,
MICROSTEP2
);
break
;
case
4
:
microstep_ms
(
driver
,
MICROSTEP4
);
break
;
case
4
:
microstep_ms
(
driver
,
MICROSTEP4
);
break
;
...
@@ -1447,25 +1249,23 @@ void microstep_mode(uint8_t driver, uint8_t stepping_mode)
...
@@ -1447,25 +1249,23 @@ void microstep_mode(uint8_t driver, uint8_t stepping_mode)
}
}
}
}
void
microstep_readings
()
void
microstep_readings
()
{
{
SERIAL_PROTOCOLPGM
(
"MS1,MS2 Pins
\n
"
);
SERIAL_PROTOCOLPGM
(
"MS1,MS2 Pins
\n
"
);
SERIAL_PROTOCOLPGM
(
"X: "
);
SERIAL_PROTOCOLPGM
(
"X: "
);
SERIAL_PROTOCOL
(
digitalRead
(
X_MS1_PIN
));
SERIAL_PROTOCOL
(
digitalRead
(
X_MS1_PIN
));
SERIAL_PROTOCOLLN
(
digitalRead
(
X_MS2_PIN
));
SERIAL_PROTOCOLLN
(
digitalRead
(
X_MS2_PIN
));
SERIAL_PROTOCOLPGM
(
"Y: "
);
SERIAL_PROTOCOLPGM
(
"Y: "
);
SERIAL_PROTOCOL
(
digitalRead
(
Y_MS1_PIN
));
SERIAL_PROTOCOL
(
digitalRead
(
Y_MS1_PIN
));
SERIAL_PROTOCOLLN
(
digitalRead
(
Y_MS2_PIN
));
SERIAL_PROTOCOLLN
(
digitalRead
(
Y_MS2_PIN
));
SERIAL_PROTOCOLPGM
(
"Z: "
);
SERIAL_PROTOCOLPGM
(
"Z: "
);
SERIAL_PROTOCOL
(
digitalRead
(
Z_MS1_PIN
));
SERIAL_PROTOCOL
(
digitalRead
(
Z_MS1_PIN
));
SERIAL_PROTOCOLLN
(
digitalRead
(
Z_MS2_PIN
));
SERIAL_PROTOCOLLN
(
digitalRead
(
Z_MS2_PIN
));
SERIAL_PROTOCOLPGM
(
"E0: "
);
SERIAL_PROTOCOLPGM
(
"E0: "
);
SERIAL_PROTOCOL
(
digitalRead
(
E0_MS1_PIN
));
SERIAL_PROTOCOL
(
digitalRead
(
E0_MS1_PIN
));
SERIAL_PROTOCOLLN
(
digitalRead
(
E0_MS2_PIN
));
SERIAL_PROTOCOLLN
(
digitalRead
(
E0_MS2_PIN
));
#if defined(E1_MS1_PIN) && E1_MS1_PIN >
-1
#if defined(E1_MS1_PIN) && E1_MS1_PIN >
= 0
SERIAL_PROTOCOLPGM
(
"E1: "
);
SERIAL_PROTOCOLPGM
(
"E1: "
);
SERIAL_PROTOCOL
(
digitalRead
(
E1_MS1_PIN
));
SERIAL_PROTOCOL
(
digitalRead
(
E1_MS1_PIN
));
SERIAL_PROTOCOLLN
(
digitalRead
(
E1_MS2_PIN
));
SERIAL_PROTOCOLLN
(
digitalRead
(
E1_MS2_PIN
));
#endif
#endif
}
}
MarlinKimbra/stepper.h
View file @
86d3dd96
...
@@ -25,32 +25,32 @@
...
@@ -25,32 +25,32 @@
#include "stepper_indirection.h"
#include "stepper_indirection.h"
#if DRIVER_EXTRUDERS > 3
#if DRIVER_EXTRUDERS > 3
#define
WRITE_E_STEP
(v) { if(current_block->active_driver == 3) { E3_STEP_WRITE(v); } else { if(current_block->active_driver == 2) { E2_STEP_WRITE(v); } else { if(current_block->active_driver == 1) { E1_STEP_WRITE(v); } else { E0_STEP_WRITE(v); }}}}
#define
E_STEP_WRITE
(v) { if(current_block->active_driver == 3) { E3_STEP_WRITE(v); } else { if(current_block->active_driver == 2) { E2_STEP_WRITE(v); } else { if(current_block->active_driver == 1) { E1_STEP_WRITE(v); } else { E0_STEP_WRITE(v); }}}}
#define NORM_E_DIR() { if(current_block->active_driver == 3) { E3_DIR_WRITE( !INVERT_E3_DIR); } else { if(current_block->active_driver == 2) { E2_DIR_WRITE(!INVERT_E2_DIR); } else { if(current_block->active_driver == 1) { E1_DIR_WRITE(!INVERT_E1_DIR); } else { E0_DIR_WRITE(!INVERT_E0_DIR); }}}}
#define NORM_E_DIR() { if(current_block->active_driver == 3) { E3_DIR_WRITE( !INVERT_E3_DIR); } else { if(current_block->active_driver == 2) { E2_DIR_WRITE(!INVERT_E2_DIR); } else { if(current_block->active_driver == 1) { E1_DIR_WRITE(!INVERT_E1_DIR); } else { E0_DIR_WRITE(!INVERT_E0_DIR); }}}}
#define REV_E_DIR() { if(current_block->active_driver == 3) { E3_DIR_WRITE(INVERT_E3_DIR); } else { if(current_block->active_driver == 2) { E2_DIR_WRITE(INVERT_E2_DIR); } else { if(current_block->active_driver == 1) { E1_DIR_WRITE(INVERT_E1_DIR); } else { E0_DIR_WRITE(INVERT_E0_DIR); }}}}
#define REV_E_DIR() { if(current_block->active_driver == 3) { E3_DIR_WRITE(INVERT_E3_DIR); } else { if(current_block->active_driver == 2) { E2_DIR_WRITE(INVERT_E2_DIR); } else { if(current_block->active_driver == 1) { E1_DIR_WRITE(INVERT_E1_DIR); } else { E0_DIR_WRITE(INVERT_E0_DIR); }}}}
#elif DRIVER_EXTRUDERS > 2
#elif DRIVER_EXTRUDERS > 2
#define
WRITE_E_STEP
(v) { if(current_block->active_driver == 2) { E2_STEP_WRITE(v); } else { if(current_block->active_driver == 1) { E1_STEP_WRITE(v); } else { E0_STEP_WRITE(v); }}}
#define
E_STEP_WRITE
(v) { if(current_block->active_driver == 2) { E2_STEP_WRITE(v); } else { if(current_block->active_driver == 1) { E1_STEP_WRITE(v); } else { E0_STEP_WRITE(v); }}}
#define NORM_E_DIR() { if(current_block->active_driver == 2) { E2_DIR_WRITE(!INVERT_E2_DIR); } else { if(current_block->active_driver == 1) { E1_DIR_WRITE(!INVERT_E1_DIR); } else { E0_DIR_WRITE(!INVERT_E0_DIR); }}}
#define NORM_E_DIR() { if(current_block->active_driver == 2) { E2_DIR_WRITE(!INVERT_E2_DIR); } else { if(current_block->active_driver == 1) { E1_DIR_WRITE(!INVERT_E1_DIR); } else { E0_DIR_WRITE(!INVERT_E0_DIR); }}}
#define REV_E_DIR() { if(current_block->active_driver == 2) { E2_DIR_WRITE(INVERT_E2_DIR); } else { if(current_block->active_driver == 1) { E1_DIR_WRITE(INVERT_E1_DIR); } else { E0_DIR_WRITE(INVERT_E0_DIR); }}}
#define REV_E_DIR() { if(current_block->active_driver == 2) { E2_DIR_WRITE(INVERT_E2_DIR); } else { if(current_block->active_driver == 1) { E1_DIR_WRITE(INVERT_E1_DIR); } else { E0_DIR_WRITE(INVERT_E0_DIR); }}}
#elif DRIVER_EXTRUDERS > 1
#elif DRIVER_EXTRUDERS > 1
#ifndef DUAL_X_CARRIAGE
#ifndef DUAL_X_CARRIAGE
#define
WRITE_E_STEP
(v) { if(current_block->active_driver == 1) { E1_STEP_WRITE(v); } else { E0_STEP_WRITE(v); }}
#define
E_STEP_WRITE
(v) { if(current_block->active_driver == 1) { E1_STEP_WRITE(v); } else { E0_STEP_WRITE(v); }}
#define NORM_E_DIR() { if(current_block->active_driver == 1) { E1_DIR_WRITE(!INVERT_E1_DIR); } else { E0_DIR_WRITE(!INVERT_E0_DIR); }}
#define NORM_E_DIR() { if(current_block->active_driver == 1) { E1_DIR_WRITE(!INVERT_E1_DIR); } else { E0_DIR_WRITE(!INVERT_E0_DIR); }}
#define REV_E_DIR() { if(current_block->active_driver == 1) { E1_DIR_WRITE(INVERT_E1_DIR); } else { E0_DIR_WRITE(INVERT_E0_DIR); }}
#define REV_E_DIR() { if(current_block->active_driver == 1) { E1_DIR_WRITE(INVERT_E1_DIR); } else { E0_DIR_WRITE(INVERT_E0_DIR); }}
#else
#else
extern
bool
extruder_duplication_enabled
;
extern
bool
extruder_duplication_enabled
;
#define
WRITE_E_STEP
(v) { if(extruder_duplication_enabled) { E0_STEP_WRITE(v); E1_STEP_WRITE(v); } else if(current_block->active_driver == 1) { E1_STEP_WRITE(v); } else { E0_STEP_WRITE(v); }}
#define
E_STEP_WRITE
(v) { if(extruder_duplication_enabled) { E0_STEP_WRITE(v); E1_STEP_WRITE(v); } else if(current_block->active_driver == 1) { E1_STEP_WRITE(v); } else { E0_STEP_WRITE(v); }}
#define NORM_E_DIR() { if(extruder_duplication_enabled) { E0_DIR_WRITE(!INVERT_E0_DIR); E1_DIR_WRITE(!INVERT_E1_DIR); } else if(current_block->active_driver == 1) { E1_DIR_WRITE(!INVERT_E1_DIR); } else { E0_DIR_WRITE(!INVERT_E0_DIR); }}
#define NORM_E_DIR() { if(extruder_duplication_enabled) { E0_DIR_WRITE(!INVERT_E0_DIR); E1_DIR_WRITE(!INVERT_E1_DIR); } else if(current_block->active_driver == 1) { E1_DIR_WRITE(!INVERT_E1_DIR); } else { E0_DIR_WRITE(!INVERT_E0_DIR); }}
#define REV_E_DIR() { if(extruder_duplication_enabled) { E0_DIR_WRITE(INVERT_E0_DIR); E1_DIR_WRITE(INVERT_E1_DIR); } else if(current_block->active_driver == 1) { E1_DIR_WRITE(INVERT_E1_DIR); } else { E0_DIR_WRITE(INVERT_E0_DIR); }}
#define REV_E_DIR() { if(extruder_duplication_enabled) { E0_DIR_WRITE(INVERT_E0_DIR); E1_DIR_WRITE(INVERT_E1_DIR); } else if(current_block->active_driver == 1) { E1_DIR_WRITE(INVERT_E1_DIR); } else { E0_DIR_WRITE(INVERT_E0_DIR); }}
#endif
#endif
#else
#else
#define
WRITE_E_STEP
(v) E0_STEP_WRITE(v)
#define
E_STEP_WRITE
(v) E0_STEP_WRITE(v)
#define NORM_E_DIR() E0_DIR_WRITE(!INVERT_E0_DIR)
#define NORM_E_DIR() E0_DIR_WRITE(!INVERT_E0_DIR)
#define REV_E_DIR() E0_DIR_WRITE(INVERT_E0_DIR)
#define REV_E_DIR() E0_DIR_WRITE(INVERT_E0_DIR)
#endif //DRIVER_EXTRUDERS
#endif //DRIVER_EXTRUDERS
#ifdef ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
#ifdef ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
extern
bool
abort_on_endstop_hit
;
extern
bool
abort_on_endstop_hit
;
#endif
#endif
// Initialize and start the stepper motor subsystem
// Initialize and start the stepper motor subsystem
...
@@ -67,8 +67,8 @@ void st_set_e_position(const long &e);
...
@@ -67,8 +67,8 @@ void st_set_e_position(const long &e);
long
st_get_position
(
uint8_t
axis
);
long
st_get_position
(
uint8_t
axis
);
#ifdef ENABLE_AUTO_BED_LEVELING
#ifdef ENABLE_AUTO_BED_LEVELING
// Get current position in mm
// Get current position in mm
float
st_get_position_mm
(
uint8_t
axis
);
float
st_get_position_mm
(
uint8_t
axis
);
#endif //ENABLE_AUTO_BED_LEVELING
#endif //ENABLE_AUTO_BED_LEVELING
// The stepper subsystem goes to sleep when it runs out of things to execute. Call this
// The stepper subsystem goes to sleep when it runs out of things to execute. Call this
...
...
MarlinKimbra/temperature.cpp
View file @
86d3dd96
...
@@ -574,17 +574,17 @@ inline void _temp_error(int e, const char *msg1, const char *msg2) {
...
@@ -574,17 +574,17 @@ inline void _temp_error(int e, const char *msg1, const char *msg2) {
void
max_temp_error
(
uint8_t
e
)
{
void
max_temp_error
(
uint8_t
e
)
{
disable_heater
();
disable_heater
();
_temp_error
(
e
,
MSG_MAXTEMP_EXTRUDER_OFF
,
MSG_ERR_MAXTEMP
);
_temp_error
(
e
,
PSTR
(
MSG_MAXTEMP_EXTRUDER_OFF
),
PSTR
(
MSG_ERR_MAXTEMP
)
);
}
}
void
min_temp_error
(
uint8_t
e
)
{
void
min_temp_error
(
uint8_t
e
)
{
disable_heater
();
disable_heater
();
_temp_error
(
e
,
MSG_MINTEMP_EXTRUDER_OFF
,
MSG_ERR_MINTEMP
);
_temp_error
(
e
,
PSTR
(
MSG_MINTEMP_EXTRUDER_OFF
),
PSTR
(
MSG_ERR_MINTEMP
)
);
}
}
void
bed_max_temp_error
(
void
)
{
void
bed_max_temp_error
(
void
)
{
#if HAS_HEATER_BED
#if HAS_HEATER_BED
WRITE_HEATER_BED
(
0
);
WRITE_HEATER_BED
(
0
);
#endif
#endif
_temp_error
(
-
1
,
MSG_MAXTEMP_BED_OFF
,
MSG_ERR_MAXTEMP_BED
);
_temp_error
(
-
1
,
PSTR
(
MSG_MAXTEMP_BED_OFF
),
PSTR
(
MSG_ERR_MAXTEMP_BED
)
);
}
}
void
manage_heater
()
{
void
manage_heater
()
{
...
@@ -939,8 +939,8 @@ void tp_init()
...
@@ -939,8 +939,8 @@ void tp_init()
{
{
#if MB(RUMBA) && ((TEMP_SENSOR_0==-1)||(TEMP_SENSOR_1==-1)||(TEMP_SENSOR_2==-1)||(TEMP_SENSOR_BED==-1))
#if MB(RUMBA) && ((TEMP_SENSOR_0==-1)||(TEMP_SENSOR_1==-1)||(TEMP_SENSOR_2==-1)||(TEMP_SENSOR_BED==-1))
//disable RUMBA JTAG in case the thermocouple extension is plugged on top of JTAG connector
//disable RUMBA JTAG in case the thermocouple extension is plugged on top of JTAG connector
MCUCR
=
(
1
<<
JTD
);
MCUCR
=
BIT
(
JTD
);
MCUCR
=
(
1
<<
JTD
);
MCUCR
=
BIT
(
JTD
);
#endif
#endif
// Finish init of mult extruder arrays
// Finish init of mult extruder arrays
...
@@ -1003,13 +1003,13 @@ void tp_init()
...
@@ -1003,13 +1003,13 @@ void tp_init()
#endif //HEATER_0_USES_MAX6675
#endif //HEATER_0_USES_MAX6675
#ifdef DIDR2
#ifdef DIDR2
#define ANALOG_SELECT(pin) do{ if (pin < 8) DIDR0 |=
1 << pin; else DIDR2 |= 1 <<
(pin - 8); }while(0)
#define ANALOG_SELECT(pin) do{ if (pin < 8) DIDR0 |=
BIT(pin); else DIDR2 |= BIT
(pin - 8); }while(0)
#else
#else
#define ANALOG_SELECT(pin) do{ DIDR0 |=
1 << pin
; }while(0)
#define ANALOG_SELECT(pin) do{ DIDR0 |=
BIT(pin)
; }while(0)
#endif
#endif
// Set analog inputs
// Set analog inputs
ADCSRA
=
1
<<
ADEN
|
1
<<
ADSC
|
1
<<
ADIF
|
0x07
;
ADCSRA
=
BIT
(
ADEN
)
|
BIT
(
ADSC
)
|
BIT
(
ADIF
)
|
0x07
;
DIDR0
=
0
;
DIDR0
=
0
;
#ifdef DIDR2
#ifdef DIDR2
DIDR2
=
0
;
DIDR2
=
0
;
...
@@ -1036,7 +1036,7 @@ void tp_init()
...
@@ -1036,7 +1036,7 @@ void tp_init()
// Use timer0 for temperature measurement
// Use timer0 for temperature measurement
// Interleave temperature interrupt with millies interrupt
// Interleave temperature interrupt with millies interrupt
OCR0B
=
128
;
OCR0B
=
128
;
TIMSK0
|=
(
1
<<
OCIE0B
);
TIMSK0
|=
BIT
(
OCIE0B
);
// Wait for temperature measurement to settle
// Wait for temperature measurement to settle
delay
(
250
);
delay
(
250
);
...
@@ -1252,12 +1252,12 @@ void disable_heater() {
...
@@ -1252,12 +1252,12 @@ void disable_heater() {
max6675_temp
=
0
;
max6675_temp
=
0
;
#ifdef PRR
#ifdef PRR
PRR
&=
~
(
1
<<
PRSPI
);
PRR
&=
~
BIT
(
PRSPI
);
#elif defined(PRR0)
#elif defined(PRR0)
PRR0
&=
~
(
1
<<
PRSPI
);
PRR0
&=
~
BIT
(
PRSPI
);
#endif
#endif
SPCR
=
(
1
<<
MSTR
)
|
(
1
<<
SPE
)
|
(
1
<<
SPR0
);
SPCR
=
BIT
(
MSTR
)
|
BIT
(
SPE
)
|
BIT
(
SPR0
);
// enable TT_MAX6675
// enable TT_MAX6675
WRITE
(
MAX6675_SS
,
0
);
WRITE
(
MAX6675_SS
,
0
);
...
@@ -1268,13 +1268,13 @@ void disable_heater() {
...
@@ -1268,13 +1268,13 @@ void disable_heater() {
// read MSB
// read MSB
SPDR
=
0
;
SPDR
=
0
;
for
(;(
SPSR
&
(
1
<<
SPIF
))
==
0
;);
for
(;(
SPSR
&
BIT
(
SPIF
))
==
0
;);
max6675_temp
=
SPDR
;
max6675_temp
=
SPDR
;
max6675_temp
<<=
8
;
max6675_temp
<<=
8
;
// read LSB
// read LSB
SPDR
=
0
;
SPDR
=
0
;
for
(;(
SPSR
&
(
1
<<
SPIF
))
==
0
;);
for
(;(
SPSR
&
BIT
(
SPIF
))
==
0
;);
max6675_temp
|=
SPDR
;
max6675_temp
|=
SPDR
;
// disable TT_MAX6675
// disable TT_MAX6675
...
@@ -1319,7 +1319,7 @@ ISR(TIMER0_COMPB_vect) {
...
@@ -1319,7 +1319,7 @@ ISR(TIMER0_COMPB_vect) {
static
unsigned
long
raw_temp_3_value
=
0
;
static
unsigned
long
raw_temp_3_value
=
0
;
static
unsigned
long
raw_temp_bed_value
=
0
;
static
unsigned
long
raw_temp_bed_value
=
0
;
static
TempState
temp_state
=
StartupDelay
;
static
TempState
temp_state
=
StartupDelay
;
static
unsigned
char
pwm_count
=
(
1
<<
SOFT_PWM_SCALE
);
static
unsigned
char
pwm_count
=
BIT
(
SOFT_PWM_SCALE
);
// Static members for each heater
// Static members for each heater
#ifdef SLOW_PWM_HEATERS
#ifdef SLOW_PWM_HEATERS
...
@@ -1407,7 +1407,7 @@ ISR(TIMER0_COMPB_vect) {
...
@@ -1407,7 +1407,7 @@ ISR(TIMER0_COMPB_vect) {
if
(
soft_pwm_fan
<
pwm_count
)
WRITE_FAN
(
0
);
if
(
soft_pwm_fan
<
pwm_count
)
WRITE_FAN
(
0
);
#endif
#endif
pwm_count
+=
(
1
<<
SOFT_PWM_SCALE
);
pwm_count
+=
BIT
(
SOFT_PWM_SCALE
);
pwm_count
&=
0x7f
;
pwm_count
&=
0x7f
;
#else // SLOW_PWM_HEATERS
#else // SLOW_PWM_HEATERS
...
@@ -1492,7 +1492,7 @@ ISR(TIMER0_COMPB_vect) {
...
@@ -1492,7 +1492,7 @@ ISR(TIMER0_COMPB_vect) {
if
(
soft_pwm_fan
<
pwm_count
)
WRITE_FAN
(
0
);
if
(
soft_pwm_fan
<
pwm_count
)
WRITE_FAN
(
0
);
#endif //FAN_SOFT_PWM
#endif //FAN_SOFT_PWM
pwm_count
+=
(
1
<<
SOFT_PWM_SCALE
);
pwm_count
+=
BIT
(
SOFT_PWM_SCALE
);
pwm_count
&=
0x7f
;
pwm_count
&=
0x7f
;
// increment slow_pwm_count only every 64 pwm_count circa 65.5ms
// increment slow_pwm_count only every 64 pwm_count circa 65.5ms
...
@@ -1520,9 +1520,9 @@ ISR(TIMER0_COMPB_vect) {
...
@@ -1520,9 +1520,9 @@ ISR(TIMER0_COMPB_vect) {
#endif // SLOW_PWM_HEATERS
#endif // SLOW_PWM_HEATERS
#define SET_ADMUX_ADCSRA(pin) ADMUX =
(1 << REFS0) | (pin & 0x07); ADCSRA |= 1<<ADSC
#define SET_ADMUX_ADCSRA(pin) ADMUX =
BIT(REFS0) | (pin & 0x07); ADCSRA |= BIT(ADSC)
#ifdef MUX5
#ifdef MUX5
#define START_ADC(pin) if (pin > 7) ADCSRB =
1 << MUX5
; else ADCSRB = 0; SET_ADMUX_ADCSRA(pin)
#define START_ADC(pin) if (pin > 7) ADCSRB =
BIT(MUX5)
; else ADCSRB = 0; SET_ADMUX_ADCSRA(pin)
#else
#else
#define START_ADC(pin) ADCSRB = 0; SET_ADMUX_ADCSRA(pin)
#define START_ADC(pin) ADCSRB = 0; SET_ADMUX_ADCSRA(pin)
#endif
#endif
...
...
MarlinKimbra/temperature.h
View file @
86d3dd96
...
@@ -146,7 +146,7 @@ FORCE_INLINE bool isCoolingHotend(uint8_t extruder) {
...
@@ -146,7 +146,7 @@ FORCE_INLINE bool isCoolingHotend(uint8_t extruder) {
#else
#else
return
target_temperature
[
0
]
<
current_temperature
[
0
];
return
target_temperature
[
0
]
<
current_temperature
[
0
];
#endif
#endif
}
;
}
FORCE_INLINE
bool
isCoolingBed
()
{
return
target_temperature_bed
<
current_temperature_bed
;
}
FORCE_INLINE
bool
isCoolingBed
()
{
return
target_temperature_bed
<
current_temperature_bed
;
}
...
...
MarlinKimbra/ultralcd.cpp
View file @
86d3dd96
...
@@ -13,6 +13,11 @@ int8_t encoderDiff; /* encoderDiff is updated from interrupt context and added t
...
@@ -13,6 +13,11 @@ int8_t encoderDiff; /* encoderDiff is updated from interrupt context and added t
bool
encoderRateMultiplierEnabled
;
bool
encoderRateMultiplierEnabled
;
int32_t
lastEncoderMovementMillis
;
int32_t
lastEncoderMovementMillis
;
int
pageShowInfo
=
0
;
boolean
ChangeScreen
=
false
;
void
set_pageShowInfo
(
int
value
){
pageShowInfo
=
value
;
}
void
set_ChangeScreen
(
boolean
state
)
{
ChangeScreen
=
state
;
}
/* Configuration settings */
/* Configuration settings */
int
plaPreheatHotendTemp
;
int
plaPreheatHotendTemp
;
int
plaPreheatHPBTemp
;
int
plaPreheatHPBTemp
;
...
@@ -651,6 +656,99 @@ void lcd_cooldown() {
...
@@ -651,6 +656,99 @@ void lcd_cooldown() {
lcd_return_to_status
();
lcd_return_to_status
();
}
}
void
config_lcd_level_bed
()
{
setTargetHotend
(
0
,
0
);
SERIAL_ECHOLN
(
"Leveling..."
);
currentMenu
=
lcd_level_bed
;
enquecommands_P
(
PSTR
(
"G28 M"
));
pageShowInfo
=
0
;
}
void
lcd_level_bed
()
{
if
(
ChangeScreen
){
lcd
.
clear
();
switch
(
pageShowInfo
){
case
0
:
{
lcd
.
setCursor
(
0
,
1
);
lcd_printPGM
(
PSTR
(
MSG_LP_INTRO
));
currentMenu
=
lcd_level_bed
;
ChangeScreen
=
false
;
}
break
;
case
1
:
{
lcd
.
setCursor
(
0
,
1
);
lcd_printPGM
(
PSTR
(
MSG_LP_1
));
currentMenu
=
lcd_level_bed
;
ChangeScreen
=
false
;
}
break
;
case
2
:
{
lcd
.
setCursor
(
0
,
1
);
lcd_printPGM
(
PSTR
(
MSG_LP_2
));
currentMenu
=
lcd_level_bed
;
ChangeScreen
=
false
;
}
break
;
case
3
:
{
lcd
.
setCursor
(
0
,
1
);
lcd_printPGM
(
PSTR
(
MSG_LP_3
));
currentMenu
=
lcd_level_bed
;
ChangeScreen
=
false
;
}
break
;
case
4
:
{
lcd
.
setCursor
(
0
,
1
);
lcd_printPGM
(
PSTR
(
MSG_LP_4
));
currentMenu
=
lcd_level_bed
;
ChangeScreen
=
false
;
}
break
;
case
5
:
{
lcd
.
setCursor
(
0
,
1
);
lcd_printPGM
(
PSTR
(
MSG_LP_5
));
currentMenu
=
lcd_level_bed
;
ChangeScreen
=
false
;
}
break
;
case
6
:
{
lcd
.
setCursor
(
2
,
2
);
lcd_printPGM
(
PSTR
(
MSG_LP_6
));
ChangeScreen
=
false
;
delay
(
1200
);
encoderPosition
=
0
;
lcd
.
clear
();
currentMenu
=
lcd_status_screen
;
lcd_status_screen
();
pageShowInfo
=
0
;
}
break
;
}
}
}
static
void
lcd_prepare_menu
()
{
static
void
lcd_prepare_menu
()
{
START_MENU
();
START_MENU
();
MENU_ITEM
(
back
,
MSG_MAIN
,
lcd_main_menu
);
MENU_ITEM
(
back
,
MSG_MAIN
,
lcd_main_menu
);
...
@@ -662,7 +760,7 @@ static void lcd_prepare_menu() {
...
@@ -662,7 +760,7 @@ static void lcd_prepare_menu() {
MENU_ITEM
(
gcode
,
MSG_DISABLE_STEPPERS
,
PSTR
(
"M84"
));
MENU_ITEM
(
gcode
,
MSG_DISABLE_STEPPERS
,
PSTR
(
"M84"
));
MENU_ITEM
(
gcode
,
MSG_AUTO_HOME
,
PSTR
(
"G28"
));
MENU_ITEM
(
gcode
,
MSG_AUTO_HOME
,
PSTR
(
"G28"
));
#ifndef DELTA
#ifndef DELTA
MENU_ITEM
(
gcode
,
MSG_BED_SETTING
,
PSTR
(
"G28 M"
)
);
MENU_ITEM
(
function
,
MSG_BED_SETTING
,
config_lcd_level_bed
);
#endif
#endif
MENU_ITEM
(
function
,
MSG_SET_HOME_OFFSETS
,
lcd_set_home_offsets
);
MENU_ITEM
(
function
,
MSG_SET_HOME_OFFSETS
,
lcd_set_home_offsets
);
//MENU_ITEM(gcode, MSG_SET_ORIGIN, PSTR("G92 X0 Y0 Z0"));
//MENU_ITEM(gcode, MSG_SET_ORIGIN, PSTR("G92 X0 Y0 Z0"));
...
@@ -1531,7 +1629,7 @@ void lcd_buttons_update() {
...
@@ -1531,7 +1629,7 @@ void lcd_buttons_update() {
WRITE
(
SHIFT_LD
,
HIGH
);
WRITE
(
SHIFT_LD
,
HIGH
);
for
(
int8_t
i
=
0
;
i
<
8
;
i
++
)
{
for
(
int8_t
i
=
0
;
i
<
8
;
i
++
)
{
newbutton_reprapworld_keypad
>>=
1
;
newbutton_reprapworld_keypad
>>=
1
;
if
(
READ
(
SHIFT_OUT
))
newbutton_reprapworld_keypad
|=
(
1
<<
7
);
if
(
READ
(
SHIFT_OUT
))
newbutton_reprapworld_keypad
|=
BIT
(
7
);
WRITE
(
SHIFT_CLK
,
HIGH
);
WRITE
(
SHIFT_CLK
,
HIGH
);
WRITE
(
SHIFT_CLK
,
LOW
);
WRITE
(
SHIFT_CLK
,
LOW
);
}
}
...
@@ -1544,7 +1642,7 @@ void lcd_buttons_update() {
...
@@ -1544,7 +1642,7 @@ void lcd_buttons_update() {
unsigned
char
tmp_buttons
=
0
;
unsigned
char
tmp_buttons
=
0
;
for
(
int8_t
i
=
0
;
i
<
8
;
i
++
)
{
for
(
int8_t
i
=
0
;
i
<
8
;
i
++
)
{
newbutton
>>=
1
;
newbutton
>>=
1
;
if
(
READ
(
SHIFT_OUT
))
newbutton
|=
(
1
<<
7
);
if
(
READ
(
SHIFT_OUT
))
newbutton
|=
BIT
(
7
);
WRITE
(
SHIFT_CLK
,
HIGH
);
WRITE
(
SHIFT_CLK
,
HIGH
);
WRITE
(
SHIFT_CLK
,
LOW
);
WRITE
(
SHIFT_CLK
,
LOW
);
}
}
...
...
MarlinKimbra/ultralcd.h
View file @
86d3dd96
...
@@ -19,6 +19,11 @@
...
@@ -19,6 +19,11 @@
void
lcd_setcontrast
(
uint8_t
value
);
void
lcd_setcontrast
(
uint8_t
value
);
#endif
#endif
void
set_pageShowInfo
(
int
value
);
void
set_ChangeScreen
(
boolean
state
);
void
config_lcd_level_bed
(
void
);
void
lcd_level_bed
(
void
);
static
unsigned
char
blink
=
0
;
// Variable for visualization of fan rotation in GLCD
static
unsigned
char
blink
=
0
;
// Variable for visualization of fan rotation in GLCD
#define LCD_MESSAGEPGM(x) lcd_setstatuspgm(PSTR(x))
#define LCD_MESSAGEPGM(x) lcd_setstatuspgm(PSTR(x))
...
...
MarlinKimbra/ultralcd_implementation_hitachi_HD44780.h
View file @
86d3dd96
...
@@ -24,13 +24,13 @@
...
@@ -24,13 +24,13 @@
#define BLEN_B 1
#define BLEN_B 1
#define BLEN_A 0
#define BLEN_A 0
#define EN_B
(1<<
BLEN_B) // The two encoder pins are connected through BTN_EN1 and BTN_EN2
#define EN_B
BIT(
BLEN_B) // The two encoder pins are connected through BTN_EN1 and BTN_EN2
#define EN_A
(1<<
BLEN_A)
#define EN_A
BIT(
BLEN_A)
#if defined(BTN_ENC) && BTN_ENC > -1
#if defined(BTN_ENC) && BTN_ENC > -1
// encoder click is directly connected
// encoder click is directly connected
#define BLEN_C 2
#define BLEN_C 2
#define EN_C
(1<<
BLEN_C)
#define EN_C
BIT(
BLEN_C)
#endif
#endif
//
//
...
@@ -85,14 +85,14 @@
...
@@ -85,14 +85,14 @@
#define REPRAPWORLD_BTN_OFFSET 3 // bit offset into buttons for shift register values
#define REPRAPWORLD_BTN_OFFSET 3 // bit offset into buttons for shift register values
#define EN_REPRAPWORLD_KEYPAD_F3
(1<<
(BLEN_REPRAPWORLD_KEYPAD_F3+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_F3
BIT(
(BLEN_REPRAPWORLD_KEYPAD_F3+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_F2
(1<<
(BLEN_REPRAPWORLD_KEYPAD_F2+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_F2
BIT(
(BLEN_REPRAPWORLD_KEYPAD_F2+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_F1
(1<<
(BLEN_REPRAPWORLD_KEYPAD_F1+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_F1
BIT(
(BLEN_REPRAPWORLD_KEYPAD_F1+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_UP
(1<<
(BLEN_REPRAPWORLD_KEYPAD_UP+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_UP
BIT(
(BLEN_REPRAPWORLD_KEYPAD_UP+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_RIGHT
(1<<
(BLEN_REPRAPWORLD_KEYPAD_RIGHT+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_RIGHT
BIT(
(BLEN_REPRAPWORLD_KEYPAD_RIGHT+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_MIDDLE
(1<<
(BLEN_REPRAPWORLD_KEYPAD_MIDDLE+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_MIDDLE
BIT(
(BLEN_REPRAPWORLD_KEYPAD_MIDDLE+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_DOWN
(1<<
(BLEN_REPRAPWORLD_KEYPAD_DOWN+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_DOWN
BIT(
(BLEN_REPRAPWORLD_KEYPAD_DOWN+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_LEFT
(1<<
(BLEN_REPRAPWORLD_KEYPAD_LEFT+REPRAPWORLD_BTN_OFFSET))
#define EN_REPRAPWORLD_KEYPAD_LEFT
BIT(
(BLEN_REPRAPWORLD_KEYPAD_LEFT+REPRAPWORLD_BTN_OFFSET))
#define LCD_CLICKED ((buttons&EN_C) || (buttons&EN_REPRAPWORLD_KEYPAD_F1))
#define LCD_CLICKED ((buttons&EN_C) || (buttons&EN_REPRAPWORLD_KEYPAD_F1))
#define REPRAPWORLD_KEYPAD_MOVE_Y_DOWN (buttons&EN_REPRAPWORLD_KEYPAD_DOWN)
#define REPRAPWORLD_KEYPAD_MOVE_Y_DOWN (buttons&EN_REPRAPWORLD_KEYPAD_DOWN)
...
@@ -113,12 +113,12 @@
...
@@ -113,12 +113,12 @@
#define BL_ST 2
#define BL_ST 2
//automatic, do not change
//automatic, do not change
#define B_LE
(1<<
BL_LE)
#define B_LE
BIT(
BL_LE)
#define B_UP
(1<<
BL_UP)
#define B_UP
BIT(
BL_UP)
#define B_MI
(1<<
BL_MI)
#define B_MI
BIT(
BL_MI)
#define B_DW
(1<<
BL_DW)
#define B_DW
BIT(
BL_DW)
#define B_RI
(1<<
BL_RI)
#define B_RI
BIT(
BL_RI)
#define B_ST
(1<<
BL_ST)
#define B_ST
BIT(
BL_ST)
#define LCD_CLICKED (buttons&(B_MI|B_ST))
#define LCD_CLICKED (buttons&(B_MI|B_ST))
#endif
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment