Sample code for Arduino CAN

Dependencies:   mbed

Committer:
jedh
Date:
Mon Feb 29 19:33:12 2016 +0000
Revision:
0:6ed8574c6258
Arduino CAN

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jedh 0:6ed8574c6258 1 /*! \file CAN.h
jedh 0:6ed8574c6258 2 \brief Library for managing CAN-bus modules
jedh 0:6ed8574c6258 3
jedh 0:6ed8574c6258 4 Copyright (C) 2011 Libelium Comunicaciones Distribuidas S.L.
jedh 0:6ed8574c6258 5 http://www.libelium.com
jedh 0:6ed8574c6258 6
jedh 0:6ed8574c6258 7 This program is free software: you can redistribute it and/or modify
jedh 0:6ed8574c6258 8 it under the terms of the GNU Lesser General Public License as published by
jedh 0:6ed8574c6258 9 the Free Software Foundation, either version 2.1 of the License, or
jedh 0:6ed8574c6258 10 (at your option) any later version.
jedh 0:6ed8574c6258 11
jedh 0:6ed8574c6258 12 This program is distributed in the hope that it will be useful,
jedh 0:6ed8574c6258 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
jedh 0:6ed8574c6258 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
jedh 0:6ed8574c6258 15 GNU Lesser General Public License for more details.
jedh 0:6ed8574c6258 16
jedh 0:6ed8574c6258 17 You should have received a copy of the GNU Lesser General Public License
jedh 0:6ed8574c6258 18 along with this program. If not, see <http://www.gnu.org/licenses/>.
jedh 0:6ed8574c6258 19
jedh 0:6ed8574c6258 20 Version: 0.3
jedh 0:6ed8574c6258 21 Design: David Gascón
jedh 0:6ed8574c6258 22 Implementation: Luis Antonio Martín Nuez
jedh 0:6ed8574c6258 23
jedh 0:6ed8574c6258 24 */
jedh 0:6ed8574c6258 25
jedh 0:6ed8574c6258 26 /*! \def WaspCAN_h
jedh 0:6ed8574c6258 27 \brief The library flag
jedh 0:6ed8574c6258 28 */
jedh 0:6ed8574c6258 29
jedh 0:6ed8574c6258 30 #ifndef ARDUINOCAN_h
jedh 0:6ed8574c6258 31 #define ARDUINOCAN_h
jedh 0:6ed8574c6258 32
jedh 0:6ed8574c6258 33
jedh 0:6ed8574c6258 34 /******************************************************************************
jedh 0:6ed8574c6258 35 * Includes
jedh 0:6ed8574c6258 36 ******************************************************************************/
jedh 0:6ed8574c6258 37
jedh 0:6ed8574c6258 38
jedh 0:6ed8574c6258 39
jedh 0:6ed8574c6258 40 /******************************************************************************
jedh 0:6ed8574c6258 41 * Definitions & Declarations
jedh 0:6ed8574c6258 42 ******************************************************************************/
jedh 0:6ed8574c6258 43
jedh 0:6ed8574c6258 44 //CAN-bus connection pins
jedh 0:6ed8574c6258 45
jedh 0:6ed8574c6258 46 #define CAN_CS 6
jedh 0:6ed8574c6258 47 #define CAN_INT 4
jedh 0:6ed8574c6258 48
jedh 0:6ed8574c6258 49 //MCP2515 Opcodes
jedh 0:6ed8574c6258 50
jedh 0:6ed8574c6258 51 #define SPI_RESET 0xC0
jedh 0:6ed8574c6258 52 #define SPI_READ 0x03
jedh 0:6ed8574c6258 53 #define SPI_READ_RX 0x90
jedh 0:6ed8574c6258 54 #define SPI_WRITE 0x02
jedh 0:6ed8574c6258 55 #define SPI_WRITE_TX 0x40
jedh 0:6ed8574c6258 56 #define SPI_RTS 0x80
jedh 0:6ed8574c6258 57 #define SPI_READ_STATUS 0xA0
jedh 0:6ed8574c6258 58 #define SPI_RX_STATUS 0xB0
jedh 0:6ed8574c6258 59 #define SPI_BIT_MODIFY 0x05
jedh 0:6ed8574c6258 60
jedh 0:6ed8574c6258 61 #define LISTEN_ONLY_MODE 0x01
jedh 0:6ed8574c6258 62 #define LOOPBACK_MODE 0x02
jedh 0:6ed8574c6258 63 #define SLEEP_MODE 0x03
jedh 0:6ed8574c6258 64 #define NORMAL_MODE 0x04
jedh 0:6ed8574c6258 65
jedh 0:6ed8574c6258 66 /****************************************************************************
jedh 0:6ed8574c6258 67 MCP2515 REGISTERS
jedh 0:6ed8574c6258 68 ****************************************************************************/
jedh 0:6ed8574c6258 69
jedh 0:6ed8574c6258 70 //Message acceptance filters registers - Buffer 0
jedh 0:6ed8574c6258 71
jedh 0:6ed8574c6258 72 #define RXF0SIDH 0x00
jedh 0:6ed8574c6258 73 #define RXF0SIDL 0x01
jedh 0:6ed8574c6258 74 #define RXF0EID8 0x02
jedh 0:6ed8574c6258 75 #define RXF0EID0 0x03
jedh 0:6ed8574c6258 76 #define RXF1SIDH 0x04
jedh 0:6ed8574c6258 77 #define RXF1SIDL 0x05
jedh 0:6ed8574c6258 78 #define RXF1EID8 0x06
jedh 0:6ed8574c6258 79 #define RXF1EID0 0x07
jedh 0:6ed8574c6258 80 #define RXF2SIDH 0x08
jedh 0:6ed8574c6258 81 #define RXF2SIDL 0x09
jedh 0:6ed8574c6258 82 #define RXF2EID8 0x0A
jedh 0:6ed8574c6258 83 #define RXF2EID0 0x0B
jedh 0:6ed8574c6258 84
jedh 0:6ed8574c6258 85 //Digital outputs/inputs registers
jedh 0:6ed8574c6258 86
jedh 0:6ed8574c6258 87 #define BFPCTRL 0x0C
jedh 0:6ed8574c6258 88 #define TXRTSCTRL 0x0D
jedh 0:6ed8574c6258 89
jedh 0:6ed8574c6258 90 //CAN-bus control and status registers
jedh 0:6ed8574c6258 91
jedh 0:6ed8574c6258 92 #define CANSTAT 0x0E
jedh 0:6ed8574c6258 93 #define CANCTRL 0x0F
jedh 0:6ed8574c6258 94
jedh 0:6ed8574c6258 95 //Message acceptance filters registerts - Buffer 1
jedh 0:6ed8574c6258 96
jedh 0:6ed8574c6258 97 #define RXF3SIDH 0x10
jedh 0:6ed8574c6258 98 #define RXF3SIDL 0x11
jedh 0:6ed8574c6258 99 #define RXF3EID8 0x12
jedh 0:6ed8574c6258 100 #define RXF3EID0 0x13
jedh 0:6ed8574c6258 101 #define RXF4SIDH 0x14
jedh 0:6ed8574c6258 102 #define RXF4SIDL 0x15
jedh 0:6ed8574c6258 103 #define RXF4EID8 0x16
jedh 0:6ed8574c6258 104 #define RXF4EID0 0x17
jedh 0:6ed8574c6258 105 #define RXF5SIDH 0x18
jedh 0:6ed8574c6258 106 #define RXF5SIDL 0x19
jedh 0:6ed8574c6258 107 #define RXF5EID8 0x1A
jedh 0:6ed8574c6258 108 #define RXF5EID0 0x1B
jedh 0:6ed8574c6258 109
jedh 0:6ed8574c6258 110 //Error counters registers
jedh 0:6ed8574c6258 111
jedh 0:6ed8574c6258 112 #define TEC 0x1C
jedh 0:6ed8574c6258 113 #define REC 0x1D
jedh 0:6ed8574c6258 114
jedh 0:6ed8574c6258 115 //Message acceptance masks registers
jedh 0:6ed8574c6258 116
jedh 0:6ed8574c6258 117 #define RXM0SIDH 0x20
jedh 0:6ed8574c6258 118 #define RXM0SIDL 0x21
jedh 0:6ed8574c6258 119 #define RXM0EID8 0x22
jedh 0:6ed8574c6258 120 #define RXM0EID0 0x23
jedh 0:6ed8574c6258 121 #define RXM1SIDH 0x24
jedh 0:6ed8574c6258 122 #define RXM1SIDL 0x25
jedh 0:6ed8574c6258 123 #define RXM1EID8 0x26
jedh 0:6ed8574c6258 124 #define RXM1EID0 0x27
jedh 0:6ed8574c6258 125
jedh 0:6ed8574c6258 126 //Bit timing registers
jedh 0:6ed8574c6258 127
jedh 0:6ed8574c6258 128 #define CNF3 0x28
jedh 0:6ed8574c6258 129 #define CNF2 0x29
jedh 0:6ed8574c6258 130 #define CNF1 0x2A
jedh 0:6ed8574c6258 131
jedh 0:6ed8574c6258 132 //Interrups registers
jedh 0:6ed8574c6258 133
jedh 0:6ed8574c6258 134 #define CANINTE 0x2B
jedh 0:6ed8574c6258 135 #define CANINTF 0x2C
jedh 0:6ed8574c6258 136
jedh 0:6ed8574c6258 137 //Error flags registers
jedh 0:6ed8574c6258 138
jedh 0:6ed8574c6258 139 #define EFLG 0x2D
jedh 0:6ed8574c6258 140
jedh 0:6ed8574c6258 141 //Message transmission registers - buffer --> 0
jedh 0:6ed8574c6258 142
jedh 0:6ed8574c6258 143 #define TXB0CTRL 0x30
jedh 0:6ed8574c6258 144 #define TXB0SIDH 0x31
jedh 0:6ed8574c6258 145 #define TXB0SIDL 0x32
jedh 0:6ed8574c6258 146 #define TXB0EID8 0x33
jedh 0:6ed8574c6258 147 #define TXB0EID0 0x34
jedh 0:6ed8574c6258 148 #define TXB0DLC 0x35
jedh 0:6ed8574c6258 149 #define TXB0D0 0x36
jedh 0:6ed8574c6258 150 #define TXB0D1 0x37
jedh 0:6ed8574c6258 151 #define TXB0D2 0x38
jedh 0:6ed8574c6258 152 #define TXB0D3 0x39
jedh 0:6ed8574c6258 153 #define TXB0D4 0x3A
jedh 0:6ed8574c6258 154 #define TXB0D5 0x3B
jedh 0:6ed8574c6258 155 #define TXB0D6 0x3C
jedh 0:6ed8574c6258 156 #define TXB0D7 0x3D
jedh 0:6ed8574c6258 157
jedh 0:6ed8574c6258 158 //Message transmission registers - buffer --> 1
jedh 0:6ed8574c6258 159
jedh 0:6ed8574c6258 160 #define TXB1CTRL 0x40
jedh 0:6ed8574c6258 161 #define TXB1SIDH 0x41
jedh 0:6ed8574c6258 162 #define TXB1SIDL 0x42
jedh 0:6ed8574c6258 163 #define TXB1EID8 0x43
jedh 0:6ed8574c6258 164 #define TXB1EID0 0x44
jedh 0:6ed8574c6258 165 #define TXB1DLC 0x45
jedh 0:6ed8574c6258 166 #define TXB1D0 0x46
jedh 0:6ed8574c6258 167 #define TXB1D1 0x47
jedh 0:6ed8574c6258 168 #define TXB1D2 0x48
jedh 0:6ed8574c6258 169 #define TXB1D3 0x49
jedh 0:6ed8574c6258 170 #define TXB1D4 0x4A
jedh 0:6ed8574c6258 171 #define TXB1D5 0x4B
jedh 0:6ed8574c6258 172 #define TXB1D6 0x4C
jedh 0:6ed8574c6258 173 #define TXB1D7 0x4D
jedh 0:6ed8574c6258 174
jedh 0:6ed8574c6258 175 //Message transmission registers - buffer --> 2
jedh 0:6ed8574c6258 176
jedh 0:6ed8574c6258 177 #define TXB2CTRL 0x50
jedh 0:6ed8574c6258 178 #define TXB2SIDH 0x51
jedh 0:6ed8574c6258 179 #define TXB2SIDL 0x52
jedh 0:6ed8574c6258 180 #define TXB2EID8 0x53
jedh 0:6ed8574c6258 181 #define TXB2EID0 0x54
jedh 0:6ed8574c6258 182 #define TXB2DLC 0x55
jedh 0:6ed8574c6258 183 #define TXB2D0 0x56
jedh 0:6ed8574c6258 184 #define TXB2D1 0x57
jedh 0:6ed8574c6258 185 #define TXB2D2 0x58
jedh 0:6ed8574c6258 186 #define TXB2D3 0x59
jedh 0:6ed8574c6258 187 #define TXB2D4 0x5A
jedh 0:6ed8574c6258 188 #define TXB2D5 0x5B
jedh 0:6ed8574c6258 189 #define TXB2D6 0x5C
jedh 0:6ed8574c6258 190 #define TXB2D7 0x5D
jedh 0:6ed8574c6258 191
jedh 0:6ed8574c6258 192 //Message reception registers - buffer --> 0
jedh 0:6ed8574c6258 193
jedh 0:6ed8574c6258 194 #define RXB0CTRL 0x60
jedh 0:6ed8574c6258 195 #define RXB0SIDH 0x61
jedh 0:6ed8574c6258 196 #define RXB0SIDL 0x62
jedh 0:6ed8574c6258 197 #define RXB0EID8 0x63
jedh 0:6ed8574c6258 198 #define RXB0EID0 0x64
jedh 0:6ed8574c6258 199 #define RXB0DLC 0x65
jedh 0:6ed8574c6258 200 #define RXB0D0 0x66
jedh 0:6ed8574c6258 201 #define RXB0D1 0x67
jedh 0:6ed8574c6258 202 #define RXB0D2 0x68
jedh 0:6ed8574c6258 203 #define RXB0D3 0x69
jedh 0:6ed8574c6258 204 #define RXB0D4 0x6A
jedh 0:6ed8574c6258 205 #define RXB0D5 0x6B
jedh 0:6ed8574c6258 206 #define RXB0D6 0x6C
jedh 0:6ed8574c6258 207 #define RXB0D7 0x6D
jedh 0:6ed8574c6258 208
jedh 0:6ed8574c6258 209 //Message reception registers - buffer --> 1
jedh 0:6ed8574c6258 210
jedh 0:6ed8574c6258 211 #define RXB1CTRL 0x70
jedh 0:6ed8574c6258 212 #define RXB1SIDH 0x71
jedh 0:6ed8574c6258 213 #define RXB1SIDL 0x72
jedh 0:6ed8574c6258 214 #define RXB1EID8 0x73
jedh 0:6ed8574c6258 215 #define RXB1EID0 0x74
jedh 0:6ed8574c6258 216 #define RXB1DLC 0x75
jedh 0:6ed8574c6258 217 #define RXB1D0 0x76
jedh 0:6ed8574c6258 218 #define RXB1D1 0x77
jedh 0:6ed8574c6258 219 #define RXB1D2 0x78
jedh 0:6ed8574c6258 220 #define RXB1D3 0x79
jedh 0:6ed8574c6258 221 #define RXB1D4 0x7A
jedh 0:6ed8574c6258 222 #define RXB1D5 0x7B
jedh 0:6ed8574c6258 223 #define RXB1D6 0x7C
jedh 0:6ed8574c6258 224 #define RXB1D7 0x7D
jedh 0:6ed8574c6258 225
jedh 0:6ed8574c6258 226 //Control registers
jedh 0:6ed8574c6258 227
jedh 0:6ed8574c6258 228 /** BFPCTRL **/
jedh 0:6ed8574c6258 229 #define B1BFS 5
jedh 0:6ed8574c6258 230 #define B0BFS 4
jedh 0:6ed8574c6258 231 #define B1BFE 3
jedh 0:6ed8574c6258 232 #define B0BFE 2
jedh 0:6ed8574c6258 233 #define B1BFM 1
jedh 0:6ed8574c6258 234 #define B0BFM 0
jedh 0:6ed8574c6258 235
jedh 0:6ed8574c6258 236 /** TXRTSCTRL **/
jedh 0:6ed8574c6258 237 #define B2RTS 5
jedh 0:6ed8574c6258 238 #define B1RTS 4
jedh 0:6ed8574c6258 239 #define B0RTS 3
jedh 0:6ed8574c6258 240 #define B2RTSM 2
jedh 0:6ed8574c6258 241 #define B1RTSM 1
jedh 0:6ed8574c6258 242 #define B0RTSM 0
jedh 0:6ed8574c6258 243
jedh 0:6ed8574c6258 244 /** CANSTAT **/
jedh 0:6ed8574c6258 245 #define OPMOD2 7
jedh 0:6ed8574c6258 246 #define OPMOD1 6
jedh 0:6ed8574c6258 247 #define OPMOD0 5
jedh 0:6ed8574c6258 248 #define ICOD2 3
jedh 0:6ed8574c6258 249 #define ICOD1 2
jedh 0:6ed8574c6258 250 #define ICOD0 1
jedh 0:6ed8574c6258 251
jedh 0:6ed8574c6258 252 /** CANCTRL **/
jedh 0:6ed8574c6258 253 #define REQOP2 7
jedh 0:6ed8574c6258 254 #define REQOP1 6
jedh 0:6ed8574c6258 255 #define REQOP0 5
jedh 0:6ed8574c6258 256 #define ABAT 4
jedh 0:6ed8574c6258 257 #define CLKEN 2
jedh 0:6ed8574c6258 258 #define CLKPRE1 1
jedh 0:6ed8574c6258 259 #define CLKPRE0 0
jedh 0:6ed8574c6258 260
jedh 0:6ed8574c6258 261 /** CNF3 **/
jedh 0:6ed8574c6258 262 #define SOF 7
jedh 0:6ed8574c6258 263 #define WAKFIL 6
jedh 0:6ed8574c6258 264 #define PHSEG22 2
jedh 0:6ed8574c6258 265 #define PHSEG21 1
jedh 0:6ed8574c6258 266 #define PHSEG20 0
jedh 0:6ed8574c6258 267
jedh 0:6ed8574c6258 268 /** CNF2 **/
jedh 0:6ed8574c6258 269 #define BTLMODE 7
jedh 0:6ed8574c6258 270 #define SAM 6
jedh 0:6ed8574c6258 271 #define PHSEG12 5
jedh 0:6ed8574c6258 272 #define PHSEG11 4
jedh 0:6ed8574c6258 273 #define PHSEG10 3
jedh 0:6ed8574c6258 274 #define PHSEG2 2
jedh 0:6ed8574c6258 275 #define PHSEG1 1
jedh 0:6ed8574c6258 276 #define PHSEG0 0
jedh 0:6ed8574c6258 277
jedh 0:6ed8574c6258 278 /** CNF1 **/
jedh 0:6ed8574c6258 279 #define SJW1 7
jedh 0:6ed8574c6258 280 #define SJW0 6
jedh 0:6ed8574c6258 281 #define BRP5 5
jedh 0:6ed8574c6258 282 #define BRP4 4
jedh 0:6ed8574c6258 283 #define BRP3 3
jedh 0:6ed8574c6258 284 #define BRP2 2
jedh 0:6ed8574c6258 285 #define BRP1 1
jedh 0:6ed8574c6258 286 #define BRP0 0
jedh 0:6ed8574c6258 287
jedh 0:6ed8574c6258 288 /** CANINTE **/
jedh 0:6ed8574c6258 289 #define MERRE 7
jedh 0:6ed8574c6258 290 #define WAKIE 6
jedh 0:6ed8574c6258 291 #define ERRIE 5
jedh 0:6ed8574c6258 292 #define TX2IE 4
jedh 0:6ed8574c6258 293 #define TX1IE 3
jedh 0:6ed8574c6258 294 #define TX0IE 2
jedh 0:6ed8574c6258 295 #define RX1IE 1
jedh 0:6ed8574c6258 296 #define RX0IE 0
jedh 0:6ed8574c6258 297
jedh 0:6ed8574c6258 298 /** CANINTF */
jedh 0:6ed8574c6258 299 #define MERRF 7
jedh 0:6ed8574c6258 300 #define WAKIF 6
jedh 0:6ed8574c6258 301 #define ERRIF 5
jedh 0:6ed8574c6258 302 #define TX2IF 4
jedh 0:6ed8574c6258 303 #define TX1IF 3
jedh 0:6ed8574c6258 304 #define TX0IF 2
jedh 0:6ed8574c6258 305 #define RX1IF 1
jedh 0:6ed8574c6258 306 #define RX0IF 0
jedh 0:6ed8574c6258 307
jedh 0:6ed8574c6258 308 /** EFLG **/
jedh 0:6ed8574c6258 309 #define RX1OVR 7
jedh 0:6ed8574c6258 310 #define RX0OVR 6
jedh 0:6ed8574c6258 311 #define TXB0 5
jedh 0:6ed8574c6258 312 #define TXEP 4
jedh 0:6ed8574c6258 313 #define RXEP 3
jedh 0:6ed8574c6258 314 #define TXWAR 2
jedh 0:6ed8574c6258 315 #define RXWAR 1
jedh 0:6ed8574c6258 316 #define EWARN 0
jedh 0:6ed8574c6258 317
jedh 0:6ed8574c6258 318 /** TXBnCTRL (n = 0, 1, 2) **/
jedh 0:6ed8574c6258 319 #define ABTF 6
jedh 0:6ed8574c6258 320 #define MLOA 5
jedh 0:6ed8574c6258 321 #define TXERR 4
jedh 0:6ed8574c6258 322 #define TXREQ 3
jedh 0:6ed8574c6258 323 #define TXP1 1
jedh 0:6ed8574c6258 324 #define TXP0 0
jedh 0:6ed8574c6258 325
jedh 0:6ed8574c6258 326 /** RXB0CTRL **/
jedh 0:6ed8574c6258 327 #define RXM1 6
jedh 0:6ed8574c6258 328 #define RXM0 5
jedh 0:6ed8574c6258 329 #define RXRTR 3
jedh 0:6ed8574c6258 330 #define BUKT 2
jedh 0:6ed8574c6258 331 #define BUKT1 1
jedh 0:6ed8574c6258 332 #define FILHIT0 0
jedh 0:6ed8574c6258 333
jedh 0:6ed8574c6258 334 /** RXB1CTRL **/
jedh 0:6ed8574c6258 335 #define RSM1 6
jedh 0:6ed8574c6258 336 #define FILHIT2 2
jedh 0:6ed8574c6258 337 #define FILHIT1 1
jedh 0:6ed8574c6258 338
jedh 0:6ed8574c6258 339 /** TXBnSIDL (n = 0, 1) **/
jedh 0:6ed8574c6258 340 #define EXIDE 3
jedh 0:6ed8574c6258 341
jedh 0:6ed8574c6258 342 /** RXBnSIDL (n = 0, 1) **/
jedh 0:6ed8574c6258 343 #define SRR 4
jedh 0:6ed8574c6258 344 #define IDE 3
jedh 0:6ed8574c6258 345
jedh 0:6ed8574c6258 346 /** RXBnDLC (n = 0, 1) / TXBnDLC **/
jedh 0:6ed8574c6258 347 #define RTR 6
jedh 0:6ed8574c6258 348 #define DLC3 3
jedh 0:6ed8574c6258 349 #define DLC2 2
jedh 0:6ed8574c6258 350 #define DLC1 1
jedh 0:6ed8574c6258 351 #define DLC0 0
jedh 0:6ed8574c6258 352
jedh 0:6ed8574c6258 353
jedh 0:6ed8574c6258 354 /******************************************************************************
jedh 0:6ed8574c6258 355 CAN in Automation (CiA)
jedh 0:6ed8574c6258 356 ******************************************************************************/
jedh 0:6ed8574c6258 357
jedh 0:6ed8574c6258 358 //Standard OBD requests and responses
jedh 0:6ed8574c6258 359
jedh 0:6ed8574c6258 360 #define ID_QUERY 0x7DF
jedh 0:6ed8574c6258 361 #define ID_RESPONSE 0x7E8
jedh 0:6ed8574c6258 362
jedh 0:6ed8574c6258 363
jedh 0:6ed8574c6258 364 //Standars PIDs
jedh 0:6ed8574c6258 365
jedh 0:6ed8574c6258 366 //Mode PID Data ret......Description...............min_val...max_val..units...formula
jedh 0:6ed8574c6258 367
jedh 0:6ed8574c6258 368 #define CALC_ENGINE_LOAD 0X04 //01 04 1 Calculated engine load value 0 100 % A*100/255
jedh 0:6ed8574c6258 369 #define ENGINE_COOLANT_TEMP 0x05 //01 05 1 Engine coolant temperature -40 215 °C A-40
jedh 0:6ed8574c6258 370 #define SHORT_TERM_FUEL_1 0x06 //01 06 1 Short term fuel % trim—Bank 1 -100 (Rich) 99.22 (Lean) % (A-128) * 100/128
jedh 0:6ed8574c6258 371 #define LONG_TERM_FUEL_1 0x07 //01 07 1 Long term fuel % trim—Bank 1 -100 (Rich) 99.22 (Lean) % (A-128) * 100/128
jedh 0:6ed8574c6258 372 #define SHORT_TERM_FUEL_2 0x08 //01 08 1 Short term fuel % trim—Bank 2 -100 (Rich) 99.22 (Lean) % (A-128) * 100/128
jedh 0:6ed8574c6258 373 #define LONG_TERM_FUEL_2 0x09 //01 09 1 Long term fuel % trim—Bank 2 -100 (Rich) 99.22 (Lean) % (A-128) * 100/128
jedh 0:6ed8574c6258 374 #define O2_B1_S1_VOLTAGE 0x14 //01 14 2 Bank 1, Sensor 1:Oxygen sensor voltage,Short term fuel trim 0-100(lean) 1.275 99.2(rich) Volts % A/200(B-128) * 100/128 (if B==0xFF, sensor is not used in trim calc)
jedh 0:6ed8574c6258 375 #define FUEL_PRESSURE 0x0A //01 0A 1 Fuel pressure 0 765 kPa (gauge) A*3
jedh 0:6ed8574c6258 376 #define INTAKE_M_A_PRESSURE 0x0B //01 0B 1 Intake manifold absolute pressure 0 255 kPa (absolute) A
jedh 0:6ed8574c6258 377 #define ENGINE_RPM 0x0C //01 0C 2 Engine RPM 0 16,383.75 rpm ((A*256)+B)/4
jedh 0:6ed8574c6258 378 #define VEHICLE_SPEED 0x0D //01 0D 1 Vehicle speed 0 255 km/h A
jedh 0:6ed8574c6258 379 #define TIMING_ADVANCE 0x0E //01 0E 1 Timing advance -64 63.5 ° relative to #1 cylinder A/2 - 64
jedh 0:6ed8574c6258 380 #define INTAKE_AIR_TEMP 0x0F //01 0F 1 Intake air temperature -40 215 °C A-40
jedh 0:6ed8574c6258 381 #define MAF_AIR_FLOW_RATE 0x10 //01 10 2 MAF air flow rate 0 655.35 g/s ((A*256)+B) / 100
jedh 0:6ed8574c6258 382 #define THROTTLE_POSITION 0x11 //01 11 1 Throttle position 0 100 % A*100/255
jedh 0:6ed8574c6258 383 #define RUNTIME_SINCE_START 0x1F //01 1F 2 Run time since engine start 0 65,535 seconds (A*256)+B
jedh 0:6ed8574c6258 384 #define DISTANCE_WITH_MALF 0x21 //01 21 2 Distance traveled with malfunction indicator lamp (MIL) on 0 65,535 km (A*256)+B
jedh 0:6ed8574c6258 385 #define FUEL_RAIL_PRESSURE_RELATIVE 0x22 //01 22 2 Fuel Rail Pressure (relative to manifold vacuum) 0 5177.265 kPa (((A*256)+B) * 10) / 128
jedh 0:6ed8574c6258 386 #define FUEL_RAIL_PRESSURE_DIESEL 0x23 //01 23 2 Fuel Rail Pressure (diesel) 0 655350 kPa (gauge) ((A*256)+B) * 10
jedh 0:6ed8574c6258 387 #define FUEL_LEVEL 0x2F //01 2F 1 Fuel Level Input 0 100 % 100*A/255
jedh 0:6ed8574c6258 388 #define NUM_WARMUPS_SINCE_CODES 0x30 //01 30 1 # of warm-ups since codes cleared 0 255 N/A A
jedh 0:6ed8574c6258 389 #define DISTANCE_SINCE_CODES 0x31 //01 31 2 Distance traveled since codes cleared 0 65,535 km (A*256)+B
jedh 0:6ed8574c6258 390 #define EVAP_SYSTEM_VAPOR_PRESSURE 0x32 //01 32 2 Evap. System Vapor Pressure -8,192 8,192 Pa ((A*256)+B)/4 (A is signed)
jedh 0:6ed8574c6258 391 #define BAROMETRIC_PRESSURE 0x33 //01 33 1 Barometric pressure 0 255 kPa (Absolute) A
jedh 0:6ed8574c6258 392 #define CONTROL_MODULE_VOLTAGE 0x42 //01 42 2 Control module voltage 0 65.535 V ((A*256)+B)/1000
jedh 0:6ed8574c6258 393 #define ABSOLUTE_LOAD_VALUE 0x43 //01 43 2 Absolute load value 0 25,700 % ((A*256)+B)*100/255
jedh 0:6ed8574c6258 394 #define COMMAND_EQUIV_RATIO 0x44 //01 44 2 Command equivalence ratio 0 2 N/A ((A*256)+B)/32768
jedh 0:6ed8574c6258 395 #define REL_THROTTLE_POSITION 0x45 //01 45 1 Relative throttle position 0 100 % A*100/255
jedh 0:6ed8574c6258 396 #define AMBIENT_AIR_TEMPERATURE 0x46 //01 46 1 Ambient air temperature -40 215 °C A-40
jedh 0:6ed8574c6258 397 #define ABS_THROTTLE_POSITION_B 0x47 //01 47 1 Absolute throttle position B 0 100 % A*100/255
jedh 0:6ed8574c6258 398 #define ABS_THROTTLE_POSITION_C 0x48 //01 48 1 Absolute throttle position C 0 100 % A*100/255
jedh 0:6ed8574c6258 399 #define ABS_THROTTLE_POSITION_D 0x49 //01 49 1 Accelerator pedal position D 0 100 % A*100/255
jedh 0:6ed8574c6258 400 #define ABS_THROTTLE_POSITION_E 0x4A //01 4A 1 Accelerator pedal position E 0 100 % A*100/255
jedh 0:6ed8574c6258 401 #define ABS_THROTTLE_POSITION_F 0x4B //01 4B 1 Accelerator pedal position F 0 100 % A*100/255
jedh 0:6ed8574c6258 402 #define COMMANDED_THROTTLE_ACTUATOR 0x4C //01 4C 1 Commanded throttle actuator 0 100 % A*100/255
jedh 0:6ed8574c6258 403 #define TIME_RUN_WITH_MIL_ON 0x4D //01 4D 2 Time run with MIL on 0 65,535 minutes (A*256)+B
jedh 0:6ed8574c6258 404 #define TIME_SINCE_T_CODES_CLEAR 0x4E //01 4E 2 Time since trouble codes cleared 0 65,535 minutes (A*256)+B
jedh 0:6ed8574c6258 405 #define FUEL_TYPE 0x51 //01 51 1 Fuel Type From fuel type table see below
jedh 0:6ed8574c6258 406 #define ETHANOL_FUEL 0x52 //01 52 1 Ethanol fuel % 0 100 % A*100/255
jedh 0:6ed8574c6258 407 #define ABS_EVAP_SYST_VAPOUR_PRESS 0x53 //01 53 2 Absoulute Evap system Vapour Pressure 0 327675 kpa 1/200 per bit
jedh 0:6ed8574c6258 408 #define ENGINE_FUEL_RATE 0x5E //01 5E 2 Engine fuel rate 0 - 3212.75 L/h ((A*256)+B)*0.05
jedh 0:6ed8574c6258 409
jedh 0:6ed8574c6258 410
jedh 0:6ed8574c6258 411 #include <inttypes.h>
jedh 0:6ed8574c6258 412
jedh 0:6ed8574c6258 413
jedh 0:6ed8574c6258 414 /******************************************************************************
jedh 0:6ed8574c6258 415 * Class
jedh 0:6ed8574c6258 416 ******************************************************************************/
jedh 0:6ed8574c6258 417
jedh 0:6ed8574c6258 418 //! CAN Class
jedh 0:6ed8574c6258 419 /*!
jedh 0:6ed8574c6258 420 CAN Class defines all the variables and functions used to manage CAN-bus modules
jedh 0:6ed8574c6258 421 */
jedh 0:6ed8574c6258 422
jedh 0:6ed8574c6258 423 class CAN
jedh 0:6ed8574c6258 424 {
jedh 0:6ed8574c6258 425
jedh 0:6ed8574c6258 426 private:
jedh 0:6ed8574c6258 427 // Write a register of the MCP2515 using SPI
jedh 0:6ed8574c6258 428 void writeRegister( char direction, char data );
jedh 0:6ed8574c6258 429 // Read a register of the MCP2515 using SPI
jedh 0:6ed8574c6258 430 char readRegister(char direction);
jedh 0:6ed8574c6258 431 // Modify a bit of the MCP2515 using SPI
jedh 0:6ed8574c6258 432 void bitModify(char direction, char mask, char data);
jedh 0:6ed8574c6258 433 // Check the status of the MCP2515 registers
jedh 0:6ed8574c6258 434 char readStatus(char type);
jedh 0:6ed8574c6258 435 // Check if the buffers are empty
jedh 0:6ed8574c6258 436 bool checkFreeBuffer(void);
jedh 0:6ed8574c6258 437 // Reset MCP2515
jedh 0:6ed8574c6258 438 void reset(void);
jedh 0:6ed8574c6258 439
jedh 0:6ed8574c6258 440
jedh 0:6ed8574c6258 441 public:
jedh 0:6ed8574c6258 442
jedh 0:6ed8574c6258 443 // Data structure
jedh 0:6ed8574c6258 444 typedef struct{
jedh 0:6ed8574c6258 445 unsigned int id;
jedh 0:6ed8574c6258 446 struct
jedh 0:6ed8574c6258 447 {
jedh 0:6ed8574c6258 448 char rtr : 1;
jedh 0:6ed8574c6258 449 char length : 4;
jedh 0:6ed8574c6258 450 }header;
jedh 0:6ed8574c6258 451
jedh 0:6ed8574c6258 452 uint8_t data[8];
jedh 0:6ed8574c6258 453 }messageCAN;
jedh 0:6ed8574c6258 454
jedh 0:6ed8574c6258 455 // Receive buffer
jedh 0:6ed8574c6258 456 messageCAN messageRx;
jedh 0:6ed8574c6258 457 // Trasmit buffer
jedh 0:6ed8574c6258 458 messageCAN messageTx;
jedh 0:6ed8574c6258 459 // Empty constructor
jedh 0:6ed8574c6258 460 CAN(void);
jedh 0:6ed8574c6258 461 // Powers the CANBus module and opens the SPI
jedh 0:6ed8574c6258 462 bool begin(uint16_t speed);
jedh 0:6ed8574c6258 463 // Check if there is any message
jedh 0:6ed8574c6258 464 uint8_t messageAvailable(void);
jedh 0:6ed8574c6258 465 // Take the CAN message
jedh 0:6ed8574c6258 466 char getMessage(messageCAN *msje);
jedh 0:6ed8574c6258 467 // Send the CAN message
jedh 0:6ed8574c6258 468 char sendMessage(messageCAN *msje);
jedh 0:6ed8574c6258 469 // CAN message print out the serial port
jedh 0:6ed8574c6258 470 void printMessage(messageCAN *msje);
jedh 0:6ed8574c6258 471 // Configure the MCP2515
jedh 0:6ed8574c6258 472 void setMode(uint8_t mode);
jedh 0:6ed8574c6258 473
jedh 0:6ed8574c6258 474 /***********************************************************************
jedh 0:6ed8574c6258 475 CAN in Automation (CiA)
jedh 0:6ed8574c6258 476 ***********************************************************************/
jedh 0:6ed8574c6258 477
jedh 0:6ed8574c6258 478 unsigned int getEngineLoad();
jedh 0:6ed8574c6258 479 unsigned int getEngineCoolantTemp();
jedh 0:6ed8574c6258 480 unsigned int getFuelPressure();
jedh 0:6ed8574c6258 481 unsigned int getIntakeMAPressure();
jedh 0:6ed8574c6258 482 unsigned int getEngineRPM();
jedh 0:6ed8574c6258 483 unsigned int getVehicleSpeed();
jedh 0:6ed8574c6258 484 unsigned int getTimingAdvance();
jedh 0:6ed8574c6258 485 unsigned int getIntankeAirTemp();
jedh 0:6ed8574c6258 486 unsigned int getMAFairFlowRate();
jedh 0:6ed8574c6258 487 unsigned int getThrottlePosition();
jedh 0:6ed8574c6258 488 unsigned int getFuelLevel();
jedh 0:6ed8574c6258 489 unsigned int getBarometricPressure();
jedh 0:6ed8574c6258 490 unsigned int getEngineFuelRate();
jedh 0:6ed8574c6258 491
jedh 0:6ed8574c6258 492 // General Function
jedh 0:6ed8574c6258 493 void CiARequest(uint8_t PID);
jedh 0:6ed8574c6258 494
jedh 0:6ed8574c6258 495
jedh 0:6ed8574c6258 496 };
jedh 0:6ed8574c6258 497
jedh 0:6ed8574c6258 498
jedh 0:6ed8574c6258 499 #endif
jedh 0:6ed8574c6258 500
jedh 0:6ed8574c6258 501