Ihr sagt ich muss den PORTB ein und aus schalten.
Das mache ich doch in meinem Code.
Nö, das machst Du eben nicht. Du schaltest nur den internen Pullup ein und aus.

Ich hab den Code mal umgeschrieben und im Simulator getestet:
Code:
#include <avr/io.h>
#define F_CPU 1000000UL
#include <util/delay.h>




int main (void)
{
    DDRB |= (1<<PB1);
    DDRB = ~(1<<PB0);
    PORTB |=  (1<<PB0);
    
    
    OCR0A = 99;
    OCR0B = 37;
    
    TCCR0A = (1<< COM0B1) + (1<< WGM01) + (1<< WGM00);
    TCCR0B = (1<<WGM02) + (1<< CS01);
    
    
    while(1)
    
    {
        if (PINB & (1<<PINB0))
        {
            DDRB |= (1<<PB1);
        }
        
        else
        {
            DDRB &= ~(1<<PB1);
        }
        
    }
return (0);
}
Im Simulator läuft der Code nicht 100% fehlerfrei, das könnte aber auch ein BUG des Simulators sein.
Die Variablen OCR0A und OCR0B sind zu groß, da es sich hier nur um 8 Bit Register handelt = max. 255.
Bei Tastendruck ( PINB.0 = 0 ) wird die PWM abgeschaltet.
Bei offener Taste läuft die PWM.
Das toggeln kannst Du so machen wie Ich Dir in der PN geschrieben habe.
Probier mal aus ob es denn soweit läuft.