Прошу вас, я с трудом понимаю, как рассчитать частоту дискретизации PIC16F688 для АЦП. Моя тактовая частота (MCU) составляет 8 МГц. и я настроен ADCON1 на следующее:Частота дискретизации для PIC16F688
ADCON1 &= 0b01000000; //clear bits 6 through 0
ADCON1 |= 0b01000000; //set bits 6 though 0.
Я сделал, что согласно спецификации ПОС. Потому что он имеет внутренний генератор, а это значит, что он работает на Fosc/4 и соответствует таблице 8-1. Итак, я пытаюсь найти частоту дискретизации. Какой код связан с этим? Я думаю, что ADCON1 отвечает за часы. то есть частоты дискретизации.
Я не думаю, что delay_ms (1000) - это вопрос в моем бесконечном цикле. Так что это не моя частота дискретизации. Или либо UART1_Init (9600).
Не могли бы вы мне помочь, я был бы признателен. Спасибо.
char temp[5];
unsigned int adc_value;
char uart_rd;
int i;
unsigned int d[10]={0};
int average = 0;
int counter =0;
void main()
{
temp[0]='1';
temp[1]='2';
temp[2]='3';
temp[3]='4';
temp[4]=' ';
OSCCON = 0x77;
//ANSEL = 0;
ANSEL = 0b00000100;
CMCON0 = 0X07;
TRISA = 0b00001100;
// ADCON0 =0b1011;
// ADCON1 &= 0b01000000;
//ADCON1 |= 0b01000000;
UART1_Init(9600);
Delay_ms(100);
while (1)
{
average=0;
for(i=0;i<10;i++)
{
average+= ADC_Read(2);
}
average/=10;
temp[0] = average/1000+48;
temp[1] = (average/100)%10+48;
temp[2] = (average/10)%10+48;
temp[3] = average%10+48;
for (i=0;i<5; i++)
{
UART1_Write(temp[i]);
}
}
}
//Updated the code using Interrupt.// But have problem reading from ANS2.
enter code here
char temp[5];
unsigned int adc_value;
int i;
unsigned int d[10]={0};
int average = 0;
void interrupt(){
if (INTCON.T0IF) {
INTCON.T0IF = 0 ;// clear T0IF (Timer interrupt flag).
average= ADC_Read(2);
temp[0] = average/1000+48;
temp[1] = (average/100)%10+48;
temp[2] = (average/10)%10+48;
temp[3] = average%10+48;
for (i=0;i<5; i++)
{
UART1_Write(temp[i]);
}
}
TMR0 = 178;
}
void main() {
temp[0]='1';
temp[1]='2';
temp[2]='3';
temp[3]='4';
temp[4]=' ';
OSCCON= 0x77; //8MHz
ANSEL = 0b00000100; //ANS2
CMCON0 = 0X07; //
TRISA = 0b00001100;
UART1_Init(9600);
TMR0 = 178 ;
// CMCON0 = 0X04; // turn off compartor.
OPTION_REG = 0x87; //
INTCON =0xA0;
while(1);
}
В приведенном выше коде вы устанавливаете бит 6 в «ADCON1» и очищаете биты 0-5 и 7, что не так, как говорится в комментариях, - это то, что вы намеревались сделать? –
О, извините, но комментарий неправильный. поэтому не смотрите на комментарий, я не обновлял его. Но мой вопрос в том, как я могу окупить частоту дискретизации? если вы видите страницу 67 в приведенной ниже ссылке, если это техническое описание. Я пытаюсь довести частоту дискретизации до 100 Гц. Так что, как я понимаю, это: - F = 1/t. но ни один из тех, кто в таблице, не может дать мне 100 Гц. Опять же, я настраиваю свою тактовую частоту на 8 МГц. (Но я не знаю точно 8MHz). Итак, как я рассчитываю частоту дискретизации. Я ценю, если вы будете ходить со мной, хотя это. –
OK - пожалуйста, нажмите на ссылку [edit] выше и исправьте свой вопрос, чтобы избежать дальнейших путаниц. –