The Arduino in ConnDuino
All the pins of the official Arduino Uno Rev.3 design are available in ConnDuino, in their expected positions. Included are the analog and digital pins as well as the supply and ground pins. As a result, any Arduino Uno shield may still be used with ConnDuino. Digital PWM output pins are denoted with ~ and are identical with Arduino Uno. Similarly, the I2C interface is mapped to analog pins 4 (SDA) and 5 (SCL) and the SPI interface is mapped to digital pins 11 (MOSI), 12(MISO) and 13 (SCK).
All the pins are generally duplicated. The SPI and I2C pins are even more. Not counting the dedicated pins for LCD and TFT displays, which are connected to I2C and SPI respectively, the following capabilities exist:
- Four sets of SPI pins (two of them have a Slave Select pin conveniently nearby, mapped to digital pins 6 and 7, as indicated on board).
- Six sets of I2C pins (two sets in analog pins 4, 5 and four sets in the I2C section beside the AREF pin).
For the two I2C lines SCL and SDA, ConnDuino offers the capability to install on board pull-up resistors, named R6 and R7 respectively. This is optional because the microcontroller is already equipped with internal pull-up resistors, but strongly recommended, since internal resistors are rather weak, just enough for a single I2C device at medium speed.
If heavy use of the I2C interface is required, the external pull-ups should be better installed. According to the Atmega328p datasheet, they should be not less than:
Rmin = (Vcc - 0.4V) / 3mA
which makes for:
- Rmin = 1.5K for Vcc=5V
- Rmin = 1.3K for Vcc=3.3V
The maximum value is a function of the bus capacitance which is related to the number of connected devices and wire length:
Rmax = 300ns / Cb
Assuming, capacitance Cb=50pF (meaning approximately 5 devices, including the microcontroller), the maximum pull up resistor for high I2C speeds (>100KHz) should be:
- Rmax = 300ns / 50pF = 6K
Consequently, 2~5K resistor values should be safe under most circumstances. Personally, I am tending towards a middle value (3K). Once external pull-ups are in place, the internal ones must be deactivated through software (see in this page how it can be done). This final step is essential.
You may notice some non familiar text beside some of the digital or analog pins. It indicates a secondary functionality for those pins. A detailed list of pin functionality is found in the pin mappings section, below. It is just mentioned here that all the pins have their normal and expected roles when no peripheral is installed. The on board led, mapped to digital pin 13 is also included.
Due to space considerations, the USB connector and the ICSP interface pins are not included. The uploading of sketches and all serial communication is facilitated with the included FTDI interface pins. A usb to FTDI serial adapter is required for this purpose. At the time of this writing, one such adapter can be found at 3$ from ebay and 15$ from adafruit. In a future revision of the board, the USB interface may be added.
Additional IC components
The Atmega328p microcontroller is located at A (picture above). Three additional integrated circuits may optionally be installed:
- A 16-pin CD4050 logic converter chip (located at at B). This is required when a TFT screen is used that requires 3.3v logic and the microcontroller operates at 5v. See its datasheet for more details. If this chip is absent, for whatever reason (no TFT is used, or one which is supported by the native voltage), the five (5) nearby jumper pads, should be shorted with solder, in order to restore contact between the TFT related digital pins and the microcontroller.
- An 8-pin 24LC256 eeprom memory module, (located at C). It uses the I2C bus and its address is hardwired at 0x50. Its storage capacity is 256Kbit, which is equal to 32KB of data. Like in official Arduino, if any I2C device is installed, the analog pins 4, 5 are restrained for I2C communication only. See the datasheet for more details on this device.
- A 3-pin Dallas DS18B20 digital temperature sensor (located at D). This sensor uses the 1-wire data interface. The official Arduino doesn’t map any pin as 1-wire bus. In ConnDuino the analog pin 0 is mapped for the 1-wire data interface. If this sensor is not installed however, the analog pin 0 may be used for any purpose. See the datasheet for more details on this sensor.
Additional information regarding the ConnDuino board design and functionality can be found in the following articles: