Amicus18: upgrading with PIC16F18855


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.

This blog post is more than two years old.
PIC16F18855 and PIC18F25K20

PIC16F18855 and PIC18F25K20

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.

I2C and SPI selectable pins

I2C and SPI selectable pins


Once again,  a screen capture from MCC (Microchip configurator) showing the possible choices for PWM pins.

PIC16F18855: PWM pins

PIC16F18855: 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.

Bottom line

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.

1 2

Leave A Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.