Skill level:     Advanced
 

Wireless XBee/AVR Bootloading

by Nate  |  
January 28, 2009  |  

Wireless Bootloading for ATmega168/ATmega328


Here you will read the story of my attempt to create a serial bootloader that is robust enough to be used over both wired and wireless connections to program HUGE programs (>30k code words). While not drop-in compatible with the Arduino IDE (please help out!), this wireless bootloader will work with Arduino Sketches (with an extra piece of Windows software).



How to setup and use this thing:
Things you need:
The Files:
The following tutorial was written for the ATmega168 but has been updated to work with the ATmega328 as well. This is perfect for the Arduino Mini Pros.


I need your help! I am a very bad Visual Basic scripter, not a Windows programmer. Screamer (the software that runs on the computer) currently only works under Windows. But the command structure should be portable to anything. I need help from someone to write a python script or other program that allows a command line interface to this bootloading system. Call it ScreamerCommand or some such. That way we can run Screamer from a command line, allowing implementation from Arduino IDE or from Programmer's Notepad. If you don't have VB, don't worry. The VB files listed above are readable with any test editor (search for cmdDownload_Click).

I have a printf debug style of programming. I'll program a small change, upload it to my target, then debug the program flow using printf statements. This requires two things : a good serial link, and a quick and easy way to upload new firmware.

When I decided to build a vehicle for the Autonomous Vehicle Competition, I realized it would be rather painful to be working on the rover during field testing. A laptop might get you outside, but when the rover gets more than a few feet away from you, I'm lazy and don't want to walk over to the bot just to plug in my 25' programming cable. A tethered robot is no fun. We've got these XBee units, and I keep reading about wirelessly bootloading an Arduino, so why not just use this wireless bootloader?

The problem arose when I started googling around. It seems like many people are having timeout issues with the stock stk500 serial bootloader. It simply wasn't designed to be used as a wireless bootloader. I tried. I really did! All I ever got was errors or partial loads that timed out:

avrdude.exe: stk500_getsync(): not in sync: resp=0x59
avrdude.exe: stk500_disable(): protocol error, expect=0x14, resp=0x59

