ADC Library

Committer:
chrissnow
Date:
Thu Apr 14 09:52:09 2016 +0000
Revision:
0:a6ef27377050
init;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chrissnow 0:a6ef27377050 1 /* MCP3424 library version 1.2
chrissnow 0:a6ef27377050 2
chrissnow 0:a6ef27377050 3 Writed by B@tto
chrissnow 0:a6ef27377050 4 Contact : batto@hotmail.fr
chrissnow 0:a6ef27377050 5
chrissnow 0:a6ef27377050 6
chrissnow 0:a6ef27377050 7 MCP3424.cpp - ADC 18 bits i2c library for Wiring & Arduino
chrissnow 0:a6ef27377050 8 Copyright (c) 2012 Yann LEFEBVRE. All right reserved.
chrissnow 0:a6ef27377050 9
chrissnow 0:a6ef27377050 10 This library is free software; you can redistribute it and/or
chrissnow 0:a6ef27377050 11 modify it under the terms of the GNU Lesser General Public
chrissnow 0:a6ef27377050 12 License as published by the Free Software Foundation; either
chrissnow 0:a6ef27377050 13 version 2.1 of the License, or (at your option) any later version.
chrissnow 0:a6ef27377050 14
chrissnow 0:a6ef27377050 15 This library is distributed in the hope that it will be useful,
chrissnow 0:a6ef27377050 16 but WITHOUT ANY WARRANTY; without even the implied warranty of
chrissnow 0:a6ef27377050 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
chrissnow 0:a6ef27377050 18 Lesser General Public License for more details.
chrissnow 0:a6ef27377050 19
chrissnow 0:a6ef27377050 20 You should have received a copy of the GNU Lesser General Public
chrissnow 0:a6ef27377050 21 License along with this library; if not, write to the Free Software
chrissnow 0:a6ef27377050 22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
chrissnow 0:a6ef27377050 23 */
chrissnow 0:a6ef27377050 24 #include <MCP3424.h>
chrissnow 0:a6ef27377050 25 #include "mbed.h"
chrissnow 0:a6ef27377050 26
chrissnow 0:a6ef27377050 27 MCP3424::MCP3424(PinName SDA, PinName SCL, uint8_t adresse):i2c(SDA, SCL){
chrissnow 0:a6ef27377050 28
chrissnow 0:a6ef27377050 29 _adresse|=0x0D<<3;
chrissnow 0:a6ef27377050 30 _adresse = _adresse<<1;
chrissnow 0:a6ef27377050 31 //_adresse|=adresse;
chrissnow 0:a6ef27377050 32 }
chrissnow 0:a6ef27377050 33
chrissnow 0:a6ef27377050 34 MCP3424::~MCP3424(){
chrissnow 0:a6ef27377050 35
chrissnow 0:a6ef27377050 36 }
chrissnow 0:a6ef27377050 37
chrissnow 0:a6ef27377050 38
chrissnow 0:a6ef27377050 39 void MCP3424::Configuration(char channel,char resolution,bool mode,char PGA){
chrissnow 0:a6ef27377050 40 _PGA=PGA;
chrissnow 0:a6ef27377050 41
chrissnow 0:a6ef27377050 42 if(resolution!=12 && resolution!=14 && resolution!=16 && resolution!=18) {
chrissnow 0:a6ef27377050 43 _resolution=12;
chrissnow 0:a6ef27377050 44 } else _resolution=resolution;
chrissnow 0:a6ef27377050 45
chrissnow 0:a6ef27377050 46 _mode=mode;
chrissnow 0:a6ef27377050 47 _cfgbyte=0;
chrissnow 0:a6ef27377050 48 _cfgbyte=_cfgbyte<<2;
chrissnow 0:a6ef27377050 49 _cfgbyte|=(channel-1);
chrissnow 0:a6ef27377050 50 _cfgbyte=_cfgbyte<<1;
chrissnow 0:a6ef27377050 51 _cfgbyte|=mode;
chrissnow 0:a6ef27377050 52 _cfgbyte=_cfgbyte<<2;
chrissnow 0:a6ef27377050 53 _cfgbyte|=int((_resolution-12)/2);
chrissnow 0:a6ef27377050 54 _cfgbyte=_cfgbyte<<2;
chrissnow 0:a6ef27377050 55 switch(PGA)
chrissnow 0:a6ef27377050 56 {
chrissnow 0:a6ef27377050 57 case 1:
chrissnow 0:a6ef27377050 58 _cfgbyte|=0x00;
chrissnow 0:a6ef27377050 59
chrissnow 0:a6ef27377050 60 break;
chrissnow 0:a6ef27377050 61 case 2:
chrissnow 0:a6ef27377050 62 _cfgbyte|=0x01;
chrissnow 0:a6ef27377050 63
chrissnow 0:a6ef27377050 64 break;
chrissnow 0:a6ef27377050 65 case 4:
chrissnow 0:a6ef27377050 66 _cfgbyte|=0x10;
chrissnow 0:a6ef27377050 67
chrissnow 0:a6ef27377050 68 break;
chrissnow 0:a6ef27377050 69 case 8:
chrissnow 0:a6ef27377050 70 _cfgbyte|=0x11;
chrissnow 0:a6ef27377050 71
chrissnow 0:a6ef27377050 72 break;
chrissnow 0:a6ef27377050 73 }
chrissnow 0:a6ef27377050 74
chrissnow 0:a6ef27377050 75 i2c.write(_adresse,&_cfgbyte,1);
chrissnow 0:a6ef27377050 76
chrissnow 0:a6ef27377050 77 }
chrissnow 0:a6ef27377050 78
chrissnow 0:a6ef27377050 79 void MCP3424::NewConversion(){
chrissnow 0:a6ef27377050 80
chrissnow 0:a6ef27377050 81 char byte = _cfgbyte|=128;
chrissnow 0:a6ef27377050 82 i2c.write(_adresse,&byte,1);
chrissnow 0:a6ef27377050 83 }
chrissnow 0:a6ef27377050 84
chrissnow 0:a6ef27377050 85 bool MCP3424::IsConversionFinished(){
chrissnow 0:a6ef27377050 86
chrissnow 0:a6ef27377050 87 if(_resolution!=18){
chrissnow 0:a6ef27377050 88 _RequestedByte = 3;
chrissnow 0:a6ef27377050 89 } else _RequestedByte = 4;
chrissnow 0:a6ef27377050 90
chrissnow 0:a6ef27377050 91 i2c.read(_adresse, _Buffer,_RequestedByte);
chrissnow 0:a6ef27377050 92
chrissnow 0:a6ef27377050 93
chrissnow 0:a6ef27377050 94 _testvariable = _Buffer[_RequestedByte-1]>>7;
chrissnow 0:a6ef27377050 95
chrissnow 0:a6ef27377050 96 return _testvariable;
chrissnow 0:a6ef27377050 97
chrissnow 0:a6ef27377050 98 }
chrissnow 0:a6ef27377050 99
chrissnow 0:a6ef27377050 100
chrissnow 0:a6ef27377050 101 long MCP3424::Measure(){
chrissnow 0:a6ef27377050 102
chrissnow 0:a6ef27377050 103 _resultat=0;
chrissnow 0:a6ef27377050 104
chrissnow 0:a6ef27377050 105 while(IsConversionFinished()==1);
chrissnow 0:a6ef27377050 106
chrissnow 0:a6ef27377050 107 switch (_resolution){
chrissnow 0:a6ef27377050 108
chrissnow 0:a6ef27377050 109 case 12:
chrissnow 0:a6ef27377050 110 _resultat = _Buffer[0];
chrissnow 0:a6ef27377050 111 _resultat &= 0x0f;//0b00001111;
chrissnow 0:a6ef27377050 112 _resultat = _resultat << 8;
chrissnow 0:a6ef27377050 113 _resultat |= _Buffer[1];
chrissnow 0:a6ef27377050 114
chrissnow 0:a6ef27377050 115 if(_resultat>2048-1) {
chrissnow 0:a6ef27377050 116 _resultat=_resultat-4096-1;
chrissnow 0:a6ef27377050 117 }
chrissnow 0:a6ef27377050 118
chrissnow 0:a6ef27377050 119 _resultat = _resultat*1000/_PGA;
chrissnow 0:a6ef27377050 120
chrissnow 0:a6ef27377050 121 break;
chrissnow 0:a6ef27377050 122
chrissnow 0:a6ef27377050 123 case 14:
chrissnow 0:a6ef27377050 124 _resultat = _Buffer[0];
chrissnow 0:a6ef27377050 125 _resultat &= 0x3f;//0b00111111;
chrissnow 0:a6ef27377050 126 _resultat = _resultat << 8;
chrissnow 0:a6ef27377050 127 _resultat |= _Buffer[1];
chrissnow 0:a6ef27377050 128
chrissnow 0:a6ef27377050 129 if(_resultat>8192-1) {
chrissnow 0:a6ef27377050 130 _resultat=_resultat-16384-1;
chrissnow 0:a6ef27377050 131 }
chrissnow 0:a6ef27377050 132
chrissnow 0:a6ef27377050 133 _resultat = _resultat*250/_PGA;
chrissnow 0:a6ef27377050 134
chrissnow 0:a6ef27377050 135 break;
chrissnow 0:a6ef27377050 136
chrissnow 0:a6ef27377050 137 case 16:
chrissnow 0:a6ef27377050 138
chrissnow 0:a6ef27377050 139 _resultat = _Buffer[0];
chrissnow 0:a6ef27377050 140 _resultat = _resultat << 8;
chrissnow 0:a6ef27377050 141 _resultat |= _Buffer[1];
chrissnow 0:a6ef27377050 142
chrissnow 0:a6ef27377050 143 if(_resultat>32768-1) {
chrissnow 0:a6ef27377050 144 _resultat=_resultat-65536-1;
chrissnow 0:a6ef27377050 145 }
chrissnow 0:a6ef27377050 146
chrissnow 0:a6ef27377050 147 _resultat = _resultat*62.5/_PGA;
chrissnow 0:a6ef27377050 148
chrissnow 0:a6ef27377050 149 break;
chrissnow 0:a6ef27377050 150
chrissnow 0:a6ef27377050 151 case 18:
chrissnow 0:a6ef27377050 152
chrissnow 0:a6ef27377050 153 _resultat = _Buffer[0];
chrissnow 0:a6ef27377050 154 _resultat&=0x02;//0b00000011;
chrissnow 0:a6ef27377050 155 _resultat = _resultat << 8;
chrissnow 0:a6ef27377050 156 _resultat |= _Buffer[1];
chrissnow 0:a6ef27377050 157 _resultat = _resultat << 8;
chrissnow 0:a6ef27377050 158 _resultat |= _Buffer[2];
chrissnow 0:a6ef27377050 159
chrissnow 0:a6ef27377050 160 if(_resultat>131072-1) {
chrissnow 0:a6ef27377050 161 _resultat=_resultat-262144-1;
chrissnow 0:a6ef27377050 162 }
chrissnow 0:a6ef27377050 163
chrissnow 0:a6ef27377050 164 _resultat = _resultat*15.625/_PGA;
chrissnow 0:a6ef27377050 165
chrissnow 0:a6ef27377050 166 break;
chrissnow 0:a6ef27377050 167 }
chrissnow 0:a6ef27377050 168
chrissnow 0:a6ef27377050 169 return _resultat;
chrissnow 0:a6ef27377050 170
chrissnow 0:a6ef27377050 171
chrissnow 0:a6ef27377050 172 }
chrissnow 0:a6ef27377050 173
chrissnow 0:a6ef27377050 174