Я имею микроконтроллер PIC18F2550.К сожалению у меня нет PIC программатора, и мне не охота колдовать с программатором от ЛПТ порта компьютера, так что я буду прошивать мой PIC с помощью моего Arduino.
В PIC18F2/4 поддерживается низковольтное программирование, которое возможно через Ардуино.
Кроме того, спецификации для программирования хорошо написаны и довольно легко понять.
Я написал скетч для работы с PIC18F2550, но с небольшими изменениями это поможет работать со всем семейством микроконтроллеров PIC, полный список вот:
• PIC18F2221 • PIC18F2580 • PIC18F4480
• PIC18F2321 • PIC18F2585 • PIC18F4510
• PIC18F2410 • PIC18F2610 • PIC18F4515
• PIC18F2420 • PIC18F2620 • PIC18F4520
• PIC18F2423 • PIC18F2680 • PIC18F4523
• PIC18F2450 • PIC18F2682 • PIC18F4525
• PIC18F2455 • PIC18F2685 • PIC18F4550
• PIC18F2458 • PIC18F4221 • PIC18F4553
• PIC18F2480 • PIC18F4321 • PIC18F4580
• PIC18F2510 • PIC18F4410 • PIC18F4585
• PIC18F2515 • PIC18F4420 • PIC18F4610
• PIC18F2520 • PIC18F4423 • PIC18F4620
• PIC18F2523 • PIC18F4450 • PIC18F4680
• PIC18F2525 • PIC18F4455 • PIC18F4682
• PIC18F2550 • PIC18F4458 • PIC18F4685
• PIC18F2553
Подключение Arduino к PIC довольно простое:

Упрощенные схемы:

Внимание! Контакты должны быть подключены через резисторы, я использовал 1.2 К. Вместо 200 омных, ничего страшного, всё прошло просто отлично.
Памятка:
Для того, чтобы запрограммировать чип, загрузить код на ваш Arduino (можно скачать в конце).
но прежде чем мы начнем давайте посмотрим, как память организована:
0000h-07FFh------------------Boot block
0800h-1FFFh------------------Block 0
2000h-3FFFh------------------Block 1
4000h-5FFFh------------------Block 2
6000h-7FFFh------------------Block 3
8000h-1FFFFFh--------------*Unimplemented
200000h-200007h------------*ID Location
200008h-2FFFFFh-------------Config Space - irrelevant
300000h-30000Dh-------------config/fuse bits
30000Eh-3FFFFD--------------Config Space - irrelevant
3FFFFEh------------------------Device ID1
3FFFFFh------------------------Device ID2
*Unimplemented = читается как '0'
*ID Location - не реализовано в моем коде
Взаимодействие с программатором:
Теперь давайте посмотрим, как взаимодействовать с программатором. Команды, перечисленные ниже будут отправляться к Arduino через последовательную консоль.
Команда чтения: следующая команда чтения 32byt работает для адресов: 0x0 - 0x3FFFFF:
R< 6digit address >X
пример:
R30000DX
Команда записи: следующая команда записывает 32byt в адреса: 0x0-0x7FFF, адрес на который Вы пишете должен быть на вторую цифру и должен быть 0 на первую цифру, иначе он не будет работать:
W< 4digit address >< 32 bytes of data>X
пример:
W7FE0FFFFFFFFFFFFFFFFFFFFFFFF0001F9EF3FF0926A936A946A89688A688B68FFD7X
следующая команда записывает:
0x007FE0: FFFFFFFFFFFFFFFFFFFFFFFF0001F9EF3FF0926A936A946A89688A688B68FFD7
Команда стереть: выполнить сброс до заводских настроек. Повторное подключение после отключения питания!!!
EX
3апись config/fuse битов: набор по одному байту за раз:
C<номер фьюза, в HEX виде><один байт>X
пример:
CA2CX
Означает следующую запись:
0x30000A: 2C
Теперь вы можете запрограммировать свой PIC микроконтроллер, просто выбрав .hex файл
Инструкция:
1.Скачать новую версию
2.загрузите скетч в Arduino
3.подключите pic18f2550 к Arduino
4.найдите hex файл (вы можете использовать блинк примеру, просто подключить светодиод к одному из выводов PIC микроконтроллера).
Ниже прикреплён архив с исходниками к описываемому программатору.
https://sites.google.com/site/thehighspark/arduino-pic18f