Get tutorials Arduino Sensor Kit V2.0 for Arduino

Lesson 33 Analog-Digital Converter

Introduction

The PCF8591 is a single-chip, single-supply and low-power 8-bit CMOS data acquisition device with four analog inputs, one analog output and a serial I2C-bus interface. Three address pins A0, A1 and A2 are used for programming the hardware address, allowing the use of up to eight devices connected to the I2C-bus without additional hardware. Address, control and data to and from the device are transferred serially via the two-line bidirectional I2C-bus.



Components

- 1 * SunFounder Uno board

- 1 * USB data cable

- 1 * AD/DA Converter PCF8591

- 5 * DuPont wires (M to F)


Experimental Principle

Addressing

Each PCF8591 device in an I2C-bus system is activated by sending a valid address to the device. The address consists of a fixed part and a programmable part. The programmable part must be set according to the address pins A0, A1 and A2. The address always has to be sent as the first byte after the start condition in the I2C-bus protocol. The last bit of the address byte is the read/write-bit which sets the direction of the following data transfer (see the figure below).

 

Control byte

The second byte sent to a PCF8591 device will be stored in its control register and is required to control the device function. The upper nibble of the control register is used for enabling the analog output, and for programming the analog inputs as single-ended or differential inputs. The lower nibble selects one of the analog input channels defined by the upper nibble (see Fig.5). If the auto-increment flag is set, the channel number is incremented automatically after each A/D conversion. See the figure below.

 

 

In this experiment, set the second byte sent to a PCF8591 device as high, so as to enable the analog output – make AOUT output an analog quantity which changes gradually. The indicator light D2 on the AD/DA converter PCF8591 gradually lights up and goes out alternately. The same happens to the LED attached to pin 13 of the SunFounder Uno board if it is hooked up with AOUT.

 

Experimental Procedures

Step 1: Build the circuit

The wiring between PCF8591 and SunFounder Uno board:

PCF8591

SunFounder Uno

VCC

5V

GND

GND

SDA

A4

SCL

A5

AOUT

13

 

 

Step 2: Program (Please refer to the example code in LEARN -> Get Tutorial on our website)

Step 3: Compile

Step 4: Upload the sketch to SunFounder Uno board

We can see the indicator light D2 on the AD/DA converter PCF8591 gradually lights up and goes out alternately. The same happens to the LED attached to pin 13 of the SunFounder Uno board


 

 Code

/***********************************************
name:Analog-Digital Converter -PCF8591
function:the indicator light D2 on the PCF8591 gradually lights up and goes out alternately.
The same happens to the LED attached to pin 13 of the SunFounder Uno board
***************************************************/
//Email:support@sunfounder.com
//website:www.sunfounder.com

#include "Wire.h"
#define PCF8591 (0x90 >> 1) // I2C bus address
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  Serial.println(sin(PI/2));

}
void loop()
{
  for (int i=0; i<256; i++)
  {
    Wire.beginTransmission(PCF8591); // wake up PCF8591
    Wire.write(0x40); // control byte - turn on DAC (binary 01000000),analog OUTPUT
    Wire.write(i); // value to send to DAC
    Wire.endTransmission(); // end tranmission
    delay(10*sin(i/256.0*90/180*PI));
    Serial.println(100*sin(i/256.0*90/180*PI));
}

for (int i=255; i>=0; --i)
{
    Wire.beginTransmission(PCF8591); // wake up PCF8591
    Wire.write(0x40); // control byte - turn on DAC (binary 1000000)
    Wire.write(i); // value to send to DAC
    Wire.endTransmission(); // end tranmission
    delay(10*sin(i/256.0*90/180*PI));
    Serial.println(100*sin(i/256.0*90/180*PI));
  }
}



Copyright © 2012 - 2016 SunFounder. All Rights Reserved.

Previous chapter: Lesson 32 Color Detection

Next chapter: Lesson 34 Raindrop Detection

SunFounder
Feb 01 2016 at 10:17 am



© Developed by CommerceLab