| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #include <SPI.h>
- #include <Wire.h>
- #define MCP3428_ADDRESS 0x68 // Adresse I2C du MCP3428
- #define VREFMCP 0.0000625// Tension de référence en volt
- // Définir les broches
- const int CS_PIN = 53;
- const float VREF = 1.36; // Référence de tension
- //0.253
- //ref1 = 0.507
- //Vref=0.589
- // Initialisation
- void setup() {
- Serial.begin(9600);
- SPI.begin();
- pinMode(CS_PIN, OUTPUT);
- digitalWrite(CS_PIN, HIGH); // Désactive le CS au démarrage
- Serial.println(" initialisé et prêt à tester.");
- }
- byte getChannelConfigByte(int channel) {
- byte configByte = 0x88; // Configuration par défaut pour le canal 1
- if (channel == 1) {
- configByte = 0xA8;
- } else if (channel == 2) {
- configByte = 0xC8;
- } else if (channel == 3) {
- configByte = 0xE8;
- }
- return configByte;
- }
- float MCP3428_Read(uint8_t channel) {
-
- Wire.beginTransmission(MCP3428_ADDRESS);
- Wire.write(getChannelConfigByte(channel));
- Wire.endTransmission();
-
- delay(200);
- byte config,byte1,byte2;
- while(1){
- Wire.requestFrom(MCP3428_ADDRESS, 3);
- byte2 = Wire.read();
- byte1 = Wire.read();
- config = Wire.read();
- if(config>>8==0) //tant qu'il a pas fini
- break;
- }
- int value = ((byte2) << 8) | byte1;
- Serial.print(value);
- return ((float)value * 62.5)/1000000;
- }
- float lireADS8345(uint8_t channel) {
- // Préparer les données pour la commande de lecture
- uint8_t commandHigh = 0xC0 | ((channel & 0x07) << 3);
- digitalWrite(CS_PIN, LOW); // Activer le CS
- switch(channel){
- case 0:
- SPI.transfer(0b10000111); // Envoyer la première partie de la commande
- break;
- case 1:
- SPI.transfer(0b11000111); // Envoyer la première partie de la commande
- break;
- case 2:
- SPI.transfer(0b10010111); // Envoyer la première partie de la commande
- break;
- case 3:
- SPI.transfer(0b11010111); // Envoyer la première partie de la commande
- break;
- case 4:
- SPI.transfer(0b10100111); // Envoyer la première partie de la commande
- break;
- case 5:
- SPI.transfer(0b11100111); // Envoyer la première partie de la commande
- break;
- case 6:
- SPI.transfer(0b10110111); // Envoyer la première partie de la commande
- break;
- case 7:
- SPI.transfer(0b11110111); // Envoyer la première partie de la commande
- break;
- }
- delay(10); // Attendre un peu pour la stabilisation du signal
- uint8_t resultHigh = SPI.transfer(0x00); // Lire la première partie du résultat
- uint8_t resultLow = SPI.transfer(0x00); // Lire la seconde partie du résultat
- digitalWrite(CS_PIN, HIGH); // Désactiver le CS
- // Combiner les parties haute et basse du résultat
- uint16_t valeur = (resultHigh << 8) | resultLow;
- float tension = ((valeur&0x3FFF)/16384.0)*VREF;
- return tension;
- }
- void loop() {
- int i = 0;
- //for (i =0; i<4;i++){
- /*float tension = lireADS8345(i);
- //Serial.print(i);
- Serial.print(" Tension: ");
- Serial.print(tension, 3); // Affiche la tension avec 3 décimales
- Serial.print(" V ");
- */
- float tension = lecture(i);
- Serial.print(" ");
- Serial.print(i);
- Serial.print(" Tension: ");
- Serial.print(tension, 10); // Affiche la tension avec 3 décimales
- Serial.println(" V");
- delay(1000); // Attendre 1 seconde avant la prochaine lecture
- //}
- }
- /*
- salé 9760
- */
- /*
- OUT1
- REF1 FIX
- OUT2 FIX
- V+
- V-
- OUT3
- V+_OUT
- V-_OUT
- 0 Tension: 0.438 V
- 1 Tension: 0.506 V
- 2 Tension: 0.291 V
- 3 Tension: 0.329 V
- 4 Tension: 0.343 V
- 5 Tension: 0.348 V
- 6 Tension: 0.296 V
- 7 Tension: 0.164 V
- */
|