DANXIA
Junior Member level 2
hello...
i am using STM8s003f3 to read a voltages from channel 2.
but my readings are fluctuating. cann't understand the problems. i think i have done mistake in registors.
my adc is 10 bit and i am trting to measure +-200v. please guide .
i am quoting some part of code which is related to ADC
please give some solution as soon as possible. i really need it.
Thanks!
i am using STM8s003f3 to read a voltages from channel 2.
but my readings are fluctuating. cann't understand the problems. i think i have done mistake in registors.
my adc is 10 bit and i am trting to measure +-200v. please guide .
i am quoting some part of code which is related to ADC
Code:
void ADC__Initialization (void)
{
ADC1->CR1_BitFields.ADON=1;
ADC1->CR2_BitFields.ALIGN=1;
ADC1->TDR=0xFFFF;
}
uint16_t ADC__ReadChannel (uint8_t Channel)
{
unsigned int val=0;
ADC1->CSR_BitFields.CH=Channel;
ADC1->CR1_BitFields.ADON=1;
do
{
_asm("nop");
_asm("nop");
_asm("nop");
}
while (ADC1->CSR_BitFields.EOC==0);
val |= ADC1->DRL;
val |= ADC1->DRH<<8;
ADC1->CSR_BitFields.EOC=0;
val &= 0x03ff;
return (val);
}
here is define all the register
struct _ADCx_Structure
{
uint16_t const volatile DB[10];
uint8_t const volatile RESERVED1[12];
union
{
//ADCx Control/Status Register
uint8_t volatile CSR;
//CSR Bits Definition
struct
{
uint8_t CH: 0x04;
uint8_t AWDIE: 0x01;
uint8_t EOCIE: 0x01;
uint8_t AWD: 0x01;
uint8_t EOC: 0x01;
} volatile CSR_BitFields;
};
union
{
//ADCx Configuration Register 1
uint8_t volatile CR1;
//CR1 Bits Definition
struct
{
uint8_t ADON: 0x01;
uint8_t CONT: 0x01;
uint8_t RESERVED0: 0x02;
uint8_t SPSEL: 0x03;
uint8_t RESERVED1: 0x01;
} volatile CR1_BitFields;
};
union
{
//ADCx Configuration Register 2
uint8_t volatile CR2;
//CR2 Bits Definition
struct
{
uint8_t RESERVED0: 0x01;
uint8_t SCAN: 0x01;
uint8_t RESERVED1: 0x01;
uint8_t ALIGN: 0x01;
uint8_t EXTSEL: 0x02;
uint8_t EXTTRIG: 0x01;
uint8_t RESERVED2: 0x01;
} volatile CR2_BitFields;
};
union
{
//ADCx Configuration Register 3
uint8_t volatile CR3;
//CR3 Bits Definition
struct
{
uint8_t RESERVED0: 0x06;
uint8_t OVR: 0x01;
uint8_t DBUF: 0x01;
} volatile CR3_BitFields;
};
//ADCx Data Register
uint8_t const volatile DRL;
uint8_t const volatile DRH;
please give some solution as soon as possible. i really need it.
Thanks!
Last edited by a moderator: