/*
* Read MCP3002 with wiringPiSPIDataRW
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <wiringPi.h>
#include <wiringPiSPI.h>
#define DEBUG 1
#define SPI_CHANNEL 0 // /dev/spidev0.0
//#define SPI_CHANNEL 1 // /dev/spidev0.1
#define BCD(c) 5 * (5 * (5 * (5 * (5 * (5 * (5 * (c &
128) + (c & 64))\
+ (c & 32)) + (c & 16)) + (c & 8)) + (c
& 4)) + (c & 2)) + (c & 1)
int main(int argc, char **argv){
int retCode;
int i;
int a2dVal = 0;
unsigned char data[4];
// SPI channel 0 を 1MHz で開始。
if (wiringPiSPISetup(SPI_CHANNEL, 1000000) < 0)
{
printf("SPISetup failed:\n");
return 1;
}
unsigned char cmd[2];
cmd[0] = 0x60;
cmd[1] = 0x68;
for (i=0;i<2;i++) {
data[0] = cmd[i]; // first byte
transmitted -> start bit
data[1] =
0; // don't care
if(DEBUG)printf("[MCP3002]data[write]=0x%02x-0x%02x\n",data[0],data[1]);
retCode=wiringPiSPIDataRW
(SPI_CHANNEL,data,2);
if(DEBUG)printf("[MCP3002]wiringPiSPIDataRW=%d\n",retCode);
if(DEBUG)printf("[MCP3002]data[read]=0x%02x-0x%02x\n",data[0],data[1]);
if(DEBUG)printf("[MCP3002]data[read]=0b%08d-0b%08d\n",BCD(data[0]),BCD(data[1]));
a2dVal = (data[0]<< 8) &
0b1100000000; //first 2 bit
a2dVal |= (data[1] & 0xff);
printf("a2dVal=%d\n",a2dVal);
printf("\n");
data[0] = cmd[i]; // first byte
transmitted -> start bit
data[1] =
0; // don't care
data[2] =
0; // don't care
data[3] =
0; // don't care
if(DEBUG)printf("[MCP3002]data[write]=0x%02x-0x%02x-0x%02x-0x%02x\n",data[0],data[1],data[2],data[3]);
retCode=wiringPiSPIDataRW
(SPI_CHANNEL,data,4);
if(DEBUG)printf("[MCP3002]wiringPiSPIDataRW=%d\n",retCode);
if(DEBUG)printf("[MCP3002]data[read]=0x%02x-0x%02x-0x%02x-0x%02x\n",data[0],data[1],data[2],data[3]);
if(DEBUG)printf("[MCP3002]data[read]=0b%08d-0b%08d-0b%08d-0b%08d\n",BCD(data[0]),BCD(data[1]),BCD(data[2]),BCD(data[3]));
a2dVal = (data[0]<< 8) &
0b1100000000; //first 2 bit
a2dVal |= (data[1] & 0xff);
printf("a2dVal=%d\n",a2dVal);
printf("\n");
}
}
|