User Tools

Site Tools


arduino:arduino_crash_course:analog_output

This is an old revision of the document!


Table of Contents

Analog Output

An analog signal is one that can have any value over a continuous range. Arduino employs an approximation to analog outputs and calls these outputs “analog” outputs–even though they are actually a special implementations of Boolean output.

PWM

Arduino achieves analog-like outputs by using a technique called Pulse Width Modulation (PWM). PWM is technique where a Boolean output is switched on and off very quickly (in the case of the Arduino Uno, it's about TODO times per second). The ratio of the time the output is in the HIGH state to the total period time (i.e., time HIGH + time LOW) is called the duty cycle. If the duty cycle is 100%, then the output will appear to be at maximum output. If the duty cycle is 50%, then the output will appear to be at half the maximum output; a duty cycle of 25% makes the output appear to be at a quarter of maximum.

So one way that Arduino “analog” outputs are not really analog outputs is that they are actually rapidly switched “digital” outputs. Another way that Arduino “analog” outputs are not really analog outputs is that you are only able to set the duty cycle to one of TODO values. If you want something in between any two values, you're stuck.

Example

The following is an example of using PWM to ramp-up the brightness of an LED using a timer.

The example below (taken verbatim from the Arduino Fade page) is an example of using Arduino's PWM to ramp-up and down the brightness of an LED using a timer.

Fade.ino
/*
 Fade
 
 This example shows how to fade an LED on pin 9
 using the analogWrite() function.
 
 This example code is in the public domain.
 */
 
int led = 9;           // the pin that the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by
 
// the setup routine runs once when you press reset:
void setup()  {
  // declare pin 9 to be an output:
  pinMode(led, OUTPUT);
}
 
// the loop routine runs over and over again forever:
void loop()  {
  // set the brightness of pin 9:
  analogWrite(led, brightness);    
 
  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;
 
  // reverse the direction of the fading at the ends of the fade:
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }    
  // wait for 30 milliseconds to see the dimming effect    
  delay(30);                            
}
arduino/arduino_crash_course/analog_output.1352161626.txt.gz · Last modified: 2012/11/06 00:27 by mithat

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki