solderlab logo

banner

 

Easy Auto Programmer

Let the ape make the job!

 

An autonomous AVR ISP programming device with SD-Card, Nokia display, ZIF socket and standard 6-pin ISP interface

 

Introduction

From project to project the number of hex files on our PC was increasing. Many people send us their virgin ATMegas to get them flashed. And last not least distributing PCB's and pre-flahed chips via agile-hardware forced us to burn many, many AVRs. In principle this is a work an ape should do but reality was different. So we spend munch time in this boring job. To much time ...

Thus it was just consequent to think about a device that would do the job for us. Here is the result, the SolderLab Easy Auto Programmer V1.0. An All-in-one AVR programmer with SD-card, Nokia Display, a ZIF-Socket and a 6-pin ISP interface. With this device the programming of an AVR is done in seconds including the setting of fuse bits (before AND after flashing), flashing the chip, verifying the flash. And all this without any connection to the PC and by pressing just one single button. You just have to put all your hex files into a folder called "hex" on a standard FAT32 formatted SD card, put the card into the programmer an supply it with some voltage (7-20V). That's it the rest is done by the "ape".

To make this job even more efficient the programmer boards includes a Zero Insertion Force Socket (ZIF) for fastest change of chips. But that does not necessarily mean that you are restricted to THT chips! The board also has a standard 6-pin ISP header that allows you to program AVRs in their circuit (if they have an ISP header too) all you need in this case is a 6-pin ribbon wire. The selection of the correct hex file in your "hex" folder on the SD card is done via the build-in Nokia 5110 display and three push buttons on the board.

Beside the flashing process itself (including writing of fuse bits) the programmer offers you a fast an uncomplicated way to read out device ID and fuse settings of any AVR. The speed of programming can be adjusted in an option menu. Thus you can even program AVR with incidentally reduced clock speeds (everyone who once set the fuse bits of his/her AVR incorrectly knows what I am talking about).

The device can be powered by 7-20V via standard dc jack. The device also powers the destination circuit when programming via ISP-connector and ribbon wire. With a simple jumper on the programmer you can choose the programming voltage between 5V and 3.3V. Thus you will be also able to flash AVR operation at 3.3V.

The complete project is open source and you can download the schematics, layout (in eagle file formate), as well as the firmware for the programmer itself from our download section.

 

Principle, Layout and Schematics

The working horse of the easy auto programmer is an ATMega328P. It handles the display, the SD card, the button's and the programming of the target CPU. The display is a Nokia 5110 with a resolution of 84x48 pixels. It is backlighted by 4 white LEDs. Connection to ATMega runs via an SPI-like interface. Since the display is not 5V tolerant a 5040 is used in between the AtMega and the display as a level shifter.

For the SD card interface we decided to go for a ready-to-run solution. The point here was our claim to design a board that everybody can rebuild by his/her own. So we restricted ourselves to use THT-Parts only. And since we do not know any Micro-SD slot in THT design we went for the µSD breakout boards by Adafruit. The ZiF-Socket as well as the 6-pin ISP connector should be self-explaining. To the right hand of the ATMega you'll find a buzzer that give's acoustic feedback when flashing procedure is successfully done or has failed. On top of this buzzer there is a 6-pin single row header. This is gives you success to serial communication (UART) with the programmer. The programmer's firmware reports every action in a detailed manner via UASRT. With a simple terminal program on a PC you can watch all your steps you have done (this is a nice feature if you have tons of chips to burn so you'll have a complete protocol afterwards). For watching your programmer's output just set the terminal to the corresponding COM port with settings to 57600 baud, 8N1. The pin connection of the pin header on the board was designed to fit this UART-USB-Converter. If you use any other just get the RX,TX and GND Pin from the schematics. The format of the output protocol is described in a separate section below.

One more thing to be mentioned is the Jumper next to the ISP connector. If this little guy is closed the board enters self-programming mode and the ISP connector is used to program the ATMega of the programmer board itself.

Last point concerns the firmware of the programmer. It was written in the Arduino IDE. For the display stuff we used the nice library from Adafruit. Also the programming part is bases on a sketch by Adafruit but we had to heavily modify this one to get the hex-file loaded from SD-card instead of EPROM as in it's original version. The SD library used is the one that comes with the Arduino IDE. All in one this was a real challenge since the memory of the ATMega328 is limited to 2kB. And if the the SD lib needs at least 512 byte (block size), the display has to be buffered with 504 byte (84x48 pixel) and you have to buffer at least one page of the hex-file (max. 512 byte) you will come in serious problems to create a working code with the remaining 500 byte of RAM. However, after a couple of frustrating hours of programming everything was working fine.

 

