Arduino UNO @ 20MHz

Hello,

I'm trying to make my UNO run at 20MHz. I've made some research and i made a modified optiboot (see attachament)

In the makefile i've put the following

atmega328_20MHz: TARGET = atmega328__20MHz
atmega328_20MHz: MCU_TARGET = atmega328p
atmega328_20MHz: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200'
atmega328_20MHz: AVR_FREQ = 20000000L
atmega328_20MHz: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
atmega328_20MHz: $(PROGRAM)_atmega328__20MHz.hex
atmega328_20MHz: $(PROGRAM)_atmega328__20MHz.lst

atmega328_20MHz_isp: atmega328_20MHz
atmega328_20MHz_isp: TARGET = atmega328__20MHz
atmega328_20MHz_isp: MCU_TARGET = atmega328p
# 512 byte boot, SPIEN
atmega328_20MHz_isp: HFUSE = DE
# Low power xtal (16MHz) 16KCK/14CK+65ms
atmega328_20MHz_isp: LFUSE = FF
# 2.7V brownout
atmega328_20MHz_isp: EFUSE = 05
atmega328_20MHz_isp: isp

and i generate the optiboot_atmega328__20MHz.hex file

Till now i didn't have the chance to test it and i will ask your opinion on the bootloader. Will it work?

Another problem is the timing functions. so far i've found out that:

  1. delayMicroseconds - wiring.c - works at 20MHz
  2. Softwareserial - implemented in library and work at 20MHz

But i can't figure it out if millis(), micros() and delay() will work without any modifications.

I use arduino 1.0.2

optiboot.zip (45.4 KB)

Hi why would you want to put the arduino at 20mhz, just wondering. I have no clue really what your talking about any way.

i_luv_arduino:
Hi why would you want to put the arduino at 20mhz, just wondering. I have no clue really what your talking about any way.

Running the chip at 20Mhz would allow the code to run 25% faster then it runs at 16Mhz.

Lefty

Oh. If you figure it out tell me how you did it, maybe Ill do it too :grin:

But i can't figure it out if millis(), micros() and delay() will work without any modifications.

As long you create a new 'board' entry in the arduino boards.txt file showing the 20Mhz Fclock value the time based functions should work fine as they use the Fclock value defined in that board selection to setup the proper timing value for timer0. Same with the hardware serial baud rate calculations used in serial.begin function.

Lefty

oh..i forgot to post the board entry

here it is

gvi.name=GVI High Speed (5V, 20 MHz)
gvi.upload.protocol=arduino
gvi.upload.maximum_size=32256
gvi.upload.speed=115200
gvi.bootloader.low_fuses=0xff
gvi.bootloader.high_fuses=0xde
gvi.bootloader.extended_fuses=0x05
gvi.bootloader.path=optiboot
gvi.bootloader.file=optiboot_atmega328__20MHz.hex
gvi.bootloader.unlock_bits=0x3F
gvi.bootloader.lock_bits=0x0F
gvi.build.mcu=atmega328p
gvi.build.f_cpu=20000000L
gvi.build.core=arduino
gvi.build.variant=standard

in my code i use a lot micros and millis, so my main interest is on these two functions. I also communicate with a touch shield slide (i intend to put this one on 20MHz for faster GUI) so I'm glad that serial communication is fixed for 20MHz

basically all i need is to inset a new board definition? No need for a new bootloader?

OK, millis solved to. Just micros and delay left in the dark.

But now a little bit confused, is it pr not necessary to make changes in IDE for 20MHz?

The IDE itself does not need to be changed. The core and boards.txt do need to be changed.

thanks for reply. friday i will get the cristals so i will be abel

to test it.
what do
you think about botloader, will it work?

Four things...

  1. I would add Preserve EEPROM memory through the Chip Erase cycle; [EESAVE=0] to the fuses...

atmega328_20MHz_isp: HFUSE = D6

  1. You probably should bump the brown-out detector to 4.3V.

  2. As long as I was rebuilding the bootloader, I would use a higher baud rate...

http://zygomorphic.com/arduino-tiny/?page_id=249

  1. Eyeballing, I can't find any problems with the makefile.

gvi70000:
Hello,

I'm trying to make my UNO run at 20MHz. I've made some research and i made a modified optiboot (see attachament)

I used a clone Duemilanove bare board and put in a 25.0 MHz crystal. It works just fine.

I did have to add an entry in my "boards.txt" file and define "build.f_cpu=25000000UL" so that delays, tone and such were correct.

