ADS8345.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. NE Fonctionne pas (a vérifier pour la lecture)
  2. float lireADS8345(uint8_t channel) {
  3. // Préparer les données pour la commande de lecture
  4. uint8_t commandHigh = 0xC0 | ((channel & 0x07) << 3);
  5. digitalWrite(CS_PIN, LOW); // Activer le CS
  6. switch(channel){
  7. case 0:
  8. SPI.transfer(0b10000111); // Envoyer la première partie de la commande
  9. break;
  10. case 1:
  11. SPI.transfer(0b11000111); // Envoyer la première partie de la commande
  12. break;
  13. case 2:
  14. SPI.transfer(0b10010111); // Envoyer la première partie de la commande
  15. break;
  16. case 3:
  17. SPI.transfer(0b11010111); // Envoyer la première partie de la commande
  18. break;
  19. case 4:
  20. SPI.transfer(0b10100111); // Envoyer la première partie de la commande
  21. break;
  22. case 5:
  23. SPI.transfer(0b11100111); // Envoyer la première partie de la commande
  24. break;
  25. case 6:
  26. SPI.transfer(0b10110111); // Envoyer la première partie de la commande
  27. break;
  28. case 7:
  29. SPI.transfer(0b11110111); // Envoyer la première partie de la commande
  30. break;
  31. }
  32. delay(10); // Attendre un peu pour la stabilisation du signal
  33. uint8_t resultHigh = SPI.transfer(0x00); // Lire la première partie du résultat
  34. uint8_t resultLow = SPI.transfer(0x00); // Lire la seconde partie du résultat
  35. digitalWrite(CS_PIN, HIGH); // Désactiver le CS
  36. // Combiner les parties haute et basse du résultat
  37. uint16_t valeur = (resultHigh << 8) | resultLow;
  38. float tension = ((valeur&0x3FFF)/16384.0)*VREF;
  39. return tension;
  40. }