Support » Pololu 3pi Robot User’s Guide »
9. Pin Assignment Tables
<table class="picture_with_caption center"><tr><td style="max-width: 550px"><img alt="" class="" data-gallery-pictures="[{"id":"0J843","caption":"\u003cp\u003eGeneral features of the Pololu 3pi robot, top view.\u003c/p\u003e","url_tiny":"https://a.pololu-files.com/picture/0J843.98x98.jpg?0679f1a8a7993bc85c7aed6be105db0d","url_medium":"https://a.pololu-files.com/picture/0J843.600x480.jpg?0679f1a8a7993bc85c7aed6be105db0d","url_full":"https://a.pololu-files.com/picture/0J843.1200.jpg?0679f1a8a7993bc85c7aed6be105db0d","longest_side":807}]" data-picture-id="0J843" data-picture-longest_side="807" src="https://a.pololu-files.com/picture/0J843.550.jpg?0679f1a8a7993bc85c7aed6be105db0d" /></td><p></tr><tr><th style="max-width: 550px"><p>General features of the Pololu 3pi robot, top view.</p></th></tr></table>
<table class="picture_with_caption center"><tr><td style="max-width: 550px"><img alt="" class="" data-gallery-pictures="[{"id":"0J845","caption":"\u003cp\u003eLabeled bottom view of the Pololu 3pi robot.\u003c/p\u003e","url_tiny":"https://a.pololu-files.com/picture/0J845.98x98.jpg?d0cfe4fe0f7b28d0b6f697e47d06bdd7","url_medium":"https://a.pololu-files.com/picture/0J845.600x480.jpg?d0cfe4fe0f7b28d0b6f697e47d06bdd7","url_full":"https://a.pololu-files.com/picture/0J845.1200.jpg?d0cfe4fe0f7b28d0b6f697e47d06bdd7","longest_side":826}]" data-picture-id="0J845" data-picture-longest_side="826" src="https://a.pololu-files.com/picture/0J845.550.jpg?d0cfe4fe0f7b28d0b6f697e47d06bdd7" /></td></tr><tr><th style="max-width: 550px"><p>Labeled bottom view of the Pololu 3pi robot.</p></th></tr></table>
<table class="picture_with_caption center"><tr><td style="max-width: 550px"><img alt="" class="" data-gallery-pictures="[{"id":"0J844","caption":"\u003cp\u003eSpecific features of the Pololu 3pi robot, top view.\u003c/p\u003e","url_tiny":"https://a.pololu-files.com/picture/0J844.98x98.jpg?60c764bfd0bb467059534f3f3c9b9e56","url_medium":"https://a.pololu-files.com/picture/0J844.600x480.jpg?60c764bfd0bb467059534f3f3c9b9e56","url_full":"https://a.pololu-files.com/picture/0J844.1200.jpg?60c764bfd0bb467059534f3f3c9b9e56","longest_side":838}]" data-picture-id="0J844" data-picture-longest_side="838" src="https://a.pololu-files.com/picture/0J844.550.jpg?60c764bfd0bb467059534f3f3c9b9e56" /></td></tr><tr><th style="max-width: 550px"><p>Specific features of the Pololu 3pi robot, top view.</p></th></tr></table></p>
<h3>Pin Assignment Table Sorted by Function</h3>
<table class="pin_assignment" cellspacing=0 align="center">
<tr>
<th> Function </th>
<th> ATmegaxx8 Pin </th>
<th> Arduino Pin </th>
</tr>
<tr><td>free digital I/Os (x3)<br/>(remove PC5 jumper to free digital pin 19)</td> <td>PD0, PD1, PC5</td> <td>digital pins 0, 1, 19</td></tr>
<tr><td>free analog inputs (if you remove jumpers, x3)</td> <td>PC5, ADC6, ADC7</td> <td>analog inputs 5 – 7</td></tr>
<tr><td>motor 1 (left motor) control (A and B)</td> <td>PD5 and PD6</td> <td>digital pins 5 and 6</td></tr>
<tr><td>motor 2 (right motor) control (A and B)</td> <td>PD3 and PB3</td> <td>digital pins 3 and 11</td></tr>
<tr><td>QTR-RC reflectance sensors (left to right, x5)</td> <td>PC0 – PC4</td> <td>digital pins 14 – 18</td></tr>
<tr><td>red (left) user LED</td> <td>PD1</td> <td>digital pin 1</td></tr>
<tr><td>green (right) user LED</td> <td>PD7</td> <td>digital pin 7</td></tr>
<tr><td>user pushbuttons (left to right, x3)</td> <td>PB1, PB4, and PB5</td> <td>digital inputs 9, 12, and 13</td></tr>
<tr><td>buzzer</td> <td>PB2</td><td>digital pin 10</td></tr>
<tr><td>LCD control (RS, R/W, E)</td> <td>PD2, PB0, and PD4</td> <td>digital pins 2, 8, and 4</td></tr>
<tr><td>LCD data (4-bit: DB4 – DB7)</td> <td>PB1, PB4, PB5, and PD7</td> <td>digital pins 9, 12, 13, and 7</td></tr>
<tr><td>reflectance sensor IR LED control (drive low to turn IR LEDs off)</td> <td>PC5 (through jumper)</td> <td>digital pin 19</td></tr>
<tr><td>user trimmer potentiometer</td> <td>ADC7 (through jumper)</td> <td>analog input 7</td></tr>
<tr><td>2/3rds of battery voltage</td> <td>ADC6 (through jumper)</td> <td>analog input 6</td></tr>
<tr><td>ICSP programming lines (x3)</td> <td>PB3, PB4, PB5</td> <td>digital pins 11, 12, and 13</td></tr>
<tr><td>reset pushbutton</td> <td>PC6</td> <td>reset</td></tr>
<tr><td>UART (RX and TX)</td> <td>PD0 and PD1</td> <td>digital pins 0 and 1</td></tr>
<tr><td>I2C/TWI</td> <td colspan=2>inaccessable to user</td></tr>
<tr><td>SPI</td> <td colspan=2>inaccessable to user</td></tr>
</table>
<h3>Pin Assignment Table Sorted by Pin</h3>
<table class="pin_assignment" cellspacing=0 align="center">
<tr>
<th> ATmegaxx8 Pin </th>
<th> 3pi Function </th>
<th> Notes/Alternate Functions </th>
</tr>
<tr><td>PD0</td> <td>free digital I/O</td> <td>USART input pin (RXD)</td></tr>
<tr><td>PD1</td> <td>free digital I/O</td> <td><strong>connected to red user LED</strong> (high turns LED on)<br/>USART output pin (TXD)</td></tr>
<tr><td>PD2</td> <td><strong>LCD control line RS</strong></td> <td>external interrupt 0 (INT0)</td></tr>
<tr><td>PD3</td> <td><strong>M2 control line</strong></td> <td>Timer2 PWM output B (OC2B)</td></tr>
<tr><td>PD4</td> <td><strong>LCD control line E</strong></td> <td>USART external clock input/output (XCK)<br/>Timer0 external counter (T0)</td></tr>
<tr><td>PD5</td> <td><strong>M1 control line</strong></td> <td>Timer0 PWM output B (OC0B)</td></tr>
<tr><td>PD6</td> <td><strong>M1 control line</strong></td> <td>Timer0 PWM output A (OC0A)</td></tr>
<tr><td>PD7</td> <td><strong>LCD data line DB7</strong></td> <td><strong>connected to green user LED</strong> (high turns LED on)</td></tr>
<tr><td>PB0</td> <td><strong>LCD control line R/W</strong></td> <td>Timer1 input capture (ICP1)<br/>divided system clock output (CLK0)</td></tr>
<tr><td>PB1</td> <td><strong>LCD data line DB4</strong></td> <td><strong>user pushbutton</strong> (pressing pulls pin low)<br/>Timer1 PWM output A (OC1A)</td></tr>
<tr><td>PB2</td> <td><strong>buzzer</strong></td> <td>Timer1 PWM output B (OC1B)</td></tr>
<tr><td>PB3</td> <td><strong>M2 control line</strong></td> <td>Timer2 PWM output A (OC2A)<br/> ISP programming line</td></tr>
<tr><td>PB4</td> <td><strong>LCD data line DB5</strong></td> <td><strong>user pushbutton</strong> (pressing pulls pin low)<br/> <strong>Caution: also an ISP programming line</strong></td></tr>
<tr><td>PB5</td> <td><strong>LCD data line DB6</strong></td> <td><strong>user pushbutton</strong> (pressing pulls pin low)<br/> <strong>Caution: also an ISP programming line</strong></td></tr>
<tr><td>PC0</td> <td><strong>QTR-RC reflectance sensor</strong></td> <td>(drive high for 10 us, then wait for line input to go low) sensor labeled PC0 (leftmost sensor)</td></tr>
<tr><td>PC1</td> <td><strong>QTR-RC reflectance sensor</strong></td> <td>(drive high for 10 us, then wait for line input to go low) sensor labeled PC1</td></tr>
<tr><td>PC2</td> <td><strong>QTR-RC reflectance sensor</strong></td> <td>(drive high for 10 us, then wait for line input to go low) sensor labeled PC2 (center sensor)</td></tr>
<tr><td>PC3</td> <td><strong>QTR-RC reflectance sensor</strong></td> <td>(drive high for 10 us, then wait for line input to go low) sensor labeled PC3</td></tr>
<tr><td>PC4</td> <td><strong>QTR-RC reflectance sensor</strong></td> <td>(drive high for 10 us, then wait for line input to go low) sensor labeled PC4 (rightmost sensor)</td></tr>
<tr><td>PC5</td> <td>analog input and digital I/O</td> <td><strong>jumpered to sensors’ IR LEDs</strong> (driving low turns off emitters)<br/>ADC input channel 5 (ADC5)</td></tr>
<tr><td>ADC6</td> <td>dedicated analog input</td> <td><strong>jumpered to 2/3rds of battery voltage</strong> ADC input channel 6 (ADC6)</td></tr>
<tr><td>ADC7</td> <td>dedicated analog input</td> <td><strong>jumpered to user trimmer potentiometer</strong> ADC input channel 7 (ADC7)</td></tr>
<tr><td>reset</td> <td>reset pushbutton</td> <td>internally pulled high; active low digital I/O disabled by default</td></tr>
</table>