Skip to content

Commit 77c9147

Browse files
committed
initial commit
1 parent 6239678 commit 77c9147

24 files changed

+6340
-0
lines changed

Diff for: ADS1231.cpp

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#include <Arduino.h>
2+
#include <limits.h>
3+
#include "ADS1231.h"
4+
5+
unsigned long ads1231_last_millis = 0;
6+
int ads1231_offset = 0;
7+
8+
/*
9+
* Initialize the interface pins
10+
*/
11+
ADS1231::ADS1231(uint8_t clkPin, uint8_t dataPin)
12+
{
13+
pData = dataPin;
14+
pClk = clkPin;
15+
16+
}
17+
18+
bool ADS1231::begin() {
19+
// Init clock pin
20+
pinMode(pClk, OUTPUT);
21+
22+
// Init data pin
23+
pinMode(pData, INPUT);
24+
25+
// Enable pullup to get a consistent state in case of disconnect
26+
digitalWrite(pData, HIGH);
27+
28+
// Set CLK low to get the ADS1231 out of suspend
29+
digitalWrite(pClk, 0);
30+
31+
if ((pClk > 1) && (pClk < 14) &&
32+
(pData > 1) && (pData < 14) &&
33+
(pData != pClk)) {
34+
return 1;
35+
} else {
36+
return 0;
37+
}
38+
39+
40+
}
41+
42+
/*
43+
* GET raw ADC value. This call is blocking. up to 100ms in 10SPS, 12.5 ms in 80 SPS
44+
*/
45+
int ADS1231::getValue(long& val)
46+
{
47+
int i=0;
48+
unsigned long start;
49+
50+
/* A high to low transition on the data pin for data ready*/
51+
start=millis();
52+
while(digitalRead(pData) != HIGH)
53+
{
54+
if(millis() > start+150)
55+
return ADS1231_ERROR_HIGH_TIMEOUT; // Timeout waiting for HIGH
56+
}
57+
start=millis();
58+
while(digitalRead(pData) != LOW)
59+
{
60+
if(millis() > start+150)
61+
return ADS1231_ERROR_LOW_TIMEOUT; // Timeout waiting for LOW
62+
}
63+
ads1231_last_millis = millis();
64+
65+
// Read 24 bits
66+
for(i=23 ; i >= 0; i--) {
67+
digitalWrite(pClk, HIGH);
68+
val = (val << 1) + digitalRead(pData);
69+
digitalWrite(pClk, LOW);
70+
}
71+
72+
/* Accomodate for sign bit */
73+
val = (val << 8) / 256;
74+
75+
/* Force data pin low to catch rising edge on next read*/
76+
digitalWrite(pClk, HIGH);
77+
digitalWrite(pClk, LOW);
78+
79+
return 1; // Success
80+
}
81+
82+

Diff for: ADS1231.h

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* Library for the TI ADS1231 24-Bit Analog-to-Digital Converter
3+
*/
4+
5+
#ifndef ADS1231_H
6+
#define ADS1231_H
7+
8+
#define ADS1231_ERROR_HIGH_TIMEOUT -1
9+
#define ADS1231_ERROR_LOW_TIMEOUT -2
10+
11+
class ADS1231 {
12+
public:
13+
ADS1231(uint8_t clkPin,uint8_t dataPin);
14+
int getValue(long &val);
15+
bool begin();
16+
private:
17+
uint8_t pData;
18+
uint8_t pClk;
19+
};
20+
21+
22+
#endif

Diff for: Board/pins_arduino.txt

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
3+
4+
This library is free software; you can redistribute it and/or
5+
modify it under the terms of the GNU Lesser General Public
6+
License as published by the Free Software Foundation; either
7+
version 2.1 of the License, or (at your option) any later version.
8+
9+
This library is distributed in the hope that it will be useful,
10+
but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12+
See the GNU Lesser General Public License for more details.
13+
14+
You should have received a copy of the GNU Lesser General Public
15+
License along with this library; if not, write to the Free Software
16+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17+
*/
18+
19+
// API compatibility
20+
#include "variant.h"
21+

Diff for: Board/variant.txt

