New Firmware - Major upgrade with new features.

#1
Hello gMax Brothers and Sisters,

Upgrades to the Marlin firmware for the gMax have been completed. The firmware is posted in the following two posts. There are four versions of the firmware and one .stl file.

I was going to release this last week, but a firmware feature was brought to my attention that I had never used before. This was the change filament command (M600) which when invoked, moves the hot end to a specified position, retracts 100% of the filament, sounds an alarm from the LCD beeper and waits for the user to press the encoder knob. This is really powerful for a single extruder needing multiple filament changes during a print. The attached print was done on a dual extruder using only ONE extruder and calling the M600 command several times. The second extruder was not used at all. I will elaborate more on it's uses and functionality a bit later but there are many ways to invoke it (manual command line, gCode, macro button) but one of the best uses for it is tying it to an Out of Filament Sensor that will trigger the M600 when the spool runs out of filament. The firmware handles that too. While printing, if the Out of Filament Sensor is triggered, the M600 command is invoked. This is awesome as it allows you to use all of the filament on a spool with no fear of a ruined print. I have a few spools of black PLA with just a few feet of filament on them. This feature allows the use of all the filament and when it runs out, the tool head will be parked waiting for a refilll with the LCD sounding an alarm. No more babysitting the printer. No more ruined prints. No more wasted filament.

I will provide more detailed documentation for each feature outlining their uses and expected behavior and will include it with the firmware. I'll also provide the necessary materials list to get each feature working.

Major feature upgrades with this release
--------------------------------------------------
Auto-bed leveling - dynamically adjusts z height during printing for a perfectly level print surface.

Ditto Printing - prints two objects simultaneously. (Extruder 2 mirrors Extruder 1) This feature is only available for dual extruders (can be enabled disabled, via LCD, command line or gCode). Here is a Ditto Printing thread I started a while back with examples:

viewtopic.php?f=6&t=447&p=1817&hilit=ditto+printing&sid=bbd4c757ba2c98656d71dab492535728#p1817


Change Filament Feature - See above

Out of Filament Sensor - Works for single AND dual extruders. If you have a dual extruder you can run a sensor for each extruder :)!!!!!!!

There are a few other tweaks here and there but these are the most significant.

I'll be here to help as best I can.

Cheers,

Larry
 
#3
Ok,

Here it is. This is updated firmware for the gMax 1.5 and 1.5XT. There are four different configurations available so please make sure you download the firmware that is applicable to your printer.

There is a limitation to 3 files per post so the firmware files are in this and the next post.

The four configurations are:

1) 1.5 Single Extruder gMax (THIS POST)
2) 1.5 Dual Extruder gMax (THIS POST)

3) 1.5 XT Dual Extruder gMax (THIS POST)
4) 1.5 XT Single Extruder gMax (NEXT POST)


Please note these are unofficial releases and not gCreate releases. The firmware has all been tested and has been in use for quite some time. The single extruder firmware is identical to the dual, but has ditto printing removed and the mechanical dimensions modified accordingly. By downloading and installing this firmware on your printer, you agree to not hold me liable or responsible for any damage that may occur to you, your printer, surroundings, material possessions, tangible items or anything else not mentioned here. You assume all responsibility and risk by using this software.

PLEASE MAKE SURE YOU HAVE A COPY OF YOUR ORIGINAL FIRMWARE IN CASE YOU WANT TO REVERT BACK TO YOUR ORIGINAL FIRMWARE.

A lot of credit goes to the myriad of developers before me who created this awesome software. 99% of the credit goes to them. My contributions are aggregating the best of breed feature sets & baking in a few goodies along the way. And of course, tuning it for the gMax.

A lot of time was spent making upgrading as easy as possible. Hopefully, this release will make your gMax printing experiences more efficient and enjoyable. If you come across any issues please let me know and I will address them as quickly as possible.

Note you will have to make some modifications to your configuration.h file to enable auto leveling for your printer. Everywhere an edit is needed it is prefaced by //***gCreate*** So after downloading the firmware package that applies to your printer, open up configuration.h in Arduino or your favorite text editor and search for all occurrences of ***gCreate***. In addition to that, there are "Notes" throughout which provide more detailed info or instructions for that feature. "ShaqFoo Notes". So make sure you search for //***gCreate*** in the configuration.h and you will jump right to the edit points or notes.

Feel free to modify as needed.

Features enabled in this release-

1) Auto-leveling - disabled by default. - You will need to uncomment the following line in configuration.h

//#define ENABLE_AUTO_BED_LEVELING

That just enables the feature. There are then some options/settings that need to be set. You can leave all the values as is EXCEPT the z-probe offset. This will be different for every printer. There will be a detailed thread on creating/installing a probe and how to configure it. YouTube is also a good reference if you don't want to wait.

