summaryrefslogtreecommitdiff
path: root/ESS1995i2c/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ESS1995i2c/main.cpp')
-rw-r--r--ESS1995i2c/main.cpp112
1 files changed, 18 insertions, 94 deletions
diff --git a/ESS1995i2c/main.cpp b/ESS1995i2c/main.cpp
index 54aa879..efb8e65 100644
--- a/ESS1995i2c/main.cpp
+++ b/ESS1995i2c/main.cpp
@@ -7,6 +7,7 @@
http://arduino.cc/playground/Code/ATMELTWI
i2c library seems to require a 'register address' - -ESS1995 doesn't need this?
+ it certainly doesn't define a register in control byte 1 of write message
*/
#include "electic.h"
@@ -41,9 +42,20 @@ int main(){
*/
digitalWrite(CS,HIGH); //select DMM
-
-
- Wire.beginTransmission(ESS1995_ADDR);
+ uint8_t WB1,WB2,WB3,WB4;
+/*
+ uint8_t WB1 = (CB_SHBP << 7) | (CB_function << 3) | (CB_VARCrange);
+ uint8_t WB2 = (CB_BUZfreq << 5) | (CB_ADCrate << 3) | (CB_FREQrange);
+ uint8_t WB3 = (CB_ACmode << 7) | (CB_EXTdiode << 4) | (CB_DCfs << 3) | (CB_LPFbw << 1) | (CB_FREQinprest);
+ uint8_t WB4 = (CB_PEAKmode << 7) | (CB_PCALmode << 6) | (CB_OPconf << 2) | (CB_ADPext);
+*/
+ Wire.beginTransmission(WRITE_ID);
+ Wire.send(WB1);
+ Wire.send(WB2);
+ Wire.send(WB3);
+ Wire.send(WB4);
+ //default reads
+ Wire.endTransmission();
uint16_t delayMillis=250;
@@ -97,20 +109,12 @@ writeDMM();
while(1) {
if (digitalRead(DATA_NEW)==HIGH){ //DMM is ready to send data
- digitalWrite(OUTPUT1,HIGH);
- digitalWrite(OUTPUT2,LOW);
- startWrite();
- writeStartBit();
- writeByte(READ_ID);
+ Wire.beginTransmission(READ_ID);
if (digitalRead(DATA_NEW)==LOW){ //ID confirmed
- digitalWrite(OUTPUT2,HIGH);
- startRead();
for (int i=0;i<10;i++) {
- data[i] = readByte();
+ data[i] = Wire.receive();
}
- //stop bit comes from the MPU? does seem to be necessary.
- startWrite();
- writeStopBit();
+ Wire.endTransmission();
//parse data
DB_STATUS=data[0];
@@ -177,85 +181,5 @@ writeDMM();
//delay(delayMillis);
}
}
-void startWrite() {
- pinMode(SDATA,OUTPUT);
- digitalWrite(SCLK, HIGH);
-}
-void startRead() {
- pinMode(SDATA,INPUT);
- digitalWrite(SCLK, HIGH);
-}
-void SCLKcycle_W() {
- //insert a high clock cycle, normally LOW
- delayMicroseconds(START_DELAY);
- digitalWrite(SCLK, HIGH);
- delayMicroseconds(CLOCK_DELAY);
- digitalWrite(SCLK, LOW);
- delayMicroseconds(START_DELAY);
-}
-void SCLKcycle_R() {
- //insert a low clock cycle, normally HIGH
- delayMicroseconds(START_DELAY);
- digitalWrite(SCLK, LOW);
- delayMicroseconds(CLOCK_DELAY);
- digitalWrite(SCLK, HIGH);
- delayMicroseconds(START_DELAY);
-}
-void writeByte(uint8_t data){
-
- for (uint8_t i=0,bit=7;i<8;i++,bit--) {
- digitalWrite(SDATA,(data>>bit)&0b01);
- SCLKcycle_W();
- }
- digitalWrite(SDATA,HIGH); //ACK/ stopbit should be HIGH?
- SCLKcycle_W(); //ACK INTERVAL
-}
-void writeStopBit(){
- digitalWrite(SDATA,LOW); //prepare SDATA
- delayMicroseconds(START_DELAY);
- digitalWrite(SCLK,HIGH);
- delayMicroseconds(START_DELAY);
- digitalWrite(SDATA,HIGH); //stop bit
-}
-void writeStartBit(){
- digitalWrite(SDATA, HIGH); //should be anyway
- digitalWrite(SCLK, HIGH);
- delayMicroseconds(START_DELAY);
- digitalWrite(SDATA,LOW); //start bit
- delayMicroseconds(START_DELAY);
- digitalWrite(SCLK, LOW);
- delayMicroseconds(START_DELAY);
-}
-uint8_t readByte(){
- uint8_t data=0;
- uint8_t thisdata;
- //delayMicroseconds(START_DELAY);
- //digitalWrite(SCLK, HIGH); //load first bit
- delayMicroseconds(START_DELAY);
- for (uint8_t i=0,bit=7;i<8;i++,bit--) {
- thisdata=digitalRead(SDATA);
- data = data | (thisdata<<bit);
- digitalWrite(OUTPUT1,thisdata);
- SCLKcycle_R();
- }
- SCLKcycle_R(); //ACK
- return data;
-}
-void writeDMM(){
- uint8_t WB1 = (CB_SHBP << 7) | (CB_function << 3) | (CB_VARCrange);
- uint8_t WB2 = (CB_BUZfreq << 5) | (CB_ADCrate << 3) | (CB_FREQrange);
- uint8_t WB3 = (CB_ACmode << 7) | (CB_EXTdiode << 4) | (CB_DCfs << 3) | (CB_LPFbw << 1) | (CB_FREQinprest);
- uint8_t WB4 = (CB_PEAKmode << 7) | (CB_PCALmode << 6) | (CB_OPconf << 2) | (CB_ADPext);
-
- startWrite();
- writeStartBit();
- writeByte(WRITE_ID);
- writeByte(WB1);
- writeByte(WB2);
- writeByte(WB3);
- writeByte(WB4);
- writeStopBit();
-
-}