nabend,
@LotadaC
Habe meine Kalibrationsroutine angepasst. Nur glaube ich, dass dort noch ein Fehler drinn ist (was die Rechnung betrifft)
Hier der Aufruf (damit will ich alle Channels abfragen) ->
CodeBox C
uint8_t ReadChannel = 13;
for ( ; ReadChannel > 0 ; ReadChannel--)
{
AD7124_CalibrateCh(&AD,ReadChannel,0);
}
CodeBox C
void AD7124_CalibrateCh(ad7124_t *AD_ptr, uint8_t Ch, uint8_t Setup)
{
uint8_t ChannelRegister = 0;
uint16_t ChannelSelect = 0;
/* select channel */
switch(Ch)
{
case 0: {ChannelRegister = AD7124_Channel_0; ChannelSelect = AINPx(AIN0);} break;
case 1: {ChannelRegister = AD7124_Channel_1; ChannelSelect = AINPx(AIN1);} break;
case 2: {ChannelRegister = AD7124_Channel_2; ChannelSelect = AINPx(AIN2);} break;
case 3: {ChannelRegister = AD7124_Channel_3; ChannelSelect = AINPx(AIN3);} break;
case 4: {ChannelRegister = AD7124_Channel_4; ChannelSelect = AINPx(AIN4);} break;
case 5: {ChannelRegister = AD7124_Channel_5; ChannelSelect = AINPx(AIN5);} break;
case 6: {ChannelRegister = AD7124_Channel_6; ChannelSelect = AINPx(AIN6);} break;
case 7: {ChannelRegister = AD7124_Channel_7; ChannelSelect = AINPx(AIN7);} break;
case 8: {ChannelRegister = AD7124_Channel_8; ChannelSelect = AINPx(AIN8);} break;
case 9: {ChannelRegister = AD7124_Channel_9; ChannelSelect = AINPx(AIN9);} break;
case 10: {ChannelRegister = AD7124_Channel_10; ChannelSelect = AINPx(AIN10);}break;
case 11: {ChannelRegister = AD7124_Channel_11; ChannelSelect = AINPx(AIN11);}break;
case 12: {ChannelRegister = AD7124_Channel_12; ChannelSelect = AINPx(AIN12);}break;
case 13: {ChannelRegister = AD7124_Channel_13; ChannelSelect = AINPx(AIN13);}break;
case 14: {ChannelRegister = AD7124_Channel_14; ChannelSelect = AINPx(AIN14);}break;
case 15: {ChannelRegister = AD7124_Channel_15; ChannelSelect = AINPx(AIN15);}break;
default: {ChannelRegister = AD7124_Channel_0; ChannelSelect = AINPx(AIN0);};
}
/* select setup */
switch(Setup)
{
case 0: {AD7124_write_uint16(AD7124_Config_0, (REF_SEL(INT_REF) | REF_BUFP | REF_BUFM | BURNOUT_OFF | PGA_GAIN(GAIN_1))); }break;// setup "0"
case 1: {AD7124_write_uint16(AD7124_Config_1, (REF_SEL(INT_REF) | REF_BUFP | REF_BUFM | BURNOUT_OFF | PGA_GAIN(GAIN_2))); }break;// setup "1"
case 2: {AD7124_write_uint16(AD7124_Config_2, (REF_SEL(INT_REF) | REF_BUFP | REF_BUFM | BURNOUT_OFF | PGA_GAIN(GAIN_4))); }break;// setup "2"
case 3: {AD7124_write_uint16(AD7124_Config_3, (REF_SEL(INT_REF) | REF_BUFP | REF_BUFM | BURNOUT_OFF | PGA_GAIN(GAIN_8))); }break;// setup "3"
case 4: {AD7124_write_uint16(AD7124_Config_4, (REF_SEL(INT_REF) | REF_BUFP | REF_BUFM | BURNOUT_OFF | PGA_GAIN(GAIN_16))); }break;// setup "4"
case 5: {AD7124_write_uint16(AD7124_Config_5, (REF_SEL(INT_REF) | REF_BUFP | REF_BUFM | BURNOUT_05uA | PGA_GAIN(GAIN_32))); }break;// setup "5"
case 6: {AD7124_write_uint16(AD7124_Config_6, (REF_SEL(INT_REF) | REF_BUFP | REF_BUFM | BURNOUT_2uA | PGA_GAIN(GAIN_64))); }break;// setup "6"
case 7: {AD7124_write_uint16(AD7124_Config_7, (REF_SEL(INT_REF) | REF_BUFP | REF_BUFM | BURNOUT_4uA | PGA_GAIN(GAIN_128)));}break;// setup "7"
default: {AD7124_write_uint16(AD7124_Config_0, (REF_SEL(INT_REF) | REF_BUFP | REF_BUFM | BURNOUT_OFF | PGA_GAIN(GAIN_1)));}
}
/* config adc control register */
AD7124_write_uint16(AD7124_ADC_CTRL_REG,(REF_EN | PWR_MDE(PWR_ME) | ADC_MDE(INT_ZERO_SCALE_CAL) | CLK_SEL(CLK_INT_614kHz_WITH_OUT)));
/* config channel register */
AD7124_write_uint16(ChannelRegister,(ENABLE_CH(Ch) | SETUP(Setup) | ChannelSelect | AINMx(DGND)));
/* wait for ready */
while ((AD7124_read_uint8(AD7124_STATUS_REG) & 0x80) != 0){};
AD7124_write_uint16(AD7124_ADC_CTRL_REG,(REF_EN | PWR_MDE(PWR_ME) | ADC_MDE(INT_FULL_SCALE_CAL) | CLK_SEL(CLK_INT_614kHz_WITH_OUT)));
/* wait for ready */
while ((AD7124_read_uint8(AD7124_STATUS_REG) & 0x80) != 0){};
/* read offset */
AD_ptr->Offset[Ch] = AD7124_read_uint24(AD7124_OFFS0_REG + Setup);
/* calculate offset */
AD_ptr->Offset[Ch] = 0x800000 - AD_ptr->Offset[Ch];
/* read gain */
AD_ptr->Gain[Ch] = AD7124_read_uint24(AD7124_GAIN0_REG + Setup);
}
Was das Gain Register betrifft, muss ich mir noch überlegen ob ich das mit einbeziehe?!