123 lines
4.8 KiB
C++
123 lines
4.8 KiB
C++
/*! \mainpage Guide de démarrage rapide
|
|
*
|
|
* \section intro_sec Introduction
|
|
*
|
|
* Cette bibliothèque inclue une classe : LTC2439.@n
|
|
* Elle permet de piloter le LTC2439 qui est un ADC SPI 16 entrées d'une résolution de 16 bits.@n
|
|
* Elle reprend le code de la bibliothèque écrite par Tim THUREL pour cet ADC en y ajoutant des méthodes asynchrones et en la rendant compatible avec l'ESP8266.@n
|
|
* Voici un code d'exemple de l'utilisation du LTC2439 sur ESP8266 :
|
|
*
|
|
* \code{.cpp}
|
|
* #include <LTC2439.h>
|
|
*
|
|
* LTC2439 adc(2,12);
|
|
* uint8_t channel(0);
|
|
*
|
|
* void setup()
|
|
* {
|
|
* Serial.begin(115200);
|
|
* Serial.println("Starting setup");
|
|
* Serial.println("End setup");
|
|
* }
|
|
*
|
|
* void loop()
|
|
* {
|
|
* adc.startAsyncSample(channel);
|
|
*
|
|
* if(adc.asyncResultAvailable())
|
|
* {
|
|
* int32_t raw = adc.getAsyncValue();
|
|
* Serial.printf("Conversion done, result for channel %u : %d, tension : %.2f\n", channel, raw, adc.convertToVoltage(raw));
|
|
* channel = channel == 15 ? 0 : channel + 1;
|
|
* }
|
|
* }
|
|
* \endcode
|
|
*
|
|
* \author Anatole SCHRAMM-HENRY
|
|
* \author Tim THUREL
|
|
* \date 11 Mai 2020
|
|
* \copyright All Right Reserved
|
|
*/
|
|
|
|
#ifndef LTC2439_H
|
|
#define LTC2439_H
|
|
|
|
#include <Arduino.h>
|
|
#include <SPI.h>
|
|
|
|
/*! @brief La classe LTC2439 permettant de dialoguer avec le LTC2439
|
|
* @warning Toutes les méthodes de cette classe ne sont pas implémentées.
|
|
*/
|
|
class LTC2439
|
|
{
|
|
public:
|
|
/*! Le constructeur de la classe prend en paramètres :
|
|
* @param csPin : la broche du microcontrôleur reliée au chip select du périphérique.
|
|
* @param sdoPin : la broche du microcontrôleur reliée à la broche MISO du périphérique. Nécessaire afin de récupérer l'information de fin de conversion de l'ADC.
|
|
* @param vref : la plage de tension des entrées analogiques en mv.
|
|
*/
|
|
LTC2439(uint8_t csPin, uint8_t sdoPin, double vref = 3300);
|
|
/*! Permet de définir vref
|
|
* @param vref : la plage de tension des entrées analogiques en mv.
|
|
*/
|
|
void setVref(double vref);
|
|
/*! Permet de récupérer la valeur la plage de tension définit vref.
|
|
* @return double : la plage de tension des entrées analogiques en mv.
|
|
*/
|
|
double getVref(){return _vref;};
|
|
/*! Permet de récupérer la valeur numérique de la tension mesurée sur le canal
|
|
* @param channel : le canal de 0 à 15
|
|
* @param sgl : indique si la mesure se fait en simple ou non. true pour simple, false pour différentielle.
|
|
* @return int32_t : valeur numérique entière correspondant à la tension mesurée.
|
|
* @warning La méthode n'est pas implémentée.
|
|
*/
|
|
int32_t sampleValue(uint8_t channel, boolean sgl = true);
|
|
/*! Permet de récupérer la valeur numérique de la tension mesurée sur le dernier canal.
|
|
* @return int32_t : valeur numérique entière correspondant à la tension mesurée.
|
|
* @warning La méthode n'est pas implémentée.
|
|
*/
|
|
int32_t sampleValue();
|
|
/*! Comme sampleValue(), mais renvoie la tension samplée sur le canal en mv en se basant sur vref.
|
|
* @param channel : le canal de 0 à 15
|
|
* @param sgl : indique si la mesure se fait en simple ou non. true pour simple, false pour différentielle.
|
|
* @return double : la tension mesurée en mv.
|
|
* @warning Cette méthode n'est pas implémentée.
|
|
*/
|
|
double sampleVoltage(uint8_t channel, boolean sgl = true);
|
|
/*! Comme sampleVoltage(), mais renvoie la tension samplée sur le dernier canal en mv en se basant sur vref.
|
|
* @return double : la tension mesurée en mv.
|
|
* @warning Cette méthode n'est pas implémentée.
|
|
*/
|
|
double sampleVoltage();
|
|
//Methodes asynchrones
|
|
/*! Permet de lancer un sample asynchrone de la tension sur l'entrée analogique channel.
|
|
* @param channel : le canal de 0 à 15
|
|
* @param sgl : indique si la mesure se fait en simple ou non. true pour simple, false pour différentielle.
|
|
* @param force : permet de forcer le sample dans le cas où le sample précédent n'est pas terminé. true force, false ne force pas.
|
|
*/
|
|
void startAsyncSample(uint8_t channel, boolean sgl = true, boolean force = false);
|
|
/*! Permet de savoir si le dernier sample lancé est prêt à être récupéré.
|
|
* @return boolean : true si il est prêt, false sinon.
|
|
*/
|
|
boolean asyncResultAvailable();
|
|
/*! Permet de convertir la valeur numérique en tension en se basant sur vref.
|
|
* @return double : tension en mv.
|
|
*/
|
|
double convertToVoltage(int32_t value);
|
|
/*! Permet de récupérer la valeur numérique associée à la tension mesurée par l'ADC suite à l'appel de la fonction startAsyncSample().
|
|
* @return int32_t : valeur numérique entière correspondante à la tension mesurée.
|
|
*/
|
|
int32_t getAsyncValue();
|
|
protected:
|
|
private:
|
|
uint8_t _csPin, _statusPin;
|
|
boolean _sampleTriggered;
|
|
double _vref; //Delta de tension de la plage : vref-gnd en mV
|
|
uint8_t _adcRes;
|
|
double _quantum;
|
|
const uint8_t _channelMap[16];
|
|
const SPISettings _SPIsettings;
|
|
};
|
|
|
|
#endif //LTC2439_H
|