Skip to content

Commit

Permalink
Burntest (#40)
Browse files Browse the repository at this point in the history
- add **void burnSetting()** improvements from #38
  - use with care
  - add sketches to burn settings (use with care!)
- minor edits.
  • Loading branch information
RobTillaart committed Jun 27, 2023
1 parent 0c57225 commit c9ca15a
Show file tree
Hide file tree
Showing 8 changed files with 324 additions and 13 deletions.
10 changes: 8 additions & 2 deletions AS5600.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//
// FILE: AS56000.cpp
// AUTHOR: Rob Tillaart
// VERSION: 0.3.7
// VERSION: 0.3.8
// PURPOSE: Arduino library for AS5600 magnetic rotation meter
// DATE: 2022-05-28
// URL: https://github.com/RobTillaart/AS5600
Expand Down Expand Up @@ -429,9 +429,15 @@ bool AS5600::magnetTooWeak()
// }
//
//
// See https://github.com/RobTillaart/AS5600/issues/38
// void AS5600::burnSetting()
// {
// writeReg(AS5600_BURN, x0x40);
// writeReg(AS5600_BURN, 0x40);
// delay(5);
// writeReg(AS5600_BURN, 0x01);
// writeReg(AS5600_BURN, 0x11);
// writeReg(AS5600_BURN, 0x10);
// delay(5);
// }


Expand Down
4 changes: 2 additions & 2 deletions AS5600.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// FILE: AS5600.h
// AUTHOR: Rob Tillaart
// VERSION: 0.3.7
// VERSION: 0.3.8
// PURPOSE: Arduino library for AS5600 magnetic rotation meter
// DATE: 2022-05-28
// URL: https://github.com/RobTillaart/AS5600
Expand All @@ -12,7 +12,7 @@
#include "Wire.h"


#define AS5600_LIB_VERSION (F("0.3.7"))
#define AS5600_LIB_VERSION (F("0.3.8"))

// default addresses
const uint8_t AS5600_DEFAULT_ADDRESS = 0x36;
Expand Down
8 changes: 7 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,20 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).


## [0.3.8] - 2023-06-18
- add **void burnSetting()** improvements from #38
- use with care
- add sketches to burn settings (use with care!)
- minor edits.


## [0.3.7] - 2023-05-09
- change **getCumulativePosition()** to use **AS5600_ANGLE**
so filters can be applied.
- add **AS5600_DEGREES_TO_RAW** to constants.
- add **AS5600_SW_DIRECTION_PIN** to constants.
- minor edits.


## [0.3.6] - 2023-02-20
- add **resetCumulativePosition(int32_t position)** to completely reset the cumulative counter.
This includes the delta since last call to **getCumulativePosition()**.
Expand Down
22 changes: 16 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -394,29 +394,39 @@ Please read datasheet for details.
| 6-7 | | not used | |


## Make configuration persistent.
## Make configuration persistent. BURN

**USE AT OWN RISK**
#### Read burn count

Please read datasheet **twice** as these changes are not reversible.
- **uint8_t getZMCO()** reads back how many times the ZPOS and MPOS
registers are written to permanent memory.
You can only burn a new Angle 3 times to the AS5600, and only 2 times for the AS5600L. This function is safe as it is readonly.


#### BURN function

The burn functions are used to make settings persistent.
These burn functions are permanent, therefore they are commented in the library.
Please read datasheet twice, before uncomment them.

**USE AT OWN RISK**

Please read datasheet **twice** as these changes are not reversible.

The risk is that you make your AS5600 / AS5600L **USELESS**.

**USE AT OWN RISK**

- **uint8_t getZMCO()** reads back how many times the ZPOS and MPOS
registers are written to permanent memory.
You can only burn a new Angle 3 times to the AS5600, and only 2 times for the AS5600L.
These are the two "unsafe" functions:
- **void burnAngle()** writes the ZPOS and MPOS registers to permanent memory.
You can only burn a new Angle maximum **THREE** times to the AS5600
and **TWO** times for the AS5600L.
- **void burnSetting()** writes the MANG register to permanent memory.
You can write this only **ONE** time to the AS5600.

Some discussion about burning see issue #38
(I have no hands on experience with this functions)

**USE AT OWN RISK**


Expand Down
175 changes: 175 additions & 0 deletions examples/AS5600_burn_conf_mang/AS5600_burn_conf_mang.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
//
// FILE: AS5600_burn_conf_mang.ino
// AUTHOR: Rob Tillaart
// PURPOSE: demo (not tested yet - see issue #38)
// DATE: 2023-06-18


