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; -
I agree with you, the code looks wrong. I'll see if I can reproduce that problem.
-
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 blinksif (!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.
-
@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.