Tool/software:
Hi guys:
I want to leave an example of use of the ADS7128 inverter applied to an ESP32.
I hope this example is helpful for those who are starting out with this converter.
#include <Wire.h>
#include "ADS7128.h"
#include "Arduino.h"
#define ADS7128_H
#define ADS7128_DBUG
//Pone en 1 un bit dado
void Setbit(uint8_t reg, uint8_t data) {
    Wire.beginTransmission(ADS7128_ADDR);
    Wire.write(0x18);  
    Wire.write(reg);     // Dirección del registro
    Wire.write(1<<data);    // Valor a escribir
    Wire.endTransmission();
}
//Pone en 0 un bit dado
void Clearbit(uint8_t reg, uint8_t data) {
    Wire.beginTransmission(ADS7128_ADDR);
    Wire.write(0x20);  
    Wire.write(reg);     // Dirección del registro
    Wire.write(1<<data);    // Valor a escribir
    Wire.endTransmission();
}
// Función para escribir en un registro del ADS7128
void escribirRegistro(uint8_t reg, uint8_t data) {
    Wire.beginTransmission(ADS7128_ADDR);
    Wire.write(0x08);  
    Wire.write(reg);     // Dirección del registro
    Wire.write(data);    // Valor a escribir
    Wire.endTransmission();
}
// Función para leer un registro del ADS7128
uint8_t leerRegistro(uint8_t reg) {
  uint8_t dato;
    Wire.beginTransmission(ADS7128_ADDR);
    Wire.write(0x10);
    Wire.write(reg);     
    Wire.endTransmission(false); // No liberar el bus para continuar leyendo
    Wire.requestFrom(ADS7128_ADDR, 1); // Pedir 1 byte
    if (Wire.available()) {
        dato= Wire.read();  // Retorna el valor leído
    }
    else
    {
      dato=0xFF;  // Retorna 0xFF en caso de error
    }
//     Wire.end();
   return dato;  
}
// Función para leer el valor de un canal del ADC
uint16_t leerCanalADC(uint8_t canal) {
    escribirRegistro(0x01, canal);  // Seleccionar el canal a leer
    delay(10);  // Esperar la conversión
    uint8_t msb = leerRegistro(0x10);  // Leer byte alto
    uint8_t lsb = leerRegistro(0x11);  // Leer byte bajo
    return (msb << 8) | lsb;  // Unir bytes para obtener el valor de 12 bits
}
// Función para configurar el ADS7128 (ejemplo: habilitar el ADC)
uint8_t configurarADS7128() {
int16_t i,j;
  Wire.begin(); 
    i=leerRegistro(SYSTEM_STATUS);
    if(i!=0xFF)
    {
      Setbit(SYSTEM_STATUS,BOR_BIT);
/*      leerRegistro(SYSTEM_STATUS);
      //Configura pin7 como salida para energizar el modem
      escribirRegistro(PIN_CFG, 0x80);  // Configura canal 8 como GPIO7
      escribirRegistro(GPIO_CFG, 0x80);  // Configura GPIO7 como salida
      escribirRegistro(GPO_DRIVE_CFG, 0x00);  // Configura salida GPIO7 como OPEN-DRINE
      escribirRegistro(GPO_VALUE, 0x80);  // Cambia estado salida GPIO7 a alto (energiza modem)
*/
      //Paso 1 
      //RMS en CH0, no restar CC, muestras = 1024
      escribirRegistro(RMS_CFG,RMS_CHID_CH0|RMS_SAMPLES_1024|RMS_DC_SUB);
      //Paso 2
      //RMS_EN, Sin CRC, STATS_EN, Sin comparador
      //Inicio de conversión normal, configuración de canal predeterminada, sin calibración, sin reinicio
      escribirRegistro(GENERAL_CFG,RMS_EN);
      //Paso 3
      //MODO_SEQ = '00'
      //No es necesario escribir, funciona por defecto
      escribirRegistro(SEQUENCE_CFG,0x00);
      //Paso 4 
      //MANUAL_CHID = '00' Seleccione AIN0
      //No es necesario escribir, funciona por defecto
      escribirRegistro(CHANNEL_SEL,0x00);
      //Paso 5
      //No es necesario escribir, funciona por defecto
      //escribirRegistro(GPIO_CFG,0x00);
      for(j=0;j<3;j++)
      {
      //Paso 6
      //Iniciar una conversión de lectura
       Wire.requestFrom(ADS7128_ADDR, 2); // Pedir 1 byte
      //Wire.beginTransmission(ADS7128_ADDR);
     //Paso 7
      for(i=0;i<(1024+39);i++)  
      {
        Wire.requestFrom(ADS7128_ADDR, 2);
      }      
     delay(5);
    //Paso 8
      //Pausa por temporizador o estado del monitor para RMS_DONE en bit 4 = '1'
      do{
        i=leerRegistro(SYSTEM_STATUS);
      }while((i&RMS_DONE)==0); 
      //Paso 9
      //Leer el resultado RMS
      leerRegistro(RMS_LSB);
      leerRegistro(RMS_MSB);
      //Paso 10
      //Borrar el bit RMS_DONE
      Setbit(SYSTEM_STATUS,RMS_DONE_BIT);
      Clearbit(GENERAL_CFG,RMS_EN_BIT);
      delay(10);
      Setbit(GENERAL_CFG,RMS_EN_BIT);
    }
      //Paso 11
      //Deshabilitar módulo RMS
      Clearbit(GENERAL_CFG,STATS_EN_BIT);
      delay(10);
    }