Microcontrollers are usually programmed through a programmer unless you have a piece of firmware in your microcontroller that allows installing new firmware without the need of an external programmer. This is called a bootloader.
To burn the bootloader, you'll need to buy an AVR-ISP (in-system programmer), USBtinyISP or build a ParallelProgrammer. The programmer should be connected to the ICSP pins (the 2 by 3 pin header) - make sure you plug it in the right way. The board must be powered by an external power supply or the USB port.
Make sure you have the right item selected in the Tools | Board menu. Then, just launch the appropriate command from the Tools > Burn Bootloader menu of the Arduino environment. Burning the bootloader may take 15 seconds or more, so be patient.
The current bootloaders (i.e. the ones included in Arduino 0009) are almost identical for the Diecimila and NG (with ATmega168). They both run at 19200 baud and take up 2 KB of flash memory on the ATmega168. The only differences is the time the bootloader waits for a new program to arrive and the number of times it flashes the pin 13 LED when it starts. Because of the automatic reset on the Diecimila, its bootloader only waits a very short amount of time (less than a second) - to save time, it also flashes the pin 13 LED once. The NG bootloader waits about 6-8 seconds and flashes the LED three times.
The bootloader that actually shipped on the Arduino NG is slightly different. It enables the internal pullup resistor on pin 6, and doesn't enable the internal pullup on the RX pin. Nor does it timeout upon receiving invalid data, so if you send data to it immediately after it resets, your sketch will never start.
The ATmega8 bootloader only takes up 1 KB of flash. It does not timeout when it receives invalid data, you need to make sure that no data is sent to the board during the 6-8 seconds when the bootloader is running.
Some ancient versions of the bootloader run at 9600 baud (instead of 19200). In order to successfully upload sketches to boards with this bootloader, you'll need to change the serial.download_rate in your preferences file to 9600.
The "Burn Bootloader" commands in the Arduino environment use an open-source tool, avrdude. There are four steps: unlocking the bootloader section of the chip, setting the fuses on the chip, uploading the bootloader code to the chip, and locking the bootloader section of the chip. These are controlled by a number of preferences in the Arduino preferences file.
Begin by testing your NU32. Plug the mini USB cable into the board and your computer. Plug the 6V wall power into the board. Turn on the NU32 power switch, and a red LED should turn on. Press and hold the reset button, press and hold the user button, release the reset button, and release the user button. LED2 should blink. If it does not, the bootloader firmware has not been installed on your board. Also check to see what the FTDI driver has named the NU32 ports. The NU32 board will create 2 virtual serial ports on your computer. In Windows, the ports will be named something like COM10 and COM11, or some two consecutive numbers. On a Mac or in Linux, the ports will named DEV/TTY/##A and ##B. (You can ignore the CU versions). If you cannot verify your ports, re-install the FTDI drivers.
If you don't want to use the bootloader and the Utility, and have a PICkit3 programmer, you can program the NU32 directly from MPLAB X. In this case, you do not need to include a linker file, but you do need to set the Configuration bits normally set by the bootloader.
Build a project with talkingPIC.c, NU32.c, and NU32.h. At the top of "NU32.h", add "#define NU32STANDALONE" to line 3. This will include the Configuration bits to make the PIC run the same as code would when using the bootloader.
The Pololu P-Star microcontroller boards are a family of general-purpose programmable modules based on the PIC18F25K50 and PIC18F45K50 microcontrollers from Microchip, which have 32 KB of flash program memory, 2 KB of RAM, and built-in full-speed USB functionality. The P-Stars add on-board components and connectors that support the microcontroller and make it easier to use. Each board ships with a USB bootloader that makes it easy to load new programs without using an external programmer.
The yellow LED is connected to RB6. Driving this pin high turns on the LED. In bootloader mode, the bootloader drives this line high to turn on the LED (see Section 6.4) but never drives it low. If this line is high when the microcontroller starts up, the microcontroller will go into bootloader mode. A button can be connected to RB6 as described in Section 5.2. RB6 has an on-board pull-down resistor to ensure that its voltage goes all the way down to 0 V when not being driven.
The green LED is connected to RB7, and lights when the pin is driven high. In bootloader mode, the bootloader drives this line high to turn on the LED (see Section 6.4) but never drives it low.
The P-Star comes with a USB bootloader that allows you to load new programs onto the P-Star over USB without using an external programmer. To use the bootloader, you will first need to get the P-Star into bootloader mode.
When the P-Star is in bootloader mode, the yellow LED should be on and the green LED should be blinking. If the P-Star has never been programmed, or if the user application has been erased, then the P-Star will automatically go into bootloader mode when it is powered on. Otherwise, you will have to use one of the procedures below to get it into bootloader mode.
Another option is to connect a bootloader button between VDD and RB6 and a reset button between GND and MCLR as shown in the picture below, and reset the P-Star while you are holding down the bootloader button. The picture below shows one way to hook up those two buttons to a P-Star 25K50 Micro on a breadboard, using our two of our mini pushbutton switches. If you have a P-Star 45K50 Mini, you can do the same thing, except it is probably more convenient to use the reset button on the board instead of connecting an external one.
The bootloader can also be started by the application without requiring a reset. To do this, the application can simply jump to address 4 using the assembly instruction goto 4. If the application uses USB, it should disable the USB module by clearing USBEN and then wait for at least 100 ms before starting the bootloader in order to give the computer time to detect that the application has disconnected.
For convenience, we recommend that any P-Star applications with a USB interface implement a USB command for starting the bootloader. This would allow you to get into bootloader mode, upload the new firmware, and run it, entirely using USB and not needing any physical interaction with the board. For example, an application with a USB virtual COM port could listen for a special baud rate to be set by the computer.
The previous sections cover how to install Pololu USB Bootloader Utility (p-load) and the drivers for the P-Star (Section 5.1), how to get the P-Star into bootloader mode (Section 5.2), and how to compile a simple program for the P-Star (Section 5.3). Once all these steps are complete, you are ready to use p-load to write the program to your P-Star.
The p-load utility automatically looks for a supported bootloader connected to the computer via USB and will operate on that bootloader. If you have multiple devices supported by p-load connected to your computer, you must use the -d option followed by the serial number of the device to specify which device you want to write to.
The P-Star comes with a proprietary bootloader developed by Pololu that uses a native USB protocol. The bootloader allows you to read and write the flash and EEPROM memories of the chip without using an external programmer.
The application can start the bootloader by jumping to address 0x0004 using a goto instruction. This method of starting the bootloader does not involve a reset, so the state of the microcontroller matters and certain configurations could cause problems for the bootloader. For example, an application that changes the configuration of the system oscillators will most likely have to revert its changes before starting the bootloader. Also, an application that uses USB should disable the USB module by clearing USBEN and then wait for at least 100 ms before starting the bootloader, in order to give the computer time to detect that the application has disconnected.
The code below is PIC assembly code that shows how these vectors are defined in the bootloader. The two CPU interrupt vectors (0x0008 and 0x0018) each have a goto instruction that jumps directly to the user application. The two entry vectors (0x0000 and 0x0004) each have goto instructions that jump to the appropriate part of the bootloader code.
The bootloader comes with a unique serial number that is assigned during manufacturing. This serial number is typically an 8-digit decimal number, but in the future we might expand it to have other characters or make it be up to 16 characters long. The serial number is accessible from the application, and applications using USB can expose the serial number as a string descriptor. 2b1af7f3a8