Ralph Doncaster writes:
Since the release of V-USB, dozens of projects have been made that allow an AVR to communicate over USB. USB data signals are supposed to be in the range of 2.8 to 3.6V, so there are two recommended ways to have an AVR output the correct voltage. One is to supply the AVR with 3.3V power, and the other is to use 5V power but clip the USB data signal using zener diodes. Most implementations of V-USB, like USBasp, use the zener diodes. I’ll explain why using a 3.3V supply should be the preferred method.
USB interfacing for AVR microcontrollers – [Link]