From cee5f9020ace7da75895c088a2f9bab3eb2f3a1e Mon Sep 17 00:00:00 2001 From: Bernhard Date: Sun, 15 Jan 2012 17:06:10 +0100 Subject: [PATCH] added suicide pin for a power supply to the arduino that is only active if the arduino is holding high for an output. --- Marlin/Marlin.pde | 38 ++++++++++++++++++++++++++++++++++---- Marlin/pins.h | 1 + 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index b650909ad..cabaee13d 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -161,7 +161,7 @@ static bool fromsd[BUFSIZE]; static int bufindr = 0; static int bufindw = 0; static int buflen = 0; -static int i = 0; +//static int i = 0; static char serial_char; static int serial_count = 0; static boolean comment_mode = false; @@ -233,8 +233,30 @@ void setup_photpin() #endif #endif } + +void setup_powerhold() +{ + #ifdef SUICIDE_PIN + #if (SUICIDE_PIN> -1) + SET_OUTPUT(SUICIDE_PIN); + WRITE(SUICIDE_PIN, HIGH); + #endif + #endif +} + +void suicide() +{ + #ifdef SUICIDE_PIN + #if (SUICIDE_PIN> -1) + SET_OUTPUT(SUICIDE_PIN); + WRITE(SUICIDE_PIN, LOW); + #endif + #endif +} + void setup() { + setup_powerhold(); MSerial.begin(BAUDRATE); SERIAL_ECHO_START; SERIAL_ECHOLNPGM(VERSION_STRING); @@ -912,10 +934,17 @@ FORCE_INLINE void process_commands() case 80: // M80 - ATX Power On SET_OUTPUT(PS_ON_PIN); //GND break; + #endif + case 81: // M81 - ATX Power Off - SET_INPUT(PS_ON_PIN); //Floating - break; - #endif + #if (SUICIDE_PIN >-1) + suicide(); + #else + #if (PS_ON_PIN > -1) + SET_INPUT(PS_ON_PIN); //Floating + #endif + #endif + case 82: axis_relative_modes[3] = false; break; @@ -1314,6 +1343,7 @@ void kill() SERIAL_ERROR_START; SERIAL_ERRORLNPGM("Printer halted. kill() called !!"); LCD_MESSAGEPGM("KILLED. "); + suicide(); while(1); // Wait for reset } diff --git a/Marlin/pins.h b/Marlin/pins.h index 6451d7425..28e349161 100644 --- a/Marlin/pins.h +++ b/Marlin/pins.h @@ -582,6 +582,7 @@ #define FAN_PIN 7 #define PS_ON_PIN 12 #define KILL_PIN -1 +#define SUICIDE_PIN 54 //PIN that has to be turned on right after start, to keep power flowing. #ifdef ULTRA_LCD