Difference between revisions of "Matrix - Analog to Digital Converter"

From FriendlyELEC WiKi
Jump to: navigation, search
(与RaspberryPi连接使用)
(Applications)
 
(15 intermediate revisions by 2 users not shown)
Line 18: Line 18:
 
* 2.54 mm spacing pin
 
* 2.54 mm spacing pin
 
* PCB dimension (mm): 16 x 24
 
* PCB dimension (mm): 16 x 24
[[File:adcpcb.png|frameless|400px|模数PCB]]
+
[[File:adcpcb.png|frameless|400px|Analog to Digital PCB]]
  
 
* Pin Description:
 
* Pin Description:
Line 51: Line 51:
 
3. The on-chip D/A converter and a high-gain comparator are used temporarily during an A/D conversion cycle. An A/D conversion cycle is always started after sending a valid read mode address to a PCF8591 device. The A/D conversion cycle is triggered at the trailing edge of the acknowledge clock pulse and is executed while transmitting the result of the previous conversion。 <br>
 
3. The on-chip D/A converter and a high-gain comparator are used temporarily during an A/D conversion cycle. An A/D conversion cycle is always started after sending a valid read mode address to a PCF8591 device. The A/D conversion cycle is triggered at the trailing edge of the acknowledge clock pulse and is executed while transmitting the result of the previous conversion。 <br>
  
 +
 +
==Applications==
 +
===Connect to NanoPi M1===
 +
Refer to the following connection diagram to connect the module to the NanoPi M1<br>
 +
[[File:Matrix-Analog_to_Digital_Converter_nanopi_m1.jpg|frameless|600px|Matrix-Analog_to_Digital_Converter_nanopi_m1]]
 +
 +
Connection Details:
 +
{| class="wikitable"
 +
|-
 +
|Matrix-Analog_to_Digital_Converter || NanoPi M1     
 +
|-
 +
|SDA    || Pin3
 +
|-
 +
|SCL    || Pin5
 +
|-
 +
|5V    || Pin4
 +
|-
 +
|GND    || Pin6
 +
|}
 +
 +
===Connect to NanoPi 2===
 +
Refer to the following connection diagram to connect the module to the NanoPi 2:<br>
 +
[[File:Matrix-Analog_to_Digital_Converter_nanopi_2.jpg|frameless|600px|Matrix-Analog_to_Digital_Converter_nanopi_2]]
 +
 +
Connection Details:
 +
{| class="wikitable"
 +
|-
 +
|Matrix-Analog_to_Digital_Converter || NanoPi 2     
 +
|-
 +
|SDA    || Pin3
 +
|-
 +
|SCL    || Pin5
 +
|-
 +
|5V    || Pin4
 +
|-
 +
|GND    || Pin6
 +
|}
 +
 +
===Connect to NanoPi M2 / NanoPi 2 Fire===
 +
Refer to the following connection diagram to connect the module to the NanoPi M2/ NanoPi 2 Fire:<br>
 +
[[File:Matrix-Analog_to_Digital_Converter_nanopi_M2.jpg|frameless|600px|Matrix-Analog_to_Digital_Converter_nanopi_M2]]
 +
 +
Connection Details:
 +
{| class="wikitable"
 +
|-
 +
|Matrix-Analog_to_Digital_Converter || NanoPi M2     
 +
|-
 +
|SDA    || Pin3
 +
|-
 +
|SCL    || Pin5
 +
|-
 +
|5V    || Pin4
 +
|-
 +
|GND    || Pin6
 +
|}
 +
 +
===Connect to NanoPC-T2===
 +
Refer to the following connection diagram to connect the module to the NanoPC-T2<br>
 +
[[File:Matrix-Analog_to_Digital_Converter_NanoPC-T2.jpg|frameless|600px|Matrix-Analog_to_Digital_Converter_NanoPC-T2]]
 +
 +
