Skip to content

Commit 9d48cf6

Browse files
committed
Changed SPI mode
1 parent f37b31f commit 9d48cf6

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

ATM90E26.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,5 @@ void loop() {
3434
Serial.println(GetActivePower());
3535
Serial.print("p.f.:");
3636
Serial.println(GetPowerFactor());
37-
delay(1000);
37+
delay(500);
3838
}

energyic.ino

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515
#include "energyic.h"
1616

1717
unsigned short CommEnergyIC(unsigned char RW,unsigned char address, unsigned short val){
18-
//SPI interface rate is 200 to 160k bps. It Will need to be slowed down for EnergyIC
18+
1919

2020
unsigned char* data=(unsigned char*)&val;
2121
unsigned short output;
22+
//SPI interface rate is 200 to 160k bps. It Will need to be slowed down for EnergyIC
23+
SPISettings settings(2000000, MSBFIRST, SPI_MODE2);
2224

2325
//switch MSB and LSB of value
2426
output=(val>>8)|(val<<8);
@@ -28,14 +30,37 @@
2830
address|=RW<<7;
2931

3032
//Transmit and receive data
31-
digitalWrite (energy_CS,0);
33+
SPI.beginTransaction(settings);
34+
digitalWrite (energy_CS,LOW);
3235
delayMicroseconds(10);
3336
SPI.transfer(address);
3437
/* Must wait 4 us for data to become valid */
3538
delayMicroseconds(4);
36-
SPI.transfer(data,2);
37-
digitalWrite(energy_CS,1);
39+
40+
//Read data
41+
//Do for each byte in transfer
42+
if(RW)
43+
{
44+
for (byte i=0; i<2; i++)
45+
{
46+
/* Transer the byte */
47+
*data = SPI.transfer (0x00);
48+
data++;
49+
}
50+
}
51+
else
52+
{
53+
for (byte i=0; i<2; i++)
54+
{
55+
/* Transer the byte */
56+
SPI.transfer(*data); // write all the bytes
57+
data++;
58+
}
59+
}
60+
61+
digitalWrite(energy_CS,HIGH);
3862
delayMicroseconds(10);
63+
SPI.endTransaction();
3964

4065
output=(val>>8)|(val<<8); //reverse MSB and LSB
4166
return output;
@@ -96,9 +121,6 @@ void InitEnergyIC(){
96121

97122
/* Enable SPI */
98123
SPI.begin();
99-
SPI.setBitOrder(MSBFIRST);
100-
SPI.setDataMode(SPI_MODE1); // clk idle low, sample falling edge
101-
SPI.setClockDivider(SPI_CLOCK_DIV4);
102124

103125
CommEnergyIC(0,SoftReset,0x789A); //Perform soft reset
104126
CommEnergyIC(0,FuncEn,0x0030); //Voltage sag irq=1, report on warnout pin=1, energy dir change irq=0

0 commit comments

Comments
 (0)