From 8b76430a9b3e7647115b9ebcfaf7d5bcc8a38676 Mon Sep 17 00:00:00 2001 From: Adrian Bowyer Date: Sat, 30 Nov 2013 15:48:03 +0000 Subject: [PATCH 1/2] RRP logo updated. --- Configuration.h | 4 ++-- Platform.cpp | 1 - Platform.h | 4 +++- Release/RepRapFirmware.bin | Bin 166116 -> 166116 bytes SD-image/sys/config.g | 8 +++++--- SD-image/www/logo.png | Bin 1912 -> 6698 bytes 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Configuration.h b/Configuration.h index f5f6d28..4c82d84 100644 --- a/Configuration.h +++ b/Configuration.h @@ -24,8 +24,8 @@ Licence: GPL #define CONFIGURATION_H #define NAME "RepRapFirmware" -#define VERSION "0.26" -#define DATE "2013-11-29" +#define VERSION "0.27" +#define DATE "2013-11-30" #define LAST_AUTHOR "reprappro.com" // Other firmware that we might switch to be compatible with. diff --git a/Platform.cpp b/Platform.cpp index a3ba48c..6d68129 100644 --- a/Platform.cpp +++ b/Platform.cpp @@ -332,7 +332,6 @@ void Platform::SetHeater(int8_t heater, const float& power) if(heatOnPins[heater] < 0) return; - byte p = (byte)(255.0*fmin(1.0, fmax(0.0, power))); if(HEAT_ON == 0) p = 255 - p; diff --git a/Platform.h b/Platform.h index 376b903..5877066 100644 --- a/Platform.h +++ b/Platform.h @@ -125,7 +125,7 @@ Licence: GPL #define STANDBY_TEMPERATURES {ABS_ZERO, ABS_ZERO} // We specify one for the bed, though it's not needed #define ACTIVE_TEMPERATURES {ABS_ZERO, ABS_ZERO} #define COOLING_FAN_PIN 34 -#define HEAT_ON 0 // 0 for inverted heater (eg Duet v0.6) +#define HEAT_ON 0 // 0 for inverted heater (eg Duet v0.6) 1 for not (e.g. Duet v0.4) #define AD_RANGE 1023.0//16383 // The A->D converter that measures temperatures gives an int this big as its max value @@ -595,6 +595,8 @@ class Platform byte gateWay[4]; }; +// Seconds + inline float Platform::Time() { unsigned long now = micros(); diff --git a/Release/RepRapFirmware.bin b/Release/RepRapFirmware.bin index daa6a78797c345629a6212f426c5bc1b56b73af6..3a9d887f76ad1ec2e5671d0f012a4e37ed2a8b2a 100755 GIT binary patch delta 41 xcmaDdk?YAsu7(!IElg~|qUH=b3Mq*tsVNE!Mh1q)x`u|j#s=G^gPBg60ss=J3)cVu delta 41 xcmaDdk?YAsu7(!IElg~|qGk*_3Mq*tsVNE!Mh1q)x`u|jMwZ*9gPBg60ss=l3*G<# diff --git a/SD-image/sys/config.g b/SD-image/sys/config.g index 5fd2ff1..60035b2 100644 --- a/SD-image/sys/config.g +++ b/SD-image/sys/config.g @@ -4,11 +4,13 @@ M111 S1; Debug on M550 POrmerod; Set the machine's name M551 Preprap; Set the password M552 P192.168.1.14; Set the IP address -M555 P2 -M92 E420 +M553 P255.255.255.0; Set netmask +M554 P192.168.1.1; Set the gateway +M555 P2; Emulate Marlin USB output +M92 E420; Set extruder steps/mm G21 ; Work in mm G90 ; Absolute positioning M83 ; Extrusions relative -G31 Z0.0 P500 ; Set Z probe height and threshold +G31 Z0.5 P500 ; Set Z probe height and threshold M906 X800 Y800 Z800 E800 ; Motor currents (mA) T0 ; Select extruder 0 diff --git a/SD-image/www/logo.png b/SD-image/www/logo.png index 50ce9fba162168da4708ecbd42eee16f7a8a912f..57aec530229230edcd1b3ea2f91ca6278e41083b 100644 GIT binary patch literal 6698 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 VvmE<-Ef8wpCNHflRRl8%{2zcc9kT!c literal 1912 zcmV-;2Z#8HP)Px%%1}&HMF)Ta09672kN^Xc005N$0G0p%mjMfu005W+0GR*)ng9Wu00o@@0H6Q~ zo&W%$005!@0HXl_qyqq@00O1}2B!c3ssI4101K!90IUE2tpE?H006H60I&l9u?7RN z00^=G0JQ)Bwg3&Y006fD2eb|VwhsWf006Zg0JjkUxc~sQDFC<=47CsdxfKAr0|2@g z0J$Oww;=$#7y!B?0KFOjyd?m>900v00KG5(za0R+C;+}O0KX{!zcK*8DgeMV0KqE& z!8HKFEdatc0K+!`!#@DTH~_^!0LD20#z6tcIsnH*7{fmk#Yr2)Kpn+F8OKW?#zG>; zL?y^YFU3kH$wnc{PBF$yDauDP$4oTHO*Y9+MZ{Sx%}F=QPdUs`JIzr;%UC?lQaI0A zM$KAB&Ra;&TuRVgP|jmZ(OyT=WJuFxOw(Ue(PdQ9W>wQ?ThVM>(rs7NXjs*0Uej)7 z(QR4QYGTxBTGwk})o@|fac0zaV%KtK)p%prb8OafYS(&g*K}^!b!*vsaM*!t+I(%> zeRbJs{lH{F}<(``4o|NXFo8_OC z=b)hErJ3fYo#vpS<))hFr=I7bqUNWZ=%}OTsHEtrtLLhv>8q*ev8?E;s_C+)>#eKm zv#jg1v+A_1?X|S)wYciLvh2LI?6$Y% z!1BY(@XN*W%E|H4%<;^|^UKQe)6MeD$Mnt1^wiSw)X((J)AQBM_0`n$*3S0V)%Dlf z_21U_+1>To+xFnz_S)R{;obP+-z0(vwTGW z0004WQchCMy6*)cd6951N8c9S!R9M69n7?ZjK@`Ug7!da6<}uaoNwDy`Kv2{mq*F1C z<#8Zb`U7n*g$VIi6HH^LHdh!8SVRl)&sf_o-bN0n$9AA~HNO;fR?fPQWD zgoX&jLC5Ca3J7$764*xp6)Z6aKiT#V#63CmR#MDy00t4y^LVJ2u*~3q!xJjYYgg~&};80kLNBG??SBUd2?=Yu=GMaG-aT~Sp_}Cm{AAhIZrj_JFN(nSJ(@B#1VOMWDFjcqrS;UzGWlMgKIMJ`prZ?hzC4ZG=-$^}2h||r-Y)4hus56@*aF9%XN ze*aJF)b(i4Msjj0CNUA?fEe=pEbjYqTpjlyD`y12J{uO5ANrM*m7u{DO-)`2z0`G? zJHEF)-`Wc2Vd^@SkywT7Ic$L=Q#iM6mBtATC@bfEIe8y_=Pgk?ZL7+`d3M|~GvINS ztWkeKx|@!Z#MzyZv&Uj92h$wVwXd(m^zqoa_JfdxI6*+5aC|y)hN7TWf<&PQ90e~t zH;0Qx3arzPoFGE_Z>&sM3OyN5DE3R-;Kg(m6y!i;PlA_GOkMSivxcDq2;^)8lY0I@ zUQQ?`?zUhrcRniJ<#O~IH+S4_HQRzBGGnbJ_5zIO(CazC2%_Xh@& yFGzcQ-K*jk%VL}El@l(?dryi@THpHim+TKN<^NHswWw$S00006!)r From 27ae5f87308fe1248437ebce88f0ccaccbfe766b Mon Sep 17 00:00:00 2001 From: Adrian Bowyer Date: Sat, 30 Nov 2013 17:22:16 +0000 Subject: [PATCH 2/2] Fixed (I hope) G92 bug found by Tony. --- Configuration.h | 2 +- GCodes.cpp | 45 ++++++------------------------------- GCodes.h | 3 +-- Release/RepRapFirmware.bin | Bin 166116 -> 166132 bytes 4 files changed, 9 insertions(+), 41 deletions(-) diff --git a/Configuration.h b/Configuration.h index 4c82d84..2d4fe5e 100644 --- a/Configuration.h +++ b/Configuration.h @@ -24,7 +24,7 @@ Licence: GPL #define CONFIGURATION_H #define NAME "RepRapFirmware" -#define VERSION "0.27" +#define VERSION "0.28" #define DATE "2013-11-30" #define LAST_AUTHOR "reprappro.com" diff --git a/GCodes.cpp b/GCodes.cpp index 3e1831a..a9646f2 100644 --- a/GCodes.cpp +++ b/GCodes.cpp @@ -272,7 +272,7 @@ bool GCodes::Pop() // Move expects all axis movements to be absolute, and all // extruder drive moves to be relative. This function serves that. -void GCodes::LoadMoveBufferFromGCode(GCodeBuffer *gb) +void GCodes::LoadMoveBufferFromGCode(GCodeBuffer *gb, bool doingG92) { float absE; @@ -282,16 +282,16 @@ void GCodes::LoadMoveBufferFromGCode(GCodeBuffer *gb) { if(gb->Seen(gCodeLetters[i])) { - if(axesRelative) - moveBuffer[i] += gb->GetFValue()*distanceScale; + if(!axesRelative || doingG92) + moveBuffer[i] = gb->GetFValue()*distanceScale; else - moveBuffer[i] = gb->GetFValue()*distanceScale; + moveBuffer[i] += gb->GetFValue()*distanceScale; } } else { if(gb->Seen(gCodeLetters[i])) { - if(drivesRelative) + if(drivesRelative || doingG92) moveBuffer[i] = gb->GetFValue()*distanceScale; else { @@ -311,37 +311,6 @@ void GCodes::LoadMoveBufferFromGCode(GCodeBuffer *gb) moveBuffer[DRIVES] = gFeedRate; // We always set it, as Move may have modified the last one. } -//void GCodes::LoadMoveBufferFromArray(float m[]) -//{ -// float absE; -// -// for(uint8_t i = 0; i < DRIVES; i++) -// { -// if(i < AXES) -// { -// if(axesRelative) -// moveBuffer[i] += m[i]; -// else -// moveBuffer[i] = m[i]; -// -// } else -// { -// if(drivesRelative) -// moveBuffer[i] = m[i]; -// else -// { -// absE = m[i]; -// moveBuffer[i] = absE - lastPos[i - AXES]; -// lastPos[i - AXES] = absE; -// } -// } -// } -// -// // Deal with feedrate -// -// moveBuffer[DRIVES] = m[DRIVES]; // We always set it, as Move may have modified the last one. -//} - // This function is called for a G Code that makes a move. // If the Move class can't receive the move (i.e. things have to wait) @@ -359,7 +328,7 @@ bool GCodes::SetUpMove(GCodeBuffer *gb) if(!reprap.GetMove()->GetCurrentState(moveBuffer)) return false; - LoadMoveBufferFromGCode(gb); + LoadMoveBufferFromGCode(gb, false); checkEndStops = false; moveAvailable = true; @@ -418,7 +387,7 @@ bool GCodes::SetPositions(GCodeBuffer *gb) if(!AllMovesAreFinishedAndMoveBufferIsLoaded()) return false; - LoadMoveBufferFromGCode(gb); + LoadMoveBufferFromGCode(gb, true); reprap.GetMove()->SetLiveCoordinates(moveBuffer); reprap.GetMove()->SetPositions(moveBuffer); diff --git a/GCodes.h b/GCodes.h index 6926905..b44a14d 100644 --- a/GCodes.h +++ b/GCodes.h @@ -92,8 +92,7 @@ class GCodes bool SetPrintZProbe(GCodeBuffer *gb, char *reply); bool SetOffsets(GCodeBuffer *gb); bool SetPositions(GCodeBuffer *gb); - void LoadMoveBufferFromGCode(GCodeBuffer *gb); - //void LoadMoveBufferFromArray(float m[]); + void LoadMoveBufferFromGCode(GCodeBuffer *gb, bool doingG92); bool NoHome(); bool Push(); bool Pop(); diff --git a/Release/RepRapFirmware.bin b/Release/RepRapFirmware.bin index 3a9d887f76ad1ec2e5671d0f012a4e37ed2a8b2a..0d67651e5d54de99231a60599c4c18a747ecff8a 100755 GIT binary patch delta 13591 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 delta 13570 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 TsJ0$oCdMn(p^NcdA@IKdww76Y