getting pwm from attiny85

as the topic says, I've written this little program for my school project.
I'm as the code says, arduino should output 3 signals coming out from my A3 pwm output: 0, 123, 255
unfortunately, the code only works then the value is over 150, and the output is always 4.98V

it seems as pwm is outputting as a digital instead of analog
please help

#include <TinyLiquidCrystal_I2C.h>    //I2C adattato per attiny85, pilota il display
#include <TinyWireM.h>           // Wire adattato per attiny85

int pin_temp = A2; //Pin di collegamento del piedino Vout del sensore di temperatura
float temp = 0;     //Variabile in cui verrà memorizzata la temperatura rilevata
int tip120PIN = A3;    //Variabile assegnata al transistor
LiquidCrystal_I2C lcd(0x3F,16,2);    //Inizializzazione standard piattaforma I2C
int pinSensorPIR = 1;      //Assegnando le variabili
int pinLed = 5;    //Led lampeggiante per illuminare il garage
int valorSensorPIR = 0;     //Imposto un valore basso al sensore PIR

void setup() 

{

  lcd.init();    //Impostazione del display LCD
  lcd.backlight();
  lcd.setCursor(0, 0);     //Sposto il cursore sulla prima riga (riga 0) e sulla prima colonna
  lcd.print("Temperatura:");    //Stampo il messaggio 'Temperatura:' sulla prima riga

  analogReference(INTERNAL);
 
  //Definisco i pin come input e output

  pinMode(pinSensorPIR,INPUT);
  pinMode(pinLed,OUTPUT);
  pinMode(pin_temp,INPUT);
  pinMode(tip120PIN,OUTPUT);
  delay(6000);
}
 
void loop() {  
//Calcolo temperatura
temp = 0;
for (int i = 0; i < 5; i++) { //Esegue l'istruzione successiva 5 volte
temp += (analogRead(pin_temp) / 9.31); //Calcola la temperatura e la somma alla variabile 'temp'
}
temp /= 5; //Calcola la media matematica dei valori di temperatura

if (temp <30) {
 analogWrite(tip120PIN,0);
 lcd.setCursor(1, 1);    
 lcd.print("Duty cycle  0% ");
}  else if ((temp >=29) && (temp <35))
{  analogWrite(tip120PIN,123);
  lcd.setCursor(1, 1);    
 lcd.print("Duty cycle 50% ");
} else {
  analogWrite(tip120PIN,250);
  lcd.setCursor(1, 1);    
 lcd.print("Duty cycle 100%");
}
  
/*Visualizzo la temperatura sul display LCD =============================================*/
lcd.setCursor(12, 0); //Sposto il cursore sulla prima colonna e sulla seconda riga
lcd.print(temp); //Stampo sul display LCD la temperatura
lcd.print(" C"); //Stampo uno spazio e il carattere 'C' sul display
/*===========================================*/
delay(1000); //Ritardo di un secondo (può essere modificato)
  //Leggo il valore del sensore PIR, che può assumere 1 o 2 valori
  //1 quando rileva movimento e 0 quando non c'è movimento.
  valorSensorPIR = digitalRead(pinSensorPIR);
   

   
  //Verificando l'occorrenza di movimento
  if (valorSensorPIR == 1) {
    accendi();
  } else {
    spegni();
  }    
}
 
void accendi() {
  digitalWrite(pinLed, HIGH);  //accendo il led
   
   
  delay(6000); //Tempo in cui il led rimane acceso
   
  spegni();
  delay(2000);
}
 
void spegni() {
  digitalWrite(pinLed, LOW); //Spengo il led
   
}

I think I've solved it... I had attached the transistor to a non pwm port

That'd do it.

The ATTiny85 is capable of three PWM channels, on pins 0 (PB0), 1 (PB1) and 4 (PB4) - however, some ATTiny cores do not know how to configure timer1 (it's a bizzaro timer), and only offer PWM on pins 0 and 1. My core (link in sig) does support the third PWM channel, and takes full advantage of timer1 for tone().