{"id":641,"date":"2010-11-05T13:17:23","date_gmt":"2010-11-05T17:17:23","guid":{"rendered":"http:\/\/embedded-lab.com\/blog\/?p=641"},"modified":"2012-07-30T09:29:31","modified_gmt":"2012-07-30T13:29:31","slug":"choosing-a-pic-programmer","status":"publish","type":"post","link":"https:\/\/embedded-lab.com\/blog\/choosing-a-pic-programmer\/","title":{"rendered":"Choosing a PIC Programmer"},"content":{"rendered":"<p>If you are a beginner in the world of PIC microcontrollers then you will probably have this question in your mind: <strong><em>Which programmer should I buy<\/em>?<\/strong> This is an obvious question because there are tons of PIC programmers available from various vendors and if you search on the various online technical discussion forums for their reviews, everybody has his own opinion. This will confuse you more, and you will be ended up with nothing. I would suggest, just buy one that you can afford and that fulfills your need.<\/p>\n<p>Having said that, I won&#8217;t recommend to buy one that requires a parallel or serial port. I also don&#8217;t recommend to try building the free PIC programmer circuits available on the internet. Most of them are based on either serial or parallel port which are disappearing from the modern desktops and laptops. Even if you do have those in your computer they may not work because those circuits rely on specific voltage and current requirements from the computer ports. At the end, you will be frustrated.<\/p>\n<div id=\"attachment_3656\" style=\"width: 570px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/pic_programmer_icp01.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3656\" class=\"size-full wp-image-3656\" title=\"pic_programmer_icp01\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/pic_programmer_icp01.jpg\" alt=\"\" width=\"560\" height=\"394\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/pic_programmer_icp01.jpg 560w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/pic_programmer_icp01-550x386.jpg 550w\" sizes=\"auto, (max-width: 560px) 100vw, 560px\" \/><\/a><p id=\"caption-attachment-3656\" class=\"wp-caption-text\">iCP01 USB PIC Programmer from iCircuit Technologies<\/p><\/div>\n<p><!--more--><br \/>\nMy suggestion would be to buy a USB PIC programmer that has in-circuit serial programming (ICSP) capability. With ICSP, you can program a PIC microcontroller while it is in the application circuit. You don&#8217;t have to take it out every time you need to reprogram it. This offers tremendous flexibility in programming and reduce the project development time. ICSP requires altogether 5 connections between the programmer and the PIC microcontroller. They are supply voltage (Vcc), supply ground (Gnd), programming voltage (Vpp), data (ICSPDAT or PGD) and clock (ICSPCLK or PGC). Read<a href=\"http:\/\/www.google.com\/url?sa=t&amp;source=web&amp;cd=5&amp;ved=0CDMQFjAE&amp;url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2Fdevicedoc%2F30277d.pdf&amp;rct=j&amp;q=what%20is%20pic%20ICSP&amp;ei=SDHUTLHvE4nAnAfj6p23BQ&amp;usg=AFQjCNE-BOG-3aW0x0n6N_lFGk50Av37QA&amp;sig2=W_dw7jZCCjgkVC5Z0Pu_AQ&amp;cad=rja\" target=\"_blank\"> ICSP Guide<\/a> from Microchip for more detail.<\/p>\n<p>These days USB programmers are not expensive. You can get one for less than 20 bucks. I have recently got a new PIC USB programmer (<a href=\"http:\/\/www.piccircuit.com\/pic-programmer\/25-icp01-usb-pic-programmer.html\" target=\"_blank\"><strong>iCP01<\/strong><\/a>) from <a href=\"http:\/\/www.piccircuit.com\/\" target=\"_blank\">iCircuit Technologies<\/a>. It is a ICSP programmer that costs just $16.50 and it works great. They ship it from Malaysia, and I got mine in 10 business days which is not bad (I live in USA). It supports quite a bit of flash PIC devices ranging from 8- to 40-pins. The complete list of supported devices is found <a href=\"http:\/\/www.piccircuit.com\/pic-programmer\/25-icp01-usb-pic-programmer.html\" target=\"_blank\">here<\/a>. I like this programmer because it is very small and easy to carry. The good thing is that it is compatible with Microchip&#8217;s PICkit and MPLAB IDE softwares. I am using PICkit software to program PIC microcontrollers with iCP01 programmer. I have got another USB PIC programmer that I bought a couple of years ago from <a href=\"http:\/\/www.mcumall.com\/comersus\/store\/comersus_viewItem.asp?idProduct=3141\" target=\"_blank\">MCUmall electronics<\/a>. But the iCP01 programmer programs much faster than that. And it automatically detects the target microcontroller connected to it. Here&#8217;s the picture of my iCP01 programmer.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/embedded-lab.com\/blog\/?attachment_id=631\" rel=\"attachment wp-att-631\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-631 aligncenter\" title=\"Programmer2\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/Programmer2-550x414.jpg\" alt=\"\" width=\"550\" height=\"414\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/Programmer2-550x414.jpg 550w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/Programmer2.jpg 580w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><\/p>\n<p>As I said, it has got an ICSP header pins to program a PIC microcontroller in the target circuit. The five pins in the header are sequentially Vpp, +5V, Gnd, ICSPDAT, and ICSPCLK. The Vpp pin can be identified with the red color wire in the ribbon.<\/p>\n<p>You can also use iCP01 as a stand alone programmer by buying an <a href=\"http:\/\/www.piccircuit.com\/pic-programmer\/54-multi-pic-eeprom-adapter.html\" target=\"_blank\">additional adapter<\/a> from the same vendor. It has a 40-pin ZIF socket to hold a wide range of PIC microcontrollers. The iCP01 programmer with the additional adapter will look like this.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/embedded-lab.com\/blog\/?attachment_id=630\" rel=\"attachment wp-att-630\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-630 aligncenter\" title=\"Programmer1\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/Programmer1-550x373.jpg\" alt=\"\" width=\"550\" height=\"373\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/Programmer1-550x373.jpg 550w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/Programmer1.jpg 631w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><\/p>\n<p style=\"text-align: left;\">I tested the programmer by loading a test program (flashing an LED) into\u00a0 a PIC16F688 microcontroller. Here&#8217;s my test circuit.<\/p>\n<p style=\"text-align: left;\"><a href=\"http:\/\/embedded-lab.com\/blog\/?attachment_id=647\" rel=\"attachment wp-att-647\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-647\" title=\"Circuit_FlashingLEd_PIC16F688\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/10\/Circuit_FlashingLEd_PIC16F688-550x430.jpg\" alt=\"\" width=\"550\" height=\"430\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/10\/Circuit_FlashingLEd_PIC16F688-550x430.jpg 550w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/10\/Circuit_FlashingLEd_PIC16F688.jpg 635w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/embedded-lab.com\/blog\/?attachment_id=700\" rel=\"attachment wp-att-700\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-700 aligncenter\" title=\"Image_ProgrammerTest_PIC16F688\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/Image_ProgrammerTest_PIC16F688-545x450.jpg\" alt=\"\" width=\"545\" height=\"450\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/Image_ProgrammerTest_PIC16F688-545x450.jpg 545w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/11\/Image_ProgrammerTest_PIC16F688.jpg 588w\" sizes=\"auto, (max-width: 545px) 100vw, 545px\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/embedded-lab.com\/blog\/?attachment_id=702\" rel=\"attachment wp-att-702\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-702 aligncenter\" title=\"Image_FlashLED_Output_PIC16F688\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/10\/Image_FlashLED_Output_PIC16F688-550x407.jpg\" alt=\"\" width=\"550\" height=\"407\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/10\/Image_FlashLED_Output_PIC16F688-550x407.jpg 550w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2010\/10\/Image_FlashLED_Output_PIC16F688.jpg 580w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><\/p>\n<p style=\"text-align: left;\">If you want to try this, here is the <a href=\"http:\/\/embedded-lab.com\/uploads\/HexFiles\/PIC16F688\/FlashLED.zip\" target=\"_blank\">HEX<\/a> file for it. The user&#8217;s manual for iCP01 can be downloaded from <a href=\"http:\/\/www.piccircuit.com\/doc\/iCP01%20User%20Manual.pdf\" target=\"_blank\">here<\/a>.<\/p>\n<p style=\"text-align: left;\">Next, I am going to test the programmer with other PIC microcontrollers, and see how it works. I will definitely share my results here.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you are a beginner in the world of PIC microcontrollers then you will probably have this question in your mind: Which programmer should I buy? This is an obvious question because there are tons of PIC programmers available from various vendors and if you search on the various online technical discussion forums for their reviews, everybody has his own opinion. This will confuse you more, and you will be ended up with nothing. I would suggest, just buy one that you can afford and that fulfills your need. Having said that, I won&#8217;t recommend to buy one that requires<\/p>\n","protected":false},"author":2,"featured_media":700,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29,59,38,348],"tags":[79,78],"class_list":["post-641","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-embedded-lessons","category-microcontroller-programmers","category-pic-tutorials","category-product-review","tag-icp01-usb-programmer","tag-pic-programmer"],"_links":{"self":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/641","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/comments?post=641"}],"version-history":[{"count":36,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/641\/revisions"}],"predecessor-version":[{"id":5839,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/641\/revisions\/5839"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media\/700"}],"wp:attachment":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media?parent=641"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/categories?post=641"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/tags?post=641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}