1 | /* ltc2440 <------------------------> Arduino
|
2 | * 11: CS to digital pin 10 (SS pin)
|
3 | * 7: SDI to digital pin 11 (MOSI pin)
|
4 | * 12: SDO to digital pin 12 (MISO pin)
|
5 | * 13: SCK to digital pin 13 (SCK pin)
|
6 | * 15: BUSY to digital pin 4
|
7 | * 14: f0 - ground
|
8 | * 10: EXT - ground
|
9 | * 1: GND - ground
|
10 | * 2: VCC - 5V supply
|
11 | */
|
12 |
|
13 |
|
14 | int i=0;
|
15 | int LED;
|
16 | #include <SPI.h> // include the SPI library
|
17 |
|
18 | // set I/O pins used in addition to clock, data in, data out
|
19 | const byte slaveSelectPin = 10; // digital pin 10 for /CS
|
20 | #define DATAREADY 4
|
21 |
|
22 |
|
23 | void setup() {
|
24 | // put your setup code here, to run once:
|
25 |
|
26 |
|
27 | pinMode (DATAREADY, INPUT); // Pin 4
|
28 | pinMode (slaveSelectPin, OUTPUT); // SS Pin 10
|
29 | digitalWrite(slaveSelectPin,HIGH); // chip select is active low
|
30 |
|
31 | SPI.begin(); // initialize SPI, covering MOSI,MISO,SCK signals
|
32 | SPI.setBitOrder(MSBFIRST); // data is clocked in MSB first
|
33 | SPI.setDataMode(SPI_MODE0); // SCLK idle low (CPOL=0), MOSI read on rising edge (CPHI=0)
|
34 | SPI.setClockDivider(SPI_CLOCK_DIV2); // system clock = 16 MHz, chip max = 1 MHz
|
35 |
|
36 |
|
37 |
|
38 |
|
39 | pinMode(5,OUTPUT); //IR LED
|
40 | pinMode(7,OUTPUT); //Red LED
|
41 | Serial.begin(250000);
|
42 |
|
43 | }
|
44 |
|
45 |
|
46 |
|
47 |
|
48 | //====================================
|
49 | //Main LOOP
|
50 | //====================================
|
51 | void loop() {
|
52 | // put your main code here, to run repeatedly:
|
53 | double volts;
|
54 | unsigned long in; // incoming serial 32-bit word
|
55 | unsigned long sum = 0;
|
56 |
|
57 | int s=0;
|
58 |
|
59 | if (s==0)
|
60 | {
|
61 |
|
62 |
|
63 | PORTD |= _BV(LED);
|
64 | delay(5);
|
65 | digitalWrite(slaveSelectPin,LOW);
|
66 | digitalWrite(slaveSelectPin,HIGH);
|
67 | if(digitalRead(DATAREADY)==LOW)
|
68 | {
|
69 | in = SpiRead();
|
70 | in &= 0B00011111111111111111111111111111;//0x1FFFFFFF; // force high three bits to zero
|
71 | in = in>>5; // move lowest 5 bits LSB
|
72 | sum = in;
|
73 | volts = sum *(0.03680586815)
|
74 | Serial.println(volts);
|
75 | PORTD &= ~_BV(LED);
|
76 |
|
77 | if(i==1){
|
78 | i=0;
|
79 |
|
80 | } else {
|
81 | i=1;
|
82 | }
|
83 | }
|
84 | s=1;
|
85 |
|
86 | }
|
87 |
|
88 |
|
89 | if (s==1){
|
90 |
|
91 | if(i==1){
|
92 | LED=5; //ir
|
93 |
|
94 |
|
95 | } else {
|
96 |
|
97 | LED=7; //red
|
98 |
|
99 | s=0;
|
100 | }
|
101 | }
|
102 | }
|
103 |
|
104 |
|
105 | // =================================================================
|
106 | // SpiRead() -- read out 4 bytes from LTC2440 chip via SPI interface
|
107 | // =================================================================
|
108 |
|
109 | unsigned long SpiRead(void) {
|
110 |
|
111 | unsigned long result = 0;
|
112 | unsigned long b;
|
113 |
|
114 |
|
115 | digitalWrite(slaveSelectPin,LOW); // take the SS pin low to select the chip
|
116 |
|
117 | b = SPI.transfer(0x28); // B3
|
118 | result = b<<8;
|
119 | b = SPI.transfer(0); // B2
|
120 | result |= b;
|
121 | result = result<<8;
|
122 | b = SPI.transfer(0); // B1
|
123 | result |= b;
|
124 | result = result<<8;
|
125 | b = SPI.transfer(0); // B0
|
126 | result |= b;
|
127 |
|
128 | // take the SS pin high to de-select the chip:
|
129 | digitalWrite(slaveSelectPin,HIGH);
|
130 |
|
131 | return(result);//}
|
132 | }
|