#31, C1: PIC Coprocessor


Function: PIC coprocessor (PWM, ADC, UART, IO)

Form factor: M1S

Category: Input/output module

Special needs: ---

Power requirements: 5V/20mA

Mates with: #19, #20, #21 (limited use)

See also: #13, #16, #17, #43-1, #52, #53



Tibbit #31 is based on the PIC16F1824 microcontroller and takes advantage of the rich peripheral set available on this PIC device. The I2C interface is used for communications with the main CPU of the TPP board and also for PIC firmware upgrades. Four of the micro's I/O lines act as IO1 ~ 4 lines of the Tibbit module:

  • Three lines have PWM capability;
  • All four lines can work as ADC inputs;
  • Two lines can act as TX and RX of the PIC's UART;
  • Each line can also function as a a regular input/output.

Three PWM channels are exposed through lines IO1 ~ IO3. Each channel allows you to independently set its frequency and the pulse width (duty cycle). The frequency is controlled through a divider and a period value. The divider selects the base frequency for the PWM channel. Available choices are 32MHz, 8MHz, 2MHz, and 500KHz. The output signal of the PWM can then be programmed to have the period equal to 4 ~ 1024 base frequency periods in 4-period steps (i.e. 4, 8, 12 ... 1020, 1024). This gives you the output range from 8MHz down to 488Hz. The PWM pulse width can be programmed to have the period equal to 1 ~ 1024 base frequency periods in 1-period steps (1, 2, 3 ... 1023, 1024).

The analog-to-digital converter has the resolution of 10 bits and the input range of 0 ~ 5V.

The UART has standard capabilities that include programmable baudrate, parity bit, and the choice of the 8-bit or 9-bit operation.

Combine this Tibbit with #20 (nine terminal blocks) or #19 (DB9M connector). It's not common but possible to use the latter for wiring into this Tibbit. The Tibbit #21 (four terminal blocks) can also be used but you will have to steal the ground elsewhere, as #21 doesn't have its own ground line and the PWM Tibbit outputs voltages with respect to the system ground.


There are two red, one yellow, and one green LED. The first red LED is connected to the SCL line of the I2C interface, the second one — to the -RST line of the PIC micro. The yellow LED is connected to the SDA line of the I2C interface. The green LED is on the -INT line.

PIC micro and GRA firmware

Tibbit #31 ships with the GRA ( general register access) firmware, which allows you to access internal PIC registers and memory through the I2C interface. The firmware implements a very simple communications protocol which essentially consists of two important commands — address read and address write. These two commands are used to write to and read from the PIC's internal RAM and registers. This facilitates a simple and versatile access to all microcontroller resources. The available Tibbo BASIC library sits on top of the GRA firmware and uses the communications protocol to control the micro.

Since the GRA firmware does not do anything intelligent and all the setup work is essentially scripted in Tibbo BASIC, it is possible to modify the PIC behavior without making any changes to its firmware.

The GRA firmware can be updated or replaced using the update_pic_firmware Tibbo BASIC project (see below). You can, therefore, create and run PIC applications that go far beyond providing simple register and memory access.

Sample project

The use of this Tibbit is illustrated by a Tibbo BASIC test project. Yo can find it here: https://github.com/tibbotech/CA-Test-Tibbits-16-17-31.