Connection Details:
 +
{| class="wikitable"
 +
|-
 +
|Matrix-Analog_to_Digital_Converter || NanoPC-T2
 +
|-
 +
|SDA    || Pin6
 +
|-
 +
|SCL    || Pin5
 +
|-
 +
|5V    || Pin29
 +
|-
 +
|GND    || Pin30
 +
|}
 +
 +
==Compile & Run Test Program==
 +
Boot your ARM board with Debian and copy the matrix code:
 +
<syntaxhighlight lang="bash">
 +
$ apt-get update && apt-get install git
 +
$ git clone https://github.com/friendlyarm/matrix.git
 +
</syntaxhighlight>
 +
If your cloning is done successfully a "matrix" directory will be generated.
 +
 +
Compile and install Matrix:
 +
<syntaxhighlight lang="bash">
 +
$ cd matrix
 +
$ make && make install
 +
</syntaxhighlight>
 +
 +
Run test program:
 +
<syntaxhighlight lang="bash">
 +
$ matrix-adc
 +
</syntaxhighlight>
 +
Note: this module is not plug and play therefore before running the module please make sure it is connected to an ARM board.<br>
 +
Here is what you should observe:<br>
 +
<syntaxhighlight lang="bash">
 +
The channel0 value is 2460
 +
</syntaxhighlight>
 +
When Channel 0 is connected to 5V its value reaches the maximum: 2550. When it is grounded its value is 0.
 +
 +
==Code Sample==
 +
This Matrix code sample can work with all the ARM boards mentioned in this module's wiki. The name of this code sample is "matrix-analog_to_digital_converter". Here is its source code:
 +
<syntaxhighlight lang="c">
 +
int main(int argc, char ** argv)
 +
{
 +
    int i = 0;
 +
    int value = 0;
 +
    int channel = 0;
 +
 +
    if (boardInit() < 0) {
 +
        printf("Fail to init board\n");
 +
        return -1;
 +
    }
 +
   
 +
    if (argc == 2)
 +
        channel = atoi(argv[1]);
 +
    system("modprobe "DRIVER_MODULE);
 +
    signal(SIGINT, intHandler);
 +
    for (i=0; i<ADC_READ_TIMES; i++) {
 +
        if (pcf8591Read(channel, &value) != -1) {
 +
            printf("The channel%d value is %d\n", channel, value);
 +
        } else {
 +
            printf("Fail to get channel%d value\n", channel);
 +
        }
 +
    }
 +
    system("rmmod "DRIVER_MODULE);
 +
   
 +
    return 0;
 +
}
 +
</syntaxhighlight>
 +
For more details about this APIs called in this code sample refer to [[Matrix API reference manual]] <br>
 +
 +
 +
<!---
 
==Download Matrix Source Code==
 
==Download Matrix Source Code==
All the matrix modules' code samples are open source. They are maintained on GitHub - git://github.com/friendlyarm/matrix.git <br>
+
All the matrix modules' code samples are open source. They are maintained on GitHub - https://github.com/friendlyarm/matrix.git <br>
 
Each branch in this hub contains the matrix modules' code samples for a board that the matrix modules can work with.<br>
 
Each branch in this hub contains the matrix modules' code samples for a board that the matrix modules can work with.<br>
 
* The nanopi branch contains the matrix modules' code samples for the NanoPi
 
* The nanopi branch contains the matrix modules' code samples for the NanoPi
 +
* The nanopi 2 branch contains the matrix modules' code samples for the NanoPi 2
 
* The tiny4412 branch contains the matrix modules' code samples for the Tiny4412
 
* The tiny4412 branch contains the matrix modules' code samples for the Tiny4412
 
* The raspberrypi branch contains the matrix modules' code samples for the RaspberryPi
 
* The raspberrypi branch contains the matrix modules' code samples for the RaspberryPi
Line 66: Line 200:
 
Clone the matrix code from GitHub
 
Clone the matrix code from GitHub
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ git clone git://github.com/friendlyarm/matrix.git
+
$ git clone https://github.com/friendlyarm/matrix.git
 
</syntaxhighlight>
 
</syntaxhighlight>
 
If this is successful a "matrix" directory will be generated, which will contain all the matrix modules' code samples.
 
