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