Go Down

Topic: Arduino UNO @ 20MHz (Read 6942 times) previous topic - next topic

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)

In the makefile i've put the following

Code: [Select]
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




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.

retrolefty


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

i_luv_arduino

Oh. If you figure it out tell me how you did it, maybe Ill do it too :smiley-mr-green:

retrolefty

Quote
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


gvi70000

#5
Dec 18, 2012, 12:00 am Last Edit: Dec 18, 2012, 12:12 am by gvi70000 Reason: 1
oh..i forgot to post the board entry

here it is

Code: [Select]
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?

Coding Badly


http://arduino.cc/forum/index.php?topic=70475.0

gvi70000

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?

Coding Badly


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

gvi70000

#9
Dec 18, 2012, 08:43 am Last Edit: Dec 18, 2012, 08:45 am by gvi70000 Reason: 1
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?

Coding Badly


Four things...

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

[font=Courier New]atmega328_20MHz_isp: HFUSE = D6[/font]

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

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

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

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

Krupski


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.
Gentlemen may prefer Blondes, but Real Men prefer Redheads!

Krupski



Four things...

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

[font=Courier New]atmega328_20MHz_isp: HFUSE = D6[/font]

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

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

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

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



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.
Gentlemen may prefer Blondes, but Real Men prefer Redheads!

gvi70000

#13
Dec 18, 2012, 11:39 am Last Edit: Dec 18, 2012, 11:39 pm by gvi70000 Reason: 1
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 ?

gvi70000

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.

Code: [Select]
##############################################################

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?

Go Up