SD-Card and File Format

Ok now let's come to the point were we (you) want to burn some chips. The first thing to do therefore is to get your hex file(s) on a micro SD card. This card has to be formatted with Fat file system. Now creat a folder called "hex" in the root of the SD card and put your hex-files in. 

Now, each hex-file has to be equipped with a header that gives the programmer information of

  • the device ID of the target CPU 
  • the FUSE settings during programming
  • the FUSE settings after programming (this is necessary only if you burn things like boot loaders that have to be protected after burning by special look bits)(if you don't need this just type in the same fuse settings as during programming)
  • the FUSE mask (can be found found in the data sheet of your AVR, if un-known just use FFFFFF)
  • the chip's flash size in HEX-FORMAT! (e.g. for 32kB = 32768 byte you'll have to write 8000)
  • the chip's flash page size in HEX-FORMAT (e.g. for 128 byte you'll have to write 80) (Flash page size can be found in the manual of your AVR)

That's it. The format of the header should be self-speaking from the following example:

-950F //Target Device ID
-FFDE053F //Fuse settings while programming (LOW,HIGH,EXT,LOCK)
-FFDE053F //Fuse settings after programming (LOW,HIGH,EXT,LOCK)
-FFFF073F //Fuse mask (LOW,HIGH,EXT,LOCK)
-8000 //chip's flash size
-80 //chip's flash page size
:100000000C9461000C947E000C947E000C947E0095
:100010000C947E000C947E000C947E000C947E0068
...
:10041000892B8C932FBF0895CF93DF930E943E01C9
:100420000E949700C0E0D0E00E9480002097E1F396
:0A0430000E940000F9CFF894FFCFFE
:02043A000E00B2
:00000001FF
 

If you should do any mistake in the header don't worry! The programmer will let you know about :-)

 

The Menu

OK, now lets assume you have put all your hex files with the correct header into a "hex" folder on your SD card and you have put the card into the slot properly. Now let's power on the device an see what will happen. 

 

After a short splash screen a signal tone will let you know that initialization was fine an the programmer found hex-files on your card! That's good news! You will come out with the left of the following screens. With the "up" and "down" buttons you can scroll through the menu and with the "OK" button you'll choose the selected item.

   

Let's start from the bottom. In the options menu you can adjust the programming speed. It has 5 levels (100kHz, 125kHz, 166kHz, 250kHz, 500kHz). The default value is 250kHz and is fine for most applications. Just in case you set your fuses to an internal oscillator with 8MHz and internal clock divider (by 8) enabled you should go for lower speed.

 

The menu item "Read ID" does what it stands for. It gives you your device's ID, also know as device signature, in HEX format.

 

The same holds for the menu item "Read Fuse". To get back to main menu just push the "OK" button once again.

 

Now, let' do the interesting stuff. Flashing an image! So we choose "Write HEX" from the menu and we will see a list of all our hex files. Select the one of interest and push "OK". That's it. No kidding, that's it. Before you can count to three you will hear a signal tone that indicates you that everything went fine.

    

If any error occurs for instance if you try to burn a hex fine to a chip with a differing device ID than written in the hex file's header you will come out with this. If anything else should go wrong your programmer will give you the particular reason in plain text on the bottom of the display.

 

So you see, there's no Voodoo, as our friend Steffen would say "Simple is beautiful".

 

Serial Output

As mentioned above the programmer permanently reports on it's actions via UART. With a simple terminal program and the above mentioned settings you will get the following outputs.

During startup of the programmer it reports on the single steps an gives you a list of all hex files found in the hex folder on your card.

System online ...
Setting inputs and outputs ... Done.
Initializing display ... Done.
Initializing SD-Card ... Done.
Listing files in *hex* folder ...

BLF_328P
BLS_328P
EAP_328P
UM5_328_
UM5_328P
UMC_SM10
UMC_TH10
ANRMOD01
ANRMOD02
ANRMOD03

Calculating available memory ... 268 bytes ... Done.
Initialization finished.

