Skip to content

Commit

Permalink
add burn sketches
Browse files Browse the repository at this point in the history
  • Loading branch information
RobTillaart committed Jun 18, 2023
1 parent 0c57225 commit 7e7409c
Show file tree
Hide file tree
Showing 7 changed files with 302 additions and 6 deletions.
8 changes: 7 additions & 1 deletion AS5600.cpp
Original file line number Diff line number Diff line change
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
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,19 @@ 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
- 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
173 changes: 173 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,173 @@
//
// FILE: AS5600_burn_conf_mang.ino
// AUTHOR: Rob Tillaart
// PURPOSE: demo
// 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
// - uncomment burnSettings() in AS5600.h and AS5600.cpp.
// - adjust settings and MaxAngle in burn_mang() function below ==> line 77++
// - uncomment line 167


#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 --
112 changes: 112 additions & 0 deletions examples/AS5600_burn_zpos/AS5600_burn_zpos.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
//
// FILE: AS5600_burn_conf_mang.ino
// AUTHOR: Rob Tillaart
// PURPOSE: demo
// 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
// - uncomment burnSettings() in AS5600.h and AS5600.cpp.
// - adjust settings and MaxAngle in burn_zpos() function below ==> line 77++
// - uncomment line 105


#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 zpos? [Y for Yes]");
while (!Serial.available());
char c = Serial.read();
if (c == 'Y')
{
burn_zpos();
}

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


void loop()
{
}


void burn_zpos()
{
// ADJUST ZPOS
const uint16_t ZPOS = 0;

bool OK = true;
OK = OK && as5600.setZPosition(ZPOS);
OK = OK && (ZPOS = as5600.getZPosition();
if (OK == false)
{
Serial.println("\nERROR: in settings, burn_zpos() cancelled.");
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 ...");
delay(1000);
// uncomment next line
// as5600.burnAngle();
Serial.println(" done.");
Serial.println("Reboot AS5600 to use the new settings.");
}



// -- END OF FILE --
2 changes: 1 addition & 1 deletion library.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"type": "git",
"url": "https://github.com/RobTillaart/AS5600.git"
},
"version": "0.3.7",
"version": "0.3.8",
"license": "MIT",
"frameworks": "arduino",
"platforms": "*",
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=AS5600
version=0.3.7
version=0.3.8
author=Rob Tillaart <rob.tillaart@gmail.com>
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
sentence=Arduino library for AS5600 and AS5600L magnetic rotation meter.
Expand Down

0 comments on commit 7e7409c

Please sign in to comment.