If this is successful a "matrix" directory will be generated, which will contain all the matrix modules' code samples.
 +
 +
==Connect to NanoPi 2==
 +
===Hardware Connection===
 +
Please refer to the following connection diagram to connect the Matrix-Analog_to_Digital_Converter to the NanoPi 2:<br>
 +
[[File:Matrix-Analog_to_Digital_Converter_nanopi_2.jpg|frameless|600px|Matrix-Analog_to_Digital_Converter_nanopi_2]]
 +
 +
Connection Details:
 +
{| class="wikitable"
 +
|-
 +
|Matrix-Analog_to_Digital_Converter || NanoPi 2     
 +
|-
 +
|SDA    || Pin3
 +
|-
 +
|SCL    || Pin5
 +
|-
 +
|5V    || Pin4
 +
|-
 +
|GND    || Pin6
 +
|}
 +
 +
===Compile Test Program===
 +
Please login the matrix hub and enter the nanopi2 branch
 +
<syntaxhighlight lang="bash">
 +
$ cd matrix
 +
$ git checkout nanopi2
 +
</syntaxhighlight>
 +
 +
Compile the matrix code
 +
<syntaxhighlight lang="bash">
 +
$ make CROSS_COMPILE=arm-linux- clean
 +
$ make CROSS_COMPILE=arm-linux-
 +
$ make CROSS_COMPILE=arm-linux- install
 +
</syntaxhighlight>
 +
Note: please make sure to install the cross compiler "arm-linux-gcc-4.9.3" on your PC, which is used to compile files for the NanoPi2.<br>
 +
Generated library files are under the "install/lib" directory. Applications are under the "install/usr/bin" directory. The test program for the "Matrix-Analog_to_Digital_Converter" module is "matrix-adc".<br>
 +
The driver is under the modules directory and its source code is in github: https://github.com/friendlyarm/linux-3.4.y.git <br>
 +
 +
===Run Test Program===
 +
Please insert a TF card which is flashed with Debian to a Linux host and mount its boot and rootfs sections.<br>
 +
We assume the rootfs is mounted to /media/rootfs then please run the following commands to copy the driver, library and test program to the card.<br>
 +
<syntaxhighlight lang="bash">
 +
$ cp modules /media/rootfs/ -r
 +
