What would be solutions to modify the clock to 14.7456Mhz ?
Could it be done in the soft ?
Do I have to do add something between the device and the Serial ports ?
Do you have any other idea ?
7.8 percent is a lot. It is marked red at wormfood, that's not good.
If you replace the crystal, then the F_CPU can be changed, and the sketch and libraries will be compiled with the new clockspeed. That should work. Although I have seen code that checks for 16MHz and 8MHz and nothing else.
The bootloader is compiled for a certain frequency. Uploading a sketch also uses a certain baudrate. You could write a custom bootloader for the new clock speed, or create a new board in boards.txt (but I don't know if a non-standard baudrate is accepted).
It is also possible to upload a sketch using a programmer (the bootloader will be removed).
The Arduino Leonardo has a spare hardware serial port and USB communication to the computer. The baudrate for the USB communication to the computer is not really used. But the board is reset with a baudrate of 1200. Perhaps it is easier for the Leonardo to run at a different speed.
What about an extra serial chip with its own special crystal ?
"Although I have seen code that checks for 16MHz and 8MHz and nothing else."
The Atmega2560 is only rated for up to 16 MHz, and 8 MHs is the speed of the internal clock. Not really much need to support other frequencies.
According to Atmega2560
Table 22-12. Examples of UBRRn Settings for Commonly Used Oscillator Frequencies
with
fosc = 16.0000MHz
and a baud rate of
230.4K,
setting U2Xn = 0 results in a UBRR of 3 and error of 8.5%
while setting U2Xn = 1 yields UBRR of 8 and error of -3.5%.
You'd have to check the Serial.h or maybe Serial.cpp (or something related to Serial) to find out what settings are really used.
If you want to pull the resonator off and install a different one, then other software changes would also be needed as noted earlier.