欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 我用九齊MCU芯片做adc測(cè)交流電電壓,測(cè)出來(lái)的電壓值在一直變化 [打印本頁(yè)]

作者: 遲遲不離去    時(shí)間: 2019-9-20 11:15
標(biāo)題: 我用九齊MCU芯片做adc測(cè)交流電電壓,測(cè)出來(lái)的電壓值在一直變化


這個(gè)是電路圖  下邊是我的程序  大佬幫幫忙  萬(wàn)分感謝
  1. #include <at8.h>
  2. #include "at8_constant.h"

  3. unsigned int v,ge,shi,bai;
  4. unsigned int R_AIN1_DATA_HB;        
  5. unsigned int R_AIN1_DATA_LB;
  6. unsigned int ADC_DATA;

  7. #define UPDATE_REG(x)        __asm__("MOVR _" #x ",F")
  8. #define A PORTAbits.PA0
  9. #define B PORTAbits.PA4
  10. #define C PORTAbits.PA7
  11. #define D PORTBbits.PB3
  12. #define E PORTBbits.PB1
  13. #define F PORTAbits.PA1
  14. #define G PORTAbits.PA6
  15. #define DP PORTAbits.PA5
  16. #define W1 PORTBbits.PB0
  17. #define W2 PORTAbits.PA2
  18. #define W3 PORTAbits.PA3


  19. void display(unsigned int i);
  20. void weixuan();

  21. //! interrupt service routine
  22. void isr(void) __interrupt(0)
  23. {
  24.         ADRbits.ADIF = 0;
  25.         R_AIN1_DATA_HB = ADD;
  26.         R_AIN1_DATA_LB = 0x0F & ADR;
  27.         ADMDbits.START = 1;  
  28. }

  29. void main(void)
  30. {
  31. //    R_AIN1_DATA_HB=R_AIN1_DATA_LB=0x00;
  32.   //----- Initial GPIO-----
  33.     IOSTA = 0x00;                              
  34.     IOSTB = 0X04;
  35.     PORTA = 0xFF;                                            
  36.     PORTB = 0xFF;
  37.     INTE  = 0x00;                                             
  38. //----- Initial ADC-----         
  39.         ADMD  = C_ADC_En | C_ADC_CH_Dis | C_ADC_PB2 ;     
  40.         ADVREFH = C_Vrefh_2V;                                       
  41.         ADR         = C_Ckl_Div1;                                                
  42.          ADCR  = C_Sample_8clk | C_12BIT;               
  43.         PACON = C_PB2_AIN7;                                            
  44.         ADMDbits.GCHS = 1;                                             
  45.         ADRbits.ADIF = 0;                                               
  46.         ADRbits.ADIE = 1;                                            
  47.         ADMDbits.START = 1;                                                
  48.         ENI();                 
  49.     while(1)
  50.     {
  51.              while(ADMDbits.EOC==0);
  52.              ADC_DATA = ((unsigned int)R_AIN1_DATA_HB << 4 )+ R_AIN1_DATA_LB;
  53.             v=(unsigned int)ADC_DATA/10;
  54.             ge = v%10;
  55.            shi = v/10%10;
  56.            bai = v/100%10;
  57.            weixuan();
  58.     }
  59. }
  60. void display(unsigned int i)
  61. {
  62.         switch(i)
  63.         {
  64.                 case 0:A=0;B=0;C=0;D=0;E=0;F=0;G=1;DP=1;break;
  65.                 case 1:A=1;B=0;C=0;D=1;E=1;F=1;G=1;DP=1;break;
  66.                 case 2:A=0;B=0;C=1;D=0;E=0;F=1;G=0;DP=1;break;
  67.                 case 3:A=0;B=0;C=0;D=0;E=1;F=1;G=0;DP=1;break;
  68.                 case 4:A=1;B=0;C=0;D=1;E=1;F=0;G=0;DP=1;break;
  69.                 case 5:A=0;B=1;C=0;D=0;E=1;F=0;G=0;DP=1;break;
  70.                 case 6:A=0;B=1;C=0;D=0;E=0;F=0;G=0;DP=1;break;
  71.                 case 7:A=0;B=0;C=0;D=1;E=1;F=1;G=1;DP=1;break;
  72.                 case 8:A=0;B=0;C=0;D=0;E=0;F=0;G=0;DP=1;break;
  73.                 case 9:A=0;B=0;C=0;D=0;E=1;F=0;G=0;DP=1;break;
  74.         }
  75. }

  76. void weixuan()
  77. {
  78.         unsigned int i,j;
  79.         while(1)
  80.         {
  81.         for(i=0;i<3;i++)
  82.         {
  83.                 switch(i)
  84.                 {
  85.                         case(0):W1=0;W2=0;W3=1;display(ge);break;
  86.                         case(1):/*if(v>10)*/W2=1;W1=0;W3=0;display(shi);break;
  87.                         case(2):/*if(v>100)*/W1=1;W2=0;W3=0;display(bai);break;
  88.                 }
  89.                 j=50;
  90.                 while(j--);            
復(fù)制代碼




作者: qq603599910    時(shí)間: 2019-9-20 19:27
看程序你是單次測(cè)試,一般做AD都是多次測(cè)試掐頭去尾取中間的均值哦,之前我用20次循環(huán)值取均值都有10個(gè)數(shù)字的跳動(dòng)哦.
作者: 南瓜派    時(shí)間: 2019-9-21 00:20
你這個(gè)半波的交流電壓,需要準(zhǔn)的話,假設(shè)定時(shí)1ms中斷,連續(xù)采20個(gè)數(shù)值,去掉一個(gè)最高值,取次高值*0.707可得交流有效值電壓
作者: yzwzfyz    時(shí)間: 2019-9-21 09:25
用這個(gè)電路,你就不怕被電到!
AD切換后,要待其充電充分后再起動(dòng)測(cè)試!
作者: sanm    時(shí)間: 2020-8-7 15:01
邏輯寫(xiě)的不好
作者: hsl32    時(shí)間: 2020-8-8 09:45
用測(cè)直流電的算法去測(cè)交流電,再怎么平均濾波顯示都一直變化的。因?yàn)榻涣麟姳旧砭褪且恢弊兓模恢辈蛔兊哪鞘侵绷麟姟y(cè)交流電要在一個(gè)頻率周期采樣N點(diǎn),然后采用最大值法或均方根法計(jì)算。N的個(gè)數(shù)越大越精確。最大值法最簡(jiǎn)單,精度不高。均方根法最準(zhǔn),但耗時(shí)。
作者: wwh2382    時(shí)間: 2020-8-8 23:03
能不能分享那兩個(gè)頭文件呀?讓大家一窺神秘的九齊




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1