The AVRdude is excellent program for burning hex code into Atmel AVR microcontroller. USBasp is awesome USB based Atmel AVR programmer. In this tutorial we will see how to use AVRdude for burning hex files into AVR microcontroller using USBasp.
AVRdude is available for Windows and Linux installations. It can be downloaded from the avrdude’s download portal given below.
Introduction
In order to program AVR microcontroller you need the .HEX file. It is nothing but the machine code for the microcontroller. This file is generated by the AVR assembler, which converts assembly code into machine code. Assembly code can be produced by third party C cross compiler software or can be handwritten. Typically everyone uses Atmel Studio, or Arduino environment to write programs in C language. After compiling, these tools generate .hex file as their output.
AVRdude executables for Windows (or tar archive for linux) can be found at:
All releases : http://download.savannah.gnu.org/releases/avrdude/ look for version 6.3
Windows exe : http://download.savannah.gnu.org/releases/avrdude/avrdude-6.3-mingw32.zip
Download and extract this executable in a suitable folder. I have personally used usbasp and avrdude on Windows 7 and Windows 10 platforms.
NOTE 1: Make sure the path for the avrdude’s folder is added to the PATH environment variable, otherwise “avrdude.exe” cannot be accessed fron any random directory on the command prompt. Refer to this page on how to add a path to PATH environment variable.
NOTE 2: When you connect your USBasp hardware to the Windows 10 machine, you will need to download and install the drivers for the same.
Connections
– Connect the USBasp to PC.
– Connect SPI programming pins of USBasp to the AVR microcontroller. Following figure shows sample schematic diagram, if you have different AVR, then connect MOSI,MISO, SCK, RESET and GND pins of that uC to corresponding pins of USBasp.
– Give +5V supply to the microcontroller.
– VIMP: If you are burning a fresh microcontroller, close the Slow Serial Clock jumper of USBasp. Since many brand new microcontroller are factory programmed for internal 1MHz oscillator. USBasp uses very high speed serial clock for faster programming. Thus you will have to specifically tell USBasp to use slow serial clock. This setting is done by above mentioned jumper.
NOTE: If you have uC which has internal oscillator enabled and after the programming you are not planning to change its fuse bits back to external clock setting, then you can skip the crystal.
Executing AVRdude:
Fortunately AVRdude is command line tool, so that you can be very sure of what you are doing with your uC Or Unfortunately AVRdude is command line tool, so you will have to spend little time to get familiar with it 🙂
- Open the command prompt. (Press WinKey + R. Run dialogbox will appear. Type cmd and press enter.)
- Navigate to the directory where .hex file is located. For example:
> cd D:\mega16_kitCD\sample code\ex01_simple_input_output\Exe
> d:
- If you have NOT added the avrdude’s path to the system path, execute following command with yourpath. Otherwise skip this step.
> set PATH=%PATH%;c:\avrdude_6_3\;
- To burn the hex file enter following command. Consider for example name of my hex file is io.hex :
> avrdude –c usbasp –p m16 –u –U flash:w:io.hex
You should see something like this :
Thats all !!! It is as simple as that ! 🙂
Explanation for command
avrdude –c usbasp –p m16 –u –U flash:w:io.hex
-c : Indicates the programmer type. Since we are using the USBasp programmer, argument “usbasp” is mentioned.
-p : Processor. We are using ATmega16, hence “m16”. Note ATmega16 has two variants, one is “ATmega16L” (slow speed version) and “ATmega16” normal 16MHz version. However their device signature is same and hence you will have to use “m16” as parameter for both the AVRs. This applies to all AVRs having “L” variants.
-u : Disables the default behavior of reading out the fuses three times before programming, then verifying at the end of programming that the fuses have not changed. Always use this option. Many times it happens that we forget to switch on the AVR’s +5V power supply, then at the end of programming cycle, avrdude detects inconsistent fuses and tries to reprogram them. Since there is no power supply, fuses gets programmed incorrectly and entire microcontroller gets screwed up(means becomes useless). Thus always use this option.
-U : memtype:op:filename[:format]
Perform a memory operation. Multiple ‘-U’ options can be specified in order to operate on multiple memories on the same command-line invocation.
memtype
The memtype field specifies the memory type to operate on.
calibration One or more bytes of RC oscillator calibration data.
eeprom The EEPROM of the device.
efuse The extended fuse byte.
flash The flash ROM of the device.
fuse The fuse byte in devices that have only a single fuse byte.
hfuse The high fuse byte.
lfuse The low fuse byte.
lock The lock byte.
op
The op field specifies what operation to perform:
r read the specified device memory and write to the specified file
w read the specified file and write it to the specified device memory
v read the specified device memory and the specified file and perform a verify operation
filename
Specify the hex file name. If file is not in current directory specify file name with appropriate path.
format
Format need not be specified, for hex files, avrdude will automatically detect the format.
The trick to do it quickly : The Batch file :
It is extremely boring to type such a long command every time you program the uC. Therefore to avoid this you can create something called as Batch file. It is a text file which contains series of commands which will be executed by dos command processor. To create batch file follow these steps :
- Open notepad
- Type our avrdude command. i.e. copy paste following line into notepad.
avrdude –c usbasp –p m16 –u –U flash:w:io.hex - Save the file with filename “burn.bat” and put it into the directory, which has the hex file.
Now whenever you recompile your program and want to burn it, simply double click on burn.bat. This will execute avrdude command that we have typed in it.
Possible errors and problems
1)couldn’t find usbasp:
found 5 busses
found 5 busses
avrdude: error: could not find USB device “USBasp” with vid=0x16c0 pid=0x5dc
This happens when USBasp is not connected or not recognized by the PC. Try to connect it to different USBport. Make sure that “Self programming” jumper of USBasp is open. Always disconnect AVR from USBasp, before plugging USBasp to the PC.
2)target does not answer
found 5 busses
avrdude: error: programm enable: target doesn’t answer. 1
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.avrdude done. Thank you.
Check the connections of USBasp with uC. Check the power supply of the uC. Check whether you have connected the crystal and decoupling capacitors. If everything is fine and still you are getting this error, then it indicates that either ur uC is dead or its fuse bits have got screwed up.
I hope this post will help you to get started with AVRdude. Feedback is welcome.
Reference
Complete documentation of AVRdude can be found at:
http://download.savannah.gnu.org/releases/avrdude/avrdude-doc-6.3.pdf
#atmel-avr #avrdude #usbasp #burning #flashing #programming
#
avrdude: processing -U flash:w:C:\Users\bjwat\Downloads\Vers_4_57_2z (3)\Vers_4_57_2z\wm_23Trx_4_57_2z.hex:i
avrdude error: Intel Hex record [0x2000, 0x200f] out of range [0x0000, 0x1fff]
at line 513 of C:\Users\bjwat\Downloads\Vers_4_57_2z (3)\Vers_4_57_2z\wm_23Trx_4_57_2z.hex
avrdude error: read from file C:\Users\bjwat\Downloads\Vers_4_57_2z (3)\Vers_4_57_2z\wm_23Trx_4_57_2z.hex failed
avrdude done. Thank you.
#
I build myself an USBASP programmer,
everything is working fine with it and this tutorial.
But now I have to program some AT89LP4052,
which I can´t find in the MCU list of AVRDUDE SS.
Is there a new file avrdude.conf ,
where this processor is available ?
If so, could you provide a link for it ?
Is it necessary to modify some hardware,
concerning the ISP connector
for the above mentioned processor,
because of the new SS-Bit ?
#
Thank you so much. I am using AVR 8,16,32 from long time. But using isp programmer. This tutorial was much helpful. I used it to program atmega644p
#
Hi,
Windows just did a major update (Windows 10) Since then the exe crash instantly at start.
(0xc000007b)
We have 64bits and use version 6.3 of avrdude.exe, we tried tos et compatibility to windos 8 or XP but nothing helps
Thanks
#
how to set sck at 1Mhz
#
avrdude.exe: set SCK frequency to 1500000 Hz
avrdude.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude.exe: error: programm enable: target doesn’t answer. 1
avrdude.exe: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude.exe done. Thank you.
this error show. how to sort out this error… plz give advice….
#
Hi,
It is a warning and you can ignore that. Important thing to look for is the “error”. Since it says ‘target doesn’t answer’ there are following possibilities:
1) Connection issues with the device. Check all the connections.
2) Target AVR chip is not getting powered up or does not have crystal connected to it. Check power supplies and crystal.
3) Your target chip is brand new with internal 1MHz oscillator, in which case your USBasp will not be able to program this device if your USBasp uses SCK frequency higher than 1MHz. So, you will need to get another USBasp which supports setting of SCK frequency or upgrade firmware of your current one (http://www.rogerclark.net/updating-firmware-on-usbasp-bought-from-ebay/).
Hope it helps.
#
Thank you for the post.As I am a begginer. So please help me for getting started. what are the components to construct a circuit using uC?
#
Cool blog! Is your theme custom made or did you download it from somewhere?
A design like yours with a few simple tweeks would really make my blog stand out.
Please let me know where you got your theme. With thanks
#
It is readily available free wordpress theme.
#
trying to connect to device……
averdude: error:programm enable:target doesn’t answer.1
averdude:initialization failed,rc=-1
double check connection and try again ,or use -F to override this check
avrdude done .thnku
this is showing when i m trying to programme my microcontroller ..what is the problem ..plzzz help ….
#
Possible reasons – 1) Target’s power supply is off / 2) Target is running on internal slow speed oscillator, in which case you will have to slow down the programming speed. / 3) Target does not have crystal / 4) Connection issues.
#
Hi i am new to this world i am not able to program my atmega 32 for lcd programs please help this is the error
Linking: main.elf
avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o -std=gnu99 -MMD -MP -MF .dep/main.elf.d main.o –output main.elf -Wl,-Map=main.map,–cref -lm
main.o: In function `main’:
C:UsersAMIRDesktopprojectslcd interfacing/main.c:12: undefined reference to `LCDInit’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:15: undefined reference to `LCDByte’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:18: undefined reference to `LCDWriteString’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:21: undefined reference to `LCDGotoXY’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:21: undefined reference to `LCDWriteString’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:26: undefined reference to `LCDGotoXY’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:26: undefined reference to `LCDWriteInt’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:27: undefined reference to `LCDGotoXY’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:27: undefined reference to `LCDWriteString’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:36: undefined reference to `LCDByte’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:40: undefined reference to `LCDWriteString’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:41: undefined reference to `LCDGotoXY’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:41: undefined reference to `LCDWriteString’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:47: undefined reference to `LCDByte’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:48: undefined reference to `LCDWriteString’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:49: undefined reference to `LCDGotoXY’
C:UsersAMIRDesktopprojectslcd interfacing/main.c:49: undefined reference to `LCDWriteString’
make.exe: *** [main.elf] Error 1
> Process Exit Code: 2
> Time Taken: 00:01
#
Correct place to post this would be AVRfreaks forum. 🙂
#
Hello sir,
iam using, atmega16l microcontroller and usbasp programmer
it give this error
‘avrdude’ is not recognized as an internal or external command, operable program or a batch file.
plz help me out.
#
It means WinAVR is not installed or got corrupted. Reinstall it to fix this error.
#
i am using code vision AVR
#
Hi all,
I am trying to make USBasp since last 2 month but its not working. Its showing “Unknown device”. I have no issues regarding board and soldering. Everything I got from http://www.fischl.de/usbasp/, downloaded “usbasp.2011-05-28”, but its not working. Please help me regarding this issue. I am really got pissed off now.
#
Have you programmed your mega8 AVR with the firmware and correct fuse settings ?
#
Hello,
1. You shold have a correctly worked “programmer”, also a way to flash a chip. If you dont have such one, you should start on the other point. At example
http://www.pitsch.de/stuff/mmc2iec/avrisp.htm, which works 100% with a LPT-Printer Port (on an old PCs available only) and PonyProg-software (Windows) http://www.lancos.com/prog.html
2. If you have a programmer, you must be sure, you have installed all the needed software on your PC correctly for using existing “first” programmer
3. @Saurabh: do you have a functioning programmer? If not, start with 1.
The http://www.fischl.de/usbasp/ helps you to build a “second” better programmer if you have an another also “first” primitive programmer.
I suppose, you don’t have any programmer and you try to build first one. Starts also with “1” and an old PC.
I hope I could help you…
#
Hello sir,
iam using, atmega16 microcontroller and usbasp programmer
i am not able to connect my controller to pc.
please guide me for the solution Email : mayank072@gmail.com
i will be very thankful 2 u.
thanks
#
I am using Sina Prog to program my ATmega169PV using USBasp. However, I was trying to unprogram the ‘divide clock by 8’ fuse bit and I don’t know what happened after doing that but the controller does not get detected by Sina Prog any more.
I am getting this error:
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: error: programm enable: target doesn’t answer. 1
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude done. Thank you.
I know that the USBasp programmer is working because I tried programming another microcontroller with it and it worked.
What should I do?
#
sir,
I am using atmega8l microcontroller and usbasp programmer
while programming, it says device not responding.
please help.
#
#
I really appreciate your invaluable efforts to guide newbies like me
#
#
Hai Sir,
During burning program into Chip using extreme burner the fuse bits are set wrong by me & burned.Now i cant able to use my chip so can u please able to tel me a way to recover my chip……. please…
#
Nice post dude,
I’ve tried to follow the “readme” file while flashing the USBasp & got this error messages :
$ sudo avrdude -p m8 -c usbasp -P usb -U flash:w:main.hex
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: error: programm enable: target doesn’t answer. 1
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude done. Thank you.
based on ur post above, this error occur if there’s some problems with the connection between uC & USBasp.
In this case, i just test the USBasp itself with no uController connected.
Any advice for this?
Thx a million,
Aston
#
That is perfectly expected. When you don’t connect your ATmega8 to the USBasp, you will get this message.
“avrdude: error: programm enable: target doesn’t answer. ” This indicates that, USBasp hardware is not able to detect specified uC attached to it. So you have to connect your uC and then use the above mentioned command to burn the uC.
#
#
Use sinaprog got more options of microcontrollers
#
Hello,
🙂
I have recently written a GUI Software for driving USBasp compatible USB Programmers. It is much easier to use than the avrdude or avrdude-gui.
You can download it free of cost from here
http://extremeelectronics.co.in/avr-tutorials/gui-software-for-usbasp-based-usb-avr-programmers/
#
it doesn’t have option for atmega 328 in win8 then what should i do now?
and i need to use external oscillator and capacitor for that …
#