
The only such portable AVR programmer. It will help wherever you need to update the software, and the target chip is in a hard-to-reach place and we do not have the ability (or the desire) to drag a laptop and a lot of wires with us. Easy to use, low cost, super small, super fast, supports SD cards ...
Characteristics:
-supermal - dimensions only 44 x 39 x 5.5 mm
-superfast - write to 12.5kB / s , read to 14.5kB / s
- uses a cheap data carrier - ubiquitous SD / MMC cards
-supports the file system FAT16 and FAT32
-read, save, verify the memory flash and eeprom
-read, write, verify fusebits and lockbits
-writing and reading to files BIN , HEX and TXT
-can set factory fusebit values, delete memories
- cheap, easily accessible graphic display - LPH7779
-displays fun animations after each operation
-standard Atmel programming connector 6-PIN ISP
-has auto-update feature of its own software
-very simple operation, 4-button navigation
- user settings menu
-automatic selection of programming speed (up to 4MHz )
-work at 3V, system programming from 3V to 5V
Service:
The programmer is turned on by holding down the button LE (left). The first thing we see is the welcome screen and version information - this information disappears after a while and we can now navigate in the menu. With buttons UP (top) and DN (down) select the required option with the button RI (right) confirm the operation / enter the menu option, and press the button LE (left) we cancel the operation, go back to the menu, which looks like this:
Flash: > Write> Read> Verify
Eeprom: > Write> Read> Verify
Fusebits: > Write> Read> Verify> Default
Lockbits: > Write> Read> Verify> Chip erase
Settings: > Auto Verify> Auto Erase> Show Anims> Progr bar> Files type
Function description:
Write - saves the contents of the file from the card to the selected memory. Select a file from the list. In case of fusebits or lockbits, save setting bytes (from txt file). The length of the file is the length that the programmer will write to memory, the rest of the memory will not be saved.
Read - reads the contents of the selected memory and writes to a file on the card. The file is created automatically in the appropriate folder. The name format is "x.yyy", where x is the sequence number of the file and yyy is the BIN or HEX extension. For example "4.bin" or "22.hex" - the name is displayed and it is good to write it down somewhere. All available memory will be read, no matter how much data is in it. In case of fusebits or lockbits, writes the setting bytes to the txt file to the file.
Verify - compares the contents of the selected memory with the contents of the indicated file, the result of the operation is "PASS" or "FAIL at x", where x is the number of the first cell in which the inconsistency occurred. For fusebits or lockbits, compares setting bytes.
Default - resets all fusebits to factory values.
Chip erase - the internal "chip erase" command clears the entire memory of the chip and resets the lockbit protection.
Description of the settings:
Auto verify - enables automatic memory verification (like the "verify" option), but it does it automatically after each save. Settings: ON or OFF. It applies only to operations on flash and eeprom memory, fusebits and lockbits bytes are read immediately after writing.
Auto erase - automatically executes the "chip erase" command before each write to the flash memory. Settings: ON or OFF. Only valid for flash memory, which must be cleaned before writing. The exception is when we know that the memory is cleared, and at the end we have, for example, a bootloader loaded. Disabling this option will overwrite the data without wiping the content, which in turn will keep our bootloader or other data.
Show anims - displays short animations after each operation depending on whether it was successful or not. Settings: ON or OFF. The animations can be interrupted at any time by pressing the button LE . These are funny animations and add a specific character to the programmer, an experienced internet user will surely recognize them

