This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430FG4618: Write and Read ADC12 value in external EEPROM

Part Number: MSP430FG4618

Hello,

I am having difficulty storing the ADC12 ADResult values in the external EEPROM memory via I2C.

The values read after being stored are different, they do not match.

Any tips on how to do it?

#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
   ADCresult = ADC12MEM0;
   ADCresult1 = ADC12MEM1;
   __no_operation (); // Não faz nada
   __bic_SR_register_on_exit(LPM3_bits); // Exit LPM3
} 

P2OUT &=~ BIT0; // Habilita o Circuito de Alimentação do Sensor de Pressão
P6SEL = 0x0F; // Seleciona o AD0 como entrada A/D
ADC12CTL0 = SHT0_15 + REF2_5V + REFON + ADC12ON; //Sample-and-hold time, 1024 cycles, Referencia 2,5V (ON), ADC12 on
ADC12CTL1 = SHP + ADC12DIV_7; // Sampling timer, Sourse: ADC12SC, divide por 8
ADC12MCTL0 = SREF_1; // Canal 10, Vref+
ADC12IE = 0x01; // Enable interrupt
ADC12CTL0 |= ENC;
ADC12CTL0 |= ADC12SC; // Start conversion
//while (!(ADC12IFG & 0x0001)); // Conversion done?
for (unsigned long int i = 0; i < 5000; i++); // Loop para Temporização
valor_canal_pressao1 = ((long)ADCresult - zero); // Converte a pressao com resolução 12 Bits long int
P2OUT |= BIT0; // Desabilita o Circuito de Alimentação do Sensor de Pressão
ADC12CTL0 = 0; // Desabilita o Conversor ADC12
ADC12CTL0 = 1;
ADC12CTL1 = 0;
ADC12CTL1 = 1;
ADC12CTL0 &=~ ENC; // Desabilita a Interrupção do Conversor ADC12

write external EEPROM

MS_Byte = valor_canal_pressao1; // Armazena os Bits MSB mais significativos do valor do canal de pressao long int
LS_Byte = valor_canal_pressao1>>8; // Armazena os Bits LSB menos significativos do valor do canal de pressao long int

Coletando_Dados++; // Próximo Endereço para Escrita 0x0006
EEPROM_ByteWrite(Coletando_Dados,MS_Byte);// Escreve na EEPROM o Byte com o valor do MSB do ADC12
EEPROM_AckPolling(); // Verifica se completou o ciclo de escrita na EEPROM

Coletando_Dados++; // Próximo Endereço para Escrita 0x0007
EEPROM_ByteWrite(Coletando_Dados,LS_Byte);// Escreve na EEPROM o Byte com o valor do LSB do ADC12
EEPROM_AckPolling(); // Verifica se completou o ciclo de escrita na EEPROM

Read external EEPROM

valor_canal_pressao1 = EEPROM_RandomRead(Lendo_Dados);// Efetua a Leitura na EEPROM do Byte com o valor do ADC12
Lendo_Dados++; // Próximo Endereço para Leitura 0x0007

valor_canal_pressao1 |= ((unsigned int)EEPROM_RandomRead(Lendo_Dados)<<8);

pressao_manometrica1 = ((long)valor_canal_pressao1 * 264.00)/4095; // Converte a pressão resolução 12Bits ponto float

**Attention** This is a public forum