analogReference (INTERNAL)

Hola.

No encuentro la información que busco relativa a esta función.
La voy a utilizar en un arduino UNO para medir la velocidad del viento.

Mi pregunta es si una vez puestos los PIN analógicos con referencia de 1,1 V, podría introducir señal a 5 V de otros sensores sin que se tostara el arduino : smiley-confundir: Me refiero a otros input de los PIN analógicos, claro.

Se supone que con esta función sólo pongo como referencia 1,1 V para medir el máximo de señal, no como límite de voltaje de entrada, pero no estoy seguro y no me atrevo a arriesgar.

No se si me he explicado bien...

If you execute this code: analogReference(INTERNAL), then 1.1V is the full-scale for the ADC and it will apply for all the analog channels of the ADC; as a result, input signal at the input of any channel must remain below 1.1V. If you apply 5V signal to the the input of a channel, there will be no harm for the ADC/UNO; but, the measurement is saturated and meaningless.

This is the conceptual view of the ADC.
adc328p.png

adc328p.png

Gracias y perdón por tardar tanto.

Entiendo que quieres decir que la medida por encima de 1,1, V se desperdicia porque ya satura la señal.

Pero para el proyecto que estoy haciendo sí me podría valer que el resto de entradas analógicas distinguieran entre HIGH o LOW solamente. Sólo necesito precisión en la medición del voltaje en una de ellas. El resto podrían funcionar como las digitales.

¿Es así como quedaría? ¿No habría daños?

Y ya que estamos y abusando un poco ;D ¿funcionaría bien I2C si ejecuto analogReference(INTERNAL)?

Gracias de nuevo.

1. This is the physical pin diagram of ATmega328P MCU.
atmega328pPin.png
Figure-1:

2. This is the port structured diagram of the MCU; where, the pins with similar functions are grouped together.
portstruc.png
Figure-2:

3. Let us talk on Port-C IO Register
(1) There are 6 pins or 6 IO lines, and they normally work as IO (input and output) lines.

(2) Each pin has one or more alternate functions which come into action when the user wants it through a process called initialization or configuration. For example: PC4 has three alternate functions: ADC4, SDA, and PCINT12. If you want you can use it as Ch-4 (ADC4) for the internal ADC, then other three functions (digital IO, SDA, PCINT12) are OFF.

(3) Each and every pin can be individually programmed to define the desired function without affecting the functions of other pins. As a result when PC4 and PC5 can work as I2C Bus (A4, A5 = SDA, SCL; Fig-3), PC2 can work as ADC2 line; PC0 can work as digital IO line.
i2c-2.png
Figure-3:

pinAT328p.png

portstruc.png

i2c-2.png

Vale. Entendido.

Un ejemplo de código de cómo programar analogReference(INTERNAL) solo para el PIN A1 por ejemplo...?

torke100:
Un ejemplo de código de cómo programar analogReference(INTERNAL) solo para el PIN A1 por ejemplo...?

void setup()
{
   Serial.begin(9600);
   analogReference(INTERNAL);     //1.1V for Vref point of ADC; input signal: 0V to 1.1V
}

void loop()
{
    unsigned int x = analogRead(A1);  //connect wiper point of pot connected between 3.3V and GND
    Serial.println(x, DEC);        //slowly vary pot and check that display changes.
    delay(2000);     //test interval
}

I just need precision in measuring the voltage in one of them. The rest could work like digital ones.

only for PIN A1 for example

Since there is only one AD converter the analog reference is for all channels. You could set the reference to 1.1V and read A1 as analog (analogRead), but read the other channels as digital (HIGH, LOW, with digitalRead).

Gracias a ambos. Me habéis sido de gran ayuda. Y además creo que puedo conectar todo como yo quería.
Si el resto de PIN me funcionan como digital (HIGH, LOW) y admiten señal por encima de 1,1, V sin dañarse y además el puedo usar A4-A5 para I2C, pues estupendo.

Gracias de nuevo.