Development Kit Limitations - How to Determine Compatibility

Has anyone asked about whether or not something can work with a development kit like Arduino? I know that I’ve seen that question multiple times or even wondered that myself. This post will cover what information should be researched and what information is useful in determining what is feasible.

Shields

The Arduino has such a broad set of capabilities that custom devices called shields are developed for the board to attach directly to the female headers. Typically, these shields have well-defined libraries specifically designed to work with whatever technology the shields include. Here is a list of daughter cards/shields that will work with Arduino, Raspberry Pi, ARTIK, MegaPi, Pioneer, and Qwiic.

See this post for some good info on shields too:

Remember that there are more options available beyond Arduino, the list is just an example. These shields are all centered around this fact: the Arduino has design limitations and specifications. Every development board has their limitations and their different versions all have different specifications that can either be found on the data sheets or on website documentation. There are even shields that provide an empty prototyping board to make any kind of circuit that fits within the development board’s specifications. Shields are not specific to Arduino either as there are more development kits like Beaglebone and Raspberry Pi.

Electrical Limitations

The following specifications are likely generally true for most Arduino modules, it is best to find the data sheets applicable to each model to find the ratings. According to documentation, the absolute maximum ratings per pin are 40mA per I/O pin, if using a USB connection the 5V output should be limited to ~400mA as the USB port limits the current to 500mA, if an external supply is used with the barrel jack then it increases to ~900mA as it uses the regulator onboard which is rated for 1A max. It is never recommended to run at or near the maximum current as this may damage the pins or board. Use a safety factor to increase the life of the board. If the development kit is different from the Arduino, always make sure to read the datasheets available for recommendations.

Data and Speed Limitations

Data Storage

Depending on the model of the development kit used, there will be maximum storage space and RAM specifications to consider for an application. The Arduino Uno has a maximum of 32KB storage space and a combination of EEPROM + SRAM of 3KB while the Mega has 256KB of storage space and a combination of EEPROM + SRAM of 12KB. The amount of RAM will determine how many simultaneous actions are being performed at a time. The amount of storage space will determine how much data is wanted for saving.

Internal Clock Frequency

The internal oscillator of the Arduino Uno and Mega uses a 16MHz crystal for operation. Including designs that require higher data rates will have some loss of information or complete loss of information due to de-synchronization. Unexpected behavior of the device may also occur as the internal circuitry is not designed for that level of frequency. All micro-controllers will have listed rated clock frequencies (internal or external) in the datasheet.

Interface Options

While the Arduino has a decent microprocessor onboard, the number of data interfaces are limited. If the technology you desire to use is not currently available via a shield or via the pins, then it will likely be difficult to be able to make that technology compatible with the Arduino. It is always advised to read what options are available in the datasheets. If the requirements are beyond the scope of the development kit, more industry standard microcontrollers are recommended that have a wider range of data interface options. There are a variety of manufacturers that make these such as Microchip, Analog Devices, Infineon, Intel, and more.

Library Implementation

There are tons of open-source libraries that already exist for certain technologies on the web. If this hasn’t been done yet, search online to see if there is already an existing library for the application you desire (there may even be a shield included). I have seen libraries such as customized Inkjet library for printing, Fast Fourier Transform library, stepper motor driver libraries, and LED light strip libraries. Existing libraries make it so much easier to code instead of having to build from the ground up. This is also not exclusive to Arduino.

If there are no libraries for a technology it will have to be developed from the ground up. Many development kits are typically open-source that allow own libraries to be developed, but that is out of the scope of my understanding.

Final Note:

Always consider multiple solutions to your problem rather than focusing on one. For example, if something is not turning out to be feasible for Arduino, look into other development kits that have better specifications for what your application requires. Arduino might be really easy to implement for some problems, while other problems it may turn out nearly impossible or impractical.