Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révisionLes deux révisions suivantes | ||
materiels:can:mcp3424 [2020/02/03 11:29] – [Convertisseur analogique numérique] philippe | materiels:can:mcp3424 [2024/05/05 16:29] – [MCP3424] phil | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | [[materiels: | ||
+ | |||
+ | ===== Convertisseur analogique numérique ===== | ||
+ | [Mise à jour le 5/5/2024] | ||
+ | |||
+ | \\ | ||
+ | |||
+ | {{ : | ||
+ | ==== MCP3424 ==== | ||
+ | * // | ||
+ | |||
+ | <callout type=" | ||
+ | **</ | ||
+ | |||
+ | * // | ||
+ | | ||
+ | * // | ||
+ | * Alimentation: | ||
+ | * Consommation en standby: 300 nA sous 5 Vcc | ||
+ | * Gain programmable PGA: x1, x2, x4 ou x8 | ||
+ | * Plage de mesure différentielle: | ||
+ | * Résolution programmable: | ||
+ | * Vitesse: 240, 60, 15 ou 3,75 mesures/ | ||
+ | * Erreur gain: 0,05 % (gain = 1 sous 18 bits) | ||
+ | * Erreur offset: 15 µV (gain = 1 sous 18 bits) | ||
+ | * Interface série I2C: **SLA** = 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 | ||
+ | |||
+ | {{ : | ||
+ | * **Présentation** du circuit sur < | ||
+ | |||
+ | * // | ||
+ | |||
+ | * // | ||
+ | * // Bibliothèques à installer dans l'IDE : **MCP342x**// | ||
+ | * Sources sur < | ||
+ | * //Connexion à un shield// < | ||
+ | * //Un premier exemple pour tester le circuit// | ||
+ | |||
+ | {{ : | ||
+ | <code cpp *.cpp> | ||
+ | // Connexion à un capteur de température LM35 | ||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | // 0x68 est l' | ||
+ | uint8_t address = 0x68; | ||
+ | // Création de l' | ||
+ | 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) | ||
+ | // | ||
+ | // | ||
+ | |||
+ | // Reset du circuit | ||
+ | MCP342x:: | ||
+ | delay(1); // MC342x nécessite 300us pour se paramétrer, | ||
+ | |||
+ | // Vérification de la présence du MCP342x | ||
+ | Wire.requestFrom(address, | ||
+ | if (!Wire.available()) | ||
+ | { | ||
+ | Serial.print(" | ||
+ | Serial.println(address, | ||
+ | while (1) | ||
+ | ; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void loop(void) | ||
+ | { | ||
+ | long value = 0, tension_mV = 0; | ||
+ | int gain, resolution; | ||
+ | MCP342x:: | ||
+ | // --------------------------------------------------------------------------------------- | ||
+ | // 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' | ||
+ | // - canal : channel1, channel2, channel3 ou channel4 pour un MCP3424 | ||
+ | // - type de conversions : oneshot ou continous | ||
+ | // - résolution : resolution12, | ||
+ | // - gain : gain1, gain2, gain4 ou gain8 | ||
+ | // timeout = temps accordé à la transaction en ms (1000000 dans cet exemple !) | ||
+ | // A l' | ||
+ | // - value = gain * (2^résolution/ | ||
+ | // - status identifie la valeur du gain et de la résolution | ||
+ | // | gain | résolution | status | ||
+ | // | 1 | ||
+ | // | 2 | ||
+ | // | 4 | ||
+ | // | 8 | ||
+ | // | 1 | ||
+ | // etc. | ||
+ | // | 1 | ||
+ | // etc. | ||
+ | // | 1 | ||
+ | // etc. | ||
+ | // --------------------------------------------------------------------------------------- | ||
+ | // Conserver la valeur des trois derniers paramètres | ||
+ | uint8_t err = adc.convertAndRead(MCP342x:: | ||
+ | | ||
+ | | ||
+ | if (err) | ||
+ | { | ||
+ | Serial.print(" | ||
+ | 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(" | ||
+ | Serial.println(value); | ||
+ | Serial.print(" | ||
+ | tension_mV = value / (gain * pow(2, resolution - 12)); | ||
+ | Serial.print(tension_mV); | ||
+ | Serial.println(" | ||
+ | Serial.print(" | ||
+ | Serial.print(tension_mV / 10.0); | ||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | delay(1000); | ||
+ | } | ||
+ | </ |