Why would someone want to do that? Well, basically for two reasons. First, the classic: “this should be possible” – so lets try it, spend the better part of three weekends and some nights to finally get it working. Might sound stupid, but to me, this is still the best way to really learn a technology or technical topic. Starting with basic C++ skills, I learned a lot about PIC assembler (yep, ICSP for PICs is basically sending a bunch of op codes to the device), PIC memory layout and of course PIC ICSP and controlling GPIOs of the Raspberry Pi.
What’s the second reason? In my case, I have a PIC connected to the Pi anyway, talking to each other via RS232 – so I figured I could use the spare pins on the connector to assign some GPIOs to the appropriate PINs on the PIC and I don’t need a second connector for ICSP, the board is quite full anyway. Also I can update the firmware without having to build a bootloader (which is a topic on its own).
I case you’re curious, the whole project will eventually be a driver board for my 3 axis CNC. Currently I have a PC + Arduino + GBRL-Shield, but I’m not happy with the setup. So I’m planning on building a web based controller on the Pi. This way I can control the machine using a cheap Galaxy Tab A or my mobile Phone. Also I can directly upload the G-Code (produced by Fusion 360 – AWESOME!) from my laptop – either directly or via my NAS or Dropbox or the like (both machines are quite a bit apart).
OMG Andy, all this has already been built?! Yes – it is still fun to try it yourself and learn a whole lot new :-)
Because I found a lot of inspiration and help in the projects of others, I tried and document my code quite well a bit. Also I added a bit of a description on how it all works – so if you’re into ICSP / PICs / GPIOs have a look here: OpenCobra on GitHub
|Reference:||Using the Raspberry Pi to program a Microchip PIC (PIC24) device via ICSP from our JCG partner Andreas Haufler at the Andy’s Software Engineering Corner blog.|