Upgrading to PIC16F18855
And now, let’s take a PIC16F18855 and put it instead of the PIC18F25K20. The two microcontrollers have the same pin layout, so the PIC16F18855 is a perfect, drop-in replacement.
As the PIC16F18855 can work with up to 5.5V power supply, it makes sense to modify the Amicus18 board to operate at 5V, same as the Arduino Uno. This is done by cutting a thin PCB trace and installing one solder bridge, just as in the pictures below:
That PCB trace is quite difficult to cut, and you can notice that I’ve managed to damage a nearby trace. It’s a quick fix, but it should stay as a warning for those who will attempt to switch to 5V.
Unless one plans to install a UART bootloader, it pays off to cut also the trace at the pad Q2. This will disconnect the internal reset for the microcontroller from the USB-UART chip. Thus, no unwanted resets when working with the serial communication. Programming can be done simply using one PICkit3 or any similar programmer.
Amicus 18: programming in XC8
Now comes the fun part: with the use of a microcontroller with Peripheral Pin Select help increase compatibility with Arduino shields?
I2C and SPI communication
Below is a screen capture from MCC (Microchip configurator) showing the possible choices for I2C and SPI pins.
Port A pins can’t be used for I2C communication, so one can’t use shields that need I2C communication with the Amicus18, so there’s no improvement here. As a side note, chipKIT boards use a pair of jumpers to overcome this issue, allowing to select either I2C or analog functions for A4 and A5.
On the other hand, we can reroute SPI pins to match the layout of the Arduino Uno, so we might be able to use some SPI-based shields. The issue here is that many (new) shields have started to use the pins from the ICSP connector, and that connector is missing on the Amicus 18.
Once again, a screen capture from MCC (Microchip configurator) showing the possible choices for PWM pins.
Bad luck here: we can’t use the pins from PORTB as PWM pins. We can, however, use any of the pins from PORTC. Thus, only shields that use Arduino pins 3, 5 and 6 will work. Ardumoto won’t work unless we make some minor hardware changes. Zumo robot shield will work, also with some minor hardware changes. Overall, much better than the original PIC18F125K20, but still far from achieving full Arduino Uno compatibility.
Changing the PIC18F25K20 to a much newer PIC18F18855 brings some enhancement and improves the compatibility between the Amicus18 and Arduino Uno boards. Still, we’re far from having an 8-bit PIC development board in Arduino Uno form factor.
However, there’s much to learn from this board, and maybe, someday, someone will design a better PIC-based Arduino counterpart. Here’s what I would do:
- I would replace the FT232RL chip with the same PIC based programmer/USB-UART bridge that we find on the Xpress board.
- I would use a “normal” USB connector.
- I would install a pair of jumpers to select between analog function or I2C function. Alternatively, I would mirror a pair of I2C capable pins in the same position as in the Uno rev.3 (after pin 13, GND and Aref).
- I would install the ICSP connector, and route some SPI-capable pins to this connector.
- I would try to bring PWM function to Arduino pins 9, 10 and 11 using some solder jumpers.
Until then, the Amicus 18 is the closest thing to a PIC-based Arduino compatible we can get.