You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							76 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							76 lines
						
					
					
						
							2.1 KiB
						
					
					
				/* | 
						|
 * mcp3002.c: | 
						|
 *	Extend wiringPi with the MCP3002 SPI Analog to Digital convertor | 
						|
 *	Copyright (c) 2012-2013 Gordon Henderson | 
						|
 *********************************************************************** | 
						|
 * This file is part of wiringPi: | 
						|
 *	https://projects.drogon.net/raspberry-pi/wiringpi/ | 
						|
 * | 
						|
 *    wiringPi is free software: you can redistribute it and/or modify | 
						|
 *    it under the terms of the GNU Lesser General Public License as | 
						|
 *    published by the Free Software Foundation, either version 3 of the | 
						|
 *    License, or (at your option) any later version. | 
						|
 * | 
						|
 *    wiringPi is distributed in the hope that it will be useful, | 
						|
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
						|
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
						|
 *    GNU Lesser General Public License for more details. | 
						|
 * | 
						|
 *    You should have received a copy of the GNU Lesser General Public | 
						|
 *    License along with wiringPi. | 
						|
 *    If not, see <http://www.gnu.org/licenses/>. | 
						|
 *********************************************************************** | 
						|
 */ | 
						|
 | 
						|
#include <wiringPi.h> | 
						|
#include <wiringPiSPI.h> | 
						|
 | 
						|
#include "mcp3002.h" | 
						|
 | 
						|
/* | 
						|
 * myAnalogRead: | 
						|
 *	Return the analog value of the given pin | 
						|
 ********************************************************************************* | 
						|
 */ | 
						|
 | 
						|
static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) | 
						|
{ | 
						|
  unsigned char spiData [2] ; | 
						|
  unsigned char chanBits ; | 
						|
  int chan = pin - node->pinBase ; | 
						|
 | 
						|
  if (chan == 0) | 
						|
    chanBits = 0b11010000 ; | 
						|
  else | 
						|
    chanBits = 0b11110000 ; | 
						|
 | 
						|
  spiData [0] = chanBits ; | 
						|
  spiData [1] = 0 ; | 
						|
 | 
						|
  wiringPiSPIDataRW (node->fd, spiData, 2) ; | 
						|
 | 
						|
  return ((spiData [0] << 8) | (spiData [1] >> 1)) & 0x3FF ; | 
						|
} | 
						|
 | 
						|
 | 
						|
/* | 
						|
 * mcp3002Setup: | 
						|
 *	Create a new wiringPi device node for an mcp3002 on the Pi's | 
						|
 *	SPI interface. | 
						|
 ********************************************************************************* | 
						|
 */ | 
						|
 | 
						|
int mcp3002Setup (const int pinBase, int spiChannel) | 
						|
{ | 
						|
  struct wiringPiNodeStruct *node ; | 
						|
 | 
						|
  if (wiringPiSPISetup (spiChannel, 1000000) < 0) | 
						|
    return FALSE ; | 
						|
 | 
						|
  node = wiringPiNewNode (pinBase, 2) ; | 
						|
 | 
						|
  node->fd         = spiChannel ; | 
						|
  node->analogRead = myAnalogRead ; | 
						|
 | 
						|
  return TRUE ; | 
						|
}
 | 
						|
 |