Skip to content

Commit 00b2fad

Browse files
committed
phase fix
1 parent 073df67 commit 00b2fad

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

MCM_ATM90E32.cpp

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ unsigned short ATM90E32::CommEnergyIC(unsigned char RW, unsigned short address,
4747
#endif
4848

4949
#if defined(ESP32)
50-
SPISettings settings(200000, MSBFIRST, SPI_MODE3);
50+
SPISettings settings(200000, MSBFIRST, SPI_MODE0);
5151
#endif
5252

5353
#if defined(ARDUINO_ARCH_SAMD)
@@ -116,15 +116,9 @@ unsigned short ATM90E32::CommEnergyIC(unsigned char RW, unsigned short address,
116116

117117
int ATM90E32::Read32Register(signed short regh_addr, signed short regl_addr)
118118
{
119-
int val, val_h, val_l;
120-
val_h = CommEnergyIC(READ, regh_addr, 0xFFFF);
121-
val_l = CommEnergyIC(READ, regl_addr, 0xFFFF);
122-
val = CommEnergyIC(READ, regh_addr, 0xFFFF);
123-
124-
val = val_h << 16;
125-
val |= val_l; // concatenate the 2 registers to make 1 32 bit number
126-
127-
return (val);
119+
unsigned int val_h = CommEnergyIC(READ, regh_addr, 0xFFFF);
120+
unsigned int val_l = CommEnergyIC(READ, regl_addr, 0xFFFF);
121+
return (int)((val_h << 16) | val_l);
128122
}
129123

130124
void ATM90E32::setVIOffset(unsigned short VoffA, unsigned short VoffB, unsigned short VoffC, unsigned short IoffA, unsigned short IoffB, unsigned short IoffC)
@@ -312,9 +306,9 @@ double ATM90E32::CalibrateVI(unsigned short reg, float actualVal)
312306
gain = m;
313307

314308
// write new value to gain register
315-
CommEnergyIC(WRITE, CfgRegAccEn, 0x55AA); // 7F enable register config access
316-
CommEnergyIC(WRITE, gainReg, gain);
317-
CommEnergyIC(WRITE, CfgRegAccEn, 0x0000); // 7F end configuration
309+
//CommEnergyIC(WRITE, CfgRegAccEn, 0x55AA); // 7F enable register config access
310+
//CommEnergyIC(WRITE, gainReg, gain);
311+
//CommEnergyIC(WRITE, CfgRegAccEn, 0x0000); // 7F end configuration
318312

319313
Serial.print("Gain: ");
320314
Serial.print(gainReg, HEX);
@@ -664,7 +658,7 @@ void ATM90E32::begin(int pin, unsigned short lineFreq, unsigned short phases, un
664658
return 0b00;
665659
};
666660

667-
uint16_t config = 0b0000000110011101; // 0x019D
661+
uint16_t config = 0b0000000110011111; // 0x019D
668662

669663
// ---- LINE FREQ bit12
670664
config &= ~(1u << 12);
@@ -719,8 +713,8 @@ void ATM90E32::begin(int pin, unsigned short lineFreq, unsigned short phases, un
719713
if (_phases == 2)
720714
{
721715
Serial.println("Split-Phase Mode");
722-
config |= 0b101u; // bits 2..0
723-
config |= (1u << 8); // bit8 = 1 for split-phase
716+
config |= 0b111u; // bits 2..0
717+
//config |= (1u << 8); // bit8 = 1 for split-phase
724718
}
725719
else if (_phases == 3)
726720
{
@@ -731,21 +725,20 @@ void ATM90E32::begin(int pin, unsigned short lineFreq, unsigned short phases, un
731725
else
732726
{
733727
Serial.println("IC phase mode out of range, using default Split-phase");
734-
config |= 0b101u;
735-
config |= (1u << 8);
728+
config |= 0b111u;
729+
//config |= (1u << 8);
736730
}
737731

738732
// --- print as 16 bits with leading zeros
739-
Serial.print("MMODE: ");
733+
/*Serial.print("MMODE: ");
740734
for (int i = 15; i >= 0; --i)
741735
Serial.print((config >> i) & 1);
742-
Serial.println();
736+
Serial.println();*/
743737

744738
// Initialize registers
745739
CommEnergyIC(WRITE, SoftReset, 0x789A); // 70 Perform soft reset
746740
CommEnergyIC(WRITE, CfgRegAccEn, 0x55AA); // 7F enable register config access
747-
CommEnergyIC(WRITE, MeterEn, 0x0001); // 00 Enable Metering
748-
741+
749742
CommEnergyIC(WRITE, SagPeakDetCfg, 0x143F); // 05 Sag and Voltage peak detect period set to 20ms
750743
CommEnergyIC(WRITE, SagTh, vSagTh); // 08 Voltage sag threshold
751744
CommEnergyIC(WRITE, FreqHiTh, FreqHiThresh); // 0D High frequency threshold
@@ -790,6 +783,13 @@ void ATM90E32::begin(int pin, unsigned short lineFreq, unsigned short phases, un
790783
CommEnergyIC(WRITE, PGainBF, 0x0000); // 55 B Fund. active power gain
791784
CommEnergyIC(WRITE, PGainCF, 0x0000); // 56 C Fund. active power gain
792785

786+
// Route of ADC Channels
787+
788+
// IA->Phase A, IB->Phase B, IC->Phase C (no usada)
789+
//CommEnergyIC(WRITE, ChannelMapI, 0x3210); // ejemplo conservador; ajusta a tu pinout
790+
// VA->Phase A, VB->Phase B, VC->Phase C (no usada)
791+
//CommEnergyIC(WRITE, ChannelMapU, 0x3210);
792+
793793
// Set measurement calibration values (ADJUST)
794794
CommEnergyIC(WRITE, UgainA, _ucal); // 61 A Voltage rms gain
795795
CommEnergyIC(WRITE, IgainA, _icalA); // 62 A line current gain
@@ -803,6 +803,7 @@ void ATM90E32::begin(int pin, unsigned short lineFreq, unsigned short phases, un
803803
CommEnergyIC(WRITE, IgainC, _icalC); // 6A C line current gain
804804
CommEnergyIC(WRITE, UoffsetC, 0x0000); // 6B C Voltage offset - 1D4C
805805
CommEnergyIC(WRITE, IoffsetC, 0x0000); // 6C C line current offset
806+
CommEnergyIC(WRITE, MeterEn, 0x0001); // 00 Enable Metering
806807

807808
CommEnergyIC(WRITE, CfgRegAccEn, 0x0000); // 7F end configuration
808809
}

0 commit comments

Comments
 (0)