=head1 NAME
PINE64::MCP300x - Perl interface to the MCP300x family of 10-bit
analog to digital converters.
=head1 SYNOPSIS
use PINE64::MCP300x;
my $adc = PINE64::MCP300x->new(10,12,11,13);
#5 bits because the first is the start bit
my @ch0 = (1,1,0,0,0);
for(my $s=0;$s<200;$s++){
my ($reading, $binval, $voltage ) = $adc->read300x(\@ch0, 50, 5.01);
$voltage = sprintf("%.3f", $voltage);
print "binval: $binval\tvoltage: $voltage vdc\n";
usleep(500000);
}#end for
=head1 DESCRIPTION
This module allows you to control an MCP3004 or MCP3008 10-bit
analog to digital controller via bit-banged SPI using Perl on the
PINE64A+ single board computer. Works in single channel or
differential mode.
=head1 METHODS
=head2 new($clock,$data_in,$data_out,$chip_select)
Takes clock pin number, SPI data in pin number, SPI data out pin
number, SPI chip select pin number, and returns a PINE64::MAX300x
object. Pin numbers are valid PINE64::GPIO objects on the Pi-2
bus.
=head2 read300x($channel_number,$clk_pls_delay,$voltage_reference);
This is the main function of the package. It takes an array
reference to select the channel number and mode (single/differential)
that you want to sample
The following are valid single channel array values:
@ch0 = (1,1,0,0,0);
@ch1 = (1,1,0,0,1);
@ch2 = (1,1,0,1,0);
@ch3 = (1,1,0,1,1);
@ch4 = (1,1,1,0,0);
@ch5 = (1,1,1,0,1);
@ch6 = (1,1,1,1,0);
@ch7 = (1,1,1,1,1);
The following are valid differential channel array values
@ch0_diff = (1,0,0,0,0);
@ch1_diff = (1,0,0,0,1);
@ch2_diff = (1,0,0,1,0);
@ch3_diff = (1,0,0,1,1);
So, when calling read300x, you would pass a reference of the
channel you want to sample
$adc->read300x(\@ch0, 50, $vref);
The second argument is the delay between clock pulses in
milliseconds. This is a crude way to control the sample
speed. I almost always use 50msec, and have had good
results.
The third argument is a reference voltage and is optional.
This method will calculate the returned voltage value based
on the output code of the converter in proportion of the
reference voltage. So if the reference voltage is 50V, and
the output code is 512, the method will return 25V.
The reference voltage can be useful if you are using a voltage
divider circuit to step-down a voltage higher that the
maximum input reference voltage of the MCP300x.
read300x() returns an array that contains an array reference
of the 10-bit binary result i.e. 1011010001, the output code
in decimal i.e. 1024, 567, 311, etc., and the calculated
voltage based on the supplied reference voltage.
Below is an example call to the read300x() method:
my ($reading, $binval, $voltage ) = $adc->read300x(\@ch0, 50, 5.01);