Ceci est une ancienne révision du document !
Table des matières
Convertisseur Analogique Numérique
Description du projet
Mettre en oeuvre le Convertisseur Analogique-Numérique ADC088S102 de chez National Semiconductor.
Matériel utilisé
- Ordinateur avec Arduino installé
- Carte Arduino
- Câble USB
- Platine d'essai
Considérations
Le convertisseur ADC088S102 est dans un format TSSOP. Ce format très petit ne peut donc pas être placé directement sur une platine d'essai, il est nécessaire de réaliser un adaptateur et de souder ce composant dessus. La communication entre le convertisseur et l'Arduino se fait par SPI. C'est un CAN(Attention ne pas confondre un CAN Convertisseur Analogique Numérique et le bus CAN) avec 8 canaux différents dont les valeurs de sortie sont codées sur 8 bits.
Le schéma proposé est uniquement à titre d'exemple, pour un montage fiable et pleinement fonctionnel, il faut se référer à la fiche technique pour trouver le schéma correct pour l'alimentation du convertisseur (Figure 8).
Si tous les canaux du convertisseur ne sont pas utilisés dans votre montage, il faut néanmoins relier les pattes inutilisées du composant à la masse afin d'éviter des perturbations lors des conversions.
Montage électronique
Liste des pièces
Qtt | Nom | Valeur | Référence Fabricant | Fabricant | Référence Fournisseur | Fournisseur |
---|---|---|---|---|---|---|
1 | Convertisseur Analogique/Numérique | ADC088S102CIMT | National Semiconductor | 639-4121 | RS | |
2 | Condensateur céramique | 1000pF | ECKA3A102KBP | Panasonic | 671-5477 | RS |
2 | Résistance | 22 Ω | LR1F22R | TE Connectivity | 148-095 | RS |
2 | Potentiomètre rotatif. | 10 kΩ | 3310P-001-103L | Bourns. | 691-6885 | RS |
Script Arduino
#include <SPI.h> const byte selectionPin = 10; byte data_R; byte resultat[8]; // Tableau des valeurs courantes byte resultatPrec[8] = {0, 0, 0, 0, 0, 0, 0, 0}; // Tableau des valeurs de référence void setup() { Serial.begin(9600); // Initialisation de la communication série SPI.begin(); // Initilisation de la communication SPI avec l' ADC088S102 pinMode(selectionPin, OUTPUT); } void loop() { digitalWrite(selectionPin, LOW); // Démarrage de la communication SPI for (byte canal = 0; canal < 8; canal++){ // PArcoure l'ensemble des canaux du ADC088S102 data_R = SPI.transfer(((canal+1) << 3)); // Récupère les 4 octets de poids forts du canal courant et envoi l'adresse du prochain canal à lire resultat[canal] = (data_R << 4); // Décale les bits voir Figure 1 de la feuille de caractéristiques data_R = SPI.transfer(((canal+1) << 3)); // Récupère les 4 bits de poids faibles et envoi l'adresse du prochain canal à lire resultat[canal] += (data_R >> 4); // Décale les bits voir Figure 1 de la feuille de caractéristiques } digitalWrite(selectionPin, HIGH); // Arret de la transmission SPI boolean flag = false; for (int i = 0; i < 8; i++) { if (resultatPrec[i] != resultat[i]) { // Teste s'il y a des changements dans les valeurs flag = true; } } if (flag) { // Si changements alors affichage des valeurs for (byte canal = 0; canal < 8; canal++) { Serial.print(resultat[canal], DEC); // Envoi de la nouvelle valeur par communication série Serial.print(" "); resultatPrec[canal] = resultat[canal]; // Met à jour les valeurs pour la référence } Serial.println(""); } }