Materials
Servo (featherlite micro - non continuous rotation) - eBay, amazon, local hobby store.
Mechanical Endstop - Radio Shack, Ebay, etc
Probe Arm - thingiverse
wire
solder
wire (3 color to extend servo wire)
servo connector for the side of the extension wire that will go to RAMPS box.


2) Ditto Printing - Available only on Dual Extruder Printers. Ditto Printing has extruder 1 mirror what extruder 0 does for print moves. Enabled via LCD screen (under prepare menu) and/or gCode Usage: M420 S1 (Enables) / M420 S0 Disables. Tip - I programmed two of the macro buttons in Simplify3D to issue the on/off commands for simple push button use. You can also turn this on and off in the middle of a print so MAKE sure the second extruder is at temperature to avoid cold extrusion. The next release will allow you to modify the second temperature separately and will put in cold extrusion prevention. This is really not an issue more of a heads up. When I ditto print, I put a M109 Sxxx T1 command in my starting gCode where xxx is the temp for the second extruder so it's always hot before the print starts. Again, just a heads up of how it works.

Materials
Dual Extruder
Filament
Your finger



3) M600 Filament Change Command - Send an M600 and the X Carriage will move away from the print, extract 100% of the filament from the extruder, and sound an LCD beep. It will resume printing when the LCD knob is pressed. Simple to use and very powerful feature. Can be used with single or dual extruders and works with or without ditto printing. There are no traces of ooze vs using a dual extruder and switching hot ends for multi-color prints. This creates very clean color / material transitions.

:cool: Usage Tip: If you issue an M600 command and there is filament loaded in the 'out of filament sensor' (see next feature below), TAKE CARE TO HOLD THE SENSOR ARM BACK SO AS TO NOT TRIGGER IT WHEN YOU'RE CHANGING THE FILAMENT. Otherwise,it will think it's out of filament and send an additional M600 command.

Known behaviour and observations:

A) YOU MUST HOME YOUR PRINTER BEFORE ISSUING AN M600 so the printer has point of origin and knows where it is. Otherwise, you may get unpleasant/unexpected results when issuing a M600. Simply issue a G28 from your host software or home all from the LCD when you turn the printer on or begin a print. 99% of all users probably home their printer before printing so again, it's a heads up of how it works. ] After homing, you can issue the M600 as much as you want until you power off/reset the printer. If you power off or reset, simply rehome.

B) Sometimes, after a filament change, the print head will move into position to resume printing then move to either x or y home and then back to the print position and resume the print normally. This does not affect the print in any way and does not happen 100% of the time. When it does, it's more of a quirk than anything. I suspect there is a 1 command not being flushed from the buffer so I will give it a look. It's not high priority since it the results are perfect.

C) The current speed that the printer is printing with is what will be used for the travel speed during the M600 filament change So if you are printing a very slow layer and issue the command, the head will move to the designated area and return to the print at that speed. And if you're printing fast, it'll move
fast. This is NOT a bug. So if you see it switch at different speeds, you'll know why.

4) Out of Filament Sensor - Simple to use and powerful. Basically, this a mechanical endstop connected to the Z-max endstop on the ramps board that sends an M600 when the filament passing through it runs out. If you don't have one connected nothing happens. But if you have one connected and you trigger it, it will send an M600 command and the printer will go through the filament change routine as outline above. YOU MUST BE VERY CAREFUL WHEN RELOADING THE SENSOR YOU DON"T RE-TRIGGER IT. Otherwise, another M600 will be issued after you resume printing from the previous M600. I found a sensor holder on Thingiverse but it gave alot of false triggers. I modified it by adding in and out filament tubes to keep the curling filament aligned, a bolt hole to mount it to the top crossbar on the frame, a shim along the inner wall to reduce play/movement of the filament in the sensor and a little box in the exit area to act as a dust filter.

I call it the fila-sense. The .stl file is attached and I'll upload it to Thingiverse in a bit. This is a great feature that allows you to use all of the loose filament spools that only a few feet of filament on them. Not enough for a large print but too much material to discard. This allows you to use all your filament with no waste but more importantly, no baby sitting the printer and no ruined prints due to running out of filament.

Known behaviour: If you issue an M600 command (see above) and there is filament going through the sensor, YOU MUST HOLD THE SENSOR ARM SO AS TO NOT TRIGGER IT WHEN YOU'RE CHANGING THE FILAMENT. Otherwise,it will think it's out of filament and send an additional M600 command. Yes, I already said this above but the sensor is tied to M600 so you need to understand how it works. This is different than if the filament ran out and the sensor triggered. If that happens. The sensor issues the M600 and everything is fine. The sensor was already triggered so you only need to reload it. When M600 is called by any other method than the sensor trigger, it is assumed there is filament in the sensor that needs to be removed so when removing the filament from the sensor YOU MUST HOLD THE ARM TO KEEP IT FROM TRIGGERING. As soon as the sensor is loaded you can release the arm. Again, very easy to use once you know how it works and what the expected behaviour is.