During reading a device ID (signature) you will get this output.

Preparing target for programming mode ... Done. 

Starting Program Mode ... Done.
Reading device signature ... 950F ... Done

Reading fuses consequently gives this.

Preparing target for programming mode ... Done.
Starting Program Mode ... Done.
Reading fuses ...

LOCK Fuse: 3F
LOW Fuse: FF
HIGH Fuse: DE
EXT Fuse: 5

And finally writing a flash image is reported in the following way. In case of any error you'll get a detailed error message.

---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
Starting image programming ...
Selected image *BLS_328P.hex*
Parsing parameter ...
Parsed device signature successfully ... 950F
Parsed fuses (during programming) sucessfully ... FF-DE-5-3F [LOW-HIGH-EXT-LOCK]
Parsed fuses (after programming) successfully ... FF-DE-5-3F [LOW-HIGH-EXT-LOCK]
Parsed fuse mask successfully ... FF-FF-7-3F [LOW-HIGH-EXT-LOCK]
Parsed flash size successfully ... 32768
Parsed page size successfully ... 128

Preparing target for programming mode ... Done.
Starting Program Mode ... Done.
Reading device signature ... 950F ... Done

Writing Fuses ...
Set Lock Fuse to: 3F -> E000
Set Low Fuse to: FF -> A000
Set High Fuse to: DE -> A800
Set Ext Fuse to: 5 -> A400

Verifying Fuses ...
Lock Fuse: 3F is 3F
Low Fuse: FF is FF
High Fuse: DE is DE
Ext Fuse: 5 is 5

Writing Flash ...
Flash written.

Writing Fuses ...
Set Lock Fuse to: 3F -> E000
Set Low Fuse to: FF -> A000
Set High Fuse to: DE -> A800
Set Ext Fuse to: 5 -> A400

Verifying Flash ... Done.

Verifying Fuses ...
Lock Fuse: 3F is 3F
Low Fuse: FF is FF
High Fuse: DE is DE
Ext Fuse: 5 is 5

Image writing procedure finshed!

Time past: 1347ms
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------

 

Part List

Part Description Value Qty Distributor Order-Nr. Unit price Total
5110 Nokia 5110 84x48 LCD Display - 1 Exp-Tech EXP-R03-057* 4,80 € 4,80 €
C1, C2, C5, C6, C8, C11, C12, C13, C16, C17 Ceramic Capacitor 100nF, 2.5mm 100n 10 Reichelt Z5U-2,5 100N 0,04 € 0,40 €
C3, C4, C9, C10 Ceramic Capacitor 22pF, 2.5mm 22p 4 Reichelt KERKO 22P 0,06 € 0,24 €
C7,C14,C15 Pol. Capacitor 180µF, 5mm 180µF 3 Reichelt RAD FC 180/50 0,31 € 0,93 €
D1 Diode 1N4004 1 Reichelt 1N 4004 0,02 € 0,02 €
IC1 Microcontroller ATMega 328P - 1 Reichelt ATMEGA 328P-PU 4,20 € 4,20 €
IC1 IC Socket DIL-28 - 1 Reichelt GS 28-S 0,08 € 0,08 €
IC2 Hex non-inverting BUFFER 4050N 1 Reichelt 74HC 4050 0,31 € 0,31 €
IC2 IC Socket DIL-16 - 1 Reichelt GS 16 0,05 € 0,05 €
IC3 ZIF Socket DIL-28 - 1 Reichelt TEX 28 9,95 € 9,95 €
IC4 Voltage Regulator 5V 7805 1 Reichelt µA 7805 0,27 € 0,27 €
IC5 Voltage Regulator LM317 1 Reichelt LM 317-220 SG 0,21 € 0,21 €
J1 DC Power Jack - 1 Reichelt HEBW 21 0,22 € 0,22 €
JP1 Pinheader 1x3, 2.54mm - 1 Reichelt MPE 087-1-003 0,07 € 0,07 €
JP2 Pinheader 1x2, 2.54mm - 1 Reichelt MPE 087-1-002 0,05 € 0,05 €
JP1, JP2 Jumper - 2 Reichelt JUMPER 2,54GL RT 0,05 € 0,10 €
PWR, TEST LED 3mm yellow - 2 Reichelt LED 3MM GE 0,07 € 0,14 €
Q1, Q2 Crystal oscillator 16MHz 2 Reichelt 16,0000-HC49U-S 0,16 € 0,32 €
Q3 p-channel MOSFET IRF9530 1 Reichelt IRF 9530 0,61 € 0,61 €
R1, R6 Resistor 10k 2 Reichelt METALL 10,0K 0,08 € 0,16 €
R2, R3, R9 Resistor 1k 3 Reichelt METALL 1,00K 0,08 € 0,25 €
R7 Resistor 470 1 Reichelt METALL 470 0,08 € 0,08 €
R8 Resistor 270 1 Reichelt METALL 270 0,08 € 0,08 €
S1, S2, S3 Switch - 3 Reichelt TASTER 3301 0,11 € 0,33 €
SD µSD Breakout Board - 1 Watterott ADA254** 12,79 € 12,79 €
SG1 Buzzer, 7.62mm, d=15mm - 1 Reichelt SUMMER EPM 121 0,70 € 0,70 €
SV1 Pinheader 1x6, 2.54mm - 1 Reichelt MPE 087-1-006 0,15 € 0,15 €
SV2 ISP-Header - 1 Reichelt WSL 6G 0,16 € 0,16 €
               
            Sum 37,67 €

