Soy consciente de los fusibles, pero son bastante permanentes
Puede usar el fusible CLKDIV8, solo controla el valor del divisor de CPU precargado, por lo que no lo considero un cambio permanente.
El fusible establece el valor cargado predeterminado en CLKPR (Registro de preescala del reloj) en cualquiera de
Luego, en su código, simplemente puede configurar el divisor en clk / 1 para restaurar la velocidad de la CPU a 16MHz
No estoy seguro, pero a menos que el cargador de arranque sea adaptable, este cambio puede afectar la velocidad de UART y crear problemas con el gestor de arranque Arduino, esto debe probarse.
Hice una prueba con mi Arduino pro mini (m328p). Después de habilitar el fusible CLKDIV8 usando un programador externo, el cargador de arranque Arduino deja de responder y no veo ninguna manera de anular la velocidad UART que el IDE de Arduiono intenta usar.
Solución actualizada
Encontré otra solución que no necesita cambiar el cargador de arranque, simplemente creas un nuevo perfil para la placa que tiene el fusible CLDIV8 habilitado.
Debe modificar el archivo boards.txt (por ejemplo, arduino-1.5.5 \ hardware \ arduino \ avr \ boards.txt), la velocidad en baudios para cada placa se almacena allí.
Localice la sección que hace referencia a su placa, por ejemplo, en mi caso
## Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328
## -------------------------------------------------
pro.menu.cpu.16MHzatmega328=ATmega328 (5V, 16 MHz)
pro.menu.cpu.16MHzatmega328.upload.maximum_size=30720
pro.menu.cpu.16MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.16MHzatmega328.upload.speed=57600
pro.menu.cpu.16MHzatmega328.bootloader.low_fuses=0xFF
pro.menu.cpu.16MHzatmega328.bootloader.high_fuses=0xDA
pro.menu.cpu.16MHzatmega328.bootloader.extended_fuses=0x05
pro.menu.cpu.16MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex
pro.menu.cpu.16MHzatmega328.build.mcu=atmega328p
pro.menu.cpu.16MHzatmega328.build.f_cpu=16000000L
Ahora copie y pegue esa sección para crear una entrada duplicada que vamos a modificar. En esa entrada, tendrá que cambiar el nombre para que no entre en conflicto con el existente (cualquier nuevo nombre será suficiente) y establecer la velocidad en baudios en 1/8 de la que se usó originalmente.
Estoy mostrando los cambios en negrita
Laentradaanteriorconlanuevasiguienteseveasíenmicaso:
##ArduinoProorProMini(5V,16MHz)w/ATmega328##-------------------------------------------------pro.menu.cpu.16MHzatmega328=ATmega328(5V,16MHz)pro.menu.cpu.16MHzatmega328.upload.maximum_size=30720pro.menu.cpu.16MHzatmega328.upload.maximum_data_size=2048pro.menu.cpu.16MHzatmega328.upload.speed=57600pro.menu.cpu.16MHzatmega328.bootloader.low_fuses=0xFFpro.menu.cpu.16MHzatmega328.bootloader.high_fuses=0xDApro.menu.cpu.16MHzatmega328.bootloader.extended_fuses=0x05pro.menu.cpu.16MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hexpro.menu.cpu.16MHzatmega328.build.mcu=atmega328ppro.menu.cpu.16MHzatmega328.build.f_cpu=16000000L##ArduinoProorProMini(5V,16MHz)w/ATmega328CLKDIV8##-------------------------------------------------pro.menu.cpu.16MHzatmega328CLKDIV8=ATmega328(5V,16MHz)CLKDIV8pro.menu.cpu.16MHzatmega328CLKDIV8.upload.maximum_size=30720pro.menu.cpu.16MHzatmega328CLKDIV8.upload.maximum_data_size=2048pro.menu.cpu.16MHzatmega328CLKDIV8.upload.speed=7200pro.menu.cpu.16MHzatmega328CLKDIV8.bootloader.low_fuses=0xFFpro.menu.cpu.16MHzatmega328CLKDIV8.bootloader.high_fuses=0xDApro.menu.cpu.16MHzatmega328CLKDIV8.bootloader.extended_fuses=0x05pro.menu.cpu.16MHzatmega328CLKDIV8.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hexpro.menu.cpu.16MHzatmega328CLKDIV8.build.mcu=atmega328ppro.menu.cpu.16MHzatmega328CLKDIV8.build.f_cpu=16000000L
Despuésdeguardarelarchivo,veráunanuevaentradaenelIDEdeArduino.Alusarlo,podráprogramarlaplacamodificada.