Part Number: ADS7128 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 #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 ( 0x 18 ) ; 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 ( 0x 20 ) ; 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 ( 0x 08 ) ; 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 ( 0x 10 ) ; 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=0x FF ; // 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 ( 0x 01 , canal ) ; // Seleccionar el canal a leer delay ( 10 ) ; // Esperar la conversión uint8_t msb = leerRegistro ( 0x 10 ) ; // Leer byte alto uint8_t lsb = leerRegistro ( 0x 11 ) ; // 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!=0x FF ) { 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,0x 00 ) ; //Paso 4 //MANUAL_CHID = '00' Seleccione AIN0 //No es necesario escribir, funciona por defecto escribirRegistro ( CHANNEL_SEL,0x 00 ) ; //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 ) ; }
↧