Modulo ADS1115

Salve, ho recentemente acquistato un modulato che monta un ADS1115, un ADC a 16bit, per delle misure di tensione più precise di quelle che offre Arduino. Il modulo è questo:

http://www.ebay.it/itm/CJMCU-ADS1115-16Bit-ADC-Development-Board-Module-/131735794293?hash=item1eac10b275:g:LsEAAOSwQYZWzfRJ

Ho scaricato la libreria Adafruit_ADS1015.h che si trova a questo link:

dopo di che ho caricato il seguente esempio

#include <Wire.h>
#include <Adafruit_ADS1015.h>

Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */
// Adafruit_ADS1015 ads;     /* Use thi for the 12-bit version */

void setup(void) 
{
  Serial.begin(9600);
  Serial.println("Hello!");
  
  Serial.println("Getting single-ended readings from AIN0..3");
  Serial.println("ADC Range: +/- 0.256V (1 bit = 0.0078125mV/ADS1115)");
  
  // The ADC input range (or gain) can be changed via the following
  // functions, but be careful never to exceed VDD +0.3V max, or to
  // exceed the upper and lower limits if you adjust the input range!
  // Setting these values incorrectly may destroy your ADC!
  //                                                                ADS1015  ADS1115
  //                                                                -------  -------
  // ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
  // ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
  // ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
  ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
  
  ads.begin();
}

void loop(void) 
{
  int16_t adc0, adc1, adc2, adc3;

  adc0 = ads.readADC_SingleEnded(0);
  adc1 = ads.readADC_SingleEnded(1);
  adc2 = ads.readADC_SingleEnded(2);
  adc3 = ads.readADC_SingleEnded(3);
  Serial.print("AIN0: "); Serial.println(adc0);
  Serial.print("AIN1: "); Serial.println(adc1);
  Serial.print("AIN2: "); Serial.println(adc2);
  Serial.print("AIN3: "); Serial.println(adc3);
  Serial.println(" ");
  
  delay(1000);
}

dopo di che ho fatto i collegamenti sulla breadboard in questo modo:

VDD -> +5V
GND -> GND
SCL -> A5
SDA -> A4
ADDR -> NC
ALRT -> NC
A0,A1,A2,A3 - > ognuno alla presa centrale di un proprio potenziometro da 10Kohm

Mi pare sia tutto fatto bene e infatti sul monitor seriale leggo 4 valori analogici... Il fatto è che tutti e 4 gli ingressi, indipendentemente da come muovo i potenziometri, mostrano tutti uno stesso valore che è quello di tensione più alto dei 4 potenziometri, e non 4 diversi. Inoltre, da quanto ho capito, questo modulo dovrebbe poter misurare valori di tensione tra -Vcc e +Vcc, che in numero binario vanno da -32767 a 32767, tuttavia se collego una delle entrate a Vcc, mi mostra correttamente +32767, ma se ne collego una a GND invece di mostrare 0 mostra -4300 e qualcosa... Sbaglio qualcosa io o è la libreria che ha qualche errore??

Il pin ADDR NON deve essere lasciato scollegato, ma va collegato a secondo dell'address I2C che gli si vuole assegnare ... guarda il datasheet pag. 14

Per come lo usa la libreria di Adafruit lo devi OBBLIGATORIAMENTE collegare a GND (Addr. 0x48) o puoi avere problemi di indirizzamento del device.

Guglielmo

Si avevo gia provato a collegarlo a massa, ma il problema persiste...

Gabibbo1994:
Si avevo gia provato a collegarlo a massa, ma il problema persiste...

... il problema persisterà pure, ma se non colleghi quel pin a GND, SICURAMENTE credi altri problemi quindi aggiorna i tuoi collegamenti e lascialo fisso a GND.

Per il resto ...
... le librerie di Adafruit di solito sono molto affidabili e ben collaudate, quindi ... verifica bene i collegamenti perché o è un collegamento mal fatto o ... il modulo è difettoso (... cosa che, visto il prezzo e la provenienza, è sempre possibile).

Comunque, per evitare danni ... ti consiglierei di seguire il tutorial di Adafruit QUI.

Guglielmo