*alternatively you can get the display via Sparkfun.   **The SD break out board can also be ordered directly from Adafruit.

 

Conclusion

In summary we can proudly state that we build a simple but extremely efficient "ape" that makes live really easy. We never want to miss the device again! You will find all files you need to build this device by your own in our download section. If the feedback to this project should be high enough we would think about to go for production of a small series and distributing PCBs via agile-hardware. So it's worth to have look to that site from time to time.

We would be happy to get some feedback / suggestions / reports from you in the comments section below.

So far,

Cheers!

 

Comments   

 
0 # Ger@ld 2016-07-21 21:33
Ich hätte auch Interesse an einer Platine.
Wäre ganz praktisch, einen Controller auch mal ohne Laptop vor Ort auf die Schnelle proggen zu können 8)
Reply | Reply with quote | Quote
 
 
0 # okay1 2016-06-01 08:48
Do you need a Business loan?
We offer loans at 3% interest rate. We give out personal loans, auto loans, mortgage loans, agricultural loans, business loans. We give out amount between $5000 to $10 Million. Email us to apply:
Reply | Reply with quote | Quote
 
 
+1 # kiloWATT 2016-03-05 21:22
Hi,

I don't see the list of compatible chips.
Can it program mega2560?

Thanks.
Reply | Reply with quote | Quote
 
 
0 # yo2ldk 2016-02-25 05:13
I wait for PCB, thank you !

yo2ldk @ yahoo.com
Reply | Reply with quote | Quote
 
 
0 # cubyte 2016-02-10 16:11
I've tried arduino 1.0.2 which I think should have been around when you worked on the project.
when I compile I get the following errors

Programmer_Init.ino: In function 'void printDirectory()':
Programmer_Init:103: error: 'class SdFile' has no member named 'get_next_entry'
Programming.ino: In function 'void write_image()':
Programming:43: error: 'class SdFile' has no member named 'get_next_entry'
Screens.ino: In function 'void show_hex_files()':
Screens:78: error: 'class SdFile' has no member named 'get_next_entry'
Screens:85: error: 'class SdFile' has no member named 'get_next_entry'


any ideas what im doing wrong
Reply | Reply with quote | Quote
 
 
0 # Cubyte 2016-02-10 15:08
What version of arduino did you use.
thank you for making it opensource
Reply | Reply with quote | Quote
 
 
0 # duncan 2016-01-23 16:12
Hi,i will pay £30 for 1 board let me know. thanks
Reply | Reply with quote | Quote
 
 
0 # duncan 2016-01-23 16:07
Hi,all i realy want to make one of these,any ideas where i can print one board for make this my self?i live in england,one company said £150 for 1 i only want to pay £30 max any help will be good.
Reply | Reply with quote | Quote
 
 
0 # Andy 2016-01-04 13:28
mit welchem editor sollte man den header einfügen? ich hab PSPad verwendet und bekomm bei allen files den fehler "some error happend --> reading hex -> danach -> flashing!
Reply | Reply with quote | Quote
 
 
0 # Andy 2016-01-04 10:19
Gesundes 2016!
Frage:
Für manche Projekte ist es nötig .hex und .eep zu brennen. Wie kann man dasmit dem EAP bewerkstelligen?