// WARNING
// As burning the settings can only be done once this sketch has to be used with care.
//
// You need to
// - read the datasheet so you understand what you do
// - read issue #38 to understand the discussion that lead to this sketch
// - uncomment burnSettings() in AS5600.h and AS5600.cpp.
// - adjust settings and MaxAngle in burn_mang() function below ==> line 77++
// - uncomment line 167 of this sketch


#include "AS5600.h"

#include "Wire.h"

AS5600 as5600; // use default Wire
// AS5600L as5600;


void setup()
{
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("AS5600_LIB_VERSION: ");
Serial.println(AS5600_LIB_VERSION);

// ESP32
// as5600.begin(14, 15);
// AVR
as5600.begin(4); // set direction pin.
as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit.

if (as5600.isConnected())
{
Serial.println("Connected");
}
else
{
Serial.println("Failed to connect. Check wires and reboot.");
while (1);
}


Serial.println("\nWARNING WARNING WARNING WARNING WARNING WARNING\n");
Serial.println("This sketch will burn settings to your AS5600.");
Serial.println("Adjust the settings in the sketch to your needs.");
Serial.println("Press any key to continue.");
Serial.println("\nWARNING WARNING WARNING WARNING WARNING WARNING\n\n");
while (Serial.available()) Serial.read();
while (!Serial.available());
Serial.read();


while (Serial.available()) Serial.read();
Serial.print("Are you sure to burn settings + maxangle? [Y for Yes]");
while (!Serial.available());
char c = Serial.read();
if (c == 'Y')
{
burn_mang();
}

Serial.println("\nDone..");
}


void loop()
{
}


void burn_mang()
{
// ADJUST settings
const uint16_t POWERMODE = 0;
const uint16_t HYSTERESIS = 0;
const uint16_t OUTPUTMODE = 0;
const uint16_t PWMFREQUENCY = 0;
const uint16_t SLOWFILTER = 0;
const uint16_t FASTFILTER = 0;
const uint16_t WATCHDOG = 0;
const uint16_t MAXANGLE = 0;

bool OK = true;
OK = OK && as5600.setPowerMode(POWERMODE);
OK = OK && (POWERMODE == as5600.getPowerMode());
if (OK == false)
{
Serial.println("ERROR: POWERMODE.");
return;
}

OK = OK && as5600.setHysteresis(HYSTERESIS);
OK = OK && (HYSTERESIS == as5600.getHysteresis());
if (OK == false)
{
Serial.println("ERROR: HYSTERESIS");
return;
}

OK = OK && as5600.setOutputMode(OUTPUTMODE);
OK = OK && (OUTPUTMODE == as5600.getOutputMode());
if (OK == false)
{
Serial.println("ERROR: OUTPUTMODE");
return;
}

OK = OK && as5600.setPWMFrequency(PWMFREQUENCY);
OK = OK && (PWMFREQUENCY == as5600.getPWMFrequency());
if (OK == false)
{
Serial.println("ERROR: PWMFREQUENCY");
return;
}

OK = OK && as5600.setSlowFilter(SLOWFILTER);
OK = OK && (SLOWFILTER == as5600.getSlowFilter());
if (OK == false)
{
Serial.println("ERROR: SLOWFILTER");
return;
}

OK = OK && as5600.setFastFilter(FASTFILTER);
OK = OK && (FASTFILTER == as5600.getFastFilter());
if (OK == false)
{
Serial.println("ERROR: FASTFILTER");
return;
}

OK = OK && as5600.setWatchDog(WATCHDOG);
OK = OK && (WATCHDOG == as5600.getWatchDog());
if (OK == false)
{
Serial.println("ERROR: WATCHDOG");
return;
}

OK = OK && as5600.setMaxAngle(MAXANGLE);
OK = OK && (MAXANGLE == as5600.getMaxAngle());
if (OK == false)
{
Serial.println("ERROR: MAXANGLE");
return;
}

Serial.println();
Serial.println("burning in 5 seconds");
delay(1000);
Serial.println("burning in 4 seconds");
delay(1000);
Serial.println("burning in 3 seconds");
delay(1000);
Serial.println("burning in 2 seconds");
delay(1000);
Serial.println("burning in 1 seconds");
delay(1000);
Serial.print("burning ...");
// uncomment next line
// as5600.burnSettings();
Serial.println(" done.");
Serial.println("Reboot AS5600 to use the new settings.");
}


// -- END OF FILE --
Loading

0 comments on commit c9ca15a

Please sign in to comment.