Hum... great link if your application do only that. Simple and easy to do indeed.

In case you want to do something else than fading in/out, you can use internal timer to produce as many outputs as you want.

In the main program you set the Duty Cycle and then in the Interrupts you set the outputs regarding the duty you set. By this way you don't need any external parts too.