实时串行数据采集

时间:2014-05-01 19:18:27

标签: pic

我希望从pic16f877a,4Mhz HS(如果给它一个正弦波输入)取样并绘制相同的图。我给出230vp正弦波50hz作为输入并将其转换为5v范围并将其转换为正值电压。

这是我的代码

                    // Loop variable


  float val,val1;//Declare the adcvalue stored variables
  char uart_rd[50],uart_rd1[50];

  void rmsv();
  void adc_uart();//adc read and uart write
  void interrupt(){
    if (PIR1.ADIF) {
      PIR1.ADIF=0; // clear AD interrupt flag

          val= (ADRESH << 8) | ADRESL; // read dadta from channel 0
              {


         val1=(val*325.0)/1023.0;
          FloatToStr(val1,uart_rd1);
         strncpy(uart_rd,uart_rd1,3);
         UART1_Write_Text(uart_rd1);

         //UART1_Write(10);
        UART1_Write(13);
        delay_us(1);
      }

           Delay_Cyc(3); //wait acquisition time
      ADCON0.F2=1; //start conversion again
    }
         }
  void main()
  {
      TRISA=0XFF;//porta as input
  ADCON1 = 0x82; // AN0->AN4 selected as analog input
    ADCON0 = 0b11000001; // Configue analog mode
    INTCON.GIE = 1; //Enable global interrupt
    INTCON.PEIE = 1; //Enable peripheral interrupt
    PIE1.ADIE = 1; //Enable ADC interrupt
    Delay_us(20); //wait for acquisition time
    ADCON0.F2 = 1; //start conversion
      // ADCON1=0X81;
       UART1_Init(9600);               // Initialize UART module at 9600 bps
       //ADC_Init();


      while(1);

   }

我检查了超级终端中的值,看到控制器甚至没有采样峰值电压。我希望正确的样本,以便能够正确绘制波形

1 个答案:

答案 0 :(得分:0)

可能这不是软件问题。你说&#34;控制器甚至没有采样峰值电压&#34;信号范围在5V和0V之间。那么,如果您使用PIC电源电压(Vp)作为参考电压配置PIC ADC,并且如果电源电压小于5V(Vp <5V),那么您的最大adc电压范围是Vp。它可能导致ADC采集后的sin信号峰值出现削减。

    Vp    ________           _________           _________
                  \         /         \         /
                   \       /           \       /
                    \     /             \     / 
                     \   /               \   /
     0                \_/                 \_/

测量PIC引脚上的电源电压,如果是原因,则调整电压源或将信号转换为Vp范围。