Boa tarde, pessoal! Será que podem me ajudar num probleminha?
Possuo um projeto que usa a placa de DAC MCP4725 para gerar um sinal de voltagem para um circuito e a placa de ADC ADS1115 para retornar leituras de voltagem e corrente do circuito. Escrevi um script de teste, que apresento abaixo:
#include <Wire.h>
#include <Adafruit_MCP4725.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads(0x4A);// Leitor Analogico para Digital (AD) e seu endereco
Adafruit_MCP4725 dac; // Digital para Analogico (DA)
void setup(void) {
Serial.begin(9600); // Seta velocidade serial
dac.begin(0x62); // Inicia o DA em seu endereco
ads.begin(); // Inicia o AD
}
void loop(void) {
uint32_t valor_dac = 0;
while (valor_dac < 4096) // Seta a variavel em seus limites
// 10 bits = 4096 valores de voltagem
{
dac.setVoltage(valor_dac, false); // Comando para o DAC gerar a voltagem
delay(25); // Da um tempinho pra ele pensar
int16_t adc0; // Seta as variaveis adc como um inteiro de 16 bits
int16_t adc1;
int16_t adc2;
adc0 = ads.readADC_SingleEnded(0); // Le os pinos do AD
adc1 = ads.readADC_SingleEnded(1);
adc2 = ads.readADC_SingleEnded(2);
Serial.print("\tVolesp: "); // Valor DAC da voltagem esperada
Serial.print(valor_dac,4);
Serial.print("\tVoltADC0: "); // Valor ADC da voltagem da celula
Serial.print(adc0);
Serial.print("\tCorrADC1: "); // Valor ADC da corrente da celula
Serial.print(adc1);
Serial.print("\tVoltADC2: "); // Valor DAC da voltagem gerada no circuito
Serial.println(adc2);
valor_dac = valor_dac + 100; // Incrementa a variavel valor_dac
delay(5000); // Espera eu anotar o valor medido no multimetro
}
}
Agora vejam os resultados de leituras:
Volesp: 0 VoltADC0: -494 CorrADC1: 12957 VoltADC2: -1
Volesp: 1210 VoltADC0: 0 CorrADC1: 12973 VoltADC2: 681
Volesp: 3020 VoltADC0: 665 CorrADC1: 12979 VoltADC2: 1340
Volesp: 10230 VoltADC0: 1304 CorrADC1: 12986 VoltADC2: 1989
Volesp: 12100 VoltADC0: 1957 CorrADC1: 12991 VoltADC2: 2637
Volesp: 13310 VoltADC0: 2646 CorrADC1: 13007 VoltADC2: 3306
Volesp: 21120 VoltADC0: 3311 CorrADC1: 13008 VoltADC2: 3971
Volesp: 22330 VoltADC0: 3973 CorrADC1: 13015 VoltADC2: 4622
Volesp: 30200 VoltADC0: 4650 CorrADC1: 13021 VoltADC2: 5291
Volesp: 32010 VoltADC0: 5319 CorrADC1: 13028 VoltADC2: 5949
Volesp: 33220 VoltADC0: 5981 CorrADC1: 13036 VoltADC2: 6602
Volesp: 101030 VoltADC0: 6651 CorrADC1: 13041 VoltADC2: 7260
Volesp: 102300 VoltADC0: 7311 CorrADC1: 13047 VoltADC2: 7908
Volesp: 110110 VoltADC0: 7966 CorrADC1: 13052 VoltADC2: 8556
Volesp: 111320 VoltADC0: 8638 CorrADC1: 13063 VoltADC2: 9217
Volesp: 113130 VoltADC0: 9309 CorrADC1: 13069 VoltADC2: 9878
Volesp: 121000 VoltADC0: 10005 CorrADC1: 13109 VoltADC2: 10547
Volesp: 122210 VoltADC0: 10645 CorrADC1: 13081 VoltADC2: 11197
Volesp: 130020 VoltADC0: 11305 CorrADC1: 13087 VoltADC2: 11843
Volesp: 131230 VoltADC0: 11956 CorrADC1: 13093 VoltADC2: 12484
Volesp: 133100 VoltADC0: 12617 CorrADC1: 13102 VoltADC2: 13135
Volesp: 200310 VoltADC0: 13280 CorrADC1: 13106 VoltADC2: 13789
Volesp: 202120 VoltADC0: 13940 CorrADC1: 13110 VoltADC2: 14452
Volesp: 203330 VoltADC0: 14625 CorrADC1: 13121 VoltADC2: 15116
Volesp: 211200 VoltADC0: 15297 CorrADC1: 13127 VoltADC2: 15777
Volesp: 213010 VoltADC0: 15955 CorrADC1: 13139 VoltADC2: 16420
Volesp: 220220 VoltADC0: 16648 CorrADC1: 13140 VoltADC2: 17098
Volesp: 222030 VoltADC0: 17307 CorrADC1: 13144 VoltADC2: 17756
Volesp: 223300 VoltADC0: 17965 CorrADC1: 13156 VoltADC2: 18406
Volesp: 231110 VoltADC0: 18613 CorrADC1: 13158 VoltADC2: 19044
Volesp: 232320 VoltADC0: 19277 CorrADC1: 13166 VoltADC2: 19696
Volesp: 300130 VoltADC0: 19959 CorrADC1: 13173 VoltADC2: 20370
Volesp: 302000 VoltADC0: 20631 CorrADC1: 13181 VoltADC2: 21030
Volesp: 303210 VoltADC0: 21290 CorrADC1: 13189 VoltADC2: 21680
Volesp: 311020 VoltADC0: 21943 CorrADC1: 13193 VoltADC2: 22323
Volesp: 312230 VoltADC0: 22600 CorrADC1: 13202 VoltADC2: 22971
Volesp: 320100 VoltADC0: 23282 CorrADC1: 13207 VoltADC2: 23644
Volesp: 321310 VoltADC0: 23955 CorrADC1: 13214 VoltADC2: 24306
Volesp: 323120 VoltADC0: 24608 CorrADC1: 13224 VoltADC2: 24959
Volesp: 330330 VoltADC0: 25279 CorrADC1: 13203 VoltADC2: 25603
Volesp: 332200 VoltADC0: 25907 CorrADC1: 13233 VoltADC2: 26227
O problema que encontrei está no valor de voltagem esperada (Volesp), que não depende do circuito, é simplesmente o valor da variável "valor_dac", que deveria ter um incremento de 100 em 100, mas está dando saltos bem maiores que isso, além de pular, por exemplo, de 33220 para 101030. Porque isso acontece?