=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);