In the end, I scrapped the avrdude+stk500 serial bootloader in place of my own. The resulting bootloader is lightning fast over a wired connecting (the terminal window is extremely handy!), pretty fast over a wireless connection (can't get around the XBee overhead), and able to program any size program (tested using a 14,000 code word program - around the max size of the code space including the bootloader on an ATmega168).



That's great and all, but how do I use this thing?

How to setup and use this thing:

Step 1: Configure the XBee Modules

You will need to configure the remote XBee module (connected to the AVR) and the base XBee module (connected to the computer) slightly differently. The Digi X-CTU software is a handy windows application to configure the large amount of settings on the XBee. To download, try this link or search for "x-ctu download". If you really can't find it, we have version 5.1.4.1 (25MB!) here.

Setting up the remote unit:

Plug the first XBee unit into the XBee-Explorer and attach it to the computer. You may have to install FTDI Serial drivers. Now you need to figure out what COM port it got assigned to:

http://www.sparkfun.com/tutorial/WirelessBootloader/DeviceManager-1.jpg
Device Manager

Right click on My Computer, then Properties. Click on the Hardware tab, and finally on the Device Manager button. You can also get to this by running "devmgmt.msc" from the Run command or a command line prompt. Once the device manager is open, expand 'Ports'. You will see the USB Serial Port that is the XBee Explorer. COM 109?! Wow. That is a bit high. For Screamer to work, you need to have a COM port that is 1 through 4. To force XBee Explorer from 109 to 3, right click on the USB Serial Port (COM109), and click on Properties.

http://www.sparkfun.com/tutorial/WirelessBootloader/DeviceManager-2.jpg

On the Port Settings tab, click on Advanced.

http://www.sparkfun.com/tutorial/WirelessBootloader/DeviceManager-3.jpg

Now you can change the COM port number to anything you'd like. For this example, I used COM3. COM1 is probably where your real serial port is located, so don't use that one. Note: 'Set RTS on Close' is not checked. Click on OK until you are out of all these windows. Now, every time you connect the XBee Explorer, it will use COM3.

Once complete, open the X-CTU software.

  http://www.sparkfun.com/tutorial/WirelessBootloader/XCTU-1.jpg

If you've got fresh XBee units, by default, they are set to communicate at 9600bps. Be sure to select your correct USB COM port!

  http://www.sparkfun.com/tutorial/WirelessBootloader/XCTU-2.jpg

Now click on Modem Configuration tab and click 'Read'. If you're firmware version is not up to date, I recommend choosing the latest version and upgrading both modules.

  http://www.sparkfun.com/tutorial/WirelessBootloader/XCTU-9.jpg

I chose a new PAN ID so that my XBees would not interface with any other default XBees in the area. Pick any ID that you like and can remember. You'll have to set the same PAN ID on the second module.

  http://www.sparkfun.com/tutorial/WirelessBootloader/XCTU-10.jpg

Scroll down and set the serial interface rate to 19200.

  http://www.sparkfun.com/tutorial/WirelessBootloader/XCTU-11.jpg

Scroll down and set DIO3 Configuration to '5 - DO HIGH'. This will cause the DIO3 pin to act as an output and toggle whenever the base unit sees a change in its DIO3 pin.

  http://www.sparkfun.com/tutorial/WirelessBootloader/XCTU-12.jpg

Set the I/O Output Enable to '0 - Disabled'. This setting will suppress the XBee module from outputting serial bytes every time the DIO3 pin changes.
 
http://www.sparkfun.com/tutorial/WirelessBootloader/XCTU-14.jpg

Finally, you will need to set the I/O line passing 'Input Address' to FFFF. Click on write and make sure the settings are written successfully.

Now remove this XBee unit (from now on, it's the remote unit) from XBee Explorer and set it near your XBee breakout board and sockets.

Setting up the base unit:


Attach a second XBee unit to the XBee Explorer. I hot swap (I don't unplug the Explorer from USB) because I am a bad, lazy engineer.

  http://www.sparkfun.com/tutorial/WirelessBootloader/XCTU-8.jpg

 Click Read to pull in the contents of the new module's settings.

  http://www.sparkfun.com/tutorial/WirelessBootloader/XCTU-9.jpg

Set the PAN ID to match the first unit's PAN ID.

  http://www.sparkfun.com/tutorial/WirelessBootloader/XCTU-4.jpg

Scroll down and set the Serial Interface to 19200bps.

  http://www.sparkfun.com/tutorial/WirelessBootloader/XCTU-5.jpg

Scroll to I/O settings and set DIO3 to '3 - DI'. If these images look a bit different then your X-CTU, you've probably got a different firmware version loaded onto the XBee. Probably won't make a difference so don't worry!

  http://www.sparkfun.com/tutorial/WirelessBootloader/XCTU-6.jpg

Set the DIO Change Detect to 8. This will monitor 0x08 or pin 3 (in binary: 0000.1000) for any changes. Now click write and be sure the parameters are written successfully.

Leave this XBee unit in the Explorer - this is your base unit. Now whenever you power up these XBee units, they will search each other out and automatically form a direct point-to-point serial link!

Step 2: Program Bootloader

You'll need to download and program this hex file onto an ATmega168. Connect your programmer to the AVR. If you're unsure how to attach a programmer to an AVR, we've got the tutorial for you over here. From a command line, navigate to the directory that contains Wireless_Bootloader_ATmega168.c and the Makefile and type:

make all

(This will compile the bootloader so that you have a current HEX file)

make program

(This will use attempt to use the parallel stk200 programmer over the LPT port)

  http://www.sparkfun.com/tutorial/WirelessBootloader/make-commandline-M.jpg

Be sure that everything completes without errors (as shown above). This version of the bootloader currently only works with the internal 8MHz oscillator but you can tweak the make file to your heart's content. I know programming it can be tricky, but once you have successfully loaded the bootloader onto the AVR, you'll never have to do it again!

Step 3: Solder the RTS Jumper

One of the great features of this bootloader is the remote reset trick. This is based on Limor's Arduino wireless bootload tutorial.

  http://www.sparkfun.com/tutorial/WirelessBootloader/RTSJumper-M.jpg

Solder a jumper between the RTS pin and DIO3 on the XBee Explorer.

Step 4: Wire up the Remote Unit


Now we need to attach the various lines from the remote XBee to your target ATmega168. There are 5 lines that need to be wired:
  1. Power
  2. Ground
  3. Data In (DIN)
  4. Data Out (DOUT)
  5. Reset (DIO3)
http://www.sparkfun.com/tutorial/WirelessBootloader/Remote-Wired-2-M.jpg

Here you can see the five wires soldered into an old prototype I had sitting around. You should really use a XBee Breakout Board and XBee sockets. Solder in the XBee sockets so that the XBee can live happily in the breakout board. Solder five wires from the five pins on the breakout board (DIN, DOUT, 3.3V, GND, DIO3). Remeber, XBees run at 3.3V not 5V so you will need to regulate down if your system runs at 5V.

Pin on XBee / Pin on ATMega:
  1. XBee DIN goes to ATmega TX
  2. XBee DOUT goes to ATmega RX
  3. XBee DIO3 goes to ATmega Reset (through 0.1uF cap)
The DIO3 will toggle every time the RTS pin is wiggled on the base XBee. This is used to reset the ATmega and kick off the bootloader. In order to make this work, you need to put a 0.1uF in between the DIO3 pin and the reset pin on the ATmega168. This will prevent the XBee from holding the ATmega in the constant reset state.

http://www.sparkfun.com/tutorial/WirelessBootloader/DIO3-Cap-M.jpg

The above image shows the 0.1uF cap wired inline with the Reset pin of the ATmega.

Step 5: Screamer software

  http://www.sparkfun.com/tutorial/WirelessBootloader/Screamer.jpg

Download Screamer and unzip to one directory. Run Screamer-v2.exe. If windows yells at you about missing MSCOMM32.OCX or comdlg32.ocx, these extra VB files are included in the zip.

Now power your remote unit. Make sure the XBee Explorer is hooked up and happy. From Screamer, open blink-v10.hex. This is a demo program that demonstrates blink and printf commands. Select the correct COM port in Screamer (whatever your USB port may be). Then hit download! Screamer should reset the remote unit setting off the bootloader and the unit should start downloading blink-v10.hex.

Step 6: Party

Congrats! You've made it through. If you're now bootloading wirelessly, enjoy! If you'd like to learn more about how we cobbled this thing together, keep reading.


How It Works:

I'm not entirely sure how avrdude works. It might use checksums, and it might use timeout control, but I could not make a solid download work no matter how I modified the original STK500/Arduino bootloader. And since I'd rather not dig into the avrdude source, I wrote my own wireless bootloader to work with my own Windows program (complete cheating).

  http://www.sparkfun.com/tutorial/WirelessBootloader/Breadboard-Testing-M.jpg

That's a breadboard with ATmega168, a parallel port connection to program the bootloader onto the AVR, a serial connection for testing a wired serial download, and two XBees for wireless downloading. Madness.

The SparkFun Wireless bootloader does a couple of things:
  • Transmits only binary data
  • Uses checksum
  • Uses control characters with timeout checking
  • Jumps directly into a terminal window for easy debugging and control
Binary only data:

Why transmit more than we need to? I rip out all the extraneous parts of the intel hex file on the computer side and transmit only firmware codewords.

http://www.sparkfun.com/tutorial/WirelessBootloader/HEX-File.jpg

Open any HEX file. You'll see it is visible ASCII characters.

Historically, bootloaders will transmit the line length, memory address, whether or not it is the last line of the file, ~16 bytes of firmware, and a checksum. For each line. Old bootloaders would transmit 43 bytes to convey 16 bytes of firmware! This is wasteful.

  http://www.sparkfun.com/tutorial/WirelessBootloader/Screamer-VB-M.jpg

The AVR needs 128 bytes to program a page. Screamer strips out all the extra information and transmits a total of 133 bytes to convey 128 bytes of firmware.

Checksum:

Checksums protect the wireless link from corruption. If the remote unit receives a payload where the checksum is not 0, it will reject those 128 bytes and request the payload to be sent again. The SparkFun wireless bootloader uses a standard 8-bit checksum for each payload of 133 bytes. This might be a bit on the low side (16-bit would be more protection) but I haven't experienced a false positive yet.

Control characters and timeout:

The problem with many bootloaders is they are too inflexible to deal with the latency often associated with wireless links. RF is not perfect and packets can be lost. A good wireless module will buffer bytes on either end with a protocol that attempts to assure delivery. What this means is the XBee modules might have to transmit a few bytes, a couple times before they are successfully delivered to the opposite end of the link. All the while, you are throwing tons of data at their serial pins expecting data to arrive in a timely fashion. The humble XBee units are buffering all sorts of stuff, making sure the data gets where it needs to be but the protocol overhead causes time delays between delivery of data. Any RF link will make a fast data connection stream seem irregular in throughput.

Someone want to draw me a timing diagram that shows this better?

So our bootloader doesn't expect data to arrive in a regular manner. The remote unit will happily sit and wait for data. In the current version, Wireless_Bootloader_ATmega168.c waits for enough time for 15 characters to come through before it starts calling the transmission a timeout. If the XBee units (try hard! but) fail to deliver the payload that Screamer sent out, the remote AVR will ask for the last line to be resent. It's sort of a check-in/check-out system. Even if two XBee units are in a harsh RF environment, if they have thick walls between them, or if they are very far from each other, this bootloader will do its best to get the firmware there, correctly, every time.

Jumps directly to terminal window:

http://www.sparkfun.com/tutorial/WirelessBootloader/Screamer-Terminal.jpg

This is one of the great features of this bootloader. If you've used Arduino and you've been annoyed with the serial port view window (Bad java script! Bad!), you'll be pleasantly surprised by the Screamer terminal window.

No need to worry about closing hyperterminal every time you want to re-program, Screamer automatically closes the port before starting a new download, then re-ports the port in the terminal window. Seamless debugging!

Current limitations:
  • Only works at 19200 - this is easily fixable but I've found there is no speed advantage, the XBees are the bottleneck
  • 8MHz internal osc - if you need something different, tweak the makefile for Wireless_Bootloader_ATmega168 It now works with the ATmega328 at 16MHz external!
  • Base software is in VB (only for windows) - The principles of transmitting only 133 bytes per 128 can be translated to any programming language, VB was just quick and easy to whip up the GUI
  • ATmega168/ATmega328 - This bootloader can be ported to other AVRs, even other families (LPC21xx) with a little work. Mostly it is changes in the bootloader firmware and not Screamer. Only the pagesize variable needs changing for Screamer to work with any type of microcontroller.


Cheers!
-Nathan

Back to Tutorials

 

Comments

34 comments


Log in to post comments.

by
Kersny's rank:
+1.8
|   January 28, 2009 at 1:10 PM
Comment rating:
0
Hey, I really like this tut, and I was wondering if this would work on the FunnelIO, or any other arduino board with a change to 16mhz ext. osc.? I'm also working on a project where wireless programming would be very helpful, and I am leaning towards a FIO. I also have a pretty good amount of experience in Arduino programming.
by Nate is a SparkFun employee
|   February  5, 2009 at 2:02 PM
Awesome question. Out of the box, this will work with FIO, but the *.c assumes internal 8MHz. So you will sacrifice some processor speed. You can easily modify the bootloader to work at 16MHz/19200bps.

Use Funnel IO - I like it a lot! In this tutorial I use a production-failed Ardupilot (free for me!) because I need servo connections for my autonomous vehicle.
by
Kersny's rank:
+1.8
|   January 28, 2009 at 1:14 PM
Comment rating:
0
Nevermind, I watched the video. Thanks!!
by
blalor's rank:
+1.2
|   January 28, 2009 at 4:52 PM
Comment rating:
0
This is excellent, Nathan! I was stymied by the inability to make Rob or Limor's tutorials work and eventually gave up. Hopefully someone can incorporate your work so that the existing avrdude infrastructure can be maintained.
by
blalor's rank:
+1.2
|   January 28, 2009 at 5:00 PM
Comment rating:
0
By the way, I've had discussions about this topic on a couple of forums; hopefully we can connect the interested parties.

xbee for arduino wireless programming (ladyada.net forums)
Programming Arduino wirelessly via XBee (arduino.cc forums)
by
Rocco's rank:
+1
|   January 29, 2009 at 6:23 AM
Comment rating:
0
Nathan it would be real easy to add in command line support to your existing vb application... in your form_load just check if commmand is not "". Then parse the command string to set the filename and process it. If you would like help with this let me know.
pomprocker's rank:
+5.4
|   January 29, 2009 at 10:20 AM
Comment rating:
0
I've been working on something like this for about a year now. My first pass was with a BlueSMiRF and the fast, tiny, & mega bootloader from avrfreaks.com...That got me nowhere :(

My second pass was following the tutorial on ladyada.com using a Roboduino/Freeduino and her no wait/hang bootloader, and I got it to work, but only with very small sketches (led blinking ones)


I am wondering if the same limitations apply here? Can you do sketches any bigger than making an LED blink?
by
x893's rank:
+1
|   January 29, 2009 at 3:36 PM
Comment rating:
0
Excellent
i rewrite Screamer-v2 on C#.
Works fine under Windows and Linux Mono.
by
Kersny's rank:
+1.8
|   January 30, 2009 at 1:46 PM
Comment rating:
0
I am very interested in this, could you post the code?
by Nate is a SparkFun employee
|   February  5, 2009 at 2:03 PM
Hi - please re-read the tutorial. All the code is listed at the top.
by
Kersny's rank:
+1.8
|   February  5, 2009 at 3:42 PM
Comment rating:
0
I meant the c# code, the reply didn't work.
by
x893's rank:
+1
|   February  1, 2009 at 5:35 AM
Comment rating:
0
i publish initial version of Screamer (Windows .NET 2.0, Linux Mono later). Protocol from VB6 version but i havn't XBee device. I use standard bootloader protocol to arduino.

http://akb77.com/g/net/screamer/
by
bau's rank:
+3.2
|   February  1, 2009 at 9:26 AM
Comment rating:
0
great tut. screen shots correspond to reality and there is a logical sequence of the events that need to take place. Thanks much! ~B
by
Kersny's rank:
+1.8
|   February  1, 2009 at 8:59 PM
Comment rating:
0
I believe I have compiled this for 16 mhz. Are the only changes at the top of the c file and the top of the make file? Do I need to modify anything with the baud rate?

Hex file
by Nate is a SparkFun employee
|   February  5, 2009 at 2:02 PM
At 16MHz you will need to use an external oscillator. You will need to change the fuse bits within the make file. Please see our beginning embedded electronics tutorial to see how to change fuse bits.
by
Kersny's rank:
+1.8
|   February  5, 2009 at 2:42 PM
Comment rating:
0
Well, the fuse bits on my 168 are already set for the default arduino bootloader, and I'm just using the makefile to build the hex, and not to program.
by
Ronny's rank:
+4.2
|   February  2, 2009 at 12:03 AM
Comment rating:
+1.2
I had some trouble understanding how the AVR chip actually handles the internals of the boot loader vs. appliction memory - why didnt the bootloader overwrite itself ?

By reading the document "AVR109: Self Programming" available at http://atmel.com/dyn/resources/prod_documents/doc1644.pdf I gained some better understanding.

I highly recomend reading this document!
pomprocker's rank:
+5.4
|   February  2, 2009 at 9:58 PM
Comment rating:
+1.2
I'm here to report that this worked uploading my full robot hex of 32KB with absolutely no problems!!!


by Nate is a SparkFun employee
|   February  5, 2009 at 2:00 PM
Yay! Thank you very much for testing out the tutorial. Indeed, size of the program should not matter - the bootloader will try hard to load any size file.
pomprocker's rank:
+5.4
|   February 10, 2009 at 0:08 AM
Comment rating:
0
So I went to try doing this a second time and it didn't work. I am thinking that it is because I didn't set the lock bits properly to protect the bootloader from being overwritten. I'll let everyone know when I get a chance in the next day or two to look at this closer.
pomprocker's rank:
+5.4
|   February 15, 2009 at 11:37 PM
Comment rating:
0
Yeah I can't run it twice in a row without the status saying "Waiting for target IC to boot broadcast' What am I missing here?

Why aren't we doing RTS on close anyway?
pomprocker's rank:
+5.4
|   February 15, 2009 at 11:38 PM
Comment rating:
0
Sorry...it works only if i manually reach over and hit the reset button
pomprocker's rank:
+5.4
|   February 16, 2009 at 2:02 AM
Comment rating:
0
When you mention this "Screamer should reset the remote unit setting off the bootloader and the unit should start downloading blink-v10.hex. "

Its not doing that for me. I get the message "Waiting for target IC to boot broadcast"

So when I reach over and reset the target manually it then uploads.

So why isn't it sending a reset?
pomprocker's rank:
+5.4
|   February 16, 2009 at 2:45 AM
Comment rating:
0
Oh man you gotta be kidding me....

I had somehow mixed up and swapped by base and remote xbee !!

Now everything works as it should!

Please erase all these embarrassing posts!!
by
jundery's rank:
+1.7
|   February 17, 2009 at 8:39 AM
Comment rating:
0
As hinted at by CowboyBob in another post this should work for series 2 modules. You need to use the destination address in the addressing section of X-CTU to point each module at the address of the other. The reason the coordinator "dies" sending to the broadcast address is a timeout to ensure all nodes receive the data. In tests of my attempt at a commandline version of this protocol I've transferred a 15360 byte sketch in 25 seconds (between 2 series 2 XBees attatched to PCs directly, hopefully soon I'll get time to test with an Arduino).
pomprocker's rank:
+5.4
|   February 20, 2009 at 0:55 AM
Comment rating:
0
by
ladyada's rank:
+4.8
|   February 23, 2009 at 12:17 AM
Comment rating:
0
Hi guys, you may want to re-check the tutorial I wrote that this is based off of: http://www.ladyada.net/make/xbee/arduino.html
I've just update it & it seems to have fixed the flakiness problem, and kept it all Arduino/AVRdude compatible (no bootloader changes).
You may also want to update this page with the transistor buffer I've added because not all XBees have the current capacity to pull the reset pin low.
by
derek's rank:
+4.4
|   March 31, 2009 at 3:53 PM
Comment rating:
+1.2
Great tutorial Nathan. Thanks!

I couldn't get the remote reset function working, and did some digging. I looked at the DIO3 pin on the remote xbee and discovered it was not doing anything. I had to add the following configuration change to the remote xbee:

ATIA0

This binds the outputs of the remote xbee to mirror the inputs of the base xbee.

I also added the following change to the remote xbee:

ATT35

This causes the remote DIO3 line to return back to its default state (high) after 500ms.

Now you don't need the .1uF cap between DIO3 and RESET. When RTS goes low on the base unit, the remote RESET is held low 500ms and then goes back high, allowing the atmega to run.
Jatinder's rank:
+1
|   April  3, 2009 at 2:28 PM
Comment rating:
0
Great Work Nathan,

I was trying to wirelessly bootload atmega32L. I burnt bootloader code into micro controller and it is giving 0x05 as it is supposed but i am unable to configure screamer software for the same. New compiled screamer with hex_size of 32k gives error 380, while your compiled screamer transmits code and displays that it did so successfully but micro controller is not getting programmed. can someone tell me how to correct this error.
abacklund's rank:
+8.1
|   April  8, 2009 at 9:10 AM
Comment rating:
+1.2
I use 3 OS's OS X, Ubuntu and win2k, none of which will run visual basic 2008. So I created a new version of avrdude. I've posted the source at http://alan.backlund.googlepages.com/sfxb_avrdude-5.6.tgz .

Use the usual unix ./configure and make to build it (under cygwin in windows). It adds a new programmer type "sfxb" that works with Wireless_Bootloader_ATmega168.c. It requires the avrdude.conf generated by make so put avrdude (or avrdude.exe) and avrdude.conf in your working directory and run like this "avrdude -c sfxb -C avrdude.conf -p m168 -P com8 -U flash:w:Blink.hex".

It does not toggle rts to reset the avr, avrdude never did. So reseting can still be a problem. I plan to continue working on improving Wireless_Bootloader_ATmega168.c and avrdude.
Tomatoeyes's rank:
+1.4
|   July 13, 2009 at 6:49 AM
Comment rating:
0
Does anyone know if this would be hard to use a bluesmirf module instead of the Xbee?
by
King7's rank:
+1.1
|   December 30, 2009 at 11:24 PM
Comment rating:
0
Hey Nate, excellent tuorial. In order to get my setup to work with a '328, I needed to 'disable' the CTS on DIO7 for both Xbee's. Works great !!
Can this wireless programming being adapted to work with PICs ?? I have done it with PICs and Basic Stamps, but that required a set of Ewave full duplex radio modems which are verry expensive and big. I way prefer the Xbee's, but they are half duplex. Can it be done using your setup and tweaking the bootloader. I was thinkin' something like a 16F873..since I have a buch of them and Screamer v2 seems to support that chip.
Thanks
by
Cata's rank:
+1
|   January 20, 2010 at 9:21 AM
Comment rating:
0
Hi,

Can someone tell me what should I change in the bootloader and Screamer in order to upload to atmega640?
optokopter's rank:
+2
|   February  2, 2010 at 2:53 AM
Comment rating:
0
great tutorial, I could follow all the steps easily but didn't succeed in loading the blink-example with screamer. I uploaded the the wireless atmega168-bootloader to an arduinoProMini 5V following this link:
http://www.arduino.cc/en/Hacking/MiniBootloader
using the avr mkII which worked fine.
Before I digg deeper: is it normal that the the LED on pin 13 starts blinking rapidly as soon as the bootloader is uploaded?

Feedback

What's on your mind?

Please include your email address if you'd like us to respond to a specific question.

submit


If you would like to tell us more, you can fill out our form if you need some psycho-suggestive questions. Go to the form.