Buenas, tengo un problema y es que como dice el título estoy intentando hacer una medición diferencial con un arduino mega y ya estoy muy quemado con el código, me parece que estoy a punto de sacarlo pero ya estoy agotado.
La medida se va a realizar en un divisor resistivo con dos resistencias en los extremos y un potenciómetro entre estas al cual se conectan los terminales de medida del arduino en sus extremos, como ya podéis intuir es mas un ejercicio de aprendizaje que nada, estoy tratando de hacerlo mediante registros para aprender a usarlos mejor y que los códigos ocupen menos y corran mas rápido, aquí dejo el código que tengo con algunos comentarios.
Las variables que llevan un 1 o un 3 detrás es por que corresponden al cálculo con el ADC1 o 3 respectivamente.
Si surge cualquier duda porfavor no dudéis en preguntar.
La medida se va a realizar en un divisor resistivo con dos resistencias en los extremos y un potenciómetro entre estas al cual se conectan los terminales de medida del arduino en sus extremos, como ya podéis intuir es mas un ejercicio de aprendizaje que nada, estoy tratando de hacerlo mediante registros para aprender a usarlos mejor y que los códigos ocupen menos y corran mas rápido, aquí dejo el código que tengo con algunos comentarios.
Código:
/*
* MUX5:0 -> 010011
* Pos Dif Input= ADC3
* Neg Dif Input= ADC1
* Gain= x1
*/
int Result=0;
int Signal3 = 0;
int x3;
int y3;
int z3;
float q3;
int Signal1 = 0;
int x1;
int y1;
int z1;
float q1;
void setup() {
Serial.begin(9600);
ADMUX = B01010011; //B01010011 B7&6 AVCC reference B1&0->ADC3 /MUX->010011) ADLAR=0 Justificado derecha
ADCSRA = 0x87; //B10000111 ADEN=1 B7 Preescaler 128 (default) B[2:0]=1
ADCSRB &= ~0x08; //Bxxxx0xxx aseguramos 0 en B3 que corresponde a MUX5
}
void loop() {
ADCSRA |= 0x40;// ponemos el bit 6 (ADSC) a 1 por lo que iniciamos la conversion.
while (ADCSRA & 0x40); // se queda a la espera de terminar la conversión.
x3 = ADCL;
y3 = ADCH;
z3 = (y3 << 8) | x3;
q3 = (float)z3 * 5 / 1023; //Valor dc
x1 = ADCL;
y1 = ADCH;
z1 = (y1 << 8) | x1;
q1 = (float)z1 * 5 / 1023; //Valor dc
q3-q1 = Result;
Serial.println(Result, 2);
Las variables que llevan un 1 o un 3 detrás es por que corresponden al cálculo con el ADC1 o 3 respectivamente.
Si surge cualquier duda porfavor no dudéis en preguntar.