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;
    and
    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;
    		UpdateEEPROM();
    		FlashLed(2);
    	}


  • 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 https://github.com/dc42/Duet3dSmartEffector/releases/tag/2.01.

    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