Thursday, May 9, 2013

Burning an arduino bootloader (optiboot)

I got a few samples from Maxim (thank you Maxim) but they came "clean" without the optiboot or anything like that, so I had to burn it down. I used the minimal circuit which can be found on the picture on the right, and here is the procedure:
To burn the bootloader, follow these steps:
  1. Download this hardware configuration archive: Breadboard.zip
  2. Download the latest Optiboot library. 
  3. Create a "hardware" sub-folder in your Arduino sketchbook folder (whose location you can find in the Arduino preferences dialog). If you've previously installed support for additional hardware configuration, you may already have a "hardware" folder in your sketchbook.
  4. Move the "breadboard" folder from the zip archive to the "hardware" sub-folder of your Arduino sketchbook. If you don't have a "breadboard" folder there, create one, an put the file in it.
  5. Restart the Arduino software.
  6. You should see "ATmega328 on a breadboard (8 MHz internal clock)" in the Tools > Board menu.
  7. Upload the ArduinoISP sketch onto your Arduino board. (You'll need to select the board and serial port from the Tools menu that correspond to your board.)You'll find this under "examples".
  8. Wire up the Arduino board and micro-controller as shown in the diagram to the right.
  9. Select "ATmega328 on a breadboard (8 MHz internal clock)" from the Tools > Board menu. 
  10. Under  the optiboot directory, execute the command avrdude -P /dev/ttyACM0 -b 19200 -c avrisp -p m328p -u -U flash:w:"optiboot_atmega328.hex" :i -F
  11. After finished, use: avrdude -p atmega328P -c avrisp -P /dev/ttyACM0 -b 19200 -u -U efuse:w:0x05:m -U hfuse:w:0xDA:m -U lfuse:w:0xFF:m -U lock:w:0x0F:m -F
    otherwise the boot will be recorded/burned, but the chip will not accept uploads.


For ATmega328-PU:
If you try to bootload an ATmega328-PU, you’ll get a message something along the lines of:
avrdude: Device signature = 0x1e9514
avrdude: Expected signature for ATMEGA328P is 1E 95 0F
Double check chip, or use -F to override this check.

You could also get a more colourful version:
avrdude: Yikes! Invalid device signature.

The way to work around this is to “trick” the IDE into believing your 328-PU is in fact a 328P-PU. Disclaimer: I have tested this myself and it works – no guarantees however that you won’t have unforeseen consequences.

Workaround:
In your Arduino folder, find the subfolder: ..\hardware\tools\avr\etc
Make a backup copy of the file: avrdude.conf
  1. Open the file avrdude.conf in a text editor
  2. Search for: 0x1e 0x95 0x0F (this is the ATmega328P signature)
  3. Replace it with: 0x1e 0x95 0x14 (this is the ATmega328 signature)
  4. Save the file 
  5. Proceed as described previously (and use lock:w:0x0F:m)
  6. Restore the avrdude.conf to it's original settings
Good Luck!! Good burnings!

Wednesday, May 8, 2013

RTC shield, I²C, Arduino compatible, DIY

Hi! I'm back, again with arduino and a new shield, once more a DIY shield. 
So, let's start! The picture on the right is the circuit used to build the shield (I want to thank my friend Nuno Portela, who grabed this, and converted to eagle schematic, printing and driling the circuit afterwards).
The schematic on the left is the proposed circuit, which was then printed. All the components are easy to find, so the final result is almost inexpensive.
I've attached also a picture of the final result, 2 boards with cr2032 button cells. 
Concerning the code, I couldn't find where I got mine, so I'm posting it here.
Enjoy!