vlg
Reply | Reply with quote | Quote
 
 
0 # Martin 2015-11-06 09:52
Guten Morgen Rene,ich habe mal eine Frage zu dem Ablauf...wird der zu flashende Atmega jedesmal vorher gelöscht oder gehen nur jungfräuliche??
Reply | Reply with quote | Quote
 
 
-1 # xnxx 2015-06-20 16:59
That is an extremely smart written article. I will be sure to bookmark it and return to learn extra of your useful information. Thank you for the post. I will certainly return.

Search on google xnxx go to http://www.xnxx247.com

Search on google porntube go to http://www.tube17.com

Search on google xnxx go to http://www.xnxxbig.net

Search on google xhamster go to http://www.largexhamster.com

Search on google xnxx go to http://www.xnxx365.com
Reply | Reply with quote | Quote
 
 
-1 # Charles Pax 2015-01-16 12:52
I think the comment system scrubbed my code. Here it is on Gihub: https://gist.github.com/charlespax/ec0ae747214e46b79de8
Reply | Reply with quote | Quote
 
 
0 # Charles Pax 2015-01-16 12:47
In Arduino 1.0.6 I get the error below. Any thoughts on how to get this compiled?

...
Screens.ino:216: warning: only initialized variables can be placed into program memory area
Screens:216: error: no match for 'operator
Reply | Reply with quote | Quote
 
 
+1 # Geri 2014-11-24 13:58
Hi!

Thank you for the project!

Can this programmer also program ATtiny13 microcontroller s?
Reply | Reply with quote | Quote
 
 
0 # Dumi 2013-03-02 07:54
Hi,
It is a very nice and useful project!
I will definately try to put it on my arduino + 5110 shield.
Thanks for sharing it,
Best Regards,
DD
Reply | Reply with quote | Quote
 
 
-1 # Andy 2013-02-28 13:32
nice piece of hardware :lol:
but i´m from DD too, so i kann langsam mal dazu übergehen deutsch zu schreiben :)
Ich habe heute die platine erstellt und mit der bestückung begonnen - kopfschmerzen machen mir das SDboard und das nokiadisplay. bekommt man das nicht auch hier irgendwo??? von der belegung des zif sockels her lassen sich nur mega´s brennen !? ich nutze hin und wieder mal einen tiny diesen kann ich letztlich nur über den isp brennen, ODER? :)
ich freu mich schon wenn das teil mal fertig ist und (hoffendlich auf anhieb ) funktioniert.

liebe grüsse aus johanncity
8)
Reply | Reply with quote | Quote
 
 
0 # René 2013-03-01 22:01
Hallo Andy,

wegen der Teile kannst Du mal den Steffen von Agile Hardware (www.agile-hardware.de) direkt per Mail anschreiben, ich denke er hat alle Teile da.

Ja der Sockel ist den 28-Füsslern vorbehalten, da war ganz aus Eigennutz so entstanden.

Falls Du bei der Inbetriebnahme dann Hilfe brauchen solltest meld' Dich einfach über .

Viel Spass + Prost!
Reply | Reply with quote | Quote
 
 
+1 # Andy 2013-03-02 14:51
Hallo rene,
Danke für den tip :-) da werd ich dem steffen mal eine mail senden. Mir fehlen jetzt noch der zif sockel und das sdboard, der rest ist schon da :-)
Da ich die platine selberhergestel lt habe und keine durchkontaktier ungen habe...stellt sich mir das problemdas ich den zif ja ebenfalls auf beiden seiten anlöten muss...
Ich wollt das mal mit smd-lötpaste versuchen und hoffe das es funxt...
Hast du einen tip zur hand?
Bei den ic's und anderen bauteilen war das ja nicht das problem... aber beim zif liegen die kontakte so ungünstig das ich nicht weiss wie ich mit dem lötfix rankomme...
Wie habt ihr das bei eurem prototypen gemacht?
Schönes we

Andy
Reply | Reply with quote | Quote
 
 
0 # Andy 2013-03-02 20:26
Rene,
Hast du zufällig noch eine platine da und zu welchem preis?
Nur für den fall das meine eigenbau nicht so richtig will ... :-(
Reply | Reply with quote | Quote