Your latest purchase

100 x 20 MHz crystals ... for $3 from eBay.

Now I'm going to try running at that speed. Although to be honest, they sound unbelievably cheap. :slight_smile:

1 Like

I look forward to articles on timing at 20 MHz. :smiley:

That is dirt cheap. Tayda has them for .10 each which I thought was awful cheap.

Should be a pretty simple hack in arduino, recompile bootloader fro 20Mhz and make new modified entry into core's boards.txt file. Anything else I forgot?

Lefty

Just for fun I programmed via the ICSP interface with the ASCII table sketch, set to output at 9600 baud.

At 20 MHz it output (seemingly correctly) at 12000 baud which sounds right (9600 * 20 / 16 = 1200).

Then I put in one of the 24 MHz crystals that I also ordered (because dhenry claimed you could clock it at 24 MHz) and it output at 14400 baud (9600 * 24 / 16 = 14400). So on the face of it, you can run at higher speeds. Now I can't say for sure that it is working perfectly, but after running for 10 minutes or so, the ASCII table is still coming out.

Trap for young players: I initially saw no output, which I spent 15 minutes mucking around trying to fix, until I realized the sketch only outputs the table once. At 24 MHz that doesn't take long!

He still seems to have them for $3:

http://www.ebay.com.au/itm/100pcs-20-000MHZ-20-MHZ-20M-HZ-DIP-Crystal-Oscillator-HC-49S-New-/190767216545?pt=AU_B_I_Electrical_Test_Equipment&hash=item2c6a9cb7a1

Now I can't say they are all working. But one I picked at random did.

retrolefty:
Anything else I forgot?

millis and its ilk will be off.

This... Arduino Forum ...cures millis (for 20 MHz).

I can probably rustle up a fix for micros (which fixes delay) if you need it. For delayMicroseconds I suggest using _delay_us from AVR Libc.

I vaguely recall from the folks at avrfreaks that EEPROM writing is the first to "go" as the clock speed increases.

It would be interesting to experiment with things where speed is the essence, like writing VGA output.

Running at 24 MHz is a 50% speed boost, which isn't too shabby.

you should look at some of the xmega's, arduino support is out there, no idea how perfect it is with libraries and whatnot, but the core is there to write your own. Anyway those things come in 8 and 16 bit flavors clocked up to 32Mhz.

I have a small strip of them and some 25.175Mhz crystals, the dot clock speed of 640x480 VGA, which easily divides for sync signals (not specificly for generating 640x480 graphics)

I don't particularly care about recompiling the core because only a small number of things will be out. For example, baud rates, but you can compensate for that. And you could compensate for the readings returned by millis().

So you just popped out the 16Mhz crystal and replaced it with the 24Mhz?

This was on one of my breadboard models, but yes, I shoved the crystal in, and reprogrammed the fuse to not use the internal oscillator, as shown:

The ICSP programming cable is visible.

So I can use any existing 16Mhz bootloader (example: from Adafruit) with a 20/24 Mhz crystal, right? -- millis() timing may be off, but all the others should work fine as is.

The thing about the core is, the processor doesn't really know what speed it is running at. So for example if you use the 8 MHz internal oscillator everything will just be half the speed. So a 9600 baud rate for the serial port will really be 4800 baud. And delay (1000) will really delay 2000 mS.

Now for the bootloader, the problem will be it expects a certain baud rate. However if you change boards.txt to reflect the difference, it should work. So for example, for the Uno:

uno.name=Arduino Uno
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino
uno.build.variant=standard

Since the upload speed is normally 115200 you would need to increase that to 115200 * 24 / 16, which is 172800, assuming the USB chip can handle that speed.

However in my case I programmed with ICSP (not the bootloader) so that didn't apply. So, disclaimer: I didn't test with a bootloader.

Could you bootload at one speed and run at different?

Absolutely. All the bootloader does is put the program into program memory. You could then turn the power off, replace the crystal, and power it up again.

One of my offspring got one of these for Christmas. Have any of you seen them? Made in the UK and pretty nifty.

http://www.mikromart.com

Since when is Radio Shack reasonably priced? Went to the MALL store and got a Seeed Studio Proto Shield for $9.99!

Okay- Credit where credit is due.

Seeedstudio-- the protoshield kit is awesome. This is a great deal at ten bucks.
I expected the board headers and such, and not much else. However, they also toss in an extremely useful collection of common components: two red and two green LEDs, a bicolor LED, resistors for the LEDs, a 10k pot, two 40-strips of male pin headers, a 40-strip of female header, a 40-strip of long male headers, spare spacers, four tactile switches and two slide switches, and a USB socket. That's a heck of a lot for ten bucks!!!

I will be grabbing these again!

I finally bought an ISP for burning bootloaders, lol. Its apparently based on the USB ASP. Cost $7 on ebay.

I also bought a used server rack with UPS, 6 servers, a DAS, and a bunch of other junk. I'm probably going to use it to test an arduino based datacenter monitoring system.