Problema con analogRead en Attiny85

Buenas tardes

Estoy intentando leer un voltaje a traves de un divisor de tension armado con una resistencia de 4.7K y una de 1K

El voltaje al que esta alimentado el Attiny es 4.94V y es el voltaje que uso de referencia. El factor del multiplicador del divisor, medido con voltimetro con un muestreo de mas de 20 voltajes diferentes es de 5.659389221

Pero por algun motivo que no llego a entender, el Attiny en vez de estar dividiendo el voltaje de entrada en 1024 partes, lo esta diviendo en 1005 partes

Eso no es lo mas extraño, lo mas extraño, es que cuando hago un If con la lectura analogica y lo multiplico por 4.94, lo divido por 1005 y lo vuelvo a multiplicar por 5.659389221 para obtener el voltaje tampoco calcula el voltaje correcto

Por ejemplo:

if (analogRead(2)*(4.94/1005)*5.662687571 > 6 ) {
       
          
          digitalWrite(Verde, HIGH);
         
        } else {

         digitalWrite(Rojo, HIGH);

En este caso, por ejemplo, si aplico al divisor una tension de 7V, el pin 2 llegan los 1.24V correspondientes, con lo cual se deberia encender el led verde, pero en lugar de eso se enciende el rojo

Si en cambio, directamente modifico el codigo para que el If tome el valor analogico, se enciende el led verde:

if (analogRead(2)> 213 ) {
       
          
          digitalWrite(Verde, HIGH);
         
        } else {

         digitalWrite(Rojo, HIGH);

Alguno tendra idea de donde me estoy equivocando?

Muchas gracias

¿Cómo determinaste que la resolución del ADC es 1005 y no 1024?

Yo verificaría en consola el resultado de la operación dentro del if, a ver qué está pasando, particularmente yo no hago operaciones así, las hago afuera y solo comparo en los condicionales.

Mismo comentario que @soyega, lo primero es poner a leer tu sistema de medicion con valores conocidos.

una simple presentación de los valores leídos del AD servirá

#include "SoftwareSerial.h"

SoftwareSerial Monitor(5, 4); // tus pines para conectar al 

void setup() {
   Monitor.begin(9600); 
}

void loop() {
  unsigned int adc = analogRead(2);
  Monitor.println(adc);
}

El 1005 lo determine de la siguiente manera:

El voltaje maximo que puedo medir con ese divisor es de 5V x 5.659389221, es decir aprox 28.3V

Por prueba y error viendo encender y apagar leds, y cambiando valores en el IF, llegue a la conclusion que 6V corresponden a 213 partes. Comprobado tambien a distintos voltajes

Por lo tanto, si 6V son 213 partes, 28.3V van a ser 28.3 x 213 / 6 = 1005 partes para 28.3v

No habia pensado en la consola, voy a buscar algun ejemplo en internet a ver como conectar el Attiny para poder ver resultados en el monitor y cuento como fue

A ver… te puse un código, prueba sin el divisor y mide la tensión de alimentación. Debería dar según tu 1005 y según creemos todos, 1023.

Bueno, despues de dar mil vueltas y probar con el monitor para ver que pasaba, decidi volver a cablear todo y ahi me di cuenta:

Mi protoboard es una porquería. Editado

Asi que al conectar todo de vuelta en otra parte de la proto se solucionaron todos mis problemas

Muchas gracias por haber atendido a mis consultas y por su paciencia

Y disculpas por haberles hecho perder el tiempo

Hi,
para pode usar lcd display con Attiny85 necesitas las librerias TinyWireM y tinyI2C.