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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6224|回復: 6
收起左側

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

[復制鏈接]
ID:495949 發表于 2019-9-20 11:15 | 顯示全部樓層 |閱讀模式
51hei圖片20190920111015.png

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



回復

使用道具 舉報

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切換后,要待其充電充分后再起動測試!
回復

使用道具 舉報

ID:425027 發表于 2020-8-7 15:01 | 顯示全部樓層
邏輯寫的不好
回復

使用道具 舉報

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

使用道具 舉報

ID:748788 發表于 2020-8-8 23:03 | 顯示全部樓層
能不能分享那兩個頭文件呀?讓大家一窺神秘的九齊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 激情毛片 | 中文字幕日韩欧美一区二区三区 | 久草在线| 欧美做暖暖视频 | 日韩色图在线观看 | 五月婷婷丁香 | 久久亚洲国产 | 成人亚洲精品 | 911网站大全在线观看 | 毛片一级黄色 | 久久精品| 91干b| 国产成人高清在线观看 | 亚洲精品久久久久久久久久久久久 | 亚洲国内精品 | 二区欧美 | 天天爽天天操 | 日韩av在线一区 | 日韩精品亚洲专区在线观看 | av在线视 | 欧美色999 | 91精品久久 | 日韩成人免费 | 九九九久久国产免费 | 99久久精品一区二区成人 | 国产亚洲精品一区二区三区 | 欧美日韩一区在线 | 在线免费看黄 | 99久久精品国产毛片 | 免费人成激情视频在线观看冫 | 国产成人精品一区二区三区网站观看 | 久久久久亚洲精品 | 国产精品久久久久久久7电影 | 国产美女精品 | 精品一区二区三区在线观看国产 | 4h影视 | 成人日批视频 | 日日射影院 | 羞羞视频免费在线观看 | 日韩高清国产一区在线 | 一区二区三区四区免费在线观看 |