Driver za AD7715

Tu bo govora o vseh mogočih mikrokontrolerjih ne glede na tip ali zgradbo

Moderator: tilz0R

Driver za AD7715

OdgovorNapisal/-a s54mtb » 18 Okt 2016, 22:13

Našel sem "šteko" AD7715 iz katerih se bo dalo narediti marsikateri mali merilni instrument. Prvi bo pH meter. Za začetek je potrebno pripraviti driver. Delovalo bo na najbolj poceni ARM cortex M0.

Za začetek header file (source še testiram):
Koda: Izberi vse
/**
 * @file     ad7715.h
 * @brief    AD7715 driver Header File
 * @version  V0.00
 * @date     18. October 2016
 * @copyrigt s54mtb
 * @note
 *
 */

#ifndef _ADF4351_H_
#define _ADF4351_H_

#include "stm32f0xx.h"                  // Device header


#define AD7715_BUFFERSIZE 8


/** \brief AD7715 register selection
 RS1  RS0         Register
   0      0            Communications register
   0      1            Setup register
   1      0            Test register
   1      1            Data register
*/
#define AD7715_REG_COMM         0
#define AD7715_REG_SETUP      1
#define AD7715_REG_TEST         2
#define AD7715_REG_DATA         3


/** \brief AD7715 Gain selection
 G1  G0         PGA Gain
   0      0         1
   0      1         2
   1      0         32
   1      1         128
*/
#define AD7715_GAIN_1         0
#define AD7715_GAIN_2         1
#define AD7715_GAIN_32      2
#define AD7715_GAIN_128      3

/** \brief AD7715 Power up/down STBY bit */
#define AD7715_STBY_POWERUP      0
#define AD7715_STBY_POWERDOWN   1

/** \brief AD7715 Register read/write bit */
#define AD7715_RW_READ      1
#define AD7715_RW_WRITE      0

   
/** \brief  Union type for the structure of COMMUNICATIONS REGISTER
 */
typedef union
{
   struct
   {
      uint8_t Gain      :2;         /*!< bits 1:0   : Gain Select */
      uint8_t STBY      :1;         /*!< bit  2     : Standby */
      uint8_t RW         :1;         /*!< bit  3     : Read/Write Select */
      uint8_t RS         :2;         /*!< bits 5:4   : Register Selection */
      uint8_t           :1;        /*!< bit  6      : must be zero! */
      uint8_t DRDY      :1;        /*!< bit  7      : DRDY bit */
   } b;
   uint8_t B;
} AD7715_CommReg_t;



/** \brief AD7715 Operating Modes
 MD1  MD0      Operating Mode
   0      0         Normal mode
   0      1         Self-calibration
   1      0         Zero-scale system calibration
   1      1         Full-scale system calibration
*/
#define AD7715_MODE_NORMAL         0
#define AD7715_MODE_SELFCAL         1
#define AD7715_MODE_ZEROCAL         2
#define AD7715_MODE_FSCAL            3


/** \brief AD7715 Operating frequency select */
#define AD7715_CLK_1MHZ               0
#define AD7715_CLK_2_4576MHZ      1


/** \brief AD7715 Update rate
    Note: the rate depends on CLK bit ! */
      /** 1MHz clock */
#define AD7715_FS_20HZ               0
#define AD7715_FS_25HZ               1
#define AD7715_FS_100HZ               2
#define AD7715_FS_200HZ               3
      /** 2.4576MHz clock */
#define AD7715_FS_50HZ               0
#define AD7715_FS_60HZ               1
#define AD7715_FS_250HZ               2
#define AD7715_FS_500HZ               3


/** \brief AD7715 Polarity select */
#define AD7715_BU_UNIPOLAR            1
#define AD7715_BU_BIPOLAR               0

/** \brief AD7715 Buffer bypass */
#define AD7715_BUF_ACTIVE            1
#define AD7715_BUF_BYPASSED         0


