Interface to Analog devices AD5258 digital I2C potentiometer
AD5258.cpp
- Committer:
- RodColeman
- Date:
- 2013-11-12
- Revision:
- 3:f5b60d166896
- Parent:
- 2:8a71db02417b
File content as of revision 3:f5b60d166896:
/* Copyright 2013 Rod Coleman
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "AD5258.h"
#include "mbed.h"
AD5258::AD5258(PinName sda, PinName scl, int address)
: _i2c(sda, scl) {
_address = address;
}
// RDAC ACCESS: values of 0 to 0x3F for full pot range.
int AD5258::read() {
char foo[1];
foo[0] = 00; // command to read RDAC
_i2c.write(_address, foo, 1);
_i2c.read(_address, foo, 1);
return foo[0];
}
void AD5258::write(int data) {
char foo[2];
foo[0] = 00;
foo[1] = data;
_i2c.write(_address, foo, 2);
}
// EEPROM ACCESS
int AD5258::readEE() {
char foo[1];
foo[0] = 0x20; // command to read RDAC
_i2c.write(_address, foo, 1);
_i2c.read(_address, foo, 1);
return foo[0];
}
void AD5258::writeEE(int data) {
char foo[2];
foo[0] = 0x20;
foo[1] = data;
_i2c.write(_address, foo, 2);
}
// Store RDAC value to EEPROM, for nonvol retention:
void AD5258::store(void) {
char foo[1];
foo[0] = 0xC0; // command to store RDAC to EE
_i2c.write(_address, foo, 1);
}
// restore RDAC value from EEPROM
void AD5258::restore(void) {
char foo[2];
foo[0] = 0xA0; // command to store RDAC to EE
foo[1] = 0x80; // NOP to restore low power mode
_i2c.write(_address, foo, 1);
}
// software write protect
void AD5258::writeProtect(bool enable) {
char foo[2];
foo[0] = 0x40; // command to store RDAC to EE
if (enable) {
foo[1] = 0x01; // SET WP
}
else {
foo[1] = 0x010; // RESET WP (enable writes)
}
_i2c.write(_address, foo, 2);
}