Merge pull request #27 from XPila/MK3

PAT9125 I2C, hardware SG homing
This commit is contained in:
XPila 2017-08-17 15:24:23 +02:00 committed by GitHub
commit d73ee3d80c
22 changed files with 1260 additions and 890 deletions

View file

@ -186,7 +186,6 @@
#undef PREVENT_LENGTHY_EXTRUDE
#endif //DEBUG_DISABLE_PREVENT_EXTRUDER
#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
/*================== Thermal Runaway Protection ==============================
@ -295,12 +294,12 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1
#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
#ifdef DEBUG_DISABLE_SWLIMITS
#define min_software_endstops false
#define max_software_endstops false
#else
#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
#endif //DEBUG_DISABLE_SWLIMITS

View file

@ -57,14 +57,21 @@
#include <avr/wdt.h>
#ifdef HAVE_PAT9125_SENSOR
#ifdef SWSPI
#include "swspi.h"
#include "pat9125.h"
#endif //HAVE_PAT9125_SENSOR
#endif //SWSPI
#ifdef HAVE_TMC2130_DRIVERS
#ifdef SWI2C
#include "swi2c.h"
#endif //SWI2C
#ifdef PAT9125
#include "pat9125.h"
#endif //PAT9125
#ifdef TMC2130
#include "tmc2130.h"
#endif //HAVE_TMC2130_DRIVERS
#endif //TMC2130
#ifdef BLINKM
@ -909,7 +916,7 @@ void servo_init()
static void lcd_language_menu();
#ifdef HAVE_PAT9125_SENSOR
#ifdef PAT9125
bool fsensor_enabled = false;
bool fsensor_ignore_error = true;
@ -993,7 +1000,7 @@ void fsensor_update()
}
}
#endif //HAVE_PAT9125_SENSOR
#endif //PAT9125
#ifdef MESH_BED_LEVELING
@ -1158,15 +1165,15 @@ void setup()
plan_init(); // Initialize planner;
watchdog_init();
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
uint8_t silentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
tmc2130_mode = silentMode?TMC2130_MODE_SILENT:TMC2130_MODE_NORMAL;
#endif //HAVE_TMC2130_DRIVERS
#endif //TMC2130
#ifdef HAVE_PAT9125_SENSOR
#ifdef PAT9125
MYSERIAL.print("PAT9125_init:");
MYSERIAL.println(pat9125_init(200, 200));
#endif //HAVE_PAT9125_SENSOR
#endif //PAT9125
st_init(); // Initialize stepper, this enables interrupts!
@ -1489,12 +1496,12 @@ void loop()
isPrintPaused ? manage_inactivity(true) : manage_inactivity(false);
checkHitEndstops();
lcd_update();
#ifdef HAVE_PAT9125_SENSOR
#ifdef PAT9125
fsensor_update();
#endif //HAVE_PAT9125_SENSOR
#ifdef HAVE_TMC2130_DRIVERS
#endif //PAT9125
#ifdef TMC2130
tmc2130_check_overtemp();
#endif //HAVE_TMC2130_DRIVERS
#endif //TMC2130
}
void get_command()
@ -1993,7 +2000,7 @@ void homeaxis(int axis)
if ((axis==X_AXIS)?HOMEAXIS_DO(X):(axis==Y_AXIS)?HOMEAXIS_DO(Y):0)
{
int axis_home_dir = home_dir(axis);
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_enter(X_AXIS_MASK << axis);
#endif
current_position[axis] = 0;
@ -2001,7 +2008,7 @@ void homeaxis(int axis)
destination[axis] = 1.5 * max_length(axis) * axis_home_dir;
feedrate = homing_feedrate[axis];
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_restart(axis);
#endif
st_synchronize();
@ -2009,18 +2016,18 @@ void homeaxis(int axis)
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
destination[axis] = -home_retract_mm(axis) * axis_home_dir;
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_restart(axis);
#endif
st_synchronize();
destination[axis] = 2*home_retract_mm(axis) * axis_home_dir;
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
feedrate = homing_feedrate[axis];
#else
feedrate = homing_feedrate[axis] / 2;
#endif
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_restart(axis);
#endif
st_synchronize();
@ -2029,7 +2036,7 @@ void homeaxis(int axis)
feedrate = 0.0;
endstops_hit_on_purpose();
axis_known_position[axis] = true;
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_exit();
#endif
}
@ -3847,7 +3854,12 @@ void process_commands()
babystep_reset();
// Mark all axes as in a need for homing.
memset(axis_known_position, 0, sizeof(axis_known_position));
// Home in the XY plane.
//set_destination_to_current();
setup_for_endstop_move();
home_xy();
// Let the user move the Z axes up to the end stoppers.
if (lcd_calibrate_z_end_stop_manual( onlyZ )) {
refresh_cmd_timeout();
@ -3864,14 +3876,10 @@ void process_commands()
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS],current_position[Z_AXIS] , current_position[E_AXIS], homing_feedrate[Z_AXIS]/40, active_extruder);
st_synchronize();
// Home in the XY plane.
set_destination_to_current();
setup_for_endstop_move();
home_xy();
#ifdef HAVE_TMC2130_DRIVERS
tmc2130_home_enter(X_AXIS_MASK | Y_AXIS_MASK);
#endif
//#ifdef TMC2130
// tmc2130_home_enter(X_AXIS_MASK | Y_AXIS_MASK);
//#endif
int8_t verbosity_level = 0;
if (code_seen('V')) {
@ -3931,7 +3939,7 @@ void process_commands()
lcd_show_fullscreen_message_and_wait_P(MSG_BABYSTEP_Z_NOT_SET);
}
}
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_exit();
#endif
} else {
@ -5580,13 +5588,13 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
lcd_setstatuspgm(WELCOME_MSG);
custom_message = false;
custom_message_type = 0;
#ifdef HAVE_PAT9125_SENSOR
#ifdef PAT9125
if (fsensor_M600)
{
cmdqueue_pop_front(); //hack because M600 repeated 2x when enqueued to front
fsensor_enable();
}
#endif //HAVE_PAT9125_SENSOR
#endif //PAT9125
}
break;
@ -5928,18 +5936,22 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
}
} // end if(code_seen('T')) (end of T codes)
#ifdef DEBUG_DCODES
else if (code_seen('D')) // D codes (debug)
{
switch((int)code_value())
{
case 0: // D0 - Reset
if (*(strchr_pointer + 1) == 0) break;
MYSERIAL.println("D0 - Reset");
asm volatile("jmp 0x00000");
break;
/* MYSERIAL.println("D0 - Reset");
cli(); //disable interrupts
wdt_reset(); //reset watchdog
WDTCSR = (1<<WDCE) | (1<<WDE); //enable watchdog
WDTCSR = (1<<WDE) | (1<<WDP0); //30ms prescaler
while(1); //wait for reset
break;
while(1); //wait for reset*/
case 1: // D1 - Clear EEPROM
{
MYSERIAL.println("D1 - Clear EEPROM");
@ -5949,7 +5961,7 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
sei();
}
break;
case 2: // D2 - read/write PIN
case 2: // D2 - Read/Write PIN
{
if (code_seen('P')) // Pin (0-255)
{
@ -5982,13 +5994,13 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
break;
case 3:
MYSERIAL.print("fsensor_enable()");
#ifdef HAVE_PAT9125_SENSOR
#ifdef PAT9125
fsensor_enable();
#endif
break;
case 4:
MYSERIAL.print("fsensor_disable()");
#ifdef HAVE_PAT9125_SENSOR
#ifdef PAT9125
fsensor_disable();
#endif
break;
@ -6008,8 +6020,21 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
homeaxis(1);
}
break;
case 7:
{
MYSERIAL.print("pat9125_init=");
MYSERIAL.println(pat9125_init(200, 200));
}
break;
case 8:
{
MYSERIAL.print("swi2c_check=");
MYSERIAL.println(swi2c_check(0x75));
}
break;
}
}
#endif //DEBUG_DCODES
else
{
@ -6088,6 +6113,9 @@ void get_arc_coordinates()
void clamp_to_software_endstops(float target[3])
{
#ifdef DEBUG_DISABLE_SWLIMITS
return;
#endif //DEBUG_DISABLE_SWLIMITS
world2machine_clamp(target[0], target[1]);
// Clamp the Z coordinate.

View file

@ -3,15 +3,14 @@
#define BOARD_UNKNOWN -1
#define BOARD_EINY_0_3a 300 // EINY 0.3a
#define BOARD_EINY_0_4a 299 // EINY 0.4a
#define BOARD_RAMBO 100 // Rambo - 100 (orig 301)
#define BOARD_RAMBO 301 // Rambo
#define BOARD_RAMBO_MINI_1_3 302 // Rambo-mini 1.3
#define BOARD_RAMBO_MINI_1_0 102 // Rambo-mini 1.0
#define BOARD_RAMBO_MINI_1_0 200 // Rambo-mini 1.0 - 200 (orig 102)
#define BOARD_RAMBO_MINI_1_3 203 // Rambo-mini 1.3 - 203 (orig 302)
#define BOARD_99 99 // This is in pins.h but...?
#define BOARD_EINY_0_3a 303 // EINY 0.3a - 303 (orig 300)
#define BOARD_EINY_0_4a 304 // EINY 0.4a - 304 (orig 299)
#define BOARD_EINY_0_5a 305 // EINY 0.5a - 305 (orig 298)
#define MB(board) (MOTHERBOARD==BOARD_##board)
#define IS_RAMPS (MB(RAMPS_OLD) || MB(RAMPS_13_EFB) || MB(RAMPS_13_EEB) || MB(RAMPS_13_EFF) || MB(RAMPS_13_EEF))

View file

@ -19,8 +19,8 @@ float world2machine_shift[2];
#define WEIGHT_FIRST_ROW_Y_HIGH (0.3f)
#define WEIGHT_FIRST_ROW_Y_LOW (0.0f)
#define BED_ZERO_REF_X (- 22.f + X_PROBE_OFFSET_FROM_EXTRUDER)
#define BED_ZERO_REF_Y (- 0.6f + Y_PROBE_OFFSET_FROM_EXTRUDER)
#define BED_ZERO_REF_X (- 22.f + X_PROBE_OFFSET_FROM_EXTRUDER) // -22 + 23 = 1
#define BED_ZERO_REF_Y (- 0.6f + Y_PROBE_OFFSET_FROM_EXTRUDER) // -0.6 + 9 = 8.4
// Scaling of the real machine axes against the programmed dimensions in the firmware.
// The correction is tiny, here around 0.5mm on 250mm length.

View file

@ -1,79 +1,91 @@
#include "pat9125.h"
#include "swspi.h"
#ifdef SWSPI_RPI
// #include <bcm2835.h>
#define DELAY(delay) usleep(delay)
#endif //SWSPI_RPI
#ifdef SWSPI_AVR
#include "Arduino.h"
#define DELAY(delay) delayMicroseconds(delay)
#endif //SWSPI_AVR
unsigned char ucPID1 = 0;
unsigned char ucPID2 = 0;
int pat9125_x = 0;
int pat9125_y = 0;
int pat9125_b = 0;
int pat9125_init(unsigned char xres, unsigned char yres)
{
swspi_init();
ucPID1 = pat9125_rd_reg(PAT9125_PID1);
ucPID2 = pat9125_rd_reg(PAT9125_PID2);
if ((ucPID1 != 0x31) || (ucPID2 != 0x91))
{
return 0;
}
pat9125_wr_reg(PAT9125_RES_X, xres);
pat9125_wr_reg(PAT9125_RES_Y, yres);
return 1;
}
int pat9125_update()
{
if ((ucPID1 == 0x31) && (ucPID2 == 0x91))
{
unsigned char ucMotion = pat9125_rd_reg(PAT9125_MOTION);
pat9125_b = pat9125_rd_reg(PAT9125_FRAME);
if (ucMotion & 0x80)
{
unsigned char ucXL = pat9125_rd_reg(PAT9125_DELTA_XL);
unsigned char ucYL = pat9125_rd_reg(PAT9125_DELTA_YL);
unsigned char ucXYH = pat9125_rd_reg(PAT9125_DELTA_XYH);
int iDX = ucXL | ((ucXYH << 4) & 0xf00);
int iDY = ucYL | ((ucXYH << 8) & 0xf00);
if (iDX & 0x800) iDX -= 4096;
if (iDY & 0x800) iDY -= 4096;
pat9125_x += iDX;
pat9125_y += iDY;
return 1;
}
}
return 0;
}
unsigned char pat9125_rd_reg(unsigned char addr)
{
swspi_start();
DELAY(100);
swspi_tx(addr & 0x7f);
DELAY(100);
unsigned char data = swspi_rx();
swspi_stop();
DELAY(100);
return data;
}
void pat9125_wr_reg(unsigned char addr, unsigned char data)
{
swspi_start();
DELAY(100);
swspi_tx(addr | 0x80);
DELAY(100);
swspi_tx(data);
swspi_stop();
DELAY(100);
}
#include "uni_avr_rpi.h"
#ifdef PAT9125
#include "pat9125.h"
#ifdef PAT9125_SWSPI
#include "swspi.h"
#endif //PAT9125_SWSPI
#ifdef PAT9125_SWI2C
#include "swi2c.h"
#endif //PAT9125_SWI2C
unsigned char pat9125_PID1 = 0;
unsigned char pat9125_PID2 = 0;
int pat9125_x = 0;
int pat9125_y = 0;
int pat9125_b = 0;
int pat9125_init(unsigned char xres, unsigned char yres)
{
#ifdef PAT9125_SWSPI
swspi_init();
#endif //PAT9125_SWSPI
#ifdef PAT9125_SWI2C
swi2c_init(PAT9125_SWI2C_SDA, PAT9125_SWI2C_SCL, PAT9125_SWI2C_CFG);
#endif //PAT9125_SWI2C
pat9125_PID1 = pat9125_rd_reg(PAT9125_PID1);
pat9125_PID2 = pat9125_rd_reg(PAT9125_PID2);
if ((pat9125_PID1 != 0x31) || (pat9125_PID2 != 0x91))
{
return 0;
}
pat9125_wr_reg(PAT9125_RES_X, xres);
pat9125_wr_reg(PAT9125_RES_Y, yres);
return 1;
}
int pat9125_update()
{
if ((pat9125_PID1 == 0x31) && (pat9125_PID2 == 0x91))
{
unsigned char ucMotion = pat9125_rd_reg(PAT9125_MOTION);
pat9125_b = pat9125_rd_reg(PAT9125_FRAME);
if (ucMotion & 0x80)
{
unsigned char ucXL = pat9125_rd_reg(PAT9125_DELTA_XL);
unsigned char ucYL = pat9125_rd_reg(PAT9125_DELTA_YL);
unsigned char ucXYH = pat9125_rd_reg(PAT9125_DELTA_XYH);
int iDX = ucXL | ((ucXYH << 4) & 0xf00);
int iDY = ucYL | ((ucXYH << 8) & 0xf00);
if (iDX & 0x800) iDX -= 4096;
if (iDY & 0x800) iDY -= 4096;
pat9125_x += iDX;
pat9125_y += iDY;
return 1;
}
}
return 0;
}
unsigned char pat9125_rd_reg(unsigned char addr)
{
unsigned char data = 0;
#ifdef PAT9125_SWSPI
swspi_start();
swspi_tx(addr & 0x7f);
data = swspi_rx();
swspi_stop();
#endif //PAT9125_SWSPI
#ifdef PAT9125_SWI2C
int iret = swi2c_readByte_A8(PAT9125_I2C_ADDR, addr, &data);
#endif //PAT9125_SWI2C
return data;
}
void pat9125_wr_reg(unsigned char addr, unsigned char data)
{
#ifdef PAT9125_SWSPI
swspi_start();
swspi_tx(addr | 0x80);
swspi_tx(data);
swspi_stop();
#endif //PAT9125_SWSPI
#ifdef PAT9125_SWI2C
int iret = swi2c_writeByte_A8(PAT9125_I2C_ADDR, addr, &data);
#endif //PAT9125_SWI2C
}
#endif //PAT9125

View file

@ -1,39 +1,41 @@
#ifndef PAT9125_H
#define PAT9125_H
//#define PAT9125_RPI
#define PAT9125_AVR
//PAT9125 registers
#define PAT9125_PID1 0x00
#define PAT9125_PID2 0x01
#define PAT9125_MOTION 0x02
#define PAT9125_DELTA_XL 0x03
#define PAT9125_DELTA_YL 0x04
#define PAT9125_MODE 0x05
#define PAT9125_CONFIG 0x06
#define PAT9125_WP 0x09
#define PAT9125_SLEEP1 0x0a
#define PAT9125_SLEEP2 0x0b
#define PAT9125_RES_X 0x0d
#define PAT9125_RES_Y 0x0e
#define PAT9125_DELTA_XYH 0x12
#define PAT9125_SHUTTER 0x14
#define PAT9125_FRAME 0x17
#define PAT9125_ORIENTATION 0x19
extern unsigned char ucPID1;
extern unsigned char ucPID2;
extern int pat9125_x;
extern int pat9125_y;
extern int pat9125_b;
int pat9125_init(unsigned char xres, unsigned char yres);
int pat9125_update();
unsigned char pat9125_rd_reg(unsigned char addr);
void pat9125_wr_reg(unsigned char addr, unsigned char data);
#endif //PAT9125_H
#ifndef PAT9125_H
#define PAT9125_H
//PAT9125 I2C
#define PAT9125_I2C_ADDR 0x75 //ID=LO
//#define PAT9125_I2C_ADDR 0x79 //ID=HI
//#define PAT9125_I2C_ADDR 0x73 //ID=NC
//PAT9125 registers
#define PAT9125_PID1 0x00
#define PAT9125_PID2 0x01
#define PAT9125_MOTION 0x02
#define PAT9125_DELTA_XL 0x03
#define PAT9125_DELTA_YL 0x04
#define PAT9125_MODE 0x05
#define PAT9125_CONFIG 0x06
#define PAT9125_WP 0x09
#define PAT9125_SLEEP1 0x0a
#define PAT9125_SLEEP2 0x0b
#define PAT9125_RES_X 0x0d
#define PAT9125_RES_Y 0x0e
#define PAT9125_DELTA_XYH 0x12
#define PAT9125_SHUTTER 0x14
#define PAT9125_FRAME 0x17
#define PAT9125_ORIENTATION 0x19
extern unsigned char pat9125_PID1;
extern unsigned char pat9125_PID2;
extern int pat9125_x;
extern int pat9125_y;
extern int pat9125_b;
extern int pat9125_init(unsigned char xres, unsigned char yres);
extern int pat9125_update();
extern unsigned char pat9125_rd_reg(unsigned char addr);
extern void pat9125_wr_reg(unsigned char addr, unsigned char data);
#endif //PAT9125_H

View file

@ -22,541 +22,30 @@
/*****************************************************************
* Rambo Pin Assignments 1.3
******************************************************************/
#if MOTHERBOARD == 302
#define MINI_RAMBO
#endif
#if MOTHERBOARD == 301 || MOTHERBOARD == 302
#define KNOWN_BOARD
#ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega 2560' selected from the 'Tools -> Boards' menu.
#endif
#define FR_SENS 21
#if MOTHERBOARD == 100 //100 - orig 301
#include "pins_Rambo.h"
#endif //MOTHERBOARD == 100
#if MOTHERBOARD == 200 //200 - orig 102
#include "pins_Rambo_1_0.h"
#endif //MOTHERBOARD == 200
#define X_STEP_PIN 37
#define X_DIR_PIN 48
#define X_MIN_PIN 12
#define X_MAX_PIN 30
#define X_ENABLE_PIN 29
#define X_MS1_PIN 40
#define X_MS2_PIN 41
#define Y_STEP_PIN 36
#define Y_DIR_PIN 49
#define Y_MIN_PIN 11
#define Y_MAX_PIN 24
#define Y_ENABLE_PIN 28
#define Y_MS1_PIN 69
#define Y_MS2_PIN 39
#define Z_STEP_PIN 35
#define Z_DIR_PIN 47
#define Z_MIN_PIN 10
#define Z_MAX_PIN 23
#define Z_ENABLE_PIN 27
#define Z_MS1_PIN 68
#define Z_MS2_PIN 67
#define TEMP_BED_PIN 2
#define TEMP_0_PIN 0
#define HEATER_1_PIN 7
#define TEMP_1_PIN 1
#define TEMP_2_PIN -1
#ifdef SNMM
#if MOTHERBOARD == 203 //203 - orig 302
#include "pins_Rambo_1_3.h"
#endif //MOTHERBOARD == 203
#define E_MUX0_PIN 17
#define E_MUX1_PIN 16
#define E_MUX2_PIN 84
#if MOTHERBOARD == 303 //303 - orig 300
#include "pins_Einy_0_3.h"
#endif //MOTHERBOARD == 303
#if MOTHERBOARD == 304 //304 - orig 299
#include "pins_Einy_0_4.h"
#endif //MOTHERBOARD == 304
#endif
#ifdef DIS
#define D_REQUIRE 30
#define D_DATA 20
#define D_DATACLOCK 21
#endif
// The SDSS pin uses a different pin mapping from file Sd2PinMap.h
#define SDSS 53
#ifndef SDSUPPORT
// these pins are defined in the SD library if building with SD support
#define SCK_PIN 52
#define MISO_PIN 50
#define MOSI_PIN 51
#endif
#define BEEPER 84
#define BTN_EN1 72
#define BTN_EN2 14
#define BTN_ENC 9
#define SDCARDDETECT 15
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 18
#define LCD_PINS_D4 19
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
#define E0_STEP_PIN 34
#define E0_DIR_PIN 43
#define E0_ENABLE_PIN 26
#define E0_MS1_PIN 65
#define E0_MS2_PIN 66
#define LED_PIN 13
#ifdef THREEMM_PRINTER
#define FAN_PIN 8
#else
#define FAN_PIN 6
#endif
#define KILL_PIN -1 //80 with Smart Controller LCD
#define SUICIDE_PIN -1 //PIN that has to be turned on right after start, to keep power flowing.
#define SDPOWER -1
#define HEATER_2_PIN -1
#ifdef MINI_RAMBO
#define ELECTRONICS "RAMBo13a"
#define HEATER_0_PIN 3
#define HEATER_BED_PIN 4
#define FAN_1_PIN -1 //6
#define PS_ON_PIN 71
#define MOTOR_CURRENT_PWM_XY_PIN 46
#define MOTOR_CURRENT_PWM_Z_PIN 45
#define MOTOR_CURRENT_PWM_E_PIN 44
#else //RAMBo
#define ELECTRONICS "RAMBoBig"
#define E1_STEP_PIN 33
#define E1_DIR_PIN 42
#define E1_ENABLE_PIN 25
#define E1_MS1_PIN 63
#define E1_MS2_PIN 64
#define DIGIPOTSS_PIN 38
#define DIGIPOT_CHANNELS {4,5,3,0,1} // X Y Z E0 E1 digipot channels to stepper driver mapping
#define HEATER_0_PIN 9
#define HEATER_BED_PIN 3
#define PS_ON_PIN 4
#define SDSS 53
#ifdef ULTRA_LCD
#define KILL_PIN 80
#ifdef NEWPANEL
//arduino pin which triggers an piezzo beeper
#define BEEPER 84 // Beeper on AUX-4
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 18
#define LCD_PINS_D4 19
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
//buttons are directly attached using AUX-2
#define BTN_EN1 76
#define BTN_EN2 77
#define BTN_ENC 78 //the click
#define BLEN_C 2
#define BLEN_B 1
#define BLEN_A 0
#define SDCARDDETECT 81 // Ramps does not use this port
//encoder rotation values
#define encrot0 0
#define encrot1 2
#define encrot2 3
#define encrot3 1
#else //old style panel with shift register
//arduino pin witch triggers an piezzo beeper
#define BEEPER 84 //No Beeper added
//buttons are attached to a shift register
// Not wired this yet
// #define SHIFT_CLK 38
// #define SHIFT_LD 42
// #define SHIFT_OUT 40
// #define SHIFT_EN 17
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 18
#define LCD_PINS_D4 19
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
//encoder rotation values
#define encrot0 0
#define encrot1 2
#define encrot2 3
#define encrot3 1
//bits in the shift register that carry the buttons for:
// left up center down right red
#define BL_LE 7
#define BL_UP 6
#define BL_MI 5
#define BL_DW 4
#define BL_RI 3
#define BL_ST 2
#define BLEN_B 1
#define BLEN_A 0
#endif
#endif //ULTRA_LCD
#endif //RAMBo/MiniRambo option
#endif
/*****************************************************************
* Rambo mini Pin Assignments 1.0
******************************************************************/
#if MOTHERBOARD == 102
#define ELECTRONICS "RAMBo10a"
#define KNOWN_BOARD
#ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega 2560' selected from the 'Tools -> Boards' menu.
#endif
#define FR_SENS 21
#ifdef SNMM
#define E_MUX0_PIN 17
#define E_MUX1_PIN 16
#define E_MUX2_PIN 84
#endif
#define LARGE_FLASH true
#define X_STEP_PIN 37
#define X_DIR_PIN 48
#define X_MIN_PIN 12
#define X_MAX_PIN 30
#define X_ENABLE_PIN 29
#define X_MS1_PIN 40
#define X_MS2_PIN 41
#define Y_STEP_PIN 36
#define Y_DIR_PIN 49
#define Y_MIN_PIN 11
#define Y_MAX_PIN 24
#define Y_ENABLE_PIN 28
#define Y_MS1_PIN 69
#define Y_MS2_PIN 39
#define Z_STEP_PIN 35
#define Z_DIR_PIN 47
#define Z_MIN_PIN 10
#define Z_MAX_PIN 23
#define Z_ENABLE_PIN 27
#define Z_MS1_PIN 68
#define Z_MS2_PIN 67
#define TEMP_BED_PIN 2
#define TEMP_0_PIN 0
#define HEATER_1_PIN 7
#define TEMP_1_PIN 1
#define TEMP_2_PIN -1
// The SDSS pin uses a different pin mapping from file Sd2PinMap.h
#define SDSS 53
#ifndef SDSUPPORT
// these pins are defined in the SD library if building with SD support
#define SCK_PIN 52
#define MISO_PIN 50
#define MOSI_PIN 51
#endif
#define BEEPER 78
#define BTN_EN1 80
#define BTN_EN2 73
#define BTN_ENC 21
#define SDCARDDETECT 72
#define LCD_PINS_RS 38
#define LCD_PINS_ENABLE 5
#define LCD_PINS_D4 14
#define LCD_PINS_D5 15
#define LCD_PINS_D6 32
#define LCD_PINS_D7 31
#define E0_STEP_PIN 34
#define E0_DIR_PIN 43
#define E0_ENABLE_PIN 26
#define E0_MS1_PIN 65
#define E0_MS2_PIN 66
#define LED_PIN 13
#ifdef THREEMM_PRINTER
#define FAN_PIN 8
#else
#define FAN_PIN 6
#endif
#define KILL_PIN -1 //80 with Smart Controller LCD
#define SUICIDE_PIN -1 //PIN that has to be turned on right after start, to keep power flowing.
#define SDPOWER -1
#define HEATER_2_PIN -1
#define HEATER_0_PIN 3
#define HEATER_BED_PIN 4
#define FAN_1_PIN -1 //6
#define PS_ON_PIN 71
#define MOTOR_CURRENT_PWM_XY_PIN 46
#define MOTOR_CURRENT_PWM_Z_PIN 45
#define MOTOR_CURRENT_PWM_E_PIN 44
#endif
/*****************************************************************
* EINY Rambo Pin Assignments 0.3a
******************************************************************/
#if MOTHERBOARD == 300
#define ELECTRONICS "EINY_03a"
#define KNOWN_BOARD
#ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega 2560 or Rambo' selected from the 'Tools -> Boards' menu.
#endif
#define LARGE_FLASH true
#define HAVE_TMC2130_DRIVERS
#define HAVE_PAT9125_SENSOR
#define SWSPI_MISO 16 //RX2
#define SWSPI_MOSI 16 //RX2
#define SWSPI_SCK 17 //TX2
#define SWSPI_CS 20 //SDA
#define X_TMC2130_CS 41
#define X_TMC2130_DIAG 40
#define X_STEP_PIN 37
#define X_DIR_PIN 49
//#define X_MIN_PIN 12
//#define X_MAX_PIN 30
#define X_MIN_PIN X_TMC2130_DIAG
#define X_MAX_PIN X_TMC2130_DIAG
#define X_ENABLE_PIN 29
#define X_MS1_PIN -1
#define X_MS2_PIN -1
#define Y_TMC2130_CS 39
#define Y_TMC2130_DIAG 69
#define Y_STEP_PIN 36
#define Y_DIR_PIN 48
//#define Y_MIN_PIN 11
//#define Y_MAX_PIN 24
#define Y_MIN_PIN Y_TMC2130_DIAG
#define Y_MAX_PIN Y_TMC2130_DIAG
#define Y_ENABLE_PIN 28
#define Y_MS1_PIN -1
#define Y_MS2_PIN -1
#define Z_TMC2130_CS 67
#define Z_TMC2130_DIAG 68
#define Z_STEP_PIN 35
#define Z_DIR_PIN 47
#define Z_MIN_PIN 10
#define Z_MAX_PIN 23
//#define Z_MAX_PIN Z_TMC2130_DIAG
#define Z_ENABLE_PIN 27
#define Z_MS1_PIN -1
#define Z_MS2_PIN -1
#define HEATER_BED_PIN 4
#define TEMP_BED_PIN 2
#define HEATER_0_PIN 3
#define TEMP_0_PIN 0
#define HEATER_1_PIN 7
#define TEMP_1_PIN 1
#ifdef BARICUDA
#define HEATER_2_PIN 6
#else
#define HEATER_2_PIN -1
#endif
#define TEMP_2_PIN -1
#define E0_TMC2130_CS 66
#define E0_TMC2130_DIAG 65
#define E0_STEP_PIN 34
#define E0_DIR_PIN 43
#define E0_ENABLE_PIN 26
#define E0_MS1_PIN -1
#define E0_MS2_PIN -1
#define MOTOR_CURRENT_PWM_XY_PIN 46
#define MOTOR_CURRENT_PWM_Z_PIN 45
#define MOTOR_CURRENT_PWM_E_PIN 44
#define SDPOWER -1
#define SDSS 53
#define LED_PIN 13
#define FAN_PIN 6
#define FAN_1_PIN -1
#define PS_ON_PIN -1
#define KILL_PIN -1 // 80 with Smart Controller LCD
#define SUICIDE_PIN -1 // PIN that has to be turned on right after start, to keep power flowing.
#ifdef ULTRA_LCD
#define KILL_PIN 32
#ifdef NEWPANEL
#define BEEPER 84 // Beeper on AUX-4
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 18
#define LCD_PINS_D4 19
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
//buttons are directly attached using AUX-2
#define BTN_EN1 72
#define BTN_EN2 14
#define BTN_ENC 9 // the click
#define SDCARDDETECT 15
#define TACH_0 81
#define TACH_1 80
#endif //NEWPANEL
#endif //ULTRA_LCD
#endif //MOTHERBOARD == 300
/*****************************************************************
* EINY Rambo Pin Assignments 0.4a
******************************************************************/
#if MOTHERBOARD == 299
#define ELECTRONICS "EINY_04a"
#define KNOWN_BOARD
#ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega 2560 or Rambo' selected from the 'Tools -> Boards' menu.
#endif
#define LARGE_FLASH true
#define HAVE_TMC2130_DRIVERS
#define HAVE_PAT9125_SENSOR
#define SWSPI_MISO 21 //SCL
#define SWSPI_MOSI 21 //SCL
#define SWSPI_SCK 62 //PK0
#define SWSPI_CS 20 //SDA
#define X_TMC2130_CS 41
#define X_TMC2130_DIAG 64 // !!! changed from 40 (EINY03)
#define X_STEP_PIN 37
#define X_DIR_PIN 49
//#define X_MIN_PIN 12
//#define X_MAX_PIN 30
#define X_MIN_PIN X_TMC2130_DIAG
#define X_MAX_PIN X_TMC2130_DIAG
#define X_ENABLE_PIN 29
#define X_MS1_PIN -1
#define X_MS2_PIN -1
#define Y_TMC2130_CS 39
#define Y_TMC2130_DIAG 69
#define Y_STEP_PIN 36
#define Y_DIR_PIN 48
//#define Y_MIN_PIN 11
//#define Y_MAX_PIN 24
#define Y_MIN_PIN Y_TMC2130_DIAG
#define Y_MAX_PIN Y_TMC2130_DIAG
#define Y_ENABLE_PIN 28
#define Y_MS1_PIN -1
#define Y_MS2_PIN -1
#define Z_TMC2130_CS 67
#define Z_STEP_PIN 35
#define Z_DIR_PIN 47
#define Z_MIN_PIN 10
#define Z_MAX_PIN 23
//#define Z_MAX_PIN Z_TMC2130_DIAG
#define Z_ENABLE_PIN 27
#define Z_MS1_PIN -1
#define Z_MS2_PIN -1
#define HEATER_BED_PIN 4
#define TEMP_BED_PIN 2
#define HEATER_0_PIN 3
#define TEMP_0_PIN 0
#define HEATER_1_PIN 7
#define TEMP_1_PIN 1
#ifdef BARICUDA
#define HEATER_2_PIN 6
#else
#define HEATER_2_PIN -1
#endif
#define TEMP_2_PIN -1
#define E0_TMC2130_CS 66
#define E0_STEP_PIN 34
#define E0_DIR_PIN 43
#define E0_ENABLE_PIN 26
#define E0_MS1_PIN -1
#define E0_MS2_PIN -1
#define MOTOR_CURRENT_PWM_XY_PIN 46
#define MOTOR_CURRENT_PWM_Z_PIN 45
#define MOTOR_CURRENT_PWM_E_PIN 44
#define SDPOWER -1
#define SDSS 77
#define LED_PIN 13
#define FAN_PIN 6
#define FAN_1_PIN -1
#define PS_ON_PIN -1
#define KILL_PIN -1 // 80 with Smart Controller LCD
#define SUICIDE_PIN -1 // PIN that has to be turned on right after start, to keep power flowing.
#ifdef ULTRA_LCD
//#define KILL_PIN 32
#ifdef NEWPANEL
#define BEEPER 84 // Beeper on AUX-4
#define LCD_PINS_RS 82
//#define LCD_PINS_ENABLE 18
//#define LCD_PINS_D4 19
#define LCD_PINS_ENABLE 61
#define LCD_PINS_D4 59
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
//buttons are directly attached using AUX-2
#define BTN_EN1 72
#define BTN_EN2 14
#define BTN_ENC 9 // the click
#define SDCARDDETECT 15
#define TACH_0 79
#define TACH_1 80
#endif //NEWPANEL
#endif //ULTRA_LCD
#endif //MOTHERBOARD == 300
#if MOTHERBOARD == 305 //305 - orig 298
#include "pins_Einy_0_4.h"
#endif //MOTHERBOARD == 305
#ifndef KNOWN_BOARD
#error Unknown MOTHERBOARD value in configuration.h

130
Firmware/pins_Einy_0_3.h Normal file
View file

@ -0,0 +1,130 @@
/*****************************************************************
* EINY Rambo 0.3a Pin Assignments
******************************************************************/
#define ELECTRONICS "EINY_03a"
#define KNOWN_BOARD
#ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega 2560 or Rambo' selected from the 'Tools -> Boards' menu.
#endif
#define TMC2130
#define PAT9125
#define SWI2C // enable software i2c
#define SWI2C_A8 // 8bit address functions
#define PAT9125_SWI2C
#define PAT9125_SWI2C_SDA 20 //SDA on P3
#define PAT9125_SWI2C_SCL 21 //SCL on P3
#define PAT9125_SWI2C_CFG 0xb1 //2us clock delay, 2048 cycles timeout
//#define SWSPI_MISO 16 //RX2
//#define SWSPI_MOSI 16 //RX2
//#define SWSPI_SCK 17 //TX2
//#define SWSPI_CS 20 //SDA
////#define SWI2C_SDA 20 //SDA
////#define SWI2C_SCL 21 //SCL
//#define SWI2C_SDA 16 //RX2
//#define SWI2C_SCL 17 //TX2
#define X_TMC2130_CS 41
#define X_TMC2130_DIAG 40
#define X_STEP_PIN 37
#define X_DIR_PIN 49
//#define X_MIN_PIN 12
//#define X_MAX_PIN 30
#define X_MIN_PIN X_TMC2130_DIAG
#define X_MAX_PIN X_TMC2130_DIAG
#define X_ENABLE_PIN 29
#define X_MS1_PIN -1
#define X_MS2_PIN -1
#define Y_TMC2130_CS 39
#define Y_TMC2130_DIAG 69
#define Y_STEP_PIN 36
#define Y_DIR_PIN 48
//#define Y_MIN_PIN 11
//#define Y_MAX_PIN 24
#define Y_MIN_PIN Y_TMC2130_DIAG
#define Y_MAX_PIN Y_TMC2130_DIAG
#define Y_ENABLE_PIN 28
#define Y_MS1_PIN -1
#define Y_MS2_PIN -1
#define Z_TMC2130_CS 67
#define Z_TMC2130_DIAG 68
#define Z_STEP_PIN 35
#define Z_DIR_PIN 47
#define Z_MIN_PIN 10
#define Z_MAX_PIN 23
//#define Z_MAX_PIN Z_TMC2130_DIAG
#define Z_ENABLE_PIN 27
#define Z_MS1_PIN -1
#define Z_MS2_PIN -1
#define HEATER_BED_PIN 4
#define TEMP_BED_PIN 2
#define HEATER_0_PIN 3
#define TEMP_0_PIN 0
#define HEATER_1_PIN 7
#define TEMP_1_PIN 1
#ifdef BARICUDA
#define HEATER_2_PIN 6
#else
#define HEATER_2_PIN -1
#endif
#define TEMP_2_PIN -1
#define E0_TMC2130_CS 66
#define E0_TMC2130_DIAG 65
#define E0_STEP_PIN 34
#define E0_DIR_PIN 43
#define E0_ENABLE_PIN 26
#define E0_MS1_PIN -1
#define E0_MS2_PIN -1
#define MOTOR_CURRENT_PWM_XY_PIN 46
#define MOTOR_CURRENT_PWM_Z_PIN 45
#define MOTOR_CURRENT_PWM_E_PIN 44
#define SDPOWER -1
#define SDSS 53
#define LED_PIN 13
#define FAN_PIN 6
#define FAN_1_PIN -1
#define PS_ON_PIN -1
#define KILL_PIN -1 // 80 with Smart Controller LCD
#define SUICIDE_PIN -1 // PIN that has to be turned on right after start, to keep power flowing.
#ifdef ULTRA_LCD
//#define KILL_PIN 32
#ifdef NEWPANEL
#define BEEPER 84 // Beeper on AUX-4
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 18
#define LCD_PINS_D4 19
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
//buttons are directly attached using AUX-2
#define BTN_EN1 72
#define BTN_EN2 14
#define BTN_ENC 9 // the click
#define SDCARDDETECT 15
#define TACH_0 81
#define TACH_1 80
#endif //NEWPANEL
#endif //ULTRA_LCD

120
Firmware/pins_Einy_0_4.h Normal file
View file

@ -0,0 +1,120 @@
/*****************************************************************
* EINY Rambo 0.4a Pin Assignments
******************************************************************/
#define ELECTRONICS "EINY_04a"
#define KNOWN_BOARD
#ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega 2560 or Rambo' selected from the 'Tools -> Boards' menu.
#endif
#define TMC2130
#define PAT9125
#define SWI2C // enable software i2c
#define SWI2C_A8 // 8bit address functions
#define PAT9125_SWI2C
#define PAT9125_SWI2C_SDA 20 //SDA on P3
#define PAT9125_SWI2C_SCL 21 //SCL on P3
#define PAT9125_SWI2C_CFG 0xb1 //2us clock delay, 2048 cycles timeout
#define X_TMC2130_CS 41
#define X_TMC2130_DIAG 64 // !!! changed from 40 (EINY03)
#define X_STEP_PIN 37
#define X_DIR_PIN 49
//#define X_MIN_PIN 12
//#define X_MAX_PIN 30
#define X_MIN_PIN X_TMC2130_DIAG
#define X_MAX_PIN X_TMC2130_DIAG
#define X_ENABLE_PIN 29
#define X_MS1_PIN -1
#define X_MS2_PIN -1
#define Y_TMC2130_CS 39
#define Y_TMC2130_DIAG 69
#define Y_STEP_PIN 36
#define Y_DIR_PIN 48
//#define Y_MIN_PIN 11
//#define Y_MAX_PIN 24
#define Y_MIN_PIN Y_TMC2130_DIAG
#define Y_MAX_PIN Y_TMC2130_DIAG
#define Y_ENABLE_PIN 28
#define Y_MS1_PIN -1
#define Y_MS2_PIN -1
#define Z_TMC2130_CS 67
#define Z_TMC2130_DIAG 68
#define Z_STEP_PIN 35
#define Z_DIR_PIN 47
#define Z_MIN_PIN 10
#define Z_MAX_PIN 23
//#define Z_MAX_PIN Z_TMC2130_DIAG
#define Z_ENABLE_PIN 27
#define Z_MS1_PIN -1
#define Z_MS2_PIN -1
#define HEATER_BED_PIN 4
#define TEMP_BED_PIN 2
#define HEATER_0_PIN 3
#define TEMP_0_PIN 0
#define HEATER_1_PIN 7
#define TEMP_1_PIN 1
#ifdef BARICUDA
#define HEATER_2_PIN 6
#else
#define HEATER_2_PIN -1
#endif
#define TEMP_2_PIN -1
#define E0_TMC2130_CS 66
#define E0_TMC2130_DIAG 65
#define E0_STEP_PIN 34
#define E0_DIR_PIN 43
#define E0_ENABLE_PIN 26
#define E0_MS1_PIN -1
#define E0_MS2_PIN -1
#define MOTOR_CURRENT_PWM_XY_PIN 46
#define MOTOR_CURRENT_PWM_Z_PIN 45
#define MOTOR_CURRENT_PWM_E_PIN 44
#define SDPOWER -1
#define SDSS 77
#define LED_PIN 13
#define FAN_PIN 6
#define FAN_1_PIN -1
#define PS_ON_PIN -1
#define KILL_PIN -1 // 80 with Smart Controller LCD
#define SUICIDE_PIN -1 // PIN that has to be turned on right after start, to keep power flowing.
#ifdef ULTRA_LCD
//#define KILL_PIN 32
#ifdef NEWPANEL
#define BEEPER 84 // Beeper on AUX-4
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 61 // !!! changed from 18 (EINY03)
#define LCD_PINS_D4 59 // !!! changed from 19 (EINY03)
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
//buttons are directly attached using AUX-2
#define BTN_EN1 72
#define BTN_EN2 14
#define BTN_ENC 9 // the click
#define SDCARDDETECT 15
#define TACH_0 79 // !!! changed from 81 (EINY03)
#define TACH_1 80
#endif //NEWPANEL
#endif //ULTRA_LCD

162
Firmware/pins_Rambo.h Normal file
View file

@ -0,0 +1,162 @@
/*****************************************************************
* Rambo Pin Assignments
******************************************************************/
#define ELECTRONICS "RAMBoBig"
#define KNOWN_BOARD
#ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega 2560' selected from the 'Tools -> Boards' menu.
#endif
#define FR_SENS 21
#define X_STEP_PIN 37
#define X_DIR_PIN 48
#define X_MIN_PIN 12
#define X_MAX_PIN 30
#define X_ENABLE_PIN 29
#define X_MS1_PIN 40
#define X_MS2_PIN 41
#define Y_STEP_PIN 36
#define Y_DIR_PIN 49
#define Y_MIN_PIN 11
#define Y_MAX_PIN 24
#define Y_ENABLE_PIN 28
#define Y_MS1_PIN 69
#define Y_MS2_PIN 39
#define Z_STEP_PIN 35
#define Z_DIR_PIN 47
#define Z_MIN_PIN 10
#define Z_MAX_PIN 23
#define Z_ENABLE_PIN 27
#define Z_MS1_PIN 68
#define Z_MS2_PIN 67
#define TEMP_BED_PIN 2
#define TEMP_0_PIN 0
#define HEATER_1_PIN 7
#define TEMP_1_PIN 1
#define TEMP_2_PIN -1
#ifdef SNMM
#define E_MUX0_PIN 17
#define E_MUX1_PIN 16
#define E_MUX2_PIN 84
#endif
#ifdef DIS
#define D_REQUIRE 30
#define D_DATA 20
#define D_DATACLOCK 21
#endif
// The SDSS pin uses a different pin mapping from file Sd2PinMap.h
#define SDSS 53
#ifndef SDSUPPORT
// these pins are defined in the SD library if building with SD support
#define SCK_PIN 52
#define MISO_PIN 50
#define MOSI_PIN 51
#endif
#define BEEPER 84
#define BTN_EN1 72
#define BTN_EN2 14
#define BTN_ENC 9
#define SDCARDDETECT 15
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 18
#define LCD_PINS_D4 19
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
#define E0_STEP_PIN 34
#define E0_DIR_PIN 43
#define E0_ENABLE_PIN 26
#define E0_MS1_PIN 65
#define E0_MS2_PIN 66
#define LED_PIN 13
#ifdef THREEMM_PRINTER
#define FAN_PIN 8
#else
#define FAN_PIN 6
#endif
#define KILL_PIN -1 //80 with Smart Controller LCD
#define SUICIDE_PIN -1 //PIN that has to be turned on right after start, to keep power flowing.
#define SDPOWER -1
#define HEATER_2_PIN -1
#define E1_STEP_PIN 33
#define E1_DIR_PIN 42
#define E1_ENABLE_PIN 25
#define E1_MS1_PIN 63
#define E1_MS2_PIN 64
#define DIGIPOTSS_PIN 38
#define DIGIPOT_CHANNELS {4,5,3,0,1} // X Y Z E0 E1 digipot channels to stepper driver mapping
#define HEATER_0_PIN 9
#define HEATER_BED_PIN 3
#define PS_ON_PIN 4
#define SDSS 53
#ifdef ULTRA_LCD
#define KILL_PIN 80
#ifdef NEWPANEL
//arduino pin which triggers an piezzo beeper
#define BEEPER 84 // Beeper on AUX-4
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 18
#define LCD_PINS_D4 19
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
//buttons are directly attached using AUX-2
#define BTN_EN1 76
#define BTN_EN2 77
#define BTN_ENC 78 //the click
#define BLEN_C 2
#define BLEN_B 1
#define BLEN_A 0
#define SDCARDDETECT 81 // Ramps does not use this port
//encoder rotation values
#define encrot0 0
#define encrot1 2
#define encrot2 3
#define encrot3 1
#else //old style panel with shift register
//arduino pin witch triggers an piezzo beeper
#define BEEPER 84 //No Beeper added
//buttons are attached to a shift register
// Not wired this yet
// #define SHIFT_CLK 38
// #define SHIFT_LD 42
// #define SHIFT_OUT 40
// #define SHIFT_EN 17
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 18
#define LCD_PINS_D4 19
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
//encoder rotation values
#define encrot0 0
#define encrot1 2
#define encrot2 3
#define encrot3 1
//bits in the shift register that carry the buttons for:
// left up center down right red
#define BL_LE 7
#define BL_UP 6
#define BL_MI 5
#define BL_DW 4
#define BL_RI 3
#define BL_ST 2
#define BLEN_B 1
#define BLEN_A 0
#endif
#endif //ULTRA_LCD

94
Firmware/pins_Rambo_1_0.h Normal file
View file

@ -0,0 +1,94 @@
/*****************************************************************
* Rambo mini 1.0 Pin Assignments
******************************************************************/
#define ELECTRONICS "RAMBo10a"
#define KNOWN_BOARD
#ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega 2560' selected from the 'Tools -> Boards' menu.
#endif
#define FR_SENS 21
#define X_STEP_PIN 37
#define X_DIR_PIN 48
#define X_MIN_PIN 12
#define X_MAX_PIN 30
#define X_ENABLE_PIN 29
#define X_MS1_PIN 40
#define X_MS2_PIN 41
#define Y_STEP_PIN 36
#define Y_DIR_PIN 49
#define Y_MIN_PIN 11
#define Y_MAX_PIN 24
#define Y_ENABLE_PIN 28
#define Y_MS1_PIN 69
#define Y_MS2_PIN 39
#define Z_STEP_PIN 35
#define Z_DIR_PIN 47
#define Z_MIN_PIN 10
#define Z_MAX_PIN 23
#define Z_ENABLE_PIN 27
#define Z_MS1_PIN 68
#define Z_MS2_PIN 67
#define TEMP_BED_PIN 2
#define TEMP_0_PIN 0
#define HEATER_1_PIN 7
#define TEMP_1_PIN 1
#define TEMP_2_PIN -1
#ifdef SNMM
#define E_MUX0_PIN 17
#define E_MUX1_PIN 16
#define E_MUX2_PIN 84
#endif
// The SDSS pin uses a different pin mapping from file Sd2PinMap.h
#define SDSS 53
#ifndef SDSUPPORT
// these pins are defined in the SD library if building with SD support
#define SCK_PIN 52
#define MISO_PIN 50
#define MOSI_PIN 51
#endif
#define BEEPER 78
#define BTN_EN1 80
#define BTN_EN2 73
#define BTN_ENC 21
#define SDCARDDETECT 72
#define LCD_PINS_RS 38
#define LCD_PINS_ENABLE 5
#define LCD_PINS_D4 14
#define LCD_PINS_D5 15
#define LCD_PINS_D6 32
#define LCD_PINS_D7 31
#define E0_STEP_PIN 34
#define E0_DIR_PIN 43
#define E0_ENABLE_PIN 26
#define E0_MS1_PIN 65
#define E0_MS2_PIN 66
#define LED_PIN 13
#ifdef THREEMM_PRINTER
#define FAN_PIN 8
#else
#define FAN_PIN 6
#endif
#define KILL_PIN -1 //80 with Smart Controller LCD
#define SUICIDE_PIN -1 //PIN that has to be turned on right after start, to keep power flowing.
#define SDPOWER -1
#define HEATER_2_PIN -1
#define HEATER_0_PIN 3
#define HEATER_BED_PIN 4
#define FAN_1_PIN -1 //6
#define PS_ON_PIN 71
#define MOTOR_CURRENT_PWM_XY_PIN 46
#define MOTOR_CURRENT_PWM_Z_PIN 45
#define MOTOR_CURRENT_PWM_E_PIN 44

102
Firmware/pins_Rambo_1_3.h Normal file
View file

@ -0,0 +1,102 @@
/*****************************************************************
* Rambo mini 1.3 Pin Assignments
******************************************************************/
#define ELECTRONICS "RAMBo13a"
#define KNOWN_BOARD
#ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega 2560' selected from the 'Tools -> Boards' menu.
#endif
#define FR_SENS 21
#define X_STEP_PIN 37
#define X_DIR_PIN 48
#define X_MIN_PIN 12
#define X_MAX_PIN 30
#define X_ENABLE_PIN 29
#define X_MS1_PIN 40
#define X_MS2_PIN 41
#define Y_STEP_PIN 36
#define Y_DIR_PIN 49
#define Y_MIN_PIN 11
#define Y_MAX_PIN 24
#define Y_ENABLE_PIN 28
#define Y_MS1_PIN 69
#define Y_MS2_PIN 39
#define Z_STEP_PIN 35
#define Z_DIR_PIN 47
#define Z_MIN_PIN 10
#define Z_MAX_PIN 23
#define Z_ENABLE_PIN 27
#define Z_MS1_PIN 68
#define Z_MS2_PIN 67
#define TEMP_BED_PIN 2
#define TEMP_0_PIN 0
#define HEATER_1_PIN 7
#define TEMP_1_PIN 1
#define TEMP_2_PIN -1
#ifdef SNMM
#define E_MUX0_PIN 17
#define E_MUX1_PIN 16
#define E_MUX2_PIN 84
#endif
#ifdef DIS
#define D_REQUIRE 30
#define D_DATA 20
#define D_DATACLOCK 21
#endif
// The SDSS pin uses a different pin mapping from file Sd2PinMap.h
#define SDSS 53
#ifndef SDSUPPORT
// these pins are defined in the SD library if building with SD support
#define SCK_PIN 52
#define MISO_PIN 50
#define MOSI_PIN 51
#endif
#define BEEPER 84
#define BTN_EN1 72
#define BTN_EN2 14
#define BTN_ENC 9
#define SDCARDDETECT 15
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 18
#define LCD_PINS_D4 19
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
#define E0_STEP_PIN 34
#define E0_DIR_PIN 43
#define E0_ENABLE_PIN 26
#define E0_MS1_PIN 65
#define E0_MS2_PIN 66
#define LED_PIN 13
#ifdef THREEMM_PRINTER
#define FAN_PIN 8
#else
#define FAN_PIN 6
#endif
#define KILL_PIN -1 //80 with Smart Controller LCD
#define SUICIDE_PIN -1 //PIN that has to be turned on right after start, to keep power flowing.
#define SDPOWER -1
#define HEATER_2_PIN -1
#define HEATER_0_PIN 3
#define HEATER_BED_PIN 4
#define FAN_1_PIN -1 //6
#define PS_ON_PIN 71
#define MOTOR_CURRENT_PWM_XY_PIN 46
#define MOTOR_CURRENT_PWM_Z_PIN 45
#define MOTOR_CURRENT_PWM_E_PIN 44

View file

@ -32,9 +32,9 @@
#if defined(DIGIPOTSS_PIN) && DIGIPOTSS_PIN > -1
#include <SPI.h>
#endif
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
#include "tmc2130.h"
#endif //HAVE_TMC2130_DRIVERS
#endif //TMC2130
//===========================================================================
@ -431,7 +431,7 @@ void isr() {
CHECK_ENDSTOPS
{
{
#if defined(X_MIN_PIN) && X_MIN_PIN > -1
#if defined(X_MIN_PIN) && (X_MIN_PIN > -1) && !defined(DEBUG_DISABLE_XMINLIMIT)
#ifndef TMC2130_SG_HOMING_SW
x_min_endstop = (READ(X_MIN_PIN) != X_MIN_ENDSTOP_INVERTING);
#else //TMC2130_SG_HOMING_SW
@ -451,7 +451,7 @@ void isr() {
CHECK_ENDSTOPS
{
{
#if defined(X_MAX_PIN) && X_MAX_PIN > -1
#if defined(X_MAX_PIN) && (X_MAX_PIN > -1) && !defined(DEBUG_DISABLE_XMAXLIMIT)
#ifndef TMC2130_SG_HOMING_SW
x_max_endstop = (READ(X_MAX_PIN) != X_MAX_ENDSTOP_INVERTING);
#else //TMC2130_SG_HOMING_SW
@ -475,7 +475,7 @@ void isr() {
#endif
CHECK_ENDSTOPS
{
#if defined(Y_MIN_PIN) && Y_MIN_PIN > -1
#if defined(Y_MIN_PIN) && (Y_MIN_PIN > -1) && !defined(DEBUG_DISABLE_YMINLIMIT)
#ifndef TMC2130_SG_HOMING_SW
y_min_endstop=(READ(Y_MIN_PIN) != Y_MIN_ENDSTOP_INVERTING);
#else //TMC2130_SG_HOMING_SW
@ -493,7 +493,7 @@ void isr() {
else { // +direction
CHECK_ENDSTOPS
{
#if defined(Y_MAX_PIN) && Y_MAX_PIN > -1
#if defined(Y_MAX_PIN) && (Y_MAX_PIN > -1) && !defined(DEBUG_DISABLE_YMAXLIMIT)
#ifndef TMC2130_SG_HOMING_SW
y_max_endstop=(READ(Y_MAX_PIN) != Y_MAX_ENDSTOP_INVERTING);
#else //TMC2130_SG_HOMING_SW
@ -519,7 +519,7 @@ void isr() {
count_direction[Z_AXIS]=-1;
if(check_endstops && ! check_z_endstop)
{
#if defined(Z_MIN_PIN) && Z_MIN_PIN > -1
#if defined(Z_MIN_PIN) && (Z_MIN_PIN > -1) && !defined(DEBUG_DISABLE_ZMINLIMIT)
bool z_min_endstop=(READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING);
if(z_min_endstop && old_z_min_endstop && (current_block->steps_z > 0)) {
endstops_trigsteps[Z_AXIS] = count_position[Z_AXIS];
@ -540,7 +540,7 @@ void isr() {
count_direction[Z_AXIS]=1;
CHECK_ENDSTOPS
{
#if defined(Z_MAX_PIN) && Z_MAX_PIN > -1
#if defined(Z_MAX_PIN) && (Z_MAX_PIN > -1) && !defined(DEBUG_DISABLE_ZMAXLIMIT)
bool z_max_endstop=(READ(Z_MAX_PIN) != Z_MAX_ENDSTOP_INVERTING);
if(z_max_endstop && old_z_max_endstop && (current_block->steps_z > 0)) {
endstops_trigsteps[Z_AXIS] = count_position[Z_AXIS];
@ -553,7 +553,7 @@ void isr() {
}
// Supporting stopping on a trigger of the Z-stop induction sensor, not only for the Z-minus movements.
#if defined(Z_MIN_PIN) && Z_MIN_PIN > -1
#if defined(Z_MIN_PIN) && (Z_MIN_PIN > -1) && !defined(DEBUG_DISABLE_ZMINLIMIT)
if(check_z_endstop) {
// Check the Z min end-stop no matter what.
// Good for searching for the center of an induction target.
@ -829,9 +829,9 @@ void clear_current_adv_vars() {
void st_init()
{
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_init();
#endif //HAVE_TMC2130_DRIVERS
#endif //TMC2130
digipot_init(); //Initialize Digipot Motor Current
microstep_init(); //Initialize Microstepping Pins
@ -1042,7 +1042,7 @@ void st_synchronize()
{
while(blocks_queued())
{
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
manage_heater();
// Vojtech: Don't disable motors inside the planner!
if (!tmc2130_update_sg())
@ -1050,12 +1050,12 @@ void st_synchronize()
manage_inactivity(true);
lcd_update();
}
#else //HAVE_TMC2130_DRIVERS
#else //TMC2130
manage_heater();
// Vojtech: Don't disable motors inside the planner!
manage_inactivity(true);
lcd_update();
#endif //HAVE_TMC2130_DRIVERS
#endif //TMC2130
}
}

209
Firmware/swi2c.cpp Normal file
View file

@ -0,0 +1,209 @@
#include "uni_avr_rpi.h"
#ifdef SWI2C
#include "swi2c.h"
#ifdef __AVR
unsigned char swi2c_sda = 20; // SDA pin
unsigned char swi2c_scl = 21; // SCL pin
#endif //__AVR
#ifdef __RPI
unsigned char swi2c_sda = 2; // SDA pin
unsigned char swi2c_scl = 3; // SCL pin
#endif //__RPI
unsigned char swi2c_cfg = 0xb1; // config
// bit0..3 = clock delay factor = 1 << 1 = 2 [us]
// bit4..7 = ack timeout factor = 1 << 11 = 2048 [cycles]
#define SWI2C_SDA swi2c_sda
#define SWI2C_SCL swi2c_scl
#define SWI2C_RMSK 0x01 //read mask (bit0 = 1)
#define SWI2C_WMSK 0x00 //write mask (bit0 = 0)
#define SWI2C_ASHF 0x01 //address shift (<< 1)
#define SWI2C_DMSK 0x7f //device address mask
void swi2c_init(unsigned char sda, unsigned char scl, unsigned char cfg)
{
swi2c_sda = sda;
swi2c_scl = scl;
swi2c_cfg = cfg;
GPIO_OUT(SWI2C_SDA);
GPIO_OUT(SWI2C_SCL);
GPIO_SET(SWI2C_SDA);
GPIO_SET(SWI2C_SCL);
DELAY(1000);
}
void swi2c_start(int delay)
{
GPIO_CLR(SWI2C_SDA);
DELAY(delay);
GPIO_CLR(SWI2C_SCL);
DELAY(delay);
}
void swi2c_stop(int delay)
{
GPIO_SET(SWI2C_SCL);
DELAY(delay);
GPIO_SET(SWI2C_SDA);
DELAY(delay);
}
void swi2c_ack(int delay)
{
GPIO_CLR(SWI2C_SDA);
DELAY(delay);
GPIO_SET(SWI2C_SCL);
DELAY(delay);
GPIO_CLR(SWI2C_SCL);
DELAY(delay);
}
int swi2c_wait_ack(int delay, int ackto)
{
GPIO_INP(SWI2C_SDA);
DELAY(delay);
// GPIO_SET(SWI2C_SDA);
DELAY(delay);
GPIO_SET(SWI2C_SCL);
// DELAY(delay);
int ack = 0;
while (!(ack = !GPIO_GET(SWI2C_SDA)) && ackto--) DELAY(delay);
GPIO_CLR(SWI2C_SCL);
DELAY(delay);
GPIO_OUT(SWI2C_SDA);
DELAY(delay);
GPIO_CLR(SWI2C_SDA);
DELAY(delay);
return ack;
}
unsigned char swi2c_read(int delay)
{
GPIO_SET(SWI2C_SDA);
DELAY(delay);
GPIO_INP(SWI2C_SDA);
unsigned char data = 0;
int bit; for (bit = 7; bit >= 0; bit--)
{
GPIO_SET(SWI2C_SCL);
DELAY(delay);
data |= GPIO_GET(SWI2C_SDA) << bit;
GPIO_CLR(SWI2C_SCL);
DELAY(delay);
}
GPIO_OUT(SWI2C_SDA);
return data;
}
void swi2c_write(int delay, unsigned char data)
{
int bit; for (bit = 7; bit >= 0; bit--)
{
if (data & (1 << bit)) GPIO_SET(SWI2C_SDA);
else GPIO_CLR(SWI2C_SDA);
DELAY(delay);
GPIO_SET(SWI2C_SCL);
DELAY(delay);
GPIO_CLR(SWI2C_SCL);
DELAY(delay);
}
}
int swi2c_check(unsigned char dev_addr)
{
int delay = 1 << (swi2c_cfg & 0xf);
int tmout = 1 << (swi2c_cfg >> 4);
swi2c_start(delay);
swi2c_write(delay, (dev_addr & SWI2C_DMSK) << SWI2C_ASHF);
if (!swi2c_wait_ack(delay, tmout)) { swi2c_stop(delay); return 0; }
swi2c_stop(delay);
return 1;
}
#ifdef SWI2C_A8 //8bit address
int swi2c_readByte_A8(unsigned char dev_addr, unsigned char addr, unsigned char* pbyte)
{
int delay = 1 << (swi2c_cfg & 0xf);
int tmout = 1 << (swi2c_cfg >> 4);
swi2c_start(delay);
swi2c_write(delay, SWI2C_WMSK | ((dev_addr & SWI2C_DMSK) << SWI2C_ASHF));
if (!swi2c_wait_ack(delay, tmout)) { swi2c_stop(delay); return 0; }
swi2c_write(delay, addr & 0xff);
if (!swi2c_wait_ack(delay, tmout)) return 0;
swi2c_stop(delay);
swi2c_start(delay);
swi2c_write(delay, SWI2C_RMSK | ((dev_addr & SWI2C_DMSK) << SWI2C_ASHF));
if (!swi2c_wait_ack(delay, tmout)) return 0;
unsigned char byte = swi2c_read(delay);
swi2c_stop(delay);
if (pbyte) *pbyte = byte;
return 1;
}
int swi2c_writeByte_A8(unsigned char dev_addr, unsigned char addr, unsigned char* pbyte)
{
int delay = 1 << (swi2c_cfg & 0xf);
int tmout = 1 << (swi2c_cfg >> 4);
swi2c_start(delay);
swi2c_write(delay, SWI2C_WMSK | ((dev_addr & SWI2C_DMSK) << SWI2C_ASHF));
if (!swi2c_wait_ack(delay, tmout)) { swi2c_stop(delay); return 0; }
swi2c_write(delay, addr & 0xff);
if (!swi2c_wait_ack(delay, tmout)) return 0;
swi2c_write(delay, *pbyte);
if (!swi2c_wait_ack(delay, tmout)) return 0;
swi2c_stop(delay);
return 1;
}
#endif //SWI2C_A8
#ifdef SWI2C_A16 //16bit address
int swi2c_readByte_A16(unsigned char dev_addr, unsigned short addr, unsigned char* pbyte)
{
int delay = 1 << (swi2c_cfg & 0xf);
int tmout = 1 << (swi2c_cfg >> 4);
swi2c_start(delay);
swi2c_write(delay, SWI2C_WMSK | ((dev_addr & SWI2C_DMSK) << SWI2C_ASHF));
if (!swi2c_wait_ack(delay, tmout)) { swi2c_stop(delay); return 0; }
swi2c_write(delay, addr >> 8);
if (!swi2c_wait_ack(delay, tmout)) return 0;
swi2c_write(delay, addr & 0xff);
if (!swi2c_wait_ack(delay, tmout)) return 0;
swi2c_stop(delay);
swi2c_start(delay);
swi2c_write(delay, SWI2C_RMSK | ((dev_addr & SWI2C_DMSK) << SWI2C_ASHF));
if (!swi2c_wait_ack(delay, tmout)) return 0;
unsigned char byte = swi2c_read(delay);
swi2c_stop(delay);
if (pbyte) *pbyte = byte;
return 1;
}
int swi2c_writeByte_A16(unsigned char dev_addr, unsigned short addr, unsigned char* pbyte)
{
int delay = 1 << (swi2c_cfg & 0xf);
int tmout = 1 << (swi2c_cfg >> 4);
swi2c_start(delay);
swi2c_write(delay, SWI2C_WMSK | ((dev_addr & SWI2C_DMSK) << SWI2C_ASHF));
if (!swi2c_wait_ack(delay, tmout)) { swi2c_stop(delay); return 0; }
swi2c_write(delay, addr >> 8);
if (!swi2c_wait_ack(delay, tmout)) return 0;
swi2c_write(delay, addr & 0xff);
if (!swi2c_wait_ack(delay, tmout)) return 0;
swi2c_write(delay, *pbyte);
if (!swi2c_wait_ack(delay, tmout)) return 0;
swi2c_stop(delay);
return 1;
}
#endif //SWI2C_A16
#endif //SWI2C

22
Firmware/swi2c.h Normal file
View file

@ -0,0 +1,22 @@
#ifndef SWI2C_H
#define SWI2C_H
//initialize
extern void swi2c_init(unsigned char sda, unsigned char scl, unsigned char cfg);
//check device address acknowledge
extern int swi2c_check(unsigned char dev_addr);
//read write functions - 8bit address (most i2c chips)
#ifdef SWI2C_A8
extern int swi2c_readByte_A8(unsigned char dev_addr, unsigned char addr, unsigned char* pbyte);
extern int swi2c_writeByte_A8(unsigned char dev_addr, unsigned char addr, unsigned char* pbyte);
#endif //SWI2C_A8
//read write functions - 16bit address (e.g. serial eeprom AT24C256)
#ifdef SWI2C_A16
extern int swi2c_readByte_A16(unsigned char dev_addr, unsigned short addr, unsigned char* pbyte);
extern int swi2c_writeByte_A16(unsigned char dev_addr, unsigned short addr, unsigned char* pbyte);
#endif //SWI2C_A16
#endif //SWI2C_H

View file

@ -1,108 +1,93 @@
#include "swspi.h"
#ifdef SWSPI_RPI
#include <bcm2835.h>
#define GPIO_INP(gpio) bcm2835_gpio_fsel(gpio, BCM2835_GPIO_FSEL_INPT)
#define GPIO_OUT(gpio) bcm2835_gpio_fsel(gpio, BCM2835_GPIO_FSEL_OUTP)
#define GPIO_SET(gpio) bcm2835_gpio_write(gpio, HIGH)
#define GPIO_CLR(gpio) bcm2835_gpio_write(gpio, LOW)
#define GPIO_GET(gpio) (bcm2835_gpio_lev(gpio) != LOW)
#define DELAY(delay) usleep(delay)
#endif //SWSPI_RPI
#ifdef SWSPI_AVR
//#include "Arduino.h"
#include "Marlin.h"
#define GPIO_INP(gpio) pinMode(gpio, INPUT)
#define GPIO_OUT(gpio) pinMode(gpio, OUTPUT)
#define GPIO_SET(gpio) digitalWrite(gpio, HIGH)
#define GPIO_CLR(gpio) digitalWrite(gpio, LOW)
#define GPIO_GET(gpio) (digitalRead(gpio) != LOW)
#define DELAY(delay) delayMicroseconds(delay)
#endif //SWSPI_AVR
#if (SWSPI_POL != 0)
#define SWSPI_SCK_UP GPIO_CLR(SWSPI_SCK)
#define SWSPI_SCK_DN GPIO_SET(SWSPI_SCK)
#else
#define SWSPI_SCK_UP GPIO_SET(SWSPI_SCK)
#define SWSPI_SCK_DN GPIO_CLR(SWSPI_SCK)
#endif
void swspi_init()
{
GPIO_INP(SWSPI_MISO);
GPIO_OUT(SWSPI_MOSI);
GPIO_OUT(SWSPI_SCK);
GPIO_OUT(SWSPI_CS);
GPIO_CLR(SWSPI_MOSI);
SWSPI_SCK_DN;
GPIO_SET(SWSPI_CS);
}
#if (SWSPI_MOSI == SWSPI_MISO)
void swspi_tx(unsigned char tx)
{
GPIO_OUT(SWSPI_MOSI);
unsigned char i = 0; for (; i < 8; i++)
{
if (tx & 0x80) GPIO_SET(SWSPI_MOSI);
else GPIO_CLR(SWSPI_MOSI);
DELAY(SWSPI_DEL);
SWSPI_SCK_UP;
DELAY(SWSPI_DEL);
SWSPI_SCK_DN;
tx <<= 1;
}
}
unsigned char swspi_rx()
{
GPIO_INP(SWSPI_MISO);
unsigned char rx = 0;
unsigned char i = 0; for (; i < 8; i++)
{
rx <<= 1;
DELAY(SWSPI_DEL);
SWSPI_SCK_UP;
DELAY(SWSPI_DEL);
rx |= GPIO_GET(SWSPI_MISO)?1:0;
SWSPI_SCK_DN;
}
return rx;
}
#else //(SWSPI_MOSI == SWSPI_MISO)
unsigned char swspi_txrx(unsigned char tx)
{
unsigned char rx = 0;
unsigned char i = 0; for (; i < 8; i++)
{
rx <<= 1;
if (tx & 0x80) GPIO_SET(SWSPI_MOSI);
else GPIO_CLR(SWSPI_MOSI);
DELAY(SWSPI_DEL);
SWSPI_SCK_UP;
DELAY(SWSPI_DEL);
rx |= GPIO_GET(SWSPI_MISO)?1:0;
SWSPI_SCK_DN;
tx <<= 1;
}
return rx;
}
#endif //(SWSPI_MOSI == SWSPI_MISO)
void swspi_start()
{
GPIO_CLR(SWSPI_CS);
}
void swspi_stop()
{
GPIO_SET(SWSPI_CS);
}
#include "uni_avr_rpi.h"
#ifdef __SWSPI
#include "swspi.h"
#ifdef __RPI
//#define swspi_miso 9
#define swspi_miso 10
#define swspi_mosi 10
#define swspi_sck 11
#define SWSPI_CS 7
#endif //__RPI
#define SWSPI_DEL 0x0f //delay mask (0-3. bit, delay = 1 << DEL [us])
#define SWSPI_POL 0x10 //polarity mask (4. bit, 1=inverted)
#define SWSPI_PHA 0x20 //phase mask (5. bit)
#define SWSPI_DOR 0x40 //data order mask (6. bit, 0=MSB first, 1=LSB first)
#define SWSPI_SCK_UP if (swspi_cfg & SWSPI_POL) GPIO_CLR(swspi_sck); else GPIO_SET(swspi_sck);
#define SWSPI_SCK_DN if (swspi_cfg & SWSPI_POL) GPIO_SET(swspi_sck); else GPIO_CLR(swspi_sck);
unsigned char swspi_miso = 0;
unsigned char swspi_mosi = 0;
unsigned char swspi_sck = 0;
unsigned char swspi_cfg = 0;
void swspi_init(unsigned char miso, unsigned char mosi, unsigned char sck, unsigned char cfg)
{
swspi_miso = miso;
swspi_mosi = mosi;
swspi_sck = sck;
swspi_cfg = cfg;
GPIO_INP(swspi_miso);
GPIO_OUT(swspi_mosi);
GPIO_OUT(swspi_sck);
GPIO_CLR(swspi_mosi);
SWSPI_SCK_DN;
}
void swspi_tx(unsigned char tx)
{
int delay = 1 << (swspi_cfg & SWSPI_DEL));
if (swspi_miso == swspi_mosi) GPIO_OUT(swspi_mosi);
unsigned char i = 0; for (; i < 8; i++)
{
if (tx & 0x80) GPIO_SET(swspi_mosi);
else GPIO_CLR(swspi_mosi);
DELAY(delay);
SWSPI_SCK_UP;
DELAY(delay);
SWSPI_SCK_DN;
tx <<= 1;
}
}
unsigned char swspi_rx()
{
int delay = 1 << (swspi_cfg & SWSPI_DEL));
if (swspi_miso == swspi_mosi) GPIO_OUT(swspi_mosi);
unsigned char rx = 0;
unsigned char i = 0; for (; i < 8; i++)
{
rx <<= 1;
DELAY(delay);
SWSPI_SCK_UP;
DELAY(delay);
rx |= GPIO_GET(swspi_miso)?1:0;
SWSPI_SCK_DN;
}
return rx;
}
unsigned char swspi_txrx(unsigned char tx)
{
int delay = 1 << (swspi_cfg & SWSPI_DEL));
unsigned char rx = 0;
unsigned char i = 0; for (; i < 8; i++)
{
rx <<= 1;
if (tx & 0x80) GPIO_SET(swspi_mosi);
else GPIO_CLR(swspi_mosi);
DELAY(delay);
SWSPI_SCK_UP;
DELAY(delay);
rx |= GPIO_GET(swspi_miso)?1:0;
SWSPI_SCK_DN;
tx <<= 1;
}
return rx;
}
#endif //__SWSPI

View file

@ -1,43 +1,14 @@
// Software SPI
#ifndef SWSPI_H
#define SWSPI_H
//#define SWSPI_RPI
#define SWSPI_AVR
#ifdef SWSPI_RPI
//#define SWSPI_MISO 9
#define SWSPI_MISO 10
#define SWSPI_MOSI 10
#define SWSPI_SCK 11
#define SWSPI_CS 7
#endif //SWSPI_RPI
#ifdef SWSPI_AVR
#endif //SWSPI_AVR
#define SWSPI_POL 1 //polarity
#define SWSPI_PHA 0 //phase
#define SWSPI_DOR 0 //data order
#define SWSPI_DEL 2 //delay
void swspi_init();
#if (SWSPI_MOSI == SWSPI_MISO)
void swspi_tx(unsigned char tx);
unsigned char swspi_rx();
#else //(SWSPI_MOSI == SWSPI_MISO)
#define swspi_tx swspi_txrx
#define swspi_rx swspi_txrx
unsigned char swspi_txrx(unsigned char tx);
#endif //(SWSPI_MOSI == SWSPI_MISO)
void swspi_start();
void swspi_stop();
//initialize gpio
extern void swspi_init(unsigned char miso, unsigned char mosi, unsigned char sck, unsigned char cfg);
//transmit and receive (full duplex mode)
extern unsigned char swspi_txrx(unsigned char tx);
//transmit (half dublex mode, miso == mosi)
extern void swspi_tx(unsigned char tx);
//receive (half dublex mode, miso == mosi)
extern unsigned char swspi_rx();
#endif //SWSPI_H

View file

@ -1,6 +1,6 @@
#include "Marlin.h"
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
#include "tmc2130.h"
#include <SPI.h>
@ -508,4 +508,4 @@ uint8_t tmc2130_txrx(uint8_t cs, uint8_t addr, uint32_t wval, uint32_t* rval)
return stat;
}
#endif //HAVE_TMC2130_DRIVERS
#endif //TMC2130

View file

@ -14,11 +14,14 @@
//#include "Configuration.h"
#include "SdFatUtil.h"
#include "pat9125.h"
#ifdef HAVE_TMC2130_DRIVERS
#ifdef PAT9125
#include "pat9125.h"
#endif //PAT9125
#ifdef TMC2130
#include "tmc2130.h"
#endif //HAVE_TMC2130_DRIVERS
#endif //TMC2130
#define _STRINGIFY(s) #s
@ -2487,10 +2490,10 @@ static void lcd_fsensor_state_set()
static void lcd_silent_mode_set() {
SilentModeMenu = !SilentModeMenu;
eeprom_update_byte((unsigned char *)EEPROM_SILENT, SilentModeMenu);
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_mode = SilentModeMenu?TMC2130_MODE_SILENT:TMC2130_MODE_NORMAL;
tmc2130_init();
#endif //HAVE_TMC2130_DRIVERS
#endif //TMC2130
digipot_init();
lcd_goto_menu(lcd_settings_menu, 7);
}
@ -3944,10 +3947,10 @@ static void lcd_autostart_sd()
static void lcd_silent_mode_set_tune() {
SilentModeMenu = !SilentModeMenu;
eeprom_update_byte((unsigned char*)EEPROM_SILENT, SilentModeMenu);
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_mode = SilentModeMenu?TMC2130_MODE_SILENT:TMC2130_MODE_NORMAL;
tmc2130_init();
#endif //HAVE_TMC2130_DRIVERS
#endif //TMC2130
digipot_init();
lcd_goto_menu(lcd_tune_menu, 9);
}
@ -4373,7 +4376,7 @@ static void lcd_selftest()
if (_result)
{
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_exit();
enable_endstops(false);
#endif
@ -4436,7 +4439,7 @@ static bool lcd_selfcheck_axis_sg(char axis) {
current_position[axis] = 0;
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_exit();
enable_endstops(true);
#endif
@ -4447,7 +4450,7 @@ static bool lcd_selfcheck_axis_sg(char axis) {
SERIAL_ECHOPGM("Current position 2:");
MYSERIAL.println(current_position[axis]);*/
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_enter(X_AXIS_MASK << axis);
#endif
@ -4457,7 +4460,7 @@ static bool lcd_selfcheck_axis_sg(char axis) {
st_synchronize();
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_exit();
#endif
//current_position[axis] = st_get_position_mm(axis);
@ -4471,11 +4474,11 @@ static bool lcd_selfcheck_axis_sg(char axis) {
st_synchronize();
current_position[axis] += axis_length;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_enter(X_AXIS_MASK << axis);
#endif
st_synchronize();
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_exit();
#endif
//current_position[axis] = st_get_position_mm(axis);
@ -4490,7 +4493,7 @@ static bool lcd_selfcheck_axis_sg(char axis) {
if (abs(measured_axis_length[i] - axis_length) > max_error_mm) {
//axis length
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_exit();
enable_endstops(false);
#endif
@ -4570,7 +4573,7 @@ static bool lcd_selfcheck_axis(int _axis, int _travel)
}
_stepdone = true;
}
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_exit();
#endif
@ -4652,8 +4655,8 @@ static bool lcd_selfcheck_pulleys(int axis)
//if (SilentModeMenu == 1) digipot_current(0, tmp_motor[0]); //set back to normal operation currents
//else digipot_current(0, tmp_motor_loud[0]); //set motor current back
current_position[axis] = current_position[axis] - move;
#ifdef HAVE_TMC2130_DRIVERS
tmc2130_home_enter(axis);
#ifdef TMC2130
tmc2130_home_enter(X_AXIS_MASK << axis);
#endif
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder);
@ -4662,7 +4665,7 @@ static bool lcd_selfcheck_pulleys(int axis)
lcd_selftest_error(8, (axis == 0) ? "X" : "Y", "");
return(false);
}
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_exit();
#endif
}
@ -4671,7 +4674,7 @@ static bool lcd_selfcheck_pulleys(int axis)
manage_inactivity(true);
while (!endstop_triggered) {
if ((x_min_endstop) || (y_min_endstop)) {
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_exit();
#endif
endstop_triggered = true;
@ -4695,15 +4698,15 @@ static bool lcd_selfcheck_pulleys(int axis)
}
}
else {
#ifdef HAVE_TMC2130_DRIVERS
#ifdef TMC2130
tmc2130_home_exit();
#endif
//current_position[axis] -= 1;
current_position[axis] += 50;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
current_position[axis] -= 100;
#ifdef HAVE_TMC2130_DRIVERS
tmc2130_home_enter(axis);
#ifdef TMC2130
tmc2130_home_enter(X_AXIS_MASK << axis);
#endif
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
st_synchronize();

31
Firmware/uni_avr_rpi.h Normal file
View file

@ -0,0 +1,31 @@
// unification for AVR and RPI
#define __AVR
#ifdef __AVR
//#include "Arduino.h"
#include "Marlin.h"
#define GPIO_INP(gpio) pinMode(gpio, INPUT)
#define GPIO_OUT(gpio) pinMode(gpio, OUTPUT)
#define GPIO_SET(gpio) digitalWrite(gpio, HIGH)
#define GPIO_CLR(gpio) digitalWrite(gpio, LOW)
#define GPIO_GET(gpio) (digitalRead(gpio) != LOW)
#define DELAY(delay) delayMicroseconds(delay)
#define PRINT MYSERIAL.print
#endif //RC522_AVR
#ifdef __RPI
#include <bcm2835.h>
#define GPIO_INP(gpio) bcm2835_gpio_fsel(gpio, BCM2835_GPIO_FSEL_INPT)
#define GPIO_OUT(gpio) bcm2835_gpio_fsel(gpio, BCM2835_GPIO_FSEL_OUTP)
#define GPIO_SET(gpio) bcm2835_gpio_write(gpio, HIGH)
#define GPIO_CLR(gpio) bcm2835_gpio_write(gpio, LOW)
#define GPIO_GET(gpio) (bcm2835_gpio_lev(gpio) != LOW)
#include <unistd.h>
#define DELAY(delay) usleep(delay)
#define PRINT(p) print(p)
#define DEC 10
#define HEX 16
void print(const char* pc) { printf("%s", pc); }
void print(int v) { printf("%d", v); }
void print(float v) { printf("%f", v); }
#endif //RC522_RPI

View file

@ -16,7 +16,6 @@
#define CUSTOM_MENDEL_NAME "Prusa i3 MK3"
// Electronics
//#define MOTHERBOARD BOARD_EINY_0_4a
#define MOTHERBOARD BOARD_EINY_0_3a
@ -49,7 +48,7 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o
#define X_MAX_POS 255
#define X_MIN_POS 0
#define Y_MAX_POS 210
#define Y_MIN_POS -4
#define Y_MIN_POS -12 //orig -4
#define Z_MAX_POS 210
#define Z_MIN_POS 0.15
@ -79,10 +78,17 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o
//DEBUG
#if 0
#define DEBUG_DCODES //D codes
#define DEBUG_DISABLE_XMINLIMIT //x min limit ignored
#define DEBUG_DISABLE_XMAXLIMIT //x max limit ignored
#define DEBUG_DISABLE_YMINLIMIT //y min limit ignored
#define DEBUG_DISABLE_YMAXLIMIT //y max limit ignored
#define DEBUG_DISABLE_ZMINLIMIT //z min limit ignored
#define DEBUG_DISABLE_ZMAXLIMIT //z max limit ignored
#define DEBUG_DISABLE_STARTMSGS //no startup messages
#define DEBUG_DISABLE_MINTEMP //mintemp error ignored
#define DEBUG_DISABLE_SWLIMITS //sw limits ignored
#define DEBUG_DISABLE_LCD_STATUS_LINE //sw limits ignored
#define DEBUG_DISABLE_LCD_STATUS_LINE //empty four lcd line
#define DEBUG_DISABLE_PREVENT_EXTRUDER //cold extrusion and long extrusion allowed
#define DEBUG_DISABLE_PRUSA_STATISTICS //disable prusa_statistics() mesages
//#define DEBUG_XSTEP_DUP_PIN 21 //duplicate x-step output to pin 21 (SCL on P3)
@ -255,7 +261,7 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o
#define DIGIPOT_MOTOR_CURRENT_LOUD {135,135,135,135,135}
// Motor Current settings for RAMBo mini PWM value = MotorCurrentSetting * 255 / range
#if MOTHERBOARD == 102 || MOTHERBOARD == 302 || MOTHERBOARD == 300 || MOTHERBOARD == 299
#if MOTHERBOARD == 200 || MOTHERBOARD == 203 || MOTHERBOARD == 303 || MOTHERBOARD == 304 || MOTHERBOARD == 305
#define MOTOR_CURRENT_PWM_RANGE 2000
#define DEFAULT_PWM_MOTOR_CURRENT {400, 750, 750} // {XY,Z,E}
#define DEFAULT_PWM_MOTOR_CURRENT_LOUD {400, 750, 750} // {XY,Z,E}

View file

@ -17,7 +17,6 @@
// Electronics
#define MOTHERBOARD BOARD_EINY_0_4a
//#define MOTHERBOARD BOARD_EINY_0_3a
// Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier)
@ -49,7 +48,7 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o
#define X_MAX_POS 255
#define X_MIN_POS 0
#define Y_MAX_POS 210
#define Y_MIN_POS -4
#define Y_MIN_POS -12 //orig -4
#define Z_MAX_POS 210
#define Z_MIN_POS 0.15
@ -79,10 +78,17 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o
//DEBUG
#if 0
#define DEBUG_DCODES //D codes
#define DEBUG_DISABLE_XMINLIMIT //x min limit ignored
#define DEBUG_DISABLE_XMAXLIMIT //x max limit ignored
#define DEBUG_DISABLE_YMINLIMIT //y min limit ignored
#define DEBUG_DISABLE_YMAXLIMIT //y max limit ignored
#define DEBUG_DISABLE_ZMINLIMIT //z min limit ignored
#define DEBUG_DISABLE_ZMAXLIMIT //z max limit ignored
#define DEBUG_DISABLE_STARTMSGS //no startup messages
#define DEBUG_DISABLE_MINTEMP //mintemp error ignored
#define DEBUG_DISABLE_SWLIMITS //sw limits ignored
#define DEBUG_DISABLE_LCD_STATUS_LINE //sw limits ignored
#define DEBUG_DISABLE_LCD_STATUS_LINE //empty four lcd line
#define DEBUG_DISABLE_PREVENT_EXTRUDER //cold extrusion and long extrusion allowed
#define DEBUG_DISABLE_PRUSA_STATISTICS //disable prusa_statistics() mesages
//#define DEBUG_XSTEP_DUP_PIN 21 //duplicate x-step output to pin 21 (SCL on P3)
@ -129,7 +135,7 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o
#define TMC2130_TCOOLTHRS 239 // TCOOLTHRS - coolstep treshold
#define TMC2130_SG_HOMING 1 // stallguard homing
#define TMC2130_SG_HOMING_SW 1 // stallguard "software" homing
//#define TMC2130_SG_HOMING_SW 1 // stallguard "software" homing
#define TMC2130_SG_THRS_X 30 // stallguard sensitivity for X axis
#define TMC2130_SG_THRS_Y 30 // stallguard sensitivity for Y axis
#define TMC2130_SG_DELTA 128 // stallguard delta [usteps] (minimum usteps before stallguard readed - SW homing)
@ -255,7 +261,7 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o
#define DIGIPOT_MOTOR_CURRENT_LOUD {135,135,135,135,135}
// Motor Current settings for RAMBo mini PWM value = MotorCurrentSetting * 255 / range
#if MOTHERBOARD == 102 || MOTHERBOARD == 302 || MOTHERBOARD == 300 || MOTHERBOARD == 299
#if MOTHERBOARD == 200 || MOTHERBOARD == 203 || MOTHERBOARD == 303 || MOTHERBOARD == 304 || MOTHERBOARD == 305
#define MOTOR_CURRENT_PWM_RANGE 2000
#define DEFAULT_PWM_MOTOR_CURRENT {400, 750, 750} // {XY,Z,E}
#define DEFAULT_PWM_MOTOR_CURRENT_LOUD {400, 750, 750} // {XY,Z,E}