You are very close. think of it this way....
Timer/Counter0 has 2 compare registers, OCR0A, and OCR0B.
OCR0A corresponds to PORTB0 or pin 5 on the chip
OCR0B corresponds to PORTB1 or pin 6.
So, if we decide we want some PWM action goin on, we gotta use one of those pins...
From the table we can see that Phase-correct PWM has 2 modes.
Mode 1 or mode 5 for phase-correct PWM.
Mode 3 or mode 7 for Fast PWM.
to set mode 1, we:
TCCR0A |= (1<<WGM00));
to use mode 5, we add:
TCCR0B |= (1<<WGM02);
you have your prescaling off so you would:
TCCR0B |=(1<<CS00);
Now then... We see that the COM0A0, and COM0A1 bits in TCCR0A set the behavior of the OCR0A(the COM0B0, COM0B1 control OCR0B)
register(our PWM pin).
look at the table, for this application we would want OCR0A cleared at the top of the count and set on the downcount...
...as we change OCR0A this varies the duty-cycleof our PWM.
then we:
TCCR0A |= (1<<COM0A1);
put it all together you have:
TCCR0A |= (1<<COM0A1) | (1<<WGM00); //0x81; // PWM Phase correct mode 1
TCCR0B |= (1<<CS00);//0x01; // --no prescale
The rest of your code is pretty much OK.
try this:
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 9600000UL
int main(void)
{
TCCR0A |= (1<<COM0A1) | (1<<WGM00); // PWM Phase correct mode 1
TCCR0B |= (1<<CS00);// --no prescale
TCNT0 = 0x00; // Timer/Counter Register
OCR0A = 0x12; // Output Compare Register A
DDRB |= (1<<PORTB0); // Set PB0 (Pin 5) as output
uint8_t brightness = 0x00;
while( 1 )
{
// Increase brightness from 0 to 255
for ( brightness = 0; brightness < 255; brightness++ )
{
OCR0A = brightness; // Set PWM duty based on brightness value
_delay_ms( 10 ); // Delay 10 ms
}
// Decrease brightness from 255 to 0
for ( brightness = 255; brightness > 0; brightness-- )
{
OCR0A = brightness; // Set PWM duty based on brightness value
_delay_ms( 10 ); // Delay 10 ms
}
}
return 1;
}
Sorry, I sorta misguided you before. I neglected to mention, that if you use mode 5 PWM, you have to use OC0B as the output since
OC0A becomes the TOP to the Counter. My bad, as usual, I overcomplicate things.

I did verify this code in hardware, so it works!!! now just get an ADC channel to set the compare value, and you have a spiffy little PWM
LFO to use in stuff!!!
-Morgan