@@ -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
117117int 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
130124void 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