We have implemented a custom PCB with an ATmega32U4 which is intended to communicate with a battery gauge over UART. We have, successfully, prototyped the circuit and the code using an Sparkfun Pro Micro Arduino which also uses the ATmega32U4. The design of our board is based on the Sparkfun design. However, the ATmega32U4 on the custom PCB is flashed with the same code, it is not able to communicate to the battery gauge. The USB communication between ATmega32U4 and computer appear to be fine. We used the ATMEL ICE programmer to flash the board. Also the fuses were updated to match the fuse configurations of the Sparkfun Pro Micro which are low_fuses=0xFF and high_fuses=0xD8.
Is there anything that needs to be done to a brand new ATmega chip to make act like an Arduino besides flashing and setting fuses? One point of confusion I have is we are running the ATmega32U4 at 3.3V but still using a 16 MHz crystal. According to the datasheet, that is out of spec. Would this have any impact on the issue that we are experiencing? Would the USB communication work with the wrong crystal? Are there any issues with the schematic that we have implemented?
The schematic is attached.
Thanks, in advance, for your help!