Corretta lettura Analogico da ATTINY85

Salve a tutti sto facendo un progetto nel quale ho la necessità di leggere un partitore resistivo tramite l’ATTINY85 e inviare all’esterno 3 bit tramite 3 piedini in modo da avere il codice binario delle 8 posizioni del partitore.
Il partitore è costituito da 7 resistenze da 2.2k e 1 da 4.7k, in più è presente una resistenza aggiuntiva di 47k che collega l’analog in a massa come suggerito in un altro post.
L’attiny è alimentato a 3.3V e facendo un rapido calcolo ottengo le seguenti tensioni e valori analogici come soglie :

Dove il Quanto è la tolleranza che offro al valore letto per essere riconducibile ad un determinato livello.
Una volta programmato l’attiny e inserito nel progetto noto che le tensioni sul pin analogico rispecchiano quelle in tabella ma le usciite si fermano al 5 valore anche se seleziono quelli successivi. Quindi anche se posiziono il partitore sull’8 valore, in uscita dall’attiny avrò sempre il codice binario 100 invece di 111.
Le saldature sembrano fatte bene e non dovrebbero esserci corti poiché sull’analog in leggo le tensioni cosi come in tabella.
Non credo di aver sbagliato il codice perchè è praticamente identico ad un progetto che avevo fatto con arduino a 5V, lo allego di seguito :

#define RED 2
#define YELLOW 1
#define GREEN 0
int BUTTON = A2;
//Valore posizione pulsante :
int oldPuls;
int newPuls;
//Valori soglie pulsanti
int V_puls1 = 993;  
int V_puls2 = 847;  
int V_puls3 = 716;  
int V_puls4 = 598;
int V_puls5 = 490;
int V_puls6 = 381;
int V_puls7 = 288;
int V_puls8 = 186;
//Tolleranza per la soglia che non sarà perfettamente V_pulsn ma leggermente diversa
int dev = 30;

//int contatore = 0; // il contatore varia da 0 a 7 (8 variazioni)
int Val_1=0;  //variabile lettura pin analogico
int diff =0; //differenza tra oldPuls e newPuls

void setup() {
  // put your setup code here, to run once:
      pinMode(RED, OUTPUT);
      pinMode(YELLOW, OUTPUT);
      pinMode(GREEN, OUTPUT);
      pinMode(BUTTON, INPUT);//ingresso analogico

}

void loop() {
  
  //Val_1 = 0;
  Val_1 = analogRead(BUTTON);  //leggo il valore del pin anologico BUTTON
  
  //confronto tale lettura con i valori in memoria e assegno alla variabile
  //newPuls il valore corrente
  
  LeggiPulsante();
   
    switch (newPuls) {
            case 0:
                //tutti spenti
                write_leds(LOW, LOW, LOW);
                break;
            case 1:
                //Valore 1 (001)
                 write_leds(LOW, LOW, HIGH);
                 break;
            case 2:
                //valore 2 (010)
                 write_leds(LOW, HIGH, LOW);
                 break;
            case 3:
                //valore 3 (011)
                 write_leds(LOW, HIGH, HIGH);
                 break;
            case 4:
                //valore 4 (100)
                 write_leds(HIGH, LOW, LOW);
                 break;
            case 5:
                //valore 5 (101)
                 write_leds(HIGH, LOW, HIGH);
                 break;  
            case 6:
                //valore 6 (110)
                 write_leds(HIGH, HIGH, LOW);
                 break; 
            case 7:
                //valore 7 (111)
                 write_leds(HIGH, HIGH, HIGH);
                 break;     
        }
    
    

}

void write_leds(byte state1, byte state2, byte state3) {
    //modifica le porte dei 3 LED
    digitalWrite(RED, state1);
    digitalWrite(YELLOW, state2);
    digitalWrite(GREEN, state3);
}

void LeggiPulsante(){
  Val_1 = 0;
  Val_1 = analogRead(BUTTON);  //leggo il valore del pin anologico BUTTON
  
  //confronto tale lettura con i valori in memoria e assegno alla variabile
  //newPuls il valore corrente
    if((Val_1 <=(V_puls1 + dev)) && (Val_1 >(V_puls1-dev)))
      newPuls =0;
  if((Val_1 <=(V_puls2 + dev)) && (Val_1 >(V_puls2-dev)))
      newPuls =1;
  if((Val_1 <=(V_puls3 + dev)) && (Val_1 >(V_puls3-dev)))
      newPuls =2;
  if((Val_1 <=(V_puls4 + dev)) && (Val_1 >(V_puls4-dev)))
      newPuls =3;
  if((Val_1 <=(V_puls5 + dev)) && (Val_1 >(V_puls5-dev)))
      newPuls =4;
  if((Val_1 <=(V_puls6 + dev)) && (Val_1 >(V_puls6-dev)))
      newPuls =5;
  if((Val_1 <=(V_puls7 + dev)) && (Val_1 >(V_puls7-dev)))
      newPuls =6;
  if((Val_1 <=(V_puls8 + dev)) && (Val_1 >(V_puls8-dev)))
      newPuls =7;
  
}

Ringrazio chiunque possa aiutarmi.

Come hai collegato il micro? Si può avere lo schema dei collegamenti?

l'attiny l'ho collegato in questo modo Dove le uscite vanno su un dsp e l'ingresso del partitore è sul pin select. Il pin 2 è messo a massa da un jumper non riportato nello schema. La parte hardware credo sia corretta perche' funziona perfettamente fino alla posizione 5 ed il relativo codice poi rimane bloccato su quel valore come se non riuscisse a verificare la variazione di soglia che pero' io riesco a rilevare tramite multimetro.

Dovresti farci vedere anche lo schema dal blocco pulsanti/resistori.

Pensavo non servisse, ma eccolo qui è un semplice resistore. Il problema credo che sia nel riconoscimento delle soglie da parte di attiny85 alimentato a 3.3V perchè andando a variare i valori in tabella e precisamente aumentando le soglie di V6,V7e V8 di 10-15 punti sembra funzionare meglio e c'e' un riconoscimento anche delle ultime zone. E' possibile che la quantizzazione a 3.3v abbia un errore statico cosi elevato?

Ne avevo il dubbio, ma ora è una certezza: leva quell'inutile resistore da 47k che ti altera tutte le misure.

Inoltre non capisco perché non adoperi anche per l'ultimo resistore il valore 2.2k.

Su un post di questo forum dal quale ho imparato a gestire gli ingressi analogici era scritto che bisogna inserire una resistenza di 47k tra il pin analogico e massa per prevenire fluttuazioni dell'analogico nel momento in cui non vi e' collegato nulla, ovvero quando c'e' una commutazione tra un livello e un'altro. Per le resistenze avevo usato tutte da 2.2k ma mi portavano l'ultimo livelo a 300mv e non funzionando il progetto ho pensato di raddoppiarlo per ottenere 700mv sull'ultima posizione.