M955 fails on 3.4.0beta5
I'm in the process of attaching an accelerometer to my Duet 3 Mini 5+ on IO_4. It seemed to connect just fine with 3.3, but after upgrading to 3.4.0beta5, I now get the following error when issuing this M955 command:
M955 P0 C"io4.out+io4.in" I60 Error: M955: Pin 'io4.out' is not free
I am aware that io4.out is shared with pson, but I don't see any way to disable that function? This seemed to work just fine with 3.3, so I'm wondering if this is a regression?
My full config is as follows:
; Configuration file for Duet 3 Mini 5+ (firmware version 3) ; executed by the firmware on start-up ; ; generated by RepRapFirmware Configuration Tool v3.2.3 on Sun Mar 07 2021 13:03:50 GMT-0500 (EST) ; General preferences G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"Dremel 3D20" ; set printer name ; Network M552 P0.0.0.0 S1 ; enable network and acquire dynamic address via DHCP M586 P0 S1 ; enable HTTP M586 P1 S0 ; disable FTP M586 P2 S0 ; disable Telnet ; Drives M569 P0.0 S1 V40 ; physical drive 0.0 goes forwards M569 P0.1 S1 V40 ; physical drive 0.1 goes forwards M569 P0.2 S1 V20 ; physical drive 0.2 goes forwards M569 P0.3 S1 V40 ; physical drive 0.3 goes forwards M584 X0.0 Y0.1 Z0.2 E0.3 ; set drive mapping M350 X16 Y16 Z16 E16 I1 ; configure microstepping with interpolation M92 X88.89 Y88.89 Z400.00 E96.00 ; set steps per mm M566 X900.00 Y900.00 Z12.00 E120.00 ; set maximum instantaneous speed changes (mm/min) M203 X12000.00 Y12000.00 Z720.00 E1200.00 ; set maximum speeds (mm/min) M201 X500.00 Y500.00 Z50.00 E250.00 ; set accelerations (mm/s^2) M906 X680 Y680 Z320 E680 I30 ; set motor currents (mA) and motor idle factor in per cent M84 S30 ; Set idle timeout ; Axis Limits M208 X-80 Y0 Z0 S1 ; set axis minima M208 X275 Y150 Z150 S0 ; set axis maxima ; Endstops M574 X2 S1 P"!io0.in" ; configure active-high endstop for high end on X via pin !io0.in M574 Y2 S1 P"!io1.in" ; configure active-high endstop for high end on Y via pin !io1.in M574 Z1 S2 ; configure Z-probe endstop for low end on Z ; Z-Probe M558 P8 C"^io3.in" H1 F240 T9000 A5 ; set Z probe type to switch and the dive height + speeds G31 P500 X3 Y-33 Z2.485 ; set Z probe trigger value, offset and trigger height M557 X20:200 Y20:130 S30 ; define mesh grid ; Heaters M140 H-1 ; disable heated bed (overrides default heater mapping) M308 S0 P"spi.cs1" Y"thermocouple-max31856" F60 ; configure sensor 0 as thermocouple via CS pin spi.cs1 M950 H0 C"out1" T0 ; create nozzle heater output on out1 and map it to sensor 0 M307 H0 R1.823 C263.1:216.5 D7.84 S1.00 V23.9 M143 H0 S280 ; set temperature limit for heater 0 to 280C ; Fans M950 F0 C"out3" Q500 ; create fan 0 on pin out3 and set its frequency M106 P0 C"EXTFAN" S0 H0 T45 ; set fan 0 name and value. Thermostatic control is turned on M950 F1 C"out4" Q500 ; create fan 1 on pin out4 and set its frequency M106 P1 C"DUETFAN" S1 H-1 ; set fan 1 name and value. Thermostatic control is turned off M950 F2 C"out5" Q200 ; create fan 2 on pin out5 and set its frequency M106 P2 C"PARTFAN" S0 H-1 ; set fan 2 name and value. Thermostatic control is turned off M950 F3 C"out6" Q500 ; create fan 3 on pin out6 and set its frequency M106 P3 C"REARFAN" S0 H-1 ; set fan 3 name and value. Thermostatic control is turned off ; Lights M950 P0 C"io2.out" Q5000 ; create led strip on io2.out - pwm frequency is 5000 Hz M42 P0 S0.25 ; set strip to 25% brightness ; Tools M563 P0 D0 H0 F0:2 ; define tool 0 G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C ; Custom settings M671 X65:165:116 Y10:10:150 ; set positions of bed levelling screws M207 S0.6 F3600 T2400 ; set retraction to 0.6mm at 60mm/s / 40mm/s. Z-hop set in slicer M572 D0 S0.025 ; set pressure advance ;M955 P0 C"io4.out+io4.in" I60 ; enable accelerometer ; Miscellaneous T0 ; select first tool
I noticed the following in the change log for 3.4.0beta4. I wonder if these changes caused the issue?
state.atxPower is no longer flagged 'live'. It is present if at least one M80 or M81 command has been executed and the PS_ON port is valid.
M80 now has an optional C parameter allowing the PS_ON port and polarity to be changed
Though, as you can see, there is no M80 or M81 command in my config.
@j3d you chan check if you have a pin assigned to the ATX power port by looking at the state.atxPowerPort in the object model:
echo state.atxPowerPort null
will report null if no pin is assigned which is what i have on my mini 5+ running the latest beta firmware as i also have no M80 commands
after sending M80 with no commands it switches to the default
echo state.atxPowerPort (io4.out,pson)
So if you have that defined then maybe M80 is somewhere else in a macro? As you say its not in the config.g that you shared ot its a regression in 3.4b5 that is fixed in 3.4b5+1
@j3d I assume you are not using the PS_ON output. Try using command M80 C"nil" before the M955 command.
j3d last edited by
Running the following resulted in null:
echo state.atxPowerPort null
M80 C"nil"before the M955 command seems to have worked.
@j3d thanks for that confirmation.
@j3d thanks for reporting that. I'm changing things in 3.4.0beta6 so that a power pin will not be assigned by default, and so io4.out will be free.