/** \brief  Union type for the structure of SETUP REGISTER
 */
typedef union
{
   struct
   {
      uint8_t FSYNC      :1;        /*!< bit  0      : filter synchronization */
      uint8_t BUF       :1;        /*!< bit  1      : buffer control */
      uint8_t BU         :1;         /*!< bit  2     : bipolar/unipolar  */
      uint8_t FS         :2;         /*!< bits 4:3   : output update rate */
      uint8_t CLK        :1;         /*!< bit  5     : master clock selection */
      uint8_t MD         :2;         /*!< bits 7:6   : Mode select */
   } b;
   uint8_t B;
} AD7715_SetupReg_t;




HAL_StatusTypeDef AD7715_Init(void);
HAL_StatusTypeDef AD7715_Set_Gain(uint8_t Gain);
HAL_StatusTypeDef AD7715_Set_Power(uint8_t Power);
HAL_StatusTypeDef AD7715_Set_Buf(uint8_t Buf);
HAL_StatusTypeDef AD7715_Set_Polarity(uint8_t Polarity);
HAL_StatusTypeDef AD7715_Set_UpdateRate(uint8_t UpdateRate);
HAL_StatusTypeDef AD7715_Set_Clock(uint8_t Clock);
HAL_StatusTypeDef AD7715_Write_Reg(uint8_t Register, uint8_t data);
uint8_t AD7715_CalcSetupReg(uint8_t fsync, uint8_t buf, uint8_t bu,
                  uint8_t fs, uint8_t clk, uint8_t md);
HAL_StatusTypeDef AD7715_Read_Reg(uint8_t Register, uint8_t *data);



#endif


Uporabniški avatar
s54mtb
 
Prispevkov: 10442
Pridružen: 15 Jan 2015, 00:10
Zahvalil se je: 1452 krat
Prejel zahvalo: 3606 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Driver za AD7715

OdgovorNapisal/-a VolkD » 18 Okt 2016, 22:21

Tile časi so pa v razredu ns, ga je kar malo škoda za za pojave, ki so tako počasni.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 37286
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 7515 krat
Prejel zahvalo: 4558 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Driver za AD7715

OdgovorNapisal/-a s54mtb » 18 Okt 2016, 22:30

Hm, kateri časi? To je 16 bitni precizni sigma delta z dif. vhodom. Update je 50Hz pri 16 bitih pretvorbe in cca. 3μV RMS šuma, preslikano na vhod (pri ojačanju 1).
Zadnjič spremenil s54mtb, dne 18 Okt 2016, 22:32, skupaj popravljeno 1 krat.
Uporabniški avatar
s54mtb
 
Prispevkov: 10442
Pridružen: 15 Jan 2015, 00:10
Zahvalil se je: 1452 krat
Prejel zahvalo: 3606 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Driver za AD7715

OdgovorNapisal/-a VolkD » 18 Okt 2016, 22:32

Read in write operation.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 37286
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 7515 krat
Prejel zahvalo: 4558 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Driver za AD7715

OdgovorNapisal/-a s54mtb » 18 Okt 2016, 22:33

Aja, samo to nima veze z AD pretvorbo. Ta je od 50 do 500Hz. Samo pri 500Hz ostane le še cca. 11 bitov brez šuma. 50Hz je pa ravno idealno, da izločiš brum po "naravni poti". Upam, da poznaš delovanje.
Uporabniški avatar
s54mtb
 
Prispevkov: 10442
Pridružen: 15 Jan 2015, 00:10
Zahvalil se je: 1452 krat
Prejel zahvalo: 3606 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Driver za AD7715

OdgovorNapisal/-a VolkD » 18 Okt 2016, 22:41

Sem videl ja kakšno slabljenje ima na 50Hz.

S samo AD pretvorbo ne, ampak če nočeš recimo delat na interuptu, vzame malo časa zase.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 37286
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 7515 krat
Prejel zahvalo: 4558 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255


Vrni se na Hardware

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 2 gostov