+132
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
/*
2+
Copyright (c) 2016 SODAQ. All right reserved.
3+
4+
This library is free software; you can redistribute it and/or
5+
modify it under the terms of the GNU Lesser General Public
6+
License as published by the Free Software Foundation; either
7+
version 2.1 of the License, or (at your option) any later version.
8+
9+
This library is distributed in the hope that it will be useful,
10+
but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12+
See the GNU Lesser General Public License for more details.
13+
14+
You should have received a copy of the GNU Lesser General Public
15+
License along with this library; if not, write to the Free Software
16+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17+
*/
18+
19+
#include "variant.h"
20+
21+
/*
22+
* Pins descriptions
23+
*/
24+
const PinDescription g_APinDescription[]=
25+
{
26+
// 0..3 Main IO Pins (D0-D3) Digital Properties
27+
{ PORTA, 2, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 },
28+
{ PORTA, 3, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 },
29+
{ PORTB, 8, PIO_TIMER, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM4_CH0, TC4_CH0, EXTERNAL_INT_8 }, // TC4/WO[0]
30+
{ PORTB, 9, PIO_TIMER, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM4_CH1, TC4_CH1, EXTERNAL_INT_9 }, // TC4/WO[1]
31+
32+
// 4..5 Other Digital Pins
33+
{ PORTA, 21, PIO_INPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 }, // ACCEL_INT2
34+
{ PORTA, 20, PIO_INPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_4 }, // ACCEL_INT1
35+
36+
// 6..13 Main IO Pins (D6-D13) Digital Properties
37+
{ PORTA, 6, PIO_TIMER, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM1_CH0, TCC1_CH0, EXTERNAL_INT_6 }, // TCC1/WO[0]
38+
{ PORTA, 7, PIO_TIMER, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM1_CH1, TCC1_CH1, EXTERNAL_INT_7 }, // TCC1/WO[1]
39+
{ PORTA, 8, PIO_TIMER, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH0, TCC0_CH0, EXTERNAL_INT_NMI }, // TCC0/WO[0]
40+
{ PORTA, 9, PIO_TIMER, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH1, TCC0_CH1, EXTERNAL_INT_9 }, // TCC0/WO[1]
41+
{ PORTA, 10, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER_ALT), No_ADC_Channel, PWM0_CH2, TCC0_CH2, EXTERNAL_INT_10 }, // TCC0/WO[2]
42+
{ PORTA, 11, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER_ALT), No_ADC_Channel, PWM0_CH3, TCC0_CH3, EXTERNAL_INT_11 }, // TCC0/WO[3]
43+
{ PORTB, 2, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 },
44+
{ PORTB, 3, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 },
45+
46+
// 14..21 Other Digital Pins
47+
{ PORTA, 15, PIO_OUTPUT, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH1, TC3_CH1, EXTERNAL_INT_NONE }, // LED_BLUE
48+
{ PORTB, 10, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SARA_R4XX_TOGGLE
49+
{ PORTB, 11, PIO_INPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // NC
50+
{ PORTA, 14, PIO_INPUT, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH0, TC3_CH0, EXTERNAL_INT_NONE }, // LED_RED
51+
{ PORTA, 18, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // GPS_ENABLE
52+
{ PORTA, 16, PIO_INPUT, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM2_CH0, TCC2_CH0, EXTERNAL_INT_NONE }, // LED_GREEN
53+
{ PORTB, 22, PIO_INPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
54+
{ PORTA, 17, PIO_INPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_1 }, // GPS_TIMEPULSE
55+
56+
// 22..33 Main IO Pins Analog Properties
57+
{ PORTA, 2, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel0, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 },
58+
{ PORTA, 3, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel1, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 },
59+
{ PORTB, 8, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel2, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_8 },
60+
{ PORTB, 9, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel3, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_9 },
61+
{ PORTA, 6, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel6, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_6 },
62+
{ PORTA, 7, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel7, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 },
63+
{ PORTA, 8, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel16, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NMI },
64+
{ PORTA, 9, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel17, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_9 },
65+
{ PORTA, 10, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel18, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_10 },
66+
{ PORTA, 11, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel19, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 },
67+
{ PORTB, 2, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel10, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 },
68+
{ PORTB, 3, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel11, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 },
69+
70+
// 34..36 Other Analog Pins
71+
{ PORTA, 2, PIO_ANALOG, (PIN_ATTR_ANALOG), DAC_Channel0, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // DAC/VOUT
72+
{ PORTA, 3, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel1, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // AREF
73+
{ PORTA, 5, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel5, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // BAT_VOLT
74+
75+
// 37..38 USB Pins
76+
{ PORTA, 24, PIO_COM, (PIN_ATTR_NONE), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB_N
77+
{ PORTA, 25, PIO_COM, (PIN_ATTR_NONE), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB_P
78+
79+
// 39..40 Serial
80+
{ PORTB, 3, PIO_SERCOM_ALT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 }, // SERIAL_RX
81+
{ PORTB, 2, PIO_SERCOM_ALT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // SERIAL_TX
82+
83+
// 41..42 Serial1
84+
{ PORTA, 13, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_13 }, // SERIAL1_RX
85+
{ PORTA, 12, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_12 }, // SERIAL1_TX
86+
87+
// 43..46 SPI
88+
{ PORTA, 8, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NMI }, // SPI_MISO
89+
{ PORTA, 9, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_9 }, // SPI_SS
90+
{ PORTA, 10, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_10 }, // SPI_MOSI
91+
#ifdef ENABLE_BASE_SPI
92+
{ PORTA, 7, PIO_SERCOM_ALT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 }, // SPI_SCK
93+
#else
94+
{ PORTA, 11, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 }, // SPI_SCK
95+
#endif
96+
97+
// 47..48 I2C
98+
{ PORTA, 22, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_6 }, // I2C_SDA
99+
{ PORTA, 23, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 }, // I2C_SCL
100+
101+
// 49
102+
{ PORTA, 4, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SARA_ENABLE
103+
104+
// 50..52
105+
{ PORTA, 19, PIO_INPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 }, // MAG_INT
106+
{ PORTA, 27, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SARA_TX_ENABLE
107+
{ PORTA, 28, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // BUZZER
108+
} ;
109+
110+
const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ;
111+
112+
// Multi-serial objects instantiation
113+
SERCOM sercom0( SERCOM0 ) ; // SPI
114+
SERCOM sercom1( SERCOM1 ) ;
115+
SERCOM sercom2( SERCOM2 ) ; // Serial1
116+
SERCOM sercom3( SERCOM3 ) ; // I2C
117+
SERCOM sercom4( SERCOM4 ) ;
118+
SERCOM sercom5( SERCOM5 ) ; // Serial
119+
120+
Uart Serial(&sercom5, PIN_SERIAL_RX, PIN_SERIAL_TX, PAD_SERIAL_RX, PAD_SERIAL_TX ) ;
121+
Uart Serial1(&sercom2, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX);
122+
123+
void SERCOM2_Handler()
124+
{
125+
Serial1.IrqHandler();
126+
}
127+
128+
void SERCOM5_Handler()
129+
{
130+
Serial.IrqHandler();
131+
}
132+

0 commit comments

Comments
 (0)