[ݳXȲέp


82G516 ADC的功能

以討論8051單晶片相關軟硬體 -- 比如8051單晶片周邊電路、燒錄問題、C與Asm軟體寫作等等相關技術問題......

版主: charlesliao


82G516 ADC的功能

文章龍魂劍少 發表於 週五 4月 24, 2015 12:45 am

代碼: 選擇全部

#include <REG_MPC82G516.h> //for MPC82G516 SFR definition
#include <intrins.h>

sbit LCD_RS=P1^0;   //LCM±µ¸}©w¸q
sbit LCD_RW=P1^1;
sbit LCD_E=P1^2;
#define LCD_Data P2


void WriteDataLCD(char WDLCD);
void WriteCommandLCD(char WCLCD);

void LCDInit(void);
void ChangeCursor(char X,char Y);
void delay_us(int t)
{
   while(t--);
}
void delay_ms(int t)
{
   int i;
   while(t--)
   {
      i=1000;
      while(i--);
   }
}


void main(void)     //????
{
   
   unsigned int tmp;
   unsigned long int  tmp1;      //tmp1?????,???4byte???????????

   delay_us(20000);      //?LCM????,?????????????????LCM,LCM??????
   LCDInit(); //LCM???

   P1M0 |= 0x40;      //??P1.6?1(??,?????)

//  ADCTL:ADCON SPEED1 SPEED0 ADCI ADCS CHS2 CHS1 CHS0    
   ADCTL = 0x86;      //?????ADC,?P1.7????

   while(1)
   {unsigned char i;
      ADCTL |= 0x08;      
      while((ADCTL&0x10) == 0); //????????
      
      ADCTL = ADCTL & 0xE7;   //
      tmp = ADCH * 5 + ADCL;
        ChangeCursor(0,0);
      for( i=0;i<50;i++)  // 取tmp1多平均
      {
   tmp1=tmp1+tmp;
         
      }
      tmp1=tmp1/50;
      
      
      WriteDataLCD(tmp/1000+0x30);  //?????,???ASCII?
      tmp=tmp%1000;
      WriteDataLCD(tmp/100+0x30);  //?????,???ASCII?
      tmp=tmp%100;
      WriteDataLCD(tmp/10+0x30);
      WriteDataLCD(tmp%10+0x30);   
      ChangeCursor(1,0);         //?????????
      tmp1=tmp1*4340/1023;         //?CPU??????????,???????????LCM,?????????????0~1023?????0~4.34V,
                                  //????????????4.34V,0~1023?????0~4.34V,???4340/1023?,???????1000?,???????????
      WriteDataLCD(tmp1/1000+0x30);  //?????,???ASCII?
      tmp1=tmp1%1000;
      WriteDataLCD('.');
      WriteDataLCD(tmp1/100+0x30);
      tmp1=tmp1%100;
      WriteDataLCD(tmp1/10+0x30);
      WriteDataLCD(tmp1%10+0x30);
      WriteDataLCD('V');
      delay_ms(350);   //???????0831,?CPU???,?????????????

   }
}


//????LCD???
void WriteDataLCD(char WDLCD)
{
LCD_Data = WDLCD;
LCD_RS = 1;
LCD_RW = 0;
LCD_E = 1; //????
delay_us(100); //???????
LCD_E = 0;
delay_us(100); //?????????
}

//????LCD???
void WriteCommandLCD(char WCLCD) //BuysC?0??????
{
LCD_Data = WCLCD;
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 1;
delay_us(100); //???????
LCD_E = 0;
delay_us(100);  //?????????
}


void LCDInit(void) //LCM???
{
WriteCommandLCD(0x38); //??LCD??8??,2?,5*7??

WriteCommandLCD(0x06); // ????????
WriteCommandLCD(0x0C); // ????????

WriteCommandLCD(0x01); //????
delay_us(5000);
}

//?????????
void ChangeCursor(char X,char Y)  //X=(0/1)?????,???, Y=0~15 ??????
{
X &= 0x1;
Y &= 0xF; //??X????15,Y????1
if (X) Y |= 0x40; //???????????+0x40;
Y |= 0x80; // ?????
WriteCommandLCD(Y); //?????LCD
}



以上是我拿之前的程式稍做修改
目前是卡在adc轉換的精密度無法提高
電源是用學校用的power
(用電腦的usb電源雜訊太大)
單晶片用82G516
然後使用內建的ADC的功能
sensor我目前是用線繞電組10K
最後是要用熱敏電腦去做一組位溫度
濾波的已經採用四階濾波
用150K+1u(金屬皮膜電容)

想請教各位前輩還有辦法提高精密度嗎?
硬體的部份真的不行在用軟體濾波
龍魂劍少
 
文章: 49
註冊時間: 週日 8月 11, 2013 1:11 pm

Re: 82G516 ADC的功能

文章xaudio 發表於 週五 4月 24, 2015 3:06 pm

熱敏電阻只適合粗略判斷,做不出溫度要求的準確度。
簡易電路採用 LM35 之類才對,更精準的是 PT100。

圖檔

精密度所指為何?
(1) 解析度 - 8 bit 或 10 bit 由 ADC 決定。
(2) SNR - 由 PCB Layout 實作技術決定。
(3) 溫度飄移 - Vref 獨立,不可用 Vcc 分壓。

無論是否有類比濾波,ADC 讀完全不跳動需要軟體處理。
四階濾波也不是 4 組 RC 串聯這麼簡單:

圖檔

(1) Butterworth (maximally flat)
(2) Linkwitz-Riley (critically damped)
xaudio
 
文章: 1958
註冊時間: 週六 12月 11, 2010 1:51 am

Re: 82G516 ADC的功能

文章龍魂劍少 發表於 週六 5月 09, 2015 12:38 am

謝謝前輩的解答
目前我是改用其他顆比較好的CPU來控制
82516我問其他前輩得到的答案都差不多
可用的bit頂多8bit左右
龍魂劍少
 
文章: 49
註冊時間: 週日 8月 11, 2013 1:11 pm

Re: 82G516 ADC的功能

文章Scott Wang 發表於 週日 5月 10, 2015 6:58 pm

ADC的解析度問題,可以介紹你一種方法,你可以試試,若你現在不會用,也許等你技巧更成熟時就可以用了,最簡單的就用比較和系統的Timer,例如以Port 1.0 輸出Hi經RC之後進入比較(-)做為參考電壓,比較(+)做為ADC的輸入,比較器Vout接到Port 1.1做為輸入端.

當比較由Port 1.0送出Hi之後即開始時,另外從比較的Vout由Port 1.1讀入,若為1表示外部電壓比參考電壓高,若為0表示外部電壓比參考電壓低,則此時的時值即為外部電壓值,一直重覆去讀取Port 1.1的值,以判定外部電壓值,若有興趣就可以試試看囉.

而所讀入的電壓穩定度可以用軟體去多讀幾次,如讀入3,5,10次之後再把總合除以次,其平均值就是一個較穩定的電壓值.
若是需要較高速的ADC,還是得用硬體.

Good Luck.
可調高壓直流電源供應器,中低壓直流電源供應器,高壓模組,電壓放大器,電流放大器.
恆流源(定電流源),恆壓源(定電壓源),帶通濾波器,2V以下高精度參考電壓,標準電壓.
專門接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,研究單位實驗設備.
另可接受其它電子專案設計.
http://hvpower.myweb.hinet.net/
...Scott Wang...

超音波切割機(切割塑膠用),小型攜帶式,可以切割如:adapter適配器外殼,玩具模型等等,若欲詢問超音波切割機,請PM,謝謝。
頭像
Scott Wang
 
文章: 2303
註冊時間: 週六 1月 21, 2006 3:23 am
來自: 南部,Tainan, Taiwan

Re: 82G516 ADC的功能

文章龍魂劍少 發表於 週五 5月 15, 2015 12:05 am

收到
謝謝
SCOTT前輩的指導
目前ADC先暫時告一段落
在來的課題是要熟悉PWM的原理
龍魂劍少
 
文章: 49
註冊時間: 週日 8月 11, 2013 1:11 pm

Re: 82G516 ADC的功能

文章Scott Wang 發表於 週五 5月 15, 2015 12:43 am

PWM的原理很簡單,就是輸出脈波Hi和Low的比例而已.
如送出值:
10001000
波形:
-___-___

送出值:
01110111
波形:
_---_---
可調高壓直流電源供應器,中低壓直流電源供應器,高壓模組,電壓放大器,電流放大器.
恆流源(定電流源),恆壓源(定電壓源),帶通濾波器,2V以下高精度參考電壓,標準電壓.
專門接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,研究單位實驗設備.
另可接受其它電子專案設計.
http://hvpower.myweb.hinet.net/
...Scott Wang...

超音波切割機(切割塑膠用),小型攜帶式,可以切割如:adapter適配器外殼,玩具模型等等,若欲詢問超音波切割機,請PM,謝謝。
頭像
Scott Wang
 
文章: 2303
註冊時間: 週六 1月 21, 2006 3:23 am
來自: 南部,Tainan, Taiwan


回到 8051單晶片--相關的軟硬體討論區

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 2 位訪客