Search code examples
microcontrollerpicmikrocmicroc

Appropriate sample for PIC ADC after converting from analog voltage.


if I'm reading an analog signal from my pressure sensor at 500mSec. my instructor told me that you should make the ADC Timr0 interrupt double what you are reading from analog Oscilloscope (500mSec.).i.e. 2fc. My code is down below. Should I configure my timer0 to be 20Hz or less or more?

enter code here
     char temp[5];

    unsigned int adc_value;

     char uart_rd;
      int i;
       unsigned int d[10]={0};
      int average = 0;
       int counter =0;


    void interrupt(){
         if (INTCON.T0IF) {
          INTCON.T0IF = 0 ;// clear T0IF (Timer interrupt flag).
     }
    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){
            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]);
             }
      }

 }

Solution

  • When preform sampling on a signal you are not capturing all of is information but only parts of it with a given sampling period.

    The Nyquist–Shannon sampling theorem claims that if you can actual sample at above of some given frequency you can get all the information of a finite bandwidth of the signal. This frequency is twice the maximum frequency of that bandwidth.

    If you don't do comply with that frequency you will suffer from an effect called aliasing.

    You can learn more about here: https://en.wikipedia.org/wiki/Aliasing