Introduction: Arduino Lesser Known Features

Picture of Arduino Lesser Known Features

This is more a listing of not so often mentioned features of Arduino platforms typically used (e.g. Uno, Nano). This listing should act as a reference whenever you need to look up those features and to spread the word.

Look at the code in order to see examples for all of those feature as I used them in several of mine projects here on instructable (e.g. Arduino 1-wire Display (144 Chars)). The steps following explain one feature each.

Step 1: Supply Voltage

The Arduino can measure it's own supply voltage in an indirect way. By measuring the internal reference with the supply voltage as upper bound reference you can get the ratio between internal reference and supply voltage (the supply voltage acting as upper bound for the analog/ADC reading). As you know the exact value of the internal voltage reference you can then calculate the supply voltage.

For exact details on how to do this including example code see:

Step 2: Internal Temperature

Some Arduino are equipped with an internal temperature sensor and can therefore measure their internal (semicoductor) temperature.

For exact details on how to do this including example code see:

Step 3: Analog Comparator (Interrupt)

Arduino can setup an analog comparator between pin A0 and A1. So one gives the voltage level and the other one is checked for a crossing of this voltage. An interrupt gets raised depending on whether the crossing is a rising or falling edge (or both). The interrupt can then be catched by software and acted accordingly.

For exact details on how to do this including example code see:

Step 4: Predefined Constants

There are some predefined variables that can be used to add version and compilation info to your project.

For exact details on how to do this including example code see:

Serial.println(__DATE__); // compilation date

Serial.println(__TIME__); // compilation time

String stringOne = String(ARDUINO, DEC);

Serial.println(stringOne); // arduino ide version

Serial.println(__VERSION__); // gcc version

Serial.println(__FILE__); // file compiled

these code snipplets will output those data to serial console.

Step 5: Retain Variable in RAM Through Reset

It well known that Arduino Uno (ATmega328) have internal EEPROM that allows you to preserve values and settings during power-off and restore them at the next power-up. A not so well known fact might be that it is actually possible to preserve value during reset even in RAM - however the values get lost during power cycle - with the syntax:

unsigned long variable_that_is_preserved __attribute__ ((section (".noinit")));

This allows you for example to count the number of RESETs and by using EEPROM also the number of power-ups.

For exact details on how to do this including example code see:

Step 6: Access the Clock Signal

Arduinos and other AVR (like ATtiny) have an internal clock allowing you to run them without using an external crystal oscillator. Furthermore at the same time they are also able to connect this signal to outside by putting it on a pin (e.g. PB4). The tricky part here is that you need to change the chips fuse bits in order to enable that feature and changing fuse bits allways bears the risk of bricking the chip.

You have to enable the CKOUT fuse and easiest way to do this is by following the instructable on How to Change Fuse Bits of AVR Atmega328p - 8bit Microcontroller Using Arduino.

For exact details on how to do this including example code see:

Comments

About This Instructable

56views

0favorites

License:

More by DrTrigon:Arduino 1-wire Generic Client/Slave Device (Sensor)Arduino Lesser Known FeaturesArduino 1-wire Display (144 Chars)
Add instructable to: