久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6167|回復: 6
打印 上一主題 下一主題
收起左側

我用九齊MCU芯片做adc測交流電電壓,測出來的電壓值在一直變化

[復制鏈接]
跳轉到指定樓層
樓主


這個是電路圖  下邊是我的程序  大佬幫幫忙  萬分感謝
  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--);            
復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:272119 發表于 2019-9-20 19:27 | 只看該作者
看程序你是單次測試,一般做AD都是多次測試掐頭去尾取中間的均值哦,之前我用20次循環值取均值都有10個數字的跳動哦.
回復

使用道具 舉報

板凳
ID:243602 發表于 2019-9-21 00:20 | 只看該作者
你這個半波的交流電壓,需要準的話,假設定時1ms中斷,連續采20個數值,去掉一個最高值,取次高值*0.707可得交流有效值電壓
回復

使用道具 舉報

地板
ID:123289 發表于 2019-9-21 09:25 | 只看該作者
用這個電路,你就不怕被電到!
AD切換后,要待其充電充分后再起動測試!
回復

使用道具 舉報

5#
ID:425027 發表于 2020-8-7 15:01 | 只看該作者
邏輯寫的不好
回復

使用道具 舉報

6#
ID:767423 發表于 2020-8-8 09:45 | 只看該作者
用測直流電的算法去測交流電,再怎么平均濾波顯示都一直變化的。因為交流電本身就是一直變化的,一直不變的那是直流電。測交流電要在一個頻率周期采樣N點,然后采用最大值法或均方根法計算。N的個數越大越精確。最大值法最簡單,精度不高。均方根法最準,但耗時。
回復

使用道具 舉報

7#
ID:748788 發表于 2020-8-8 23:03 | 只看該作者
能不能分享那兩個頭文件呀?讓大家一窺神秘的九齊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品一区二区三区中文在线 | www.日本三级 | www.久久久.com| 欧产日产国产精品国产 | 成人精品视频在线观看 | 99精品一区二区 | 国产精品久久久久久久久久免费看 | 国产一区二区三区精品久久久 | 一道本一区二区 | 亚洲天堂精品久久 | 天天操夜夜拍 | 涩涩视频在线观看 | 亚洲精品99 | 福利片在线观看 | 韩国欧洲一级毛片 | 亚洲人成网站777色婷婷 | 欧美激情精品久久久久久 | 国产精品视频网 | 一色桃子av一区二区 | 在线午夜 | 手机三级电影 | 久久久久久国产精品 | 亚洲天堂一区二区 | 日韩视频在线免费观看 | 涩涩视频在线观看免费 | 国产精品成人久久久久 | 91色视频在线观看 | 欧美日韩在线视频一区 | 午夜精品一区二区三区在线观看 | 无码国模国产在线观看 | 欧美日本高清 | 国产精品欧美一区二区三区 | 天天插天天操 | 欧美视频一区二区三区 | 亚洲一区免费 | 亚洲欧美精品 | 午夜精品久久久 | 亚洲精品乱码久久久久久按摩 | 91玖玖| 韩日一区二区三区 | 欧美日韩精品在线一区 |