I didn't change Optiboot at all and it worked fine. To do it right, I think a special Optiboot with F_CPU set to 25 MHz (or 20 in your case) would be better, but it's probably not necessary since my board works just fine with the "stock" 16 MHz bootloader.

One thing I do, however, is set the low fuse from 0xFF to 0xF7 (changes "low power crystal" to "full swing crystal"). I prefer a nice solid oscillator, and the extra 1 milliamp it draws means nothing.

[quote author=Coding Badly link=topic=137902.msg1036581#msg1036581 date=1355820707]

Four things...

  1. I would add Preserve EEPROM memory through the Chip Erase cycle; [EESAVE=0] to the fuses...

atmega328_20MHz_isp: HFUSE = D6

2. You probably should bump the brown-out detector to 4.3V[/b][/color]
3. As long as I was rebuilding the bootloader, I would use a higher baud rate...
[u]http://zygomorphic.com/arduino-tiny/?page_id=249[/u]
4. Eyeballing, I can't find any problems with the makefile.
[/quote]
I agree with all of your suggestions except for the B.O.D. setting. I once tried the 4.3V setting and the board would not reliably power up (the USB supply was a touch below 5.0v). Setting the BOD to 2.7 worked 100% stable.
I especially had problems at 4.3V when trying to use my AVRISPMKII. The ISP doesn't normally supply VCC on the ISP port, so I hacked mine with a 1N4001 to send USB power to the ISP port. Of course, 5.0 - 0.7 of the diode = 4.3v! The board won't program with BOD set to 4.3.

interesting facts. i just can't wait to test them. maybe i will also try 24mhz for the 328 chip
can 2650 be overclocked to 20mhz, the data sheet says 16mhz max ?

Hello

I have great news, I've manage to test Duemilanove (moddet to a Uno) with the attached bootloaders at 20MHz and also at 24MHz
and is working FINE.
the results are presented below and i also attache the bootloaders, changes to boars.txt and the test sketch.

##############################################################

gvi24.name=GVI High Speed (5V-24MHz-500k Baud)
gvi24.upload.protocol=arduino
gvi24.upload.maximum_size=32256
gvi24.upload.speed=500000
gvi24.bootloader.low_fuses=0xf7
gvi24.bootloader.high_fuses=0xd6
gvi24.bootloader.extended_fuses=0x05
gvi24.bootloader.path=optiboot
gvi24.bootloader.file=optiboot_atmega328__24MHz.hex
gvi24.bootloader.unlock_bits=0x3F
gvi24.bootloader.lock_bits=0x0F
gvi24.build.mcu=atmega328p
gvi24.build.f_cpu=24000000L
gvi24.build.core=arduino
gvi24.build.variant=standard

##############################################################

gvi20.name=GVI High Speed (5V-20MHz-250k Baud)
gvi20.upload.protocol=arduino
gvi20.upload.maximum_size=32256
gvi20.upload.speed=250000
gvi20.bootloader.low_fuses=0xf7
gvi20.bootloader.high_fuses=0xd6
gvi20.bootloader.extended_fuses=0x05
gvi20.bootloader.path=optiboot
gvi20.bootloader.file=optiboot_atmega328__20MHz.hex
gvi20.bootloader.unlock_bits=0x3F
gvi20.bootloader.lock_bits=0x0F
gvi20.build.mcu=atmega328p
gvi20.build.f_cpu=20000000L
gvi20.build.core=arduino
gvi20.build.variant=standard

##############################################################

Now one more thing, do you think is possible to use the mega2650 at 20Mhz? any one try it?

optiboot.zip (52.5 KB)

ArduinoSpeedTest.zip (7.9 KB)

Thank you! This will come in very useful.

I'm interfacing to a 128x64 GLCD and I could use more speed to display multiple spectrum bar graphs faster.

If you want, you will find that most of them will run at 32Mhz @ 5v.

Pretty amazing.

Hmm. Time to revisit my VGA output sketch. If I can get it to run that fast I could get somewhat higher resolution.

Does it get hot?

Well that idea will have to wait. Don't have any 24 MHz crystals. Nor does my function generator output above 20 MHz.

Oh wait, found 5 x 24 MHz crystals on eBay for $1.41 + free postage. Kind of unbelievable but whatever. Worst I will do is lose $1.41.

Hi Nick,

No it doesn't get hot at all. I test it now for 4 hours in a row and i found out that serial, adc conversion and eeprom read/write works well.
No trouble so far. I've change one other board and put it to the test.

I will see in the morning if it goes well.