Bar program - progress bar for write, verify and read flash and eeprom operations. Settings: ON or OFF. The progress bar slightly slows down the process, see "speed tests".
Files type - choosing the type of files we want to work with. Settings: BIN or HEX. It applies to operations on flash and eeprom memories, depending on the selection on the list, only files of a given type will be displayed. When reading to a file, an appropriate file will also be created (in the case of HEX files, the checksum will also be counted).
Memory card, files:
Files should be placed on the card in appropriate folders, ie files for flash memory in "flash" folder, eeprom in "eeprom", fusebits in "fuseb" and lockbits in "lockb". The "system" folder contains other files needed for the programmer to work, m.in. uProcessor database, a file that stores settings or BMP images. The CONTENTS of the "SD-FILES" folder from the attachment should be copied onto the memory card.
While in the case of BIN flash and eeprom files there is no doubt, because they are files generated by compilers, the structure of fusebits and lockbits should be described. These are ordinary text files, into which we enter values in hexadecimal form:
The fusebit file should contain data for: fuse low, fuse high, fuse extended - in HEX format. For example, the contents of the fusebit file for Attiny45 should look like this: 62DFFF. The file may be longer, it may have additional comments, but only the first three bytes (6 characters) will be taken into account. If the processor has two or only one byte of fusebits, then of course only that number of bytes will be used.
The structure of the lockbits file is similar to that of the fusebits file. The only difference is that only one byte will be used here, but remember that unused bits must always be 1. So if we want to turn on LB0 and LB1 bits, use the "FC" value (11111100). In the case of fusebits, the same rule applies, although even if we act differently and try to include non-existent bits (write 0 in them), we will get an error during verification, because these bits will be 1.
When reading fusebits and lockbits to a file, the programmer will create text files according to the above-described scheme.
By selecting the appropriate memory in the menu and then saving or verifying, a list of available BIN / HEX or TXT files from the appropriate directory will be displayed. The files are not sorted alphabetically or otherwise, they appear in the order they were copied and / or created. You can place as many files as you want, all of them will appear in the list. Select a file with buttons UP and DN , confirm with the button RI , canceling with the LE button. There are 6 names on the screen at a time, the next file card is revealed after pressing DN when the last file on the card is indicated. File tabs can only be switched forward (down), after reaching the end, the first tab will be displayed.
The programmer supports cards MMC and SD . The cards I have tested are: 128MB, 512MB, 1GB, 2x2GB. The file names are optional, but on the display they will appear in DOS 8.3 format (8 characters + extension). Longer files will be separated by a tilde ( ' ), and if their names in the first 8 characters differ, the files will be marked with a sequence number. Diacritical marks and other inventions will also not be displayed - so I advise you to name the files legibly so that there is no problem with identifying them later.
Planned: SDHC card support.
Power, voltage:
The system is designed to work with battery power, but nothing prevents you from using the appropriate power supply.
Nominal working voltage: 3.3V
Maximum working voltage: 3.6V
Minimum operating voltage: 2.7V *
Current consumption during startup: up to 100mA *
Current consumption during the programming process: approx. 10mA *
Current consumption in the menu: 5mA
Stand-by current consumption: 0.10uA
* depending on SD card inserted
On the bottom of the board, there is a place for soldering two CR2032 battery sockets - the operating voltage will be 3V, and the current efficiency of such batteries will usually not allow power to be connected to the programmed circuit - a voltage drop will likely make a mess on the programmed circuit or on the memory card. Instead of soldering the sockets, another battery with higher capacity can be used (it can be, for example, a battery from a mobile phone), but the maximum operating voltage must not be exceeded.
The entire programmer works with the voltage it will receive from the battery, because it has no stabilizer. The programming process also takes place at this level (high state). The target (programmed) circuit can be programmed with voltages from 3V to 5V, when the programmer works at 3V. On the one hand, on the input line MI-SO there is a protection in the form of a resistor and a 3V3 zener diode, which will protect the programmer input against too high voltage, and on the other hand, the system powered by 5V will correctly recognize the high state at 3V on the MO-SI and SCK lines (see note: electrical characteristics> dc characteristics> V IH = 0.6 VCC which means nothing but 0.6 * 5V = 3V - this is the guaranteed value).
The programmer does not have a mechanical switch, switching it on and off is done by holding down the button LE . After switching off, the programmer cuts off the power supply to the display and the memory card, and goes into deep sleep mode by taking (typically) 0.1uA from the battery.
AND SP:
Connectors:

The programming pin is 6pin male as standard ISP ATMEL . The location of the pins is shown in the drawing, the plug is indented on the bottom side of the board. You can easily make a ribbon with a 10pin female socket as standard ISP KANDA or a universal ribbon with a combination of 10PIN and 6PIN sockets. Zones after programming SCK , MOSI , MISO and RESET they become transparent to the target layout.
Automatic selection of programming speed:
At each initiation of programming with the target system, the programmer automatically selects the programming speed (clock line speed SCK). There are 7 steps of adjustment: 4MHz, 2MHz, 1MHz, 500KHz, 250KHz, 125KHz, 62,500KHz. Theoretically, it will be 1/4 of the target system operating frequency, but not always. The programmer starts at the highest speed every time and performs the signature read test 10 times - if any error occurs, the speed will be reduced and the test repeated until it goes down to the lowest speed. If the lowest speed fails, the programmer will return a message stating that the system is not responding. In the case of a very long splicing tape, the programmer may use a lower speed if errors occur - a short test may not reveal communication errors that may not be released until the memory is written. I recommend using a tape no longer than 20 cm. The given SCK values refer to the timing of the programmer chip at 8MHz.
Auxiliary clock signal
Since the programmer is battery powered, I resigned from the usual function of the VCC pin (pin 5 of the 6 ISP socket) and there is no possibility of supplying power to the target circuit on this pin. Instead, this pin has an auxiliary 8MHz clock signal that can be used if the target has some strange / external clock source set. This signal is connected through a 1K resistor, so it is not necessary to modify the connecting strip if there is voltage on this line from the target circuit.
Software update:
If a new version of the software is released, there are two ways to update it:
AND SP: Connect your programmer to the ISP-6 connector and shorten the pins marked as "SLF-PRG" - this will make this connector a software update connector (as in USBasp).
BootLoader: The device has a built-in bootloader, thanks to which the firmware can be updated very easily! Copy the firmware update BIN file to the root directory of the card and name it "000.bin". If nothing appeared on the display after turning the system on - that's good! The file with the new firmware has been correctly recognized, now just press the button RI to confirm that you want to update. The device will update its firmware by itself, it will take a few seconds, and then start up - the welcome screen will show the new version of the program - that's it! Now it is enough to delete the previously uploaded file from the card so that the device does not start up in the update mode. In the update mode, some cards may not be supported - so if after uploading the "000.bin" file the device started normally - this is one of these cards.
Remarks:
Fusebits: Ext: 07, high

(internal 8MHz oscillator without / 8 split, CLKO output on, 2.7V brown-out detection, reset vector to bootloader address, 4kB bootloader memory, EESAVE on)
The internal Atmegi328P oscillator can be calibrated over a very wide range. The factory calibrated clock up to 8MHz can be "calibrated" from 50% to even 200%, that is from 4MHz to even 16MHz. Changing bit4 in the "config.ini" file to "1" will select the maximum frequency - it will significantly speed up the programming, but the manufacturer does not guarantee stable operation in such conditions (supply voltage vs frequency). Initially, this setting is turned off.
The display I used is original - it has the PCD8544 driver, 84x48 organization, a standard set of instructions for it, and it can accept data with a maximum clock of 4MHz - and it works at this speed. If your display shows stupid things or nothing, there are two possibilities:
and) it has a driver other than PCD8544 - in the "config.ini" file set bit6 to "1" - the display will be treated differently, although it does not guarantee correct operation.
b) it cannot work at 4MHz - in the "config.ini" file, set bit5 to "1" - the display will work at 2MHz, this speed should not cause problems for him.
The display needs a capacitor for the built-in voltage converter (C2, C3), the nominal value is 1 uF. For me, it works successfully with a capacitance of 200nF. If you have problems with contrast, increase this capacity - in place of C2 and C3 you can side-solder several SMD capacitors. If the display has solder pads, you can connect it with wires - if it has contact pads, use the contact eraser that was in the phone and attach the display well. Despite the fact that my display has solder pads, I just used a contact eraser. The handles are made of a fragment of the housing "E + J connectors" . It can be any fragment of anything with an internal dimension of 5.2mm - just such a connector was at hand :)
The memory card, depending on which one is hit, consumes a "very large" current at start-up - around 100mA. Very large, i.e. for the possibilities of a coin cell battery. The C4 capacitor helps to maintain the voltage during card initialization, it is good to have the highest possible capacity, but also without exaggeration - the capacitor is charged by three pins of the processor, they cannot be overloaded. For me, 10uF is enough to start all the cards that I tested, but as the battery is discharged, problems may appear.
The programmer operates only in its own folders and will not move through the rest of the folders / files on the card. CAUTION - however, it should be borne in mind that due to some error the file structure may be damaged and the data on the card may be irretrievably lost or it will be difficult to recover it! This can happen when removing / inserting the card while the machine is running or power is cut off while reading / writing. It may also happen (very rarely) that the programmer will hang when trying to open a list of files in a folder. The solution to the problem is to delete the most recently created file in this folder by the programmer.
39mm x 44mm x 5.5mm PCB, double-sided. The pads of the guides are located in easily accessible places (not under the housings), so the plate can be successfully made at home. The micro SD card slot I used is quite popular MSDE208, the footprint comes hence that is from socket 500873-0806 - as you can see, it is not a problem to find several compatible sockets, just look for one that has its pads "underneath" and compare it with the datasheet - it should match.
Speed Tests:
Programming speed test made with Atmega644A (as target) working at 25MHz, 4MHz SCK speed, flash memory, 64kB data size, 16MHz programmer chip timing:
BIN file, disabled progress bar:
Save from file: 5,1s.
Read to file: 4,4s.
BIN file, enabled progress bar:
Save from file: 5,1s.
Read to file: 5,0s.
HEX file, disabled progress bar
Record from file: 12.5s.
Read to file: 11.6s.
HEX file, enabled progress bar
Record from file: 12.5s.
Read to file: 12.2s.
As you can see - the best results can be obtained with BIN files, because its size is the data length and there are no quirks. Reading from a HEX file requires previously to "fly" the entire file and count all bytes contained in it, and when writing to such a file, the checksums of each string are counted - so it takes a while.
The progress bar hardly slows down the process when the target layout is page-programmed (as in the test above). In the case of programming bytes or reading (which is always implemented byte by byte), the enabled progress bar will significantly slow down the operation.
List of supported chips:
Systems tested in practice: tiny13, tiny45, tiny2313, mega8, mega88, mega16, mega32, mega328, mega644
Not all chips are fully supported yet, see file "chip.db". Incomplete entries mean that only fusebits and lockbits operations will work.
The list of tested chips will be updated on the project home page.
1kB:
AT90s1200, Attiny12, Attiny13 / A, Attiny15
2kB:
Attiny2313 / A, Attiny24 / A, Attiny26, Attiny261 / A, Attiny28, AT90s2333, Attiny22, Attiny25, AT90s2313, AT90s2323, AT90s2343
4kB:
Atmega48 / A, Atmega48P / PA, Attiny461 / A, Attiny43U, Attiny4313, Attiny44 / A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny45
8kB:
Atmega8515, Atmega8535, Atmega8 / A, Atmega88 / A, Atmega88P / PA, AT90pwm1, AT90pwm2, AT90pwm2B, AT90pwm3, AT90pwm3B, AT90pwm81, AT90usb82, Attiny84, Attiny85, Attiny8685, Attiny86901 / Attiny1588, Attiny86901 / Attiny
16kB:
Atmega16 / A, Atmega16U2, Atmega16U4, Atmega16M1, Atmega161, Atmega162, Atmega163, Atmega164A, Atmega164P / PA, Atmega165A / P / PA, Atmega168 / A, Atmega168P / PA, Atmega169m216, ATmega168P / PA, Atmega169m216, Atmega169167A
32kB:
Atmega32 / A, Atmega32C1, Atmega323 / A, Atmega32U2, Atmega32U4, Atmega32U6, Atmega32M1, Atmega324A, Atmega324P, Atmega324PA, Atmega325, Atmega3250, Atmega325A / PA8, Atmega3250A32, Atmega3250A32, Atmega3250A32 / PA8, Atmega3250A32 / PA8, Atmega3250A32 / PA8, Atmega3250 PA, AT90can32
64kB:
Atmega64 / A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega649A / P, Atmega6490A / P, Atmega640, Atmega644 / A, Atmega644P / PA, Atmega645, Atmega645A / P, Atmega6490usb64, ATmega649064, ATmega649064764
128kB:
Atmega103, Atmega128 / A, Atmega1280, Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128
256kB:
Atmega2560, Atmega2561
Project home page: uProg - small, fast, portable AVR programmer with SD















In Attachment:
Eagle 5.10 files: PCB, SCH; alternative PDF; Batch HEX and BIN; support files.
PCB ver. 1.0
Program ver.1.0 - BETA version.
-stable beta version
-writing / reading / verification over 128kB (extended memory chips) has not been tested, but is implemented
- write / read / verify HEX files only guaranteed up to 64kB - also not tested
-programmer fully tested with: tiny13, tiny45, tiny2313, mega8, mega88, mega16, mega32, mega328, mega644
Before uploading a flash, please read the THIS LINK
//update
Update # 2 is here HERE
PCBs and displays are available HERE
Cool? Ranking DIY