Skip to content

Commit

Permalink
Merge pull request #221 from Paciente8159/g92-eeprom-option
Browse files Browse the repository at this point in the history
added option to store G92 on non volatile
  • Loading branch information
Paciente8159 authored Jun 28, 2022
2 parents fc116d6 + 4dd3ff1 commit a3b4316
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 8 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

# Changelog

## [1.4.6] - Unreleased
## [1.4.6] - 2022-06-28


### Added
Expand All @@ -15,6 +15,7 @@
- removed encoders dependency of modules. Stepper encoders and regular encoders reset is now independent (#216)
- encoders counting pulse and direction can be inverted via setting $8 and $9 (#216)
- modified settings initialization code. Added option to hase settings on RAM only (volatile) (#217)
- added option to store G92 offset in non volatile memory to prevent undesired wear (#221)

### Changed

Expand Down
6 changes: 6 additions & 0 deletions uCNC/cnc_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,12 @@ extern "C"

#define COORD_SYS_COUNT 6

/**
* Uncomment to enable G92 storring on non volatile memory
* If disabled G92 will be stored in RAM only. Soft-reset will not erase stored value.
* */
// #define G92_STORE_NONVOLATILE

/**
* Number of segments of an arc computed with aprox. of sin/cos math
* operation before performing a full calculation
Expand Down
27 changes: 20 additions & 7 deletions uCNC/src/core/parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,14 @@
#define PARSER_PARAM_ADDR_OFFSET (PARSER_PARAM_SIZE + 1) // parser parameters array size + 1 crc byte
#define G28HOME COORD_SYS_COUNT // G28 index
#define G30HOME COORD_SYS_COUNT + 1 // G30 index
#define G92OFFSET COORD_SYS_COUNT + 2 // G92 index
#define G92OFFSET COORD_SYS_COUNT + 2 // G92 index

#define PARSER_CORDSYS_ADDRESS SETTINGS_PARSER_PARAMETERS_ADDRESS_OFFSET // 1st coordinate system offset eeprom address (G54)
#define G28ADDRESS (SETTINGS_PARSER_PARAMETERS_ADDRESS_OFFSET + (PARSER_PARAM_ADDR_OFFSET * G28HOME)) // G28 coordinate offset eeprom address
#define G30ADDRESS (SETTINGS_PARSER_PARAMETERS_ADDRESS_OFFSET + (PARSER_PARAM_ADDR_OFFSET * G30HOME)) // G28 coordinate offset eeprom address
#define PARSER_CORDSYS_ADDRESS SETTINGS_PARSER_PARAMETERS_ADDRESS_OFFSET // 1st coordinate system offset eeprom address (G54)
#define G28ADDRESS (SETTINGS_PARSER_PARAMETERS_ADDRESS_OFFSET + (PARSER_PARAM_ADDR_OFFSET * G28HOME)) // G28 coordinate offset eeprom address
#define G30ADDRESS (SETTINGS_PARSER_PARAMETERS_ADDRESS_OFFSET + (PARSER_PARAM_ADDR_OFFSET * G30HOME)) // G28 coordinate offset eeprom address
#ifdef G92_STORE_NONVOLATILE
#define G92ADDRESS (SETTINGS_PARSER_PARAMETERS_ADDRESS_OFFSET + (PARSER_PARAM_ADDR_OFFSET * G92OFFSET)) // G92 coordinate offset eeprom address
#endif

#define NUMBER_UNDEF 0
#define NUMBER_OK 0x20
Expand Down Expand Up @@ -267,8 +269,11 @@ void parser_parameters_reset(void)
settings_erase(SETTINGS_PARSER_PARAMETERS_ADDRESS_OFFSET + (i * PARSER_PARAM_ADDR_OFFSET), PARSER_PARAM_SIZE);
}

// erase G92
// erase G92
#ifdef G92_STORE_NONVOLATILE
settings_erase(G92ADDRESS, PARSER_PARAM_SIZE);
memset(g92permanentoffset, 0, sizeof(g92permanentoffset));
#endif
}

bool parser_get_wco(float *axis)
Expand Down Expand Up @@ -1388,7 +1393,9 @@ uint8_t parser_exec_command(parser_state_t *new_state, parser_words_t *words, pa
parser_parameters.g92_offset[i] = -(target[i] - parser_last_pos[i] - parser_parameters.g92_offset[i]);
}
memcpy(g92permanentoffset, parser_parameters.g92_offset, sizeof(g92permanentoffset));
// settings_save(G92ADDRESS, (uint8_t *)&parser_parameters.g92_offset[0], PARSER_PARAM_SIZE);
#ifdef G92_STORE_NONVOLATILE
settings_save(G92ADDRESS, (uint8_t *)&parser_parameters.g92_offset[0], PARSER_PARAM_SIZE);
#endif
parser_wco_counter = 0;
break;
case G53:
Expand Down Expand Up @@ -2375,12 +2382,18 @@ void parser_reset(void)
// also checks all other coordinate systems and homing positions
void parser_parameters_load(void)
{
// loads G92
// loads G92
#ifdef G92_STORE_NONVOLATILE
if (settings_load(G92ADDRESS, (uint8_t *)&parser_parameters.g92_offset, PARSER_PARAM_SIZE))
{
memset(parser_parameters.g92_offset, 0, sizeof(parser_parameters.g92_offset));
settings_erase(G92ADDRESS, PARSER_PARAM_SIZE);
}
memcpy(g92permanentoffset, parser_parameters.g92_offset, sizeof(g92permanentoffset));
#else
memset(parser_parameters.g92_offset, 0, sizeof(parser_parameters.g92_offset));
memset(g92permanentoffset, 0, sizeof(g92permanentoffset));
#endif

for (uint8_t i = 1; i < G92OFFSET; i++)
{
Expand Down

0 comments on commit a3b4316

Please sign in to comment.