ADC Library
MCP3424.cpp
- Committer:
- chrissnow
- Date:
- 2016-04-14
- Revision:
- 0:a6ef27377050
File content as of revision 0:a6ef27377050:
/* MCP3424 library version 1.2 Writed by B@tto Contact : batto@hotmail.fr MCP3424.cpp - ADC 18 bits i2c library for Wiring & Arduino Copyright (c) 2012 Yann LEFEBVRE. All right reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include <MCP3424.h> #include "mbed.h" MCP3424::MCP3424(PinName SDA, PinName SCL, uint8_t adresse):i2c(SDA, SCL){ _adresse|=0x0D<<3; _adresse = _adresse<<1; //_adresse|=adresse; } MCP3424::~MCP3424(){ } void MCP3424::Configuration(char channel,char resolution,bool mode,char PGA){ _PGA=PGA; if(resolution!=12 && resolution!=14 && resolution!=16 && resolution!=18) { _resolution=12; } else _resolution=resolution; _mode=mode; _cfgbyte=0; _cfgbyte=_cfgbyte<<2; _cfgbyte|=(channel-1); _cfgbyte=_cfgbyte<<1; _cfgbyte|=mode; _cfgbyte=_cfgbyte<<2; _cfgbyte|=int((_resolution-12)/2); _cfgbyte=_cfgbyte<<2; switch(PGA) { case 1: _cfgbyte|=0x00; break; case 2: _cfgbyte|=0x01; break; case 4: _cfgbyte|=0x10; break; case 8: _cfgbyte|=0x11; break; } i2c.write(_adresse,&_cfgbyte,1); } void MCP3424::NewConversion(){ char byte = _cfgbyte|=128; i2c.write(_adresse,&byte,1); } bool MCP3424::IsConversionFinished(){ if(_resolution!=18){ _RequestedByte = 3; } else _RequestedByte = 4; i2c.read(_adresse, _Buffer,_RequestedByte); _testvariable = _Buffer[_RequestedByte-1]>>7; return _testvariable; } long MCP3424::Measure(){ _resultat=0; while(IsConversionFinished()==1); switch (_resolution){ case 12: _resultat = _Buffer[0]; _resultat &= 0x0f;//0b00001111; _resultat = _resultat << 8; _resultat |= _Buffer[1]; if(_resultat>2048-1) { _resultat=_resultat-4096-1; } _resultat = _resultat*1000/_PGA; break; case 14: _resultat = _Buffer[0]; _resultat &= 0x3f;//0b00111111; _resultat = _resultat << 8; _resultat |= _Buffer[1]; if(_resultat>8192-1) { _resultat=_resultat-16384-1; } _resultat = _resultat*250/_PGA; break; case 16: _resultat = _Buffer[0]; _resultat = _resultat << 8; _resultat |= _Buffer[1]; if(_resultat>32768-1) { _resultat=_resultat-65536-1; } _resultat = _resultat*62.5/_PGA; break; case 18: _resultat = _Buffer[0]; _resultat&=0x02;//0b00000011; _resultat = _resultat << 8; _resultat |= _Buffer[1]; _resultat = _resultat << 8; _resultat |= _Buffer[2]; if(_resultat>131072-1) { _resultat=_resultat-262144-1; } _resultat = _resultat*15.625/_PGA; break; } return _resultat; }