$ cp install/lib/* /media/rootfs/lib/ -d
 +
$ cp install/usr/bin/* /media/rootfs/usr/bin/
 +
</syntaxhighlight>
 +
 +
Insert this TF card to your NanoPi 2, power on and run the following commands.<br>
 +
<syntaxhighlight lang="bash">
 +
$ cd /modules
 +
$ insmod pcf8591.ko
 +
</syntaxhighlight>
 +
 +
Start the matrix-adc program.<br>
 +
<syntaxhighlight lang="bash">
 +
$ matrix-adc
 +
</syntaxhighlight>
 +
Note: this module is not plug and play therefore before running the module please make sure it is connected to a NanoPi 2.<br>
 +
Here is what you should expect:<br>
 +
[[File:matrix-adc_result.png|frameless||matrix-adc_result]] <br>
 +
The program reads Channel 0's value
 +
 +
===Code Sample===
 +
<syntaxhighlight lang="c">
 +
int main(int argc, char ** argv)
 +
{
 +
    int i = 0;
 +
    int value = 0;
 +
    int channel = 0;
 +
 +
    if (argc == 2) {
 +
        channel = atoi(argv[1]);
 +
    }
 +
   
 +
    for (i=0; i<ADC_READ_TIMES; i++) {
 +
        if (pcf8591Read(channel, &value) != -1) {
 +
            printf("channel%d value=%d\n", channel, value);
 +
        } else {
 +
            printf("Fail to get channel%d value\n", channel);       
 +
        }
 +
        usleep(10000);
 +
    }
 +
    return 0;
 +
}
 +
</syntaxhighlight>
  
 
==Connect to NanoPi==
 
==Connect to NanoPi==
Line 115: Line 333:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Note: please make sure to install the cross compiler "arm-linux-gcc-4.4.3" on your PC, which is used to compile files for the NanoPi-Debian.<br>
 
Note: please make sure to install the cross compiler "arm-linux-gcc-4.4.3" on your PC, which is used to compile files for the NanoPi-Debian.<br>
Generated library files are under the "install/lib" directory. Applications are under the "install/usr/bin" directory. The test program for the "Matrix-Ultrasonic_Ranger" module is "matrix-ultrasonic_ranger".<br>
+
Generated library files are under the "install/lib" directory. Applications are under the "install/usr/bin" directory. The test program for the "Matrix-Analog_to_Digital_Converter" module is "matrix-adc".<br>
  
 
===Run Test Program===
 
===Run Test Program===
Line 127: Line 345:
 
Note: this module is not plug and play therefore before running the module please make sure it is connected to a NanoPi.
 
Note: this module is not plug and play therefore before running the module please make sure it is connected to a NanoPi.
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ matrix-analog_to_digital_converter
+
$ matrix-adc
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Line 197: Line 415:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Note: please make sure to install the cross compiler "arm-linux-gnueabihf-gcc-4.7.3" on your PC, which is used to compile files for the Tiny4412-UbuntuCore. <br>
 
Note: please make sure to install the cross compiler "arm-linux-gnueabihf-gcc-4.7.3" on your PC, which is used to compile files for the Tiny4412-UbuntuCore. <br>
Generated library files are under the "install/lib" directory. Applications are under the "install/usr/bin" directory. The test program for the "Matrix-Ultrasonic_Ranger" module is "matrix-ultrasonic_ranger".
+
Generated library files are under the "install/lib" directory. Applications are under the "install/usr/bin" directory. The test program for the "Matrix-Analog_to_Digital_Converter" module is "matrix-adc".
  
 
===Run Test Program===
 
===Run Test Program===
Line 208: Line 426:
 
Power on the Tiny4412 and run the following command in UbuntuCore's terminal  
 
Power on the Tiny4412 and run the following command in UbuntuCore's terminal  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ matrix-analog_to_digital_converter
+
$ matrix-adc
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Line 243: Line 461:
 
==Connect to RaspberryPi==
 
==Connect to RaspberryPi==
  
==与Arduino连接使用==
+
==Connect to Arduino==
 +
--->
  
==相关资料==
+
 
 +
==Resources==
 
[http://www.nxp.com/documents/data_sheet/PCF8591.pdf PCF8591.pdf]
 
[http://www.nxp.com/documents/data_sheet/PCF8591.pdf PCF8591.pdf]
 +
 +
==Update Log==
 +
===Feb-19-2016===
 +
* Added Section 5
 +
 +
===June-17-2016===
 +
* Re-organized and simplified wiki
  
  

Latest revision as of 10:28, 19 June 2016

查看中文

1 Introduction

Analog to Digital Converter
  • The Matrix-Analog_to_Digital_Converter is a single-chip, single-supply low-power 8-bit CMOS data acquisition device.
  • It utilizes the PCF8591 chip 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. The maximum conversion rate is given by the maximum speed of the I2C-bus.

  • The I2C hardware address is configured to 1001000x
  • The operating supply voltage is from 2.5V to 6.0V,Among the 2.54 mm spacing pin header the 5V pin is the supply voltage. If you need 0 - 3.3V analog signals and keep the acquisition resolution you can connect it to a 3.3V supply voltage.

2 Features

  • Wide range supply voltage: 2.5V - 6.0V
  • I2C interface: 3.3V/5V
  • 8-bit A/D x 4
  • 8-bit D/A x 1
  • Small and easy to be used in various situations
  • 2.54 mm spacing pin
  • PCB dimension (mm): 16 x 24

Analog to Digital PCB

  • Pin Description:
Pin Description
SDA I2C SDA
SCL I2C SCL
5V Supply Voltage 5V
GND Ground
AOUT Analog Output
A3 Analog Input3
A2 Analog Input2
A1 Analog Input1
A0 Analog Input0

3 Basic Device Operation

The PCF8591's I2C-bus is for bidirectional, two-line communication between different ICs or modules. The two lines are a Serial DAta line (SDA) and a Serial CLock line (SCL). Both lines must be connected to a positive supply via a pull-up resistor. Data transfer may be initiated only when the bus is not busy. The AINT0 - AINT4 pins are analog inputs which can be configured to single-ended or differential inputs. The supply voltage is 0 - VDD.
1. 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 is always 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.
2. The second byte sent to a PCF8591 device is 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.
3. The on-chip D/A converter and a high-gain comparator are used temporarily during an A/D conversion cycle. An A/D conversion cycle is always started after sending a valid read mode address to a PCF8591 device. The A/D conversion cycle is triggered at the trailing edge of the acknowledge clock pulse and is executed while transmitting the result of the previous conversion。


4 Applications

4.1 Connect to NanoPi M1

Refer to the following connection diagram to connect the module to the NanoPi M1
Matrix-Analog_to_Digital_Converter_nanopi_m1

Connection Details:

Matrix-Analog_to_Digital_Converter NanoPi M1
SDA Pin3
SCL Pin5
5V Pin4
GND Pin6

4.2 Connect to NanoPi 2

Refer to the following connection diagram to connect the module to the NanoPi 2:
Matrix-Analog_to_Digital_Converter_nanopi_2

Connection Details:

Matrix-Analog_to_Digital_Converter NanoPi 2
SDA Pin3
SCL Pin5
5V Pin4
GND Pin6

4.3 Connect to NanoPi M2 / NanoPi 2 Fire

Refer to the following connection diagram to connect the module to the NanoPi M2/ NanoPi 2 Fire:
Matrix-Analog_to_Digital_Converter_nanopi_M2

Connection Details:

Matrix-Analog_to_Digital_Converter NanoPi M2
SDA Pin3
SCL Pin5
5V Pin4
GND Pin6

4.4 Connect to NanoPC-T2

Refer to the following connection diagram to connect the module to the NanoPC-T2
Matrix-Analog_to_Digital_Converter_NanoPC-T2

Connection Details:

Matrix-Analog_to_Digital_Converter NanoPC-T2
SDA Pin6
SCL Pin5
5V Pin29
GND Pin30

5 Compile & Run Test Program

Boot your ARM board with Debian and copy the matrix code:

$ apt-get update && apt-get install git
$ git clone https://github.com/friendlyarm/matrix.git

If your cloning is done successfully a "matrix" directory will be generated.

Compile and install Matrix:

$ cd matrix
$ make && make install

Run test program:

$ matrix-adc

Note: this module is not plug and play therefore before running the module please make sure it is connected to an ARM board.
Here is what you should observe:

The channel0 value is 2460

When Channel 0 is connected to 5V its value reaches the maximum: 2550. When it is grounded its value is 0.

6 Code Sample

This Matrix code sample can work with all the ARM boards mentioned in this module's wiki. The name of this code sample is "matrix-analog_to_digital_converter". Here is its source code:

int main(int argc, char ** argv)
{
    int i = 0;
    int value = 0;
    int channel = 0;
 
    if (boardInit() < 0) {
        printf("Fail to init board\n");
        return -1;
    }
 
    if (argc == 2)
        channel = atoi(argv[1]);
    system("modprobe "DRIVER_MODULE);
    signal(SIGINT, intHandler);
    for (i=0; i<ADC_READ_TIMES; i++) {
        if (pcf8591Read(channel, &value) != -1) {
            printf("The channel%d value is %d\n", channel, value);
        } else {
            printf("Fail to get channel%d value\n", channel);
        }
    }
    system("rmmod "DRIVER_MODULE);
 
    return 0;
}

For more details about this APIs called in this code sample refer to Matrix API reference manual



7 Resources

PCF8591.pdf

8 Update Log

8.1 Feb-19-2016

  • Added Section 5

8.2 June-17-2016

  • Re-organized and simplified wiki