mirror of
https://github.com/thooge/esp32-nmea2000-obp60.git
synced 2025-12-15 23:13:07 +01:00
Backup
This commit is contained in:
91
lib/obp60task/AS5600.h
Normal file
91
lib/obp60task/AS5600.h
Normal file
@@ -0,0 +1,91 @@
|
||||
|
||||
/****************************************************
|
||||
AMS 5600 class for Arduino platform
|
||||
Author: Tom Denton
|
||||
Date: 15 Dec 2014
|
||||
File: AMS_5600.h
|
||||
Version 1.00
|
||||
www.ams.com
|
||||
|
||||
Description: This class has been designed to
|
||||
access the AMS 5600 “potuino” shield.
|
||||
***************************************************/
|
||||
|
||||
// updated jan 2022 by isc - read two bytes together
|
||||
|
||||
// datasheet: https://ams.com/documents/20143/36005/AS5600_DS000365_5-00.pdf
|
||||
|
||||
#ifndef AMS_5600_h
|
||||
#define AMS_5600_h
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
class AMS_5600
|
||||
{
|
||||
public:
|
||||
|
||||
AMS_5600(void);
|
||||
int getAddress();
|
||||
|
||||
word setMaxAngle(word newMaxAngle = -1);
|
||||
word getMaxAngle();
|
||||
|
||||
word setStartPosition(word startAngle = -1);
|
||||
word getStartPosition();
|
||||
|
||||
word setEndPosition(word endAngle = -1);
|
||||
word getEndPosition();
|
||||
|
||||
word getRawAngle();
|
||||
word getScaledAngle();
|
||||
|
||||
int detectMagnet();
|
||||
int getMagnetStrength();
|
||||
int getAgc();
|
||||
word getMagnitude();
|
||||
word getConf();
|
||||
void setConf(word _conf);
|
||||
|
||||
int getBurnCount();
|
||||
int burnAngle();
|
||||
int burnMaxAngleAndConfig();
|
||||
void setOutPut(uint8_t mode);
|
||||
|
||||
private:
|
||||
|
||||
// i2c address
|
||||
static const uint8_t _ams5600_Address = 0x36;
|
||||
|
||||
// single byte registers
|
||||
static const uint8_t _addr_status = 0x0b; // magnet status
|
||||
static const uint8_t _addr_agc = 0x1a; // automatic gain control
|
||||
static const uint8_t _addr_burn = 0xff; // permanent burning of configs (zpos, mpos, mang, conf)
|
||||
static const uint8_t _addr_zmco = 0x00; // number of times zpos/mpos has been permanently burned
|
||||
// zpos/mpos can be permanently burned 3x
|
||||
// mang/conf can be burned only once
|
||||
|
||||
// double byte registers, specify starting address (lower addr, but higher byte data)
|
||||
// addr = upper byte of data (MSB), only bits 0:3 are used
|
||||
// addr+1 = lower byte of data (LSB)
|
||||
static const uint8_t _addr_zpos = 0x01; // zero position (start)
|
||||
// 0x02 - lower byte
|
||||
static const uint8_t _addr_mpos = 0x03; // maximum position (stop)
|
||||
// 0x04 - lower byte
|
||||
static const uint8_t _addr_mang = 0x05; // maximum angle
|
||||
// 0x06 - lower byte
|
||||
static const uint8_t _addr_conf = 0x07; // configuration
|
||||
// 0x08 - lower byte
|
||||
static const uint8_t _addr_raw_angle = 0x0c; // raw angle
|
||||
// 0x0d - lower byte
|
||||
static const uint8_t _addr_angle = 0x0e; // mapped angle
|
||||
// 0x0f - lower byte
|
||||
static const uint8_t _addr_magnitude = 0x1b; // magnitude of internal CORDIC
|
||||
// 0x1c - lower byte
|
||||
|
||||
int readOneByte(int in_adr);
|
||||
word readTwoBytesSeparately(int addr_in);
|
||||
word readTwoBytesTogether(int addr_in);
|
||||
void writeOneByte(int adr_in, int dat_in);
|
||||
|
||||
};
|
||||
#endif
|
||||
Reference in New Issue
Block a user