I'm very new to arduino (as you'll probably soon realize) and am having a difficult time with oscillator selection and programming via the serial port.
My setup is this: I made my own board with an ATmega328p and an FTDI chip on-board, routed to a USB port. I use the Atmel AVR / Studio 6 to initially load a bootloader program onto the board (via the ICSP) and then desire to just update via USB / UART for subsequent programming from the Arduino development environment.
This all works fine when running with the external oscillator, but then stops working when I switch to using the internal oscillator. I clearly don't understand very well how clocks, timing, ,etc., but from trying to dig into this, I understand that the UART inside the 328 is probably being affected by the oscillator change.
When I have the 16MHz resonator on the board and set the fuse to EXTXOSC_8MHZ_XX_16KCK_14CK_65MS, everything works fine. My delay() commands work as expected, e.g. delay(1000) gives me exactly 1 second of delay. (Here's the first example of my lack of understanding here... it would seem like a 16MHz resonator should make the processor run 2x too fast, but it does not.) When I plug in my USB cable, the device shows up as a COM port running 9600 baud. Again, this all works fine.
However, when I change the oscillator fuse to INTRCOSC_8MHZ_6CK_14CK_65MS, the same timing program runs at 50% (actually 49.6%) of expected speed, meaning that delay(1000) now takes just over 2 seconds to complete. And I can no longer program the device with USB/UART.
Since the processor is running at 50% speed, I tried setting the baud rate (via Windows Device Manager) to 4800, thinking that might solve the problem, but it did not. I would not think that the 0.85% error in the oscillator frequency (ignoring the 1/2 speed operation) would be enough to mess up the serial port, assuming the change to 4800 baud was the right thing to do.