[[materiels:accueilmateriels|{{ :iconemaison.jpg?nolink&30|Sommaire Matériels}}]]
===== Convertisseur analogique numérique =====
[Mise à jour le 3/2/2020]
{{ :materiels:can:300px-dfr0316_45.png?nolink&150|}}
==== MCP3424 ====
* //Source// : wiki
Le module DFR0316 est un module de conversion de données à circuit MCP3424 **18-Bit ADC-4 Channel**
* //Distributeur// : Mouser
* //Caractéristiques//
* Alimentation: 2,7 à 5,5 Vcc
* Consommation en standby: 300 nA sous 5 Vcc
* Gain programmable PGA: x1, x2, x4 ou x8
* Plage de mesure différentielle: de -2,048/Gain à +2,048/Gain (par exemple de -0,512 à +0,512 V pour un gain de 4)
* Résolution programmable: 12, 14, 16 ou 18 bits
* Vitesse: 240, 60, 15 ou 3,75 mesures/seconde
* Erreur gain: 0,05 % (gain = 1 sous 18 bits)
* Erreur offset: 15 µV (gain = 1 sous 18 bits)
* Interface I2C: 0X68, 0X6A, 0X6C ou 0X6E (sélectionnable par dip-switch)
* Référence de tension interne: 2,048 Vcc ± 0,05%
* T° de service: -40 à +125 °C
* Dimensions: 27 x 16 x 12 mm
{{ :materiels:capteurs:htr:github.png?nolink&30|}}
* **Présentation** du circuit sur Github
* //Documentation// : pdf à télécharger
* //**Programmation d'une carte Arduino Uno R3**//{{ :materiels:capteurs:htr:github.png?nolink&30|}}
* // Bibliothèques à installer dans l'IDE : **MCP342x**//
* Sources sur Github {{ :materiels:can:biblmcp3424.png?nolink |}}
* //Connexion à un shield// Tinkerkit v2 monté sur une Arduino Uno{{ :materiels:can:mcp3424.jpg?nolink&600 |}}
* //Un premier exemple pour tester le circuit//
{{ :materiels:capteurs:distance:arduinoico.png?nolink&40|}}
// Connexion à un capteur de température LM35
#include
#include
// 0x68 est l'adresse par défaut des circuits MCP342x
uint8_t address = 0x68;
// Création de l'objet adc
MCP342x adc = MCP342x(address);
void setup(void)
{
// Initialisation de la console
Serial.begin(9600);
// Initialisation du bus I2C
Wire.begin();
// Enable power for MCP342x (needed for FL100 shield only)
//pinMode(9, OUTPUT);
//digitalWrite(9, HIGH);
// Reset du circuit
MCP342x::generalCallReset();
delay(1); // MC342x nécessite 300us pour se paramétrer, on attend 1ms
// Vérification de la présence du MCP342x
Wire.requestFrom(address, (uint8_t)1);
if (!Wire.available())
{
Serial.print("Pas de circuit à cette adresse ");
Serial.println(address, HEX);
while (1)
;
}
}
void loop(void)
{
long value = 0, tension_mV = 0;
int gain, resolution;
MCP342x::Config status;
// ---------------------------------------------------------------------------------------
// Déclenchement d'une conversion. La méthode convertAndRead() attend la fin de la conversion
// On passe les paramètres suivants à la fonction dans l'ordre :
// - canal : channel1, channel2, channel3 ou channel4 pour un MCP3424
// - type de conversions : oneshot ou continous
// - résolution : resolution12, resolution14, resolution16 ou resolution18
// - gain : gain1, gain2, gain4 ou gain8
// timeout = temps accordé à la transaction en ms (1000000 dans cet exemple !)
// A l'issue de la conversion
// - value = gain * (2^résolution/2^12) * tension du canal sélectionné en mv
// - status identifie la valeur du gain et de la résolution
// | gain | résolution | status |
// | 1 | 12bits | 0 |
// | 2 | 12 | 1 |
// | 4 | 12 | 2 |
// | 8 | 12 | 3 |
// | 1 | 14bits | 4 |
// etc.
// | 1 | 16bits | 8 |
// etc.
// | 1 | 18bits | 12 |
// etc.
// ---------------------------------------------------------------------------------------
// Conserver la valeur des trois derniers paramètres
uint8_t err = adc.convertAndRead(MCP342x::channel1, MCP342x::oneShot,
MCP342x::resolution12, MCP342x::gain4,
1000000, value, status);
if (err)
{
Serial.print("Erreur de conversion : ");
Serial.println(err);
}
else
{
switch (status)
{
case 2:
gain = 4;
resolution = 12;
break;
case 6:
gain = 4;
resolution = 14;
break;
case 10:
gain = 4;
resolution = 16;
break;
case 14:
gain = 4;
resolution = 18;
break;
}
Serial.print("value = ");
Serial.println(value);
Serial.print("Tension sur le canal 1 : ");
tension_mV = value / (gain * pow(2, resolution - 12));
Serial.print(tension_mV);
Serial.println("mV");
Serial.print("Temperature mesuree par le LM35 : ");
Serial.print(tension_mV / 10.0);
Serial.println("C");
}
delay(1000);
}
{{ :materiels:capteurs:vscode.png?nolink&40|}}
Le projet pour l'IDE VSCode de l'exemple ci-dessus est téléchargeable ici