Table of Contents
Open Programmer – An open source USB programmer for PIC micros, I2C-SPI-MicroWire-OneWire-UNIO EEPROMs, some ATMEL micros, generic I2C/SPI devices and (soon) other devices.
- Completely free and Open Source (including firmware)
- Programs PIC10-12-16-18-24, dsPIC30-33, EEPROMs type 24xxxx (I2C), 25xxx (SPI), 93xx6 (MicroWire), DS24xx (OneWire), 11xxx (UNIO), some ATMEL micros, communicates with generic I2C & SPI devices (see supported devices)
- Can work as ICD debugger
- USB 2.0 Full Speed interface, HID class (same as keyboards, mice, etc.)
- Self powered
- Doesn’t need drivers
- Built from easy to find components (estimated cost ~10€)
- Hardware generated timings for maximum speed and reliability (writes a 18F2550 in 15s, 8s under Linux)
- Doesn’t saturate your CPU and doesn’t suffer when other programs are running
- Open source control programs for Linux and Windows
- It’s not another PicKit clone
Graphical interface for Windows
OpenProg is a C++ application written with Visual C++ 6 and MFC.
Using it is straightforward: just connect the programmer, start the application, select the device, load a hex file and read or write; works with XP, the V bloatware, 7.
On the “Device” tab it’s possible to modify some programming options, such as ID and calibration write, use of eeprom etc.; only settings compatible with the current device will be used.
GTK graphical interface for Windows and Linux (v0.8.0)
graphical interface for Linux! It’s built using GTK libraries, and it looks more or less like the other.
From version 0.7.10 it includes an ICD debugger, working more or less like pdb; in addition, it supports coff files.
To use it under Windows, it’s necessary to install the GTK Runtime Environment.
Supported devices
The author tried this programmer with a small number of devices (those I own plus some tested by other users) indicated in bold; the other devices are supported but not tested; however, considering that for every device family at least one has been verified, all of them should work without problems.
Please let me know if you verify operation with the untested devices.
Also contact me if you need other algorithms or code new ones by yourself.
Take notice:
LF series PICs are used exactly as the F ones;
Atmel AVR devices with varius suffixes are grouped together whenever the programming algorithm is exactly the same, eg. ATmega8 and ATmega8A;
EEPROM memories comprise all versions with VDDmax=5V, eg. 242LC56, 24AA256, etc.;
93x memories use 2 different algorithms, for the 93S series and for all the others, indicated with 93x (93xA have 8 bit organization).
12C508, 12C508A, 12F508, 12C509, 12C509A, 12F509, 12F510, 12F519, 12F609, 12F615, 12F617, 12F629, 12F635, 12F675, 12F683,
12F1501,12F1822, 12F1840,
16F505, 16F506, 16F526, 16F54, 16F610, 16F616, 16F627, 16F627A, 16F628, 16F628A, 16F630, 16F631, 16F636, 16F639, 16F648A, 16F676, 16F677, 16F684, 16F685, 16F687, 16F688, 16F689, 16F690, 16F707, 16F716, 16F72, 16F720, 16F721, 16F722, 16F722A, 16F723, 16F723A, 16F724, 16F726, 16F727, 16F73, 16F737, 16F74, 16F747, 16F76, 16F767, 16F77, 16F777, 16F785, 16F818, 16F819, 16F83, 16F83A, 16C83, 16C83A, 16F84, 16C84, 16F84A, 16C84A, 16F87, 16F870, 16F871, 16F872, 16F873, 16F873A, 16F874, 16F874A, 16F876, 16F876A, 16F877, 16F877A, 16F88, 16F882, 16F883, 16F884, 16F886, 16F887, 16F913, 16F914, 16F916, 16F917, 16F946,
16F1503, 16F1507, 16F1508, 16F1509, 16F1516, 16F1517, 16F1518, 16F1519, 16F1526, 16F1527, 16F1823, 16F1824, 16F1825, 16F1826, 16F1827, 16F1828, 16F1829, 16F1847, 16LF1902, 16LF1903, 16LF1904, 16LF1906, 16LF1907, 16F1933, 16F1934, 16F1936, 16F1937, 16F1938, 16F1939, 16F1946, 16F1947,
18F242, 18F248, 18F252, 18F258, 18F442, 18F448, 18F452, 18F458, 18F1220, 18F1230, 18F1320, 18F1330, 18F13K22, 18F13K50, 18F14K22, 18F14K50, 18F2220, 18F2221, 18F2320, 18F23K20, 18F23K22, 18F2321, 18F2331, 18F2410, 18F24J10, 18F24J11, 18F2420, 18F24K20, 18F24K22, 18F2423, 18F2431, 18F2439, 18F2450, 18F24J50, 18F2455, 18F2458, 18F2480, 18F2510, 18F25J10, 18F25J11, 18F2515, 18F2520, 18F25K20, 18F25K22, 18F2523, 18F2525, 18F2539, 18F2550, 18F25J50, 18F2553, 18F2580, 18F2585, 18F2610, 18F26J11, 18F26J13, 18F2620, 18F26K20, 18F26K22, 18F26J50, 18F26J53, 18F2680, 18F2682, 18F2685, 18F27J13, 18F27J53, 18F4220, 18F4221, 18F4320, 18F43K20, 18F43K22, 18F4321, 18F4331, 18F4410, 18F44J10, 18F44J11, 18F4420, 18F44K20, 18F44K22, 18F4423, 18F4431, 18F4439, 18F4450, 18F44J50, 18F4455, 18F4458, 18F4480, 18F4510, 18F45J10, 18F45J11, 18F4515, 18F4520, 18F45K20, 18F45K22, 18F4523, 18F4525, 18F4539, 18F4550, 18F45J50, 18F4553, 18F4580, 18F4585, 18F4610, 18F46J11, 18F46J13, 18F4620, 18F46K20, 18F46K22, 18F46J50, 18F46J53, 18F4680, 18F4682, 18F4685, 18F47J13, 18F47J53, 18F66J60, 18F66J65, 18F67J60, 18F8520, 18F8722, 18F86J60, 18F86J65, 18F87J60, 18F96J60, 18F96J65, 18F97J60,
24F04KA200, 24F04KA201, 24F08KA101, 24F08KA102, 24F16KA101, 24F16KA102, 24FJ16GA002, 24FJ16GA004, 24FJ32GA002, 24FJ32GA004, 24FJ48GA002, 24FJ48GA004, 24FJ64GA002, 24FJ64GA004, 24FJ64GA006, 24FJ64GA008, 24FJ64GA010, 24FJ96GA006, 24FJ96GA008, 24FJ96GA010, 24FJ128GA006, 24FJ128GA008, 24FJ128GA010, 24FJ32GA102, 24FJ32GA104, 24FJ32GB002, 24FJ32GB004, 24FJ64GA102, 24FJ64GA104, 24FJ64GB002, 24FJ64GB004, 24FJ64GB106, 24FJ64GB108, 24FJ64GB110, 24FJ128GA106, 24FJ128GB106, 24FJ128GA108, 24FJ128GB108, 24FJ128GA110, 24FJ128GB110, 24FJ192GA106, 24FJ192GB106, 24FJ192GA108, 24FJ192GB108, 24FJ192GA110, 24FJ192GB110, 24FJ256GA106, 24FJ256GB106, 24FJ256GA108, 24FJ256GB108, 24FJ256GA110, 24FJ256GB110, 24HJ12GP201, 24HJ12GP202, 24HJ16GP304, 24HJ32GP202, 24HJ32GP204, 24HJ32GP302, 24HJ32GP304, 24HJ64GP202, 24HJ64GP204, 24HJ64GP206, 24HJ64GP210, 24HJ64GP502, 24HJ64GP504, 24HJ64GP506, 24HJ64GP510, 24HJ128GP202, 24HJ128GP204, 24HJ128GP206, 24HJ128GP210, 24HJ128GP306, 24HJ128GP310, 24HJ128GP502, 24HJ128GP504, 24HJ128GP506, 24HJ128GP510, 24HJ256GP206, 24HJ256GP210, 24HJ256GP610,
30F1010, 30F2010, 30F2011, 30F2020, 30F2023, 30F2012, 30F3010, 30F3011, 30F3012, 30F3013, 30F3014, 30F4011, 30F4012, 30F4013, 30F5011, 30F5013, 30F5015, 30F5016, 30F6010, 30F6011, 30F6012, 30F6013, 30F6014, 30F6015,
33FJ06GS101, 33FJ06GS102, 33FJ06GS202, 33FJ12GP201, 33FJ12GP202, 33FJ12MC201, 33FJ12MC202, 33FJ16GP304, 33FJ16GS402, 33FJ16GS404, 33FJ16GS502, 33FJ16GS504, 33FJ16MC304, 33FJ32GP202, 33FJ32GP204, 33FJ32GP302, 33FJ32GP304, 33FJ32GS406, 33FJ32GS606, 33FJ32GS608, 33FJ32GS610, 33FJ32MC202, 33FJ32MC204, 33FJ32MC302, 33FJ32MC304, 33FJ64GP202, 33FJ64GP204, 33FJ64GP206, 33FJ64GP306, 33FJ64GP310, 33FJ64GP706, 33FJ64GP708, 33FJ64GP710, 33FJ64GP802, 33FJ64GP804, 33FJ64GS406, 33FJ64GS606, 33FJ64GS608, 33FJ64GS610, 33FJ64MC202, 33FJ64MC204, 33FJ64MC506, 33FJ64MC508, 33FJ64MC510, 33FJ64MC706, 33FJ64MC710, 33FJ64MC802, 33FJ64MC804, 33FJ128GP202, 33FJ128GP204, 33FJ128GP206, 33FJ128GP306, 33FJ128GP310, 33FJ128GP706, 33FJ128GP708, 33FJ128GP710, 33FJ128GP802, 33FJ128GP804, 33FJ128MC202, 33FJ128MC204, 33FJ128MC506, 33FJ128MC510, 33FJ128MC706, 33FJ128MC708, 33FJ128MC710, 33FJ128MC802, 33FJ128MC804, 33FJ256GP506, 33FJ256GP510, 33FJ256GP710, 33FJ256MC510, 33FJ256MC710,
2400, 2401, 2402, 2404, 2408, 2416, 2432, 2464, 24128, 24256, 24512, 241024, 241025,
25010, 25020, 25040, 25080, 25160, 25320, 25640, 25128, 25256, 25512, 251024, 251005, 252005, 254005, 258005, 251605, 25X10, 25X20, 25X40, 25X80,
93S46, 93×46, 93x46A, 93S56, 93×56, 93x56A, 93S66, 93×66, 93x66A, 93×76, 93x76A, 93×86, 93x86A,
AT90S1200, AT90S2313, AT90S8515, AT90S8535, ATmega48, ATmega8, ATmega88, ATmega8515, ATmega8535, ATmega16, ATmega164A, ATmega168, ATmega32, ATmega324A, ATmega328, ATmega64, ATmega644A, ATmega1284,
ATtiny12, ATtiny13, ATtiny24, ATtiny26, ATtiny261, ATtiny2313, ATtiny44, ATtiny48, ATtiny461, ATtiny4313, ATtiny84, ATtiny88, ATtiny861,
DS2430,DS2431,DS2433,DS28EC20,DS1820,
11010,11020,11040,11080,11160
12C671, 12C672, 12CE673, 12CE674
The circuit
The project is based on a 28 pin 18F2550, but only about a third of the memory and 0% of eeprom was used, so it will fit confortably into the smaller 2455.
The 2458 and 2553 have a 12 bit ADC, so only recompilation is required.
With some modifications, I adapted the code to the 2450; since this model lacks the MSSP module, I used a software implementation of I2C and SPI; it also lacks the second PWM channel. Therefore, it can’t generate the clock for Atmel chips (for those that are configured with external clock); in this case, RB3 can be used to turn on an external oscillator (which would be inserted in a modified Atmel expansion board).
Download files from the Open Programmer
Firmware: full MPLAB Project or Compiled firmware (. Hex) or a version for 18F2450 (with reduced functionality, see the circuit).
OP (Command Line for Linux & Windows)
OpenProg (windows): only executable, source code (Visual Studio 6 workspace)
opgui (GTK GUI for Linux & Windows) application or source code
OpenProg and Opgui user’s guide
Octave scriptsFor additional information visit the developer’s website!
I have never seen someone work so professionally and fully share the results of his work with others. You are a great person. I sincerely gave you five stars and thank you. Good luck, dear friend.
Saludos. Arme el programador y no me graba las memorias SPI. Solo las Lee, alguna sugerencia.
Hi, I was very interested in downloading the complete circuit with the software, but I did not succeed. Please help
Hello Hosein
http://openprog.altervista.org/OP_eng.html#History
Hi
here is the link
for downloading all files
https://osdn.net/projects/sfnet_openprogrammer/releases/
hi.idonot know have you anr agent in iran or no.i am gonna to get once
hi,Tony
can you send schematic and PCB into my email?
simulator for Microchip PIC
Is this hardware detected by MPLab?
Can we use mikroC or MPLab to program through this kit?
thanks
verygood