Estoy usando el ADC MCP3204 con mi Arduino. El chip funciona con 5V de mi PSU LM338. Como no tengo una referencia adecuada a mano, también uso la tensión de alimentación como Vref. Cuando le doy 5V, muestra 4093, que es una deflexión total de ADC de 12 bits. El voltaje lo dividí a 2.5V con dos 10k, entonces es 1757. Lo verifiqué con mi DMM y es 2.513 ... ¿eh? Apesto en matemáticas pero estoy seguro de que no es la mitad de 4093.
código original en C del tutorial enlace
uint16_t ReadADCEx(uint8_t ch) { uint8_t byte,data_high,data_low;
byte=0b00000110;
if(ch>3)
byte|=0b00000001;
CS_LOW();
SPIWrite(byte);
byte=ch<<6;
data_high=SPIWrite(byte);
data_high&=0b00001111;
data_low=SPIWrite(0xFF);
CS_HIGH();
return ((data_high<<8)|data_low); }
Mi arduino eqivulent
#include<SPI.h>
const int ssPIN = 10;
void setup() {
// put your setup code here, to run once:
pinMode(ssPIN,OUTPUT);
SPI.begin();
Serial.begin(9600);
}
uint16_t ReadADCValue(uint8_t ch)
{
uint8_t value,data_high,data_low;
//active MCP3204
digitalWrite(ssPIN,LOW);
value = 0b00000110;
SPI.transfer(value);
value= 1 << 6;
data_high=SPI.transfer(value);
data_low=SPI.transfer(0xFF);
digitalWrite(ssPIN,HIGH);
return ((data_high<<8)|data_low);
}
void loop() {
Serial.println(ReadADCValue(1));
delay(1000);
}