48 lines
1.2 KiB
C
48 lines
1.2 KiB
C
|
|
#ifndef AS5600L_H
|
||
|
|
#define AS5600L_H
|
||
|
|
|
||
|
|
#include "hardware/i2c.h"
|
||
|
|
#include "pico/stdlib.h"
|
||
|
|
#include "pico/time.h"
|
||
|
|
#include <stdio.h>
|
||
|
|
#include <stdint.h>
|
||
|
|
#include <stdbool.h>
|
||
|
|
|
||
|
|
#define I2C_TIMEOUT_US (100000)
|
||
|
|
|
||
|
|
#define AS560x_STATUS_REG (0x0B)
|
||
|
|
#define AS560x_RAW_ANGLE_REG (0x0C)
|
||
|
|
#define AS5600L_ADDRESS 0x40
|
||
|
|
#define ENCODER_RESOLUTION 4096
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
typedef struct {
|
||
|
|
i2c_inst_t *I2C_PORT;
|
||
|
|
int FREQUENCE;
|
||
|
|
int I2C_SDA_PIN;
|
||
|
|
int I2C_SCL_PIN;
|
||
|
|
} AS5600L_I2C;
|
||
|
|
|
||
|
|
typedef struct {
|
||
|
|
AS5600L_I2C serial_instance;
|
||
|
|
int last_angle;
|
||
|
|
int curr_angle ;
|
||
|
|
int abs_pos ;
|
||
|
|
int start_pos;
|
||
|
|
} AS5600L;
|
||
|
|
|
||
|
|
|
||
|
|
void as560x_init(AS5600L* as5600l, i2c_inst_t *I2C_ID, int frq , int sda, int scl);
|
||
|
|
int update_pos(AS5600L* as5600l);
|
||
|
|
int __bswap16(int value);
|
||
|
|
void i2cError();
|
||
|
|
int as560xReadReg(AS5600L* as5600l,int addr, bool wide, int mask);
|
||
|
|
void AS560x_print_reg16(AS5600L* as5600l,const char *formatStr, int addr, int mask);
|
||
|
|
void AS560x_print_reg8(AS5600L* as5600l,const char *formatStr, int addr, uint8_t mask);
|
||
|
|
int as560xReadAngle(AS5600L* as5600l);
|
||
|
|
uint8_t as560xGetStatus(AS5600L* as5600l);
|
||
|
|
void sensorData(AS5600L* as5600l);
|
||
|
|
|
||
|
|
#endif /* AS5600L_H */
|