:cool: SUPER TIP: If you have more than one extruder you can connect multiple fila-sensors in series and monitor all of them via ONE INPUT (z max endstop). If any of the sensors get triggered, an M600 command is sent. Theoretically, if you had 100 spools that you wanted to monitor you could have 100 sensors with one on each spool all wired in series and plugged into the Z-max endstop.. In practicality, it's awesome for dual extruders that run a lot of full bed ditto prints (me).

Materials
Mechanical Endstop - Radio Shack, Ebay, etc
Printed Fila-Sense holder (see attachment in next post)
wire
solder
wire (3 color to extend servo wire)
servo connector for the side of the extension wire that will go to RAMPS box.


Okay, I think that's it.

Have fun, good luck and please let me know if there are any issues.

Cheers,

ShaqFoo.
 
#5
Update: The new firmware has been successfully installed by several users across different configurations. The firmware is stable and really extends your gMax's capabilities.

Grab the firmware package that is specific to your gMax and upgrade your printer. The files are posted in the previous posts in this thread.

Enjoy

ShaqFoo
 
#6
I forgot to mention, the new firmware has enhanced LCD screen menuing options and features.

What's new:

In the Prepare Menu (turns into Tune Menu when printing)
  • Enable/Disable Ditto Printing (Dual Extruders)
    Set the default PLA & ABS temperatures along with fan speed.
    Auto Cool Down
    Power supply control
    and more...

In the Control Menu
  • Preheat nozzles individually
    Full PID control (If you're asking, what the heck is PID? Then you need to run PID auto tune to really get your stock gMax dialed in. PID auto tuning will calibrate the heater/thermistors of your printer and will subsequently provide better thermal performance than the stock settings.- more on this later).
    Set the Z offset on the fly
    a more....

Tune Menu (only available while printing)
Change Filament (moves printhead,retracts filament, sounds LCD beeper/alarm)


Main Info Screen
  • Displays Ditto Printing Status (on/off)
    Displays "Camera Ready" status message when used with an external camera and an M241 command is issued
    Displays "Picture Taken" status message when used with an external camera and an M240 is
    issued.
    (The new firmware supports the HackHD HD camera as well as GoPro for timelapse mode or video mode -the camera and mode options are user configurable :)


Graphical Smart Controller - For those that have upgraded their stock LCD screen to this awesome LCD controller.
  • Enhanced graphical display
    Displays Bluetooth icon when paired/printing from a Bluetooth Host (ie. my laptop). -Yes, the firmware now supports Bluetooth. :)
    All of the features mentioned above plus a few more.

Below are a few screenshots showing some of the new features.
 
#7
I get an error compiling message when trying to upload it. Any help would be appreciated.


Arduino: 1.6.3 (Windows 8.1), Board: "Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

temperature.cpp:1292:36: note: in expansion of macro 'HEATER_1_PIN'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

fastio.h:34:72: error: pasting "DIO" and "-" does not give a valid preprocessing token

{DIO ## IO ## _WPORT |= MASK(DIO ## IO ## _PIN); }\

^

fastio.h:45:80: note: in expansion of macro '_WRITE_C'

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

In file included from Marlin.h:21:0,

from temperature.cpp:32:

pins.h:689:33: error: invalid suffix "_PIN" on integer constant

#define HEATER_1_PIN -1

^

fastio.h:17:26: note: in definition of macro 'MASK'

#define MASK(PIN) (1 << PIN)

^

fastio.h:45:80: note: in expansion of macro '_WRITE_C'

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

temperature.cpp:1292:36: note: in expansion of macro 'HEATER_1_PIN'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

In file included from Marlin.h:21:0,

from temperature.cpp:32:

fastio.h:39:43: error: pasting "DIO" and "-" does not give a valid preprocessing token

{DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }\

^

fastio.h:45:80: note: in expansion of macro '_WRITE_C'

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

pins.h:689:33: error: invalid suffix "_WPORT" on integer constant

#define HEATER_1_PIN -1

^

fastio.h:39:51: note: in definition of macro '_WRITE_C'

{DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }\

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

temperature.cpp:1292:36: note: in expansion of macro 'HEATER_1_PIN'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

fastio.h:39:73: error: pasting "DIO" and "-" does not give a valid preprocessing token

{DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }\

^

fastio.h:45:80: note: in expansion of macro '_WRITE_C'

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

In file included from Marlin.h:21:0,

from temperature.cpp:32:

pins.h:689:33: error: invalid suffix "_PIN" on integer constant

#define HEATER_1_PIN -1

^

fastio.h:17:26: note: in definition of macro 'MASK'

#define MASK(PIN) (1 << PIN)

^

fastio.h:45:80: note: in expansion of macro '_WRITE_C'

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

temperature.cpp:1292:36: note: in expansion of macro 'HEATER_1_PIN'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

fastio.h:30:40: error: pasting "DIO" and "-" does not give a valid preprocessing token

#define _WRITE_NC(IO, v) do { if (v) {DIO ## IO ## _WPORT |= MASK(DIO ## IO ## _PIN); } else {DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }; } while (0)

^

fastio.h:45:105: note: in expansion of macro '_WRITE_NC'

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

pins.h:689:33: error: invalid suffix "_WPORT" on integer constant

#define HEATER_1_PIN -1

^

fastio.h:30:48: note: in definition of macro '_WRITE_NC'

#define _WRITE_NC(IO, v) do { if (v) {DIO ## IO ## _WPORT |= MASK(DIO ## IO ## _PIN); } else {DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

temperature.cpp:1292:36: note: in expansion of macro 'HEATER_1_PIN'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

fastio.h:30:69: error: pasting "DIO" and "-" does not give a valid preprocessing token

#define _WRITE_NC(IO, v) do { if (v) {DIO ## IO ## _WPORT |= MASK(DIO ## IO ## _PIN); } else {DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }; } while (0)

^

fastio.h:45:105: note: in expansion of macro '_WRITE_NC'

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

pins.h:689:33: error: invalid suffix "_PIN" on integer constant

#define HEATER_1_PIN -1

^

fastio.h:17:26: note: in definition of macro 'MASK'

#define MASK(PIN) (1 << PIN)

^

fastio.h:45:105: note: in expansion of macro '_WRITE_NC'

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

temperature.cpp:1292:36: note: in expansion of macro 'HEATER_1_PIN'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

fastio.h:30:97: error: pasting "DIO" and "-" does not give a valid preprocessing token

#define _WRITE_NC(IO, v) do { if (v) {DIO ## IO ## _WPORT |= MASK(DIO ## IO ## _PIN); } else {DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }; } while (0)

^

fastio.h:45:105: note: in expansion of macro '_WRITE_NC'

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

pins.h:689:33: error: invalid suffix "_WPORT" on integer constant

#define HEATER_1_PIN -1

^

fastio.h:30:105: note: in definition of macro '_WRITE_NC'

#define _WRITE_NC(IO, v) do { if (v) {DIO ## IO ## _WPORT |= MASK(DIO ## IO ## _PIN); } else {DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

temperature.cpp:1292:36: note: in expansion of macro 'HEATER_1_PIN'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

fastio.h:30:127: error: pasting "DIO" and "-" does not give a valid preprocessing token

#define _WRITE_NC(IO, v) do { if (v) {DIO ## IO ## _WPORT |= MASK(DIO ## IO ## _PIN); } else {DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }; } while (0)

^

fastio.h:45:105: note: in expansion of macro '_WRITE_NC'

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

pins.h:689:33: error: invalid suffix "_PIN" on integer constant

#define HEATER_1_PIN -1

^

fastio.h:17:26: note: in definition of macro 'MASK'

#define MASK(PIN) (1 << PIN)

^

fastio.h:45:105: note: in expansion of macro '_WRITE_NC'

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

temperature.cpp:1292:36: note: in expansion of macro 'HEATER_1_PIN'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

In file included from Marlin.h:21:0,

from temperature.cpp:32:

temperature.cpp: In function 'void __vector_22()':

fastio.h:45:36: error: 'DIO' was not declared in this scope

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1270:24: note: in expansion of macro 'WRITE'

if(soft_pwm_1 > 0) WRITE(HEATER_1_PIN,1); else WRITE(HEATER_1_PIN,0);

^

fastio.h:45:36: error: 'DIO' was not declared in this scope

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1270:52: note: in expansion of macro 'WRITE'

if(soft_pwm_1 > 0) WRITE(HEATER_1_PIN,1); else WRITE(HEATER_1_PIN,0);

^

fastio.h:45:36: error: 'DIO' was not declared in this scope

#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)

^

fastio.h:68:23: note: in expansion of macro '_WRITE'

#define WRITE(IO, v) _WRITE(IO, v)

^

temperature.cpp:1292:30: note: in expansion of macro 'WRITE'

if(soft_pwm_1 < pwm_count) WRITE(HEATER_1_PIN,0);

^

Error compiling.

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
 

AlexD

New Member
#8
Mark,

This version of ShaqFoo's firmware is considerably superseded now, I would suggest that you could email:

Chris@Jank3D.com

I believe he has one of the latest versions that utilises Marlin RC-3.

Thanks

Alex
 
#9
Hi Shaqfoo,

I have a quick question hope you can help. I am trying to use a BLTouch sensor for auto leveling purposes along with my Gmax 1.0 (dual extruder) but so far I cannot get it to work properly. Any help will be greatly appreciated.

Thanks,

Ivan MO