amrangle2  2.1.0.0
amrangle2.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef AMRANGLE2_H
29 #define AMRANGLE2_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_spi_master.h"
48 #include "spi_specifics.h"
49 #include "drv_analog_in.h"
50 
71 #define AMRANGLE2_REG_ADC_MODE_CONTROL 0x0000
72 #define AMRANGLE2_REG_ADC_CONFIGURATION 0x8000
73 #define AMRANGLE2_REG_UNIPOLAR 0x8800
74 #define AMRANGLE2_REG_BIPOLAR 0x9000
75 #define AMRANGLE2_REG_RANGE 0x9800
76 #define AMRANGLE2_REG_CUSTOM_SCAN0 0xA000
77 #define AMRANGLE2_REG_CUSTOM_SCAN1 0xA800
78 #define AMRANGLE2_REG_SAMPLE_SET 0xB000
79  // amrangle2_reg
81 
96 #define AMRANGLE2_SCAN_UNCHANGED 0x0000
97 #define AMRANGLE2_SCAN_MANUAL 0x0800
98 #define AMRANGLE2_SCAN_REPEAT 0x1000
99 #define AMRANGLE2_SCAN_STANDARD_INT 0x1800
100 #define AMRANGLE2_SCAN_STANDARD_EXT 0x2000
101 #define AMRANGLE2_SCAN_UPPER_INT 0x2800
102 #define AMRANGLE2_SCAN_UPPER_EXT 0x3000
103 #define AMRANGLE2_SCAN_CUSTOM_INT 0x3800
104 #define AMRANGLE2_SCAN_CUSTOM_EXT 0x4000
105 #define AMRANGLE2_SCAN_SAMPLE_SET 0x4800
106 #define AMRANGLE2_CHSEL_AIN0 0x0000
107 #define AMRANGLE2_CHSEL_AIN1 0x0080
108 #define AMRANGLE2_CHSEL_AIN2 0x0100
109 #define AMRANGLE2_CHSEL_AIN3 0x0180
110 #define AMRANGLE2_RESET_FIFO 0x0020
111 #define AMRANGLE2_RESET_ALL 0x0040
112 #define AMRANGLE2_PM_NORMAL 0x0000
113 #define AMRANGLE2_PM_AUTO_SHUTDOWN 0x0008
114 #define AMRANGLE2_PM_AUTO_STANDBY 0x0010
115 #define AMRANGLE2_CHAN_ID_ENABLE 0x0004
116 #define AMRANGLE2_SWCNV_START 0x0002
117 
122 #define AMRANGLE2_REFSEL_EXT_DIFFERENTIAL 0x0400
123 #define AMRANGLE2_AVGON 0x0200
124 #define AMRANGLE2_NAVG_4 0x0000
125 #define AMRANGLE2_NAVG_8 0x0080
126 #define AMRANGLE2_NAVG_16 0x0100
127 #define AMRANGLE2_NAVG_32 0x0180
128 #define AMRANGLE2_NSCAN_4 0x0000
129 #define AMRANGLE2_NSCAN_8 0x0020
130 #define AMRANGLE2_NSCAN_12 0x0040
131 #define AMRANGLE2_NSCAN_16 0x0060
132 #define AMRANGLE2_SPM_NORMAL 0x0000
133 #define AMRANGLE2_SPM_FULL_SHUTDOWN 0x0008
134 #define AMRANGLE2_SPM_PARTIAL_SHUTDOWN 0x0010
135 #define AMRANGLE2_ECHO_ON 0x0004
136 
141 #define AMRANGLE2_RANGE01_HALF_VREF 0x0000
142 #define AMRANGLE2_RANGE01_FULL_VREF 0x0400
143 #define AMRANGLE2_RANGE23_HALF_VREF 0x0000
144 #define AMRANGLE2_RANGE23_FULL_VREF 0x0200
145 
150 #define AMRANGLE2_BCH01_UNIPOLAR 0x0000
151 #define AMRANGLE2_BCH01_BIPOLAR_FULLY_DIFF 0x0400
152 #define AMRANGLE2_BCH23_UNIPOLAR 0x0000
153 #define AMRANGLE2_BCH23_BIPOLAR_FULLY_DIFF 0x0200
154 
159 #define AMRANGLE2_ADC_VREF 3.3
160 #define AMRANGLE2_ADC_RESOLUTION 0x0FFF
161 
166 #define AMRANGLE2_RADIANS_TO_DEGREES 57.295779513
167 #define AMRANGLE2_ANGLE_ZERO_OFFSET 90.0
168 
173 #define AMRANGLE2_TEMP_VDD 3.3
174 #define AMRANGLE2_TEMP_TCAL 25.0
175 #define AMRANGLE2_TEMP_TCO 0.003173
176 #define AMRANGLE2_TEMP_NUM_CONVERSIONS 100
177 
186 #define AMRANGLE2_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
187 #define AMRANGLE2_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
188  // amrangle2_set
190 
205 #define AMRANGLE2_MAP_MIKROBUS( cfg, mikrobus ) \
206  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
207  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
208  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
209  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
210  cfg.an = MIKROBUS( mikrobus, MIKROBUS_AN ); \
211  cfg.cst = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
212  cfg.eoc = MIKROBUS( mikrobus, MIKROBUS_INT )
213  // amrangle2_map // amrangle2
216 
221 typedef struct
222 {
223  // Output pins
224  digital_out_t cst;
226  // Input pins
227  digital_in_t eoc;
229  // Modules
230  spi_master_t spi;
231  analog_in_t adc;
233  pin_name_t chip_select;
234  float vcal;
236 } amrangle2_t;
237 
242 typedef struct
243 {
244  // Communication gpio pins
245  pin_name_t miso;
246  pin_name_t mosi;
247  pin_name_t sck;
248  pin_name_t cs;
249  pin_name_t an;
251  // Additional gpio pins
252  pin_name_t cst;
253  pin_name_t eoc;
255  // static variable
256  uint32_t spi_speed;
257  spi_master_mode_t spi_mode;
258  spi_master_chip_select_polarity_t cs_polarity;
260  analog_in_resolution_t resolution;
261  float vref;
264 
269 typedef enum
270 {
272  AMRANGLE2_ERROR = -1
273 
275 
292 
307 
321 
334 err_t amrangle2_spi_transfer ( amrangle2_t *ctx, uint16_t data_in );
335 
347 err_t amrangle2_read_an_pin_value ( amrangle2_t *ctx, uint16_t *data_out );
348 
362 err_t amrangle2_read_an_pin_voltage ( amrangle2_t *ctx, float *data_out );
363 
376 
388 err_t amrangle2_read_temperature ( amrangle2_t *ctx, float *temperature );
389 
402 err_t amrangle2_read_vsin_vcos ( amrangle2_t *ctx, float *vsin, float *vcos );
403 
415 err_t amrangle2_read_angle ( amrangle2_t *ctx, float *angle );
416 
426 void amrangle2_set_cst_pin ( amrangle2_t *ctx, uint8_t state );
427 
437 
447 
448 #ifdef __cplusplus
449 }
450 #endif
451 #endif // AMRANGLE2_H
452  // amrangle2
454 
455 // ------------------------------------------------------------------------ END
AMRANGLE2_OK
@ AMRANGLE2_OK
Definition: amrangle2.h:271
amrangle2_start_conversion
void amrangle2_start_conversion(amrangle2_t *ctx)
AMR Angle 2 start conversion function.
spi_specifics.h
This file contains SPI specific macros, functions, etc.
amrangle2_cfg_t::sck
pin_name_t sck
Definition: amrangle2.h:247
amrangle2_cfg_t
AMR Angle 2 Click configuration object.
Definition: amrangle2.h:243
AMRANGLE2_ERROR
@ AMRANGLE2_ERROR
Definition: amrangle2.h:272
amrangle2_cfg_t::resolution
analog_in_resolution_t resolution
Definition: amrangle2.h:260
amrangle2_t::chip_select
pin_name_t chip_select
Definition: amrangle2.h:233
amrangle2_cfg_t::eoc
pin_name_t eoc
Definition: amrangle2.h:253
amrangle2_t::spi
spi_master_t spi
Definition: amrangle2.h:230
amrangle2_read_an_pin_voltage
err_t amrangle2_read_an_pin_voltage(amrangle2_t *ctx, float *data_out)
AMR Angle 2 read AN pin voltage level function.
amrangle2_set_cst_pin
void amrangle2_set_cst_pin(amrangle2_t *ctx, uint8_t state)
AMR Angle 2 set cst pin function.
amrangle2_cfg_t::miso
pin_name_t miso
Definition: amrangle2.h:245
amrangle2_cfg_t::mosi
pin_name_t mosi
Definition: amrangle2.h:246
amrangle2_init
err_t amrangle2_init(amrangle2_t *ctx, amrangle2_cfg_t *cfg)
AMR Angle 2 initialization function.
amrangle2_t::adc
analog_in_t adc
Definition: amrangle2.h:231
amrangle2_t::cst
digital_out_t cst
Definition: amrangle2.h:224
amrangle2_calibrate_temperature
err_t amrangle2_calibrate_temperature(amrangle2_t *ctx)
AMR Angle 2 calibrate temperature function.
amrangle2_t
AMR Angle 2 Click context object.
Definition: amrangle2.h:222
amrangle2_default_cfg
err_t amrangle2_default_cfg(amrangle2_t *ctx)
AMR Angle 2 default configuration function.
amrangle2_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: amrangle2.h:258
amrangle2_cfg_t::an
pin_name_t an
Definition: amrangle2.h:249
amrangle2_get_eoc_pin
uint8_t amrangle2_get_eoc_pin(amrangle2_t *ctx)
AMR Angle 2 get eoc pin function.
amrangle2_t::eoc
digital_in_t eoc
Definition: amrangle2.h:227
amrangle2_read_angle
err_t amrangle2_read_angle(amrangle2_t *ctx, float *angle)
AMR Angle 2 read angle function.
amrangle2_return_value_t
amrangle2_return_value_t
AMR Angle 2 Click return value data.
Definition: amrangle2.h:270
amrangle2_read_vsin_vcos
err_t amrangle2_read_vsin_vcos(amrangle2_t *ctx, float *vsin, float *vcos)
AMR Angle 2 read vsin vcos function.
amrangle2_read_an_pin_value
err_t amrangle2_read_an_pin_value(amrangle2_t *ctx, uint16_t *data_out)
AMR Angle 2 read AN pin value function.
amrangle2_spi_transfer
err_t amrangle2_spi_transfer(amrangle2_t *ctx, uint16_t data_in)
AMR Angle 2 spi transfer function.
amrangle2_cfg_t::spi_speed
uint32_t spi_speed
Definition: amrangle2.h:256
amrangle2_cfg_t::cs
pin_name_t cs
Definition: amrangle2.h:248
amrangle2_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: amrangle2.h:257
amrangle2_t::vcal
float vcal
Definition: amrangle2.h:234
amrangle2_cfg_t::vref
float vref
Definition: amrangle2.h:261
amrangle2_cfg_t::cst
pin_name_t cst
Definition: amrangle2.h:252
amrangle2_read_temperature
err_t amrangle2_read_temperature(amrangle2_t *ctx, float *temperature)
AMR Angle 2 read temperature function.
amrangle2_cfg_setup
void amrangle2_cfg_setup(amrangle2_cfg_t *cfg)
AMR Angle 2 configuration object setup function.