This is an old revision of the document!


Manipulating analog signals

The analog inputs and outputs are used when the signal can take a range of values, unlike the digital signal that takes only two values (HIGH or LOW).

Analog input

For measuring the analog signal, microcontrollers have built-in analog-to-digital converter (ADC) that returns the digital value of the voltage level. Usually, it is the binary number that corresponds to the input voltage, not the value in Volts. The number of bits of the output value depends on the accuracy and internal construction of the converter and usually varies between 8 and 12.

analogRead()

The function analogRead() is used for analog pins (A0, A1, A2, etc.) and it reads the value that is on the analog pin.

The syntax of a function is the following:

analogRead(pin);

The parameter pin is the name of the pin whose value is read.

The return type of the function is the integer value. On the Arduino Uno boards it ranges between 0 and 1023. The reading of each analog input takes around 100 ms.

Not every pin can be used as analog input. Read the documentation of the chosen development board for details.

Analog output

Unlike analog input, the analog output does not generate varying voltage directly on the pin. In general, it uses the technique known as (Pulse Width Modulation (PWM)) that generates a high/low square signal of stable frequency, but varying duty cycle (ratio of active and passive periods of the signal). Details are described later in the book. Because the PMW signal can provide different average power to the external element e.g. LED it can be considered as analog output.

analogWrite()

The function analogWrite() is used to write an analog value of the integer type as an output of the pin. An example of use is turning on/off the LED with various brightness levels or setting different speeds of the motors. The value that is written to the pin stays unchanged until the next value is written to the pin.

The syntax of a function is the following:

analogWrite(pin, value);

The parameter pin is the number of the pin.

The parameter value is the PWM signal value that can differ from 0 (off) to 255 (100% on).

This function does not have the return type.

Because PWM output is often generated by an internal timer, not every pin can be used as analog output. Read the documentation of the chosen development board for details.

The following example shows reading an analog value from the A0 input of an Arduino Uno board and writing the analog value to the output that can control the intensity of the LED.

#define LED_pin 3              //the pin number is chosen to support PWM generation
 
void setup() {
  pinMode(LED_pin, OUTPUT);      
}
 
int value;                     //variable that holds the result of analog reading
 
void loop() {
  value = analogRead(A0);      //analogRead on Arduino Uno returns the value in the range 0 - 1023
  value = value >> 2;          //it should be converted to the value of the range 0 - 255
  analogWrite(LED_pin, value); //writing converted value to PWM output
}

Check Yourself

1. What command for analog input read is used?

2. What technique is used to obtain an analog output signal?

en/iot-open/introductiontoembeddedprogramming2/cppfundamentals/analog_io.1687717234.txt.gz · Last modified: 2023/06/25 15:20 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0