Smart effector not remembering sensitivity

  • Hi there,
    I got a replacement. Z probe and LEDs are working fine now. However, the probe does definitely not store the sensitivity when I repower. Seems like the probe always starts with factory settings.

    The weird thing is, that the LED flashes 3 times after setting (M672 S105:8:247) and subsequent repower (as described). However, the sensititviy changed back factory setting. During this time setting the sensitivity is not possible (after sending any command there is no led-feedback or change in sensitivity). After another repower, the LED flashes 2 times and I can set sensitivity again. This behavior makes it even impossible to define the sensitivity in the config.g file and is reproducable in my setup 100%. Firmware issue or EEPROM faulty?

    Somehow I like the smart effector. I mean every third repower event I can probe with it with 0.03 mm tolerance (which will not be done very often anyway). However, it seems that there is quit some trouble. Actually I bought some weeks ago a second from another shop which still did not arrive. If that works I may buy a third but I somehow expect there will be problems again..

  • I am absolutely not sure, because I was just briefly looking into the code.
    There are two basic options. Either I am extremely unlucky and got a unit with defective EEPROM.
    Or there is a bug in the code. Was just briefly looking, and it seems for me the checksum math does not fit in v2 (generation with check). V1 looks fine for me.

    nvData.checksum = NvData::magic ^ nvData.sensitivity ^ nvData.flags;
    nvDataValid = ((nvData.sensitivity ^ nvData.checksum) == NvData::magic);
    For me it should look like this:
    nvDataValid = (nvData.sensitivity ^ nvData.flags ^ nvData.checksum) == NvData::magic;

  • administrators

    I agree with you, the code looks wrong. I'll see if I can reproduce that problem.

  • administrators

    Yes I can reproduce it. I'm sorry about this. I guess nobody else is using custom sensitivity!

    Have you tried moving the sensitivity command to the end of config.g and using G4 to insert a delay before it? The delay will have to be long enough for the LED to have stoppled flashing.

  • I am not an embedded developer. Do you have a small guide how to flash the firmware? I will make a push request in github.

  • Definition of M672 S105:8:247 in the config file is useless, because I can just change the sensitivity every third run.
    I guess there is another issue with the error handling, because the checksum check is false, but the led blinks three times.

  • I think I got it, the LED blinks probably one time because of the check, and two times because it resets ^_^
    I misinterpreted this as three blinks 😄

    	if (!nvDataValid && (PINA & BITVAL(PortADuetInputBitNum)) == 0)
    		nvData.flags = 0;

  • What works is to put M672 in the bed file and finish with a reset 131:131.

  • administrators

    @dgrat, thanks for your PR. I have accepted it, made some other minor changes, tested it, and published a new release at

    Flashing the firmware requires an AVR programmer, such as AVRISP, TinyISP, or an Arduino running the ArduinoISP sketch. The pads on top of the Smart Effector have the standard 6-pin ISP layout. We use spring-loaded pins to make contact with them.

    If you are based in the UK then I can reprogram your Smart Effector. Send me a chat message if you would like to arrange this.

  • @dc42 I am living in Germany, and I guess, I anyway had to learn it. I will test it out, when I get my pogo pin connector.

  • @dc42
    Okay I flashed the firmware with avrdude. Seems to work now.

Log in to reply