Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    Help: Temp Sensors and Homing Issues

    Scheduled Pinned Locked Moved
    Tuning and tweaking
    6
    132
    6.8k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • 94118undefined
      94118
      last edited by

      Now i cannot update the firmware for the paneldue 5i BOSSA software does not see the panel in windows 10 drivers database. I now have a blank white screen. Still have not seen any replies about the homing issues cause DWC states when i command the home buttons it states Insufficient Axis Homing and also my heaters tend to fail when i run the auto tune command. I Need so advice please!

      1 Reply Last reply Reply Quote 0
      • Phaedruxundefined
        Phaedrux Moderator
        last edited by

        Post your current config files please.

        For the PanelDue, did you have it detected at one point and it no longer detects? Try a different USB cable/port/pc.

        I assume you're using this for updating steps? https://duet3d.dozuki.com/Wiki/PanelDue_Firmware_update

        For the rgb leds take a look here: https://forum.duet3d.com/search?term=rgb&in=titlesposts

        What exactly is the homing problem currently? For the insufficient axis take a look at this and see if it matches your situation: https://duet3d.dozuki.com/Wiki/FAQ#Section_I_get_this_error_message_Error_G0_G1_insufficient_axes_homed

        What error do you get when you try and tune the heaters? What command are you using the tune them?

        Z-Bot CoreXY Build | Thingiverse Profile

        1 Reply Last reply Reply Quote 0
        • 94118undefined
          94118
          last edited by Phaedrux

          My Current Config File:

           Configuration file for Duet WiFi (firmware version 3)
          ; executed by the firmware on start-up
          ;
          ; generated by RepRapFirmware Configuration Tool v2.1.8 on Sat Feb 08 2020 14:13:05 GMT-0800 (Pacific Standard Time)
          
          ; General preferences
          G90                                            ; send absolute coordinates...
          M83                                            ; ...but relative extruder moves
          M550 P"My Flashforge Creator"                  ; set printer name
          
          ; Network
          M552 S1                                        ; enable network
          M586 P0 S1                                     ; enable HTTP
          M586 P1 S0                                     ; disable FTP
          M586 P2 S0                                     ; disable Telnet
          
          ; Drives
          M569 P0 S1                                     ; physical drive 0 goes backwards
          M569 P1 S1                                     ; physical drive 1 goes backwards
          M569 P2 S0                                     ; physical drive 2 goes forwards
          M569 P3 S1                                     ; physical drive 3 goes forwards
          M584 X0 Y1 Z2 E3                               ; set drive mapping
          M350 X16 Y16 Z16 E16 I1                        ; configure microstepping with interpolation
          M92 X80.00 Y80.00 Z400.00 E420.00              ; set steps per mm
          M566 X900.00 Y900.00 Z12.00 E120.00            ; set maximum instantaneous speed changes (mm/min)
          M203 X6000.00 Y6000.00 Z180.00 E1200.00        ; set maximum speeds (mm/min)
          M201 X500.00 Y500.00 Z20.00 E250.00            ; set accelerations (mm/s^2)
          M906 X800 Y800 Z800 E800 I30                   ; set motor currents (mA) and motor idle factor in per cent
          M84 S30                                        ; Set idle timeout
          
          ; Axis Limits
          M208 X0 Y0 Z0 S1                               ; set axis minima
          M208 X230 Y210 Z200 S0                         ; set axis maxima
          
          ; Endstops
          M574 X1 S0 P"xstop"                            ; configure active-low endstop for low end on X via pin xstop
          M574 Y2 S0 P"ystop"                            ; configure active-low endstop for high end on Y via pin ystop
          M574 Z1 S0 P"zstop"                            ; configure active-low endstop for low end on Z via pin zstop
          
          ; Z-Probe
          M558 P0 H5 F120 T6000                          ; disable Z probe but set dive height, probe speed and travel speed
          M557 X15:215 Y15:195 S20                       ; define mesh grid
          
          ; Heaters
          M308 S0 P"bedtemp" Y"thermistor" T100000 B4138 ; configure sensor 0 as thermistor on pin bedtemp
          M950 H0 C"bedheat" T0                          ; create bed heater output on bedheat and map it to sensor 0
          M143 H0 S150                                   ; set temperature limit for heater 0 to 150C
          M307 H0 B0 S1.00                               ; enable bang-bang mode for the bed heater and set PWM limit
          M140 H0                                        ; map heated bed to heater 0
          M308 S1 P"spi.cs1" Y"thermocouple-max31856"    ; configure sensor 1 as thermocouple via CS pin spi.cs1
          M950 H1 C"e0heat" T1                           ; create nozzle heater output on e0heat and map it to sensor 1
          M143 H1 S230                                   ; set temperature limit for heater 1 to 230C
          M307 H1 B0 S1.00                               ; disable bang-bang mode for heater  and set PWM limit
          
          ; Fans
          M950 F0 C"fan0" Q500                           ; create fan 0 on pin fan0 and set its frequency
          M106 P0 S0 H-1                                 ; set fan 0 value. Thermostatic control is turned off
          M950 F1 C"fan1" Q500                           ; create fan 1 on pin fan1 and set its frequency
          M106 P1 S1 H1 T45                              ; set fan 1 value. Thermostatic control is turned on
          
          ; Tools
          M563 P0 D0 H1 F0                               ; 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 are not defined
          

          Auto tuning Failure Heaters did not reach peak temp after step 2

          BOSSA Refuses to find my com port for the panel due i have tried different cables also knowing that it might be a connection issue Windows listed it as USB Generic Host but was not seen in BOOSA as a comm port.

          1 Reply Last reply Reply Quote 0
          • 94118undefined
            94118
            last edited by

            I got my panel reflashed Successfully Still does not show reads from duet board

            Phaedruxundefined 1 Reply Last reply Reply Quote 0
            • Phaedruxundefined
              Phaedrux Moderator @94118
              last edited by

              @94118 said in Help: Temp Sensors and Homing Issues:

              I got my panel reflashed Successfully Still does not show reads from duet board

              How is it connected?

              Z-Bot CoreXY Build | Thingiverse Profile

              1 Reply Last reply Reply Quote 0
              • Phaedruxundefined
                Phaedrux Moderator
                last edited by

                Please post your homing files as well.

                Z-Bot CoreXY Build | Thingiverse Profile

                1 Reply Last reply Reply Quote 0
                • 94118undefined
                  94118
                  last edited by Phaedrux

                  ; homeall.g
                  ; called to home all axes
                  
                  M98 Phomex.g; Calls to the file homex.g
                  M98 Phomey.g; Calls to the file homey.g
                  M98 Phomez.g; Calls to the file homez.g
                  
                  ; homex.g
                  ; called to home the X axis
                  
                  M913 X30; Set X motor current to 30% of its normal current to avoid ramming in case of crash
                  G91; Switch to relative positioning
                  G1 Z5 F300; Lower bed by 5[mm] in travel speed 5[mm/sec] to avoid crashing
                  
                  ; First pass (Corse movement)
                  G91; Switch to relative positioning
                  G1 X-295 F1200 S1; Move X axis to towards the endstop at travel speed of 25[mm/sec] (F1500) stop when endstop triggers (S1)
                  G92 X0; Set X to home positions
                  
                  ; Go back a few mm
                  G1 X5 F600; Move X axis by 5[mm]
                  
                  ; Second pass (Fine movement)
                  G1 X-10 F300 S1; Move X axis to towards the endstop at travel speed of 6[mm/sec] (F360) stop when endstop triggers (S1)
                  G92 X0; Set X to home position
                  G90; Switch to absolute positioning
                  
                  M913 X100; Reset X motor current to normal current
                  
                  ; homey.g
                  ; called to home the Y axis
                  
                  M913 Y40; Set Y motor current to 40% of its normal current, to avoid ramming in case of crash
                  ; First pass (Coarse movement)
                  G91; Switch to relative positioning
                  G1 Y-165 F1200 S1; Move Y-axis to towards the endstop, at travel speed of 20[mm/sec] (F1200), stop when endstop triggers (S1)
                  G92 Y0; Set current Y-axis position to home position
                  G1 Y5 F600; Move back Y-axis by 5[mm]
                  
                  ; Second pass (Fine movement)
                  G1 Y-8 F300 S1; Move Y-axis to towards the endstop, at travel speed of 6[mm/sec] (F360), stop when endstop triggers (S1)
                  G92 Y0; Set Y position to home position
                  G90; Switch to absolute positioning
                  M913 Y100; Reset Y motor current to normal current 100%
                  
                  ; homez.g
                  ; called to home the Z axis
                  
                  ; Prepare for Z-axis homing
                  M913 Z80; Set Z motor current to 80% of its normal current, to avoid ramming in case of crash
                  G91; Switch to relative positioning
                  G1 Z5 F300; Move bed 5[mm] down, at travel speed 5[mm/sec], to avoid nozzle crash in case the bed is above the nozzle
                  G90; Switch to Absolute positioning
                  G1 X120 Y70 F3000; Move carriage to bed center, at travel speed 50[mm/sec]
                  ; Home Z-axis
                  G91; Switch to relative positioning
                  G1 Z-175 F240 S1; Raise bed all the way up, at travel speed 5[mm/sec], stop when hit the endstop (S1)
                  G1 Z3 s1; Lower bed by 3[mm]
                  G92 Z6; Set Z position
                  G90; Switch to absolute positioning
                  M913 Z100; Set Z motor current back to 100%
                  

                  https://drive.google.com/open?id=1DM7rDGNchCwpNt-39v5gZfGMFRHqOjn3
                  https://drive.google.com/open?id=1DLPIYKRbN8US3hoOfUVw61BeYE6xptRi

                  All Homing files plus Picts of Current setup and wiring

                  1 Reply Last reply Reply Quote 0
                  • Phaedruxundefined
                    Phaedrux Moderator
                    last edited by

                    A couple notes.

                    You don't need to use G92 to set the axis position after homing. When the endstop is triggered during a homing move it will automatically set the position to either the axis minima or maxima as defined by M208. I suggest you remove the G92s from homex and homey. You can use them in homez if you wish.

                    For homing moves you're using S1, in recent firmware versions it's now recommended to use H1 instead.

                    Your homey.g is moving the axis to the negative, but your endstop position is defined in your config.g as being at the positive end. M574 Y2. So confirm where your Y endstop is, and make sure your homing move direction is correct. Assuming that 0,0 is the front left corner, Y+ would move towards the back of the machine. and M574 Y2 would indicate that the endstop is also at the back of the machine. But your homing move is negative. If a negative move is moving towards the back of the machine, you'll need to change the motor rotation in M569 P1 S1 to be M569 P1 S0.

                    In your homez you have a Z move at the start to lift the head, but you don't have the H2/S2 switch to allow you to move an axis before the axis is homed. Then later in the file you have G1 Z3 S1 after the axis has already been homed, but now it's moving away from the endstop, so will never hit it.

                    Z-Bot CoreXY Build | Thingiverse Profile

                    1 Reply Last reply Reply Quote 1
                    • 94118undefined
                      94118
                      last edited by

                      Homing is still problematic:

                      console.txt

                      https://drive.google.com/open?id=1DQIW6JYFjs98MKeYba2B8x68rQdA3NQP
                      https://drive.google.com/open?id=1DSTCgvE8K6eaykKuqAlEWPQI_KsIg7DN

                      Panel still states (Not Connecting) When i got it New from 3d Printed Solid it was able to connect. i think it might be a baud speed issue i read in some posts that the panel tries to connect 203600 when it is supposed to be 57600.

                      1 Reply Last reply Reply Quote 0
                      • Phaedruxundefined
                        Phaedrux Moderator
                        last edited by

                        2/20/2020, 9:00:45 AM: Connected to 192.168.0.133
                        2/20/2020, 9:01:04 AM: G28 X: Error: G0/G1: insufficient axes homed
                        2/20/2020, 9:01:57 AM: G28 Y: Error: Bad command: [/c]
                        2/20/2020, 9:02:04 AM: G28 Z: Error: G0/G1: insufficient axes homed
                        

                        The G28 X and G28 Z error states that you're trying to move an axis before it's homed. I pointed out in my last post why that happens.

                        The G28 Y error indicates that you have a [/c] somewhere in your file that shouldn't be there. Probably a copy and paste error.

                        Please repost your homing files as they currently are.

                        Z-Bot CoreXY Build | Thingiverse Profile

                        1 Reply Last reply Reply Quote 0
                        • 94118undefined
                          94118
                          last edited by

                          Note this is Not my Config .g File: FFCP Profile for Duet from Guyaros:

                          config.g file:
                          [c]
                          ; Configuration file for Duet WiFi (Firmware 1.20)
                          ; Executed by the firmware on start-up
                          ; Last updated: 29.12.2017 by Guyaros

                          ; General preferences
                          M111 S0; Debugging off
                          G21; Work in millimetres
                          G90; Set absolute coordinates
                          M83; Set relative extruder moves
                          M555 P1; Set firmware compatibility to look like RepRapFirmare
                          M575 P1 B57600 S1; Comms parameters for PanelDue

                          ; Network settings
                          M550 PGuyaros Creator Pro; Set printer name
                          M551 PYOURPASSWORD; Set printer password
                          M587 S"SAMPLEWIFISSID" I192.168.1.101 J192.168.1.1;
                          M552 P"SAMPLEWIFISSID" S1; Set network SSID (P) Enable WiFi (S1)

                          ; Motors drivers
                          M569 P0 S0; Set (X) motor drive 0 (P0) (X) goes backward (S0)
                          M569 P1 S0; Set (Y) motor drive 1 (P1) goes backward (S0)
                          M569 P2 S1; Set (Z) motor drive 2 (P2) goes forward (S1)
                          M569 P3 S1; Set (E0) motor drive 3 (P3) goes forward (S1)

                          M350 X16 Y16 Z16 E16 I1; Set microstepping to x16 step, Interpolation enabled (I1)
                          ;M92 X93.718 Y93.718 Z400 E192.55; Set axis steps/mm
                          M92 X94.118 Y94.118 Z400 E192.55; Set axis steps/mm
                          M906 X700 Y700 Z400 E1200 I20; Set motor currents [mA] and motor idle factor in percent (20%)
                          M84 S10; Set idle timeout to 10[sec] (S10)

                          ; Axis kinematics
                          M201 X560 Y560 Z250 E300; Set axis accelerations [mm/s^2]
                          M566 X840 Y840 Z840 E120; Set axis maximum instantaneous speed changes [mm/min]
                          M203 X4800 Y4800 Z720 E1200; Set axis maximum speeds [mm/min]

                          ; Axis size
                          M208 X0 Y0 Z-3 S1; Set axis minima
                          M208 X290 Y145 Z165 S0; Set axis maxima
                          M579 X1.001895478 Y1.004419446; Scale axis (Correction factors based on measurment of printed models)

                          ; Endstops
                          M574 X1 S1; Set endstop configuration, X endstop at low end (X1), Active high (S1)
                          M574 Y1 S0; Set endstop configuration, Y endstop at low end, Active low (S0)
                          M574 Z1 S2; Set endstop configuration, Z Probe at low end

                          ; Z probe and Bed compensation
                          M558 P1 X0 Y0 Z1 F240 H1 T4800; Set Z probe type to IR probe (P1), and is used for homing Z axis (Z1), Feed rate 4[mm/sec] (F240), Dive height 1[mm] (H1), Travel speed between points 80[mm/sec] (T4800),
                          G31 X35 Y0 Z1.78 P500; Set the probe offset on x axis (X35), set z probe trigger height (Z1.78), set probe output value at trigger height (P500) (FlashForge Blue BuildTak)
                          M557 X60:255 Y8:128 S40; Set probing grid for Auto Bed Leveling using G29 command, X(min:max) Y(min:max) S(Spacing)

                          ; Heaters & Thermistors
                          ; Bed
                          M305 P0 T94573 B4230 R4700 L0 H0; Set thermistor + ADC parameters for heater 0 (P0)
                          M304 P430.7 I0.478 D452.2; Set Bed PID parameters
                          M307 H0 A242.2 C901.9 D1.5 S1.0; Set heating process parametersheater, Heater0 (H0), Gain (A242.2), time Constant (C901.9), Dead time (D1.5), maximum PWM 100% (S1.0)
                          M143 H0 S120; Set temperature limit for heater 0 (H0) to 120[deg] (S120)
                          ; Extruder
                          M305 P1 T90000 B4085; Set thermistor and ADC parameters
                          M143 S255; Set maximum heater temperature to 255C
                          M307 H1 A306.6 C146 D6 S1.0; Set heating process parameters, Heater1 (H1),Gain (A), time constant (C), Dead time (D6), Max PWM 100% (S1.0)

                          ; Fans
                          M106 P0 S0 I0 F250 H-1; Set fan 0 value, PWM signal inversion and frequency, Thermostatic control is turned off (Duet board fan)
                          M106 P1 S0 I0 F250 H1 T45 L1; Set fan 1 value, PWM signal inversion and frequency, Thermostatic control is turned on (Extruder0 Fan)
                          M106 P2 S0 I0 F250 H-1; Set fan 2 value, PWM signal inversion and frequency, Thermostatic control is turned off (Blower fan)

                          ; Tools
                          M563 P0 D0 H1 F2; Define tool 0 (P0), uses Extruder 0(E0) (D0), uses Heater 1 (Actually Heater E0), uses Fan 2 (F2)
                          G10 P0 X0 Y0; Set tool 0 axis offsets
                          G10 P0 R0 S0; Set initial tool 0 active and standby temperatures to 0C
                          T0; Select first tool
                          [/c]

                          I have noted some of the settings he has listed for his FFCP Below is my Files:

                          ; homex.g
                          ; called to home the X axis

                          M913 X30; Set X motor current to 30% of its normal current to avoid ramming in case of crash
                          G91; Switch to relative positioning
                          G1 Z5 F300; Lower bed by 5[mm] in travel speed 5[mm/sec] to avoid crashing

                          ; First pass (Corse movement)
                          G91; Switch to relative positioning
                          G1 X-295 F1200 S1; Move X axis to towards the endstop at travel speed of 25[mm/sec] (F1500) stop when endstop triggers (S1)
                          G92 X0; Set X to home positions

                          ; Go back a few mm
                          G1 X5 F600; Move X axis by 5[mm]

                          ; Second pass (Fine movement)
                          G1 X-10 F300 S1; Move X axis to towards the endstop at travel speed of 6[mm/sec] (F360) stop when endstop triggers (S1)
                          G90; Switch to absolute positioning

                          M913 X100; Reset X motor current to normal current

                          ; homey.g
                          ; called to home the Y axis

                          M913 Y40; Set Y motor current to 40% of its normal current, to avoid ramming in case of crash
                          ; First pass (Coarse movement)
                          G91; Switch to relative positioning
                          G1 Y165 F1200 h1; Move Y-axis to towards the endstop, at travel speed of 20[mm/sec] (F1200), stop when endstop triggers (h1)
                          G1 Y5 F600; Move back Y-axis by 5[mm]

                          ; Second pass (Fine movement)
                          G1 Y135 F300 h1; Move Y-axis to towards the endstop, at travel speed of 6[mm/sec] (F360), stop when endstop triggers (h1)
                          G90; Switch to absolute positioning
                          M913 Y100; Reset Y motor current to normal current 100%

                          ; homez.g
                          ; called to home the Z axis

                          ; Prepare for Z-axis homing
                          M913 Z80; Set Z motor current to 80% of its normal current, to avoid ramming in case of crash
                          G91; Switch to relative positioning
                          G1 H2 S2 Z5 F300; Move bed 5[mm] down, at travel speed 5[mm/sec], to avoid nozzle crash in case the bed is above the nozzle
                          G90; Switch to Absolute positioning
                          G1 X120 Y70 F3000; Move carriage to bed center, at travel speed 50[mm/sec]
                          ; Home Z-axis
                          G91; Switch to relative positioning
                          G1 Z-175 F240 S1; Raise bed all the way up, at travel speed 5[mm/sec], stop when hit the endstop (S1)
                          G92 Z6; Set Z position
                          G90; Switch to absolute positioning
                          M913 Z100; Set Z motor current back to 100%

                          Phaedruxundefined 1 Reply Last reply Reply Quote 0
                          • Phaedruxundefined
                            Phaedrux Moderator
                            last edited by

                            To encapsulate your gcode snippets in code blocks use the </> button in the reply dialogue. I think that's where your [/c] came from.

                            Z-Bot CoreXY Build | Thingiverse Profile

                            1 Reply Last reply Reply Quote 0
                            • A Former User?
                              A Former User
                              last edited by

                              (or if you want to type use ``` as pr the markdown standard as bbcode isn't supported)

                              1 Reply Last reply Reply Quote 0
                              • Phaedruxundefined
                                Phaedrux Moderator @94118
                                last edited by

                                @94118 said in Help: Temp Sensors and Homing Issues:

                                M575 P1 B57600 S1; Comms parameters for PanelDue

                                If you remove this line entirely it will use the defaults which should work with the paneldue. What baud rate do you have selected on the paneldue settings screen?

                                M587 S"SAMPLEWIFISSID" I192.168.1.101 J192.168.1.1;
                                M552 P"SAMPLEWIFISSID" S1; Set network SSID (P) Enable WiFi (S1)

                                You should remove that from the config.g. Send it one to enter the SSID and password and that's all you need to do. The config.g should only have M552 S1 to enable the wifi module at bootup. That's it.

                                M579 X1.001895478 Y1.004419446; Scale axis (Correction factors based on measurment of printed models)

                                if this is a config.g from someone else you probably don't want to use their scale factor.

                                ; Z probe and Bed compensation
                                M558 P1 X0 Y0 Z1 F240 H1 T4800; Set Z probe type to IR probe (P1), and is used for homing Z axis (Z1), Feed rate 4[mm/sec] (F240), Dive height 1[mm] (H1), Travel speed between points 80[mm/sec] (T4800),
                                G31 X35 Y0 Z1.78 P500; Set the probe offset on x axis (X35), set z probe trigger height (Z1.78), set probe output value at trigger height (P500) (FlashForge Blue BuildTak)
                                M557 X60:255 Y8:128 S40; Set probing grid for Auto Bed Leveling using G29 command, X(min:max) Y(min:max) S(Spacing)

                                The config is setup to use a Z probe, but your homez is setup to use an endstop switch. Do you have a probe?

                                ; homex.g
                                ; called to home the X axis
                                
                                M913 X30; Set X motor current to 30% of its normal current to avoid ramming in case of crash
                                G91; Switch to relative positioning
                                G1 Z5 F300; Lower bed by 5[mm] in travel speed 5[mm/sec] to avoid crashing
                                

                                That G1 Z5 F300 should be G1 Z5 F300 H2. That will get rid of the insufficient axis error for homex.

                                I strongly suggest that you use the web configurator tool to create a new config file set. Use the details you know about the printer to fill out the form.
                                https://configtool.reprapfirmware.org/Start

                                Then you can make changes to that if needed. Compare it to the other config.g and try to understand what's different between them.

                                Z-Bot CoreXY Build | Thingiverse Profile

                                1 Reply Last reply Reply Quote 0
                                • 94118undefined
                                  94118
                                  last edited by

                                  As i have stated the config.g file is not mine!!!

                                  1 Reply Last reply Reply Quote 0
                                  • Phaedruxundefined
                                    Phaedrux Moderator
                                    last edited by

                                    Then why bother posting it?

                                    Z-Bot CoreXY Build | Thingiverse Profile

                                    1 Reply Last reply Reply Quote 0
                                    • 94118undefined
                                      94118
                                      last edited by

                                      Have tried changes here is the result of test:

                                      console (1).txt

                                      1 Reply Last reply Reply Quote 0
                                      • 94118undefined
                                        94118
                                        last edited by

                                        Have also tried the previous version RRF that caused my thermistors to not read stating N/A

                                        1 Reply Last reply Reply Quote 0
                                        • Phaedruxundefined
                                          Phaedrux Moderator
                                          last edited by

                                          It looks like you're using the test macros that came on the SD card. Do not use those. They are meant for factory testing only.

                                          Z-Bot CoreXY Build | Thingiverse Profile

                                          1 Reply Last reply Reply Quote 0
                                          • 94118undefined
                                            94118
                                            last edited by

                                            Homing controls result Minimal movement had to maunally home axis numbers are X 216, Y 103, Z 145 these number i had to manually move so that my head is in back right corner.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Unless otherwise noted, all forum content is licensed under CC-BY-SA