#70 16F88x support with ICD2

Programmer (22)

I'd like to use these MCU with piklab-prog, but it says it's supported only with Direct programmers (which I don't have).
So I'm stuck with mplab :( I have some experience with programming so if you can direct me I could make whatever I can to help implement it (comm traces, whatever)

Do these pics use a new icd2 firmware or I only need to add them in the icd2 table?


  • Solved the issue, here is the patch to make it work with the 16F88x family (tested ONLY on 16F886, but the prog sheet is the same for the family). Strangely even if it's a direct replacement for the 16F87x, it needs FW 8 and not FM 1! It could be probably applied even for 16F883/884 but I don't know if it would work (IIRC they can't be programmed 8 word at a time); so they need testing.

    I have absolutely NO IDEA about the extra fields in the family definition in icd2_data.cpp (for the debugger maybe? I don't use it...) but it Works For Me (TM) :D whoever know what they mean just better check them before committing...

    Index: src/progs/icd2/base/icd2.xml

    --- src/progs/icd2/base/icd2.xml (revision 2696)
    +++ src/progs/icd2/base/icd2.xml (working copy)
    @@ -71,8 +71,10 @@
    <device name="16F874A" famid="0x04" family="16F874" />
    <device name="16F876" famid="0x03" family="16F877" support_type="tested" />
    <device name="16F876A" famid="0x04" family="16F877" />
    + <device name="16F886" famid="0x03" family="16F887" />
    <device name="16F877" famid="0x03" family="16F877" support_type="tested" debug_support_t
    <device name="16F877A" famid="0x04" family="16F877" />
    + <device name="16F887" famid="0x03" family="16F887" />
    <device name="16F88" famid="0x08" family="16F88" support_type="tested" />
    <device name="16F913" famid="0x14" family="16F916" />
    <device name="16F914" famid="0x14" family="16F916" />
    Index: src/progs/icd2/icd2_data/icd2_data.cpp
    --- src/progs/icd2/icd2_data/icd2_data.cpp (revision 2696)
    +++ src/progs/icd2/icd2_data/icd2_data.cpp (working copy)
    @@ -71,6 +71,7 @@
    { "16F684", 8, "16F684", 0x0700, 0x16F, 0x16E, 0x1F0/*?*/ }, // 16F684
    { "16F688", 8, "16F688", 0x0F00, 0x16F, 0x16E, 0x1F0/*?*/ }, // 16F685/687/688/689
    { "16F677", 8, 0, 0, 0, 0, 0 }, // 16F677
    + { "16F887", 8, "16F887", 0x1F00, 0x1EF, 0x1EE, 0x1F0/*?*/ }, // 16F886/887
    { "12F629", 9, "12F629", 0x0300, 0x0DF, 0x0DE, 0x0D4/*?*/ }, // 12F629/675
    { "16F629", 9, 0, 0, 0, 0, 0 }, // 16F629
    { "30F", 10, "30f_REVB",0, 0, 0, 0 }, // 30F revision B1 and abo

    • status: open --> pending
    • status: pending --> closed
  • Hi Lorenzo,

    I added support for 16F88X. As you figured the other fields are for the debugger. I put them at 0 since I haven't taken the time to see what the correct values should be.

    Thanks for your support,