国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

身價過億的溫柔蘿莉?qū)π〈a農(nóng)說ADC會采集嗎

gnehc / 2697人閱讀

摘要:對于電壓或者電流連續(xù)變化的信號,就需要通過模數(shù)轉(zhuǎn)換電路,變成單片機可以識別的數(shù)字電平信號。目前來說,常見的有兩種方式,一種是并行比較,一種是逐次比較。具有成本低元件簡單等優(yōu)勢,而且容易做出高精度的轉(zhuǎn)換器,所以被廣泛使用。


小碼農(nóng)電壓使者怎么敢說不會采集

模擬量—>數(shù)字量(ADC模塊)

模擬量與單片機的數(shù)字量之間的關系

5V 單片機 CPU 電路是二進制的,運算過程中,電壓只有2種:高電平 5V 和低電平 0V 。對于電壓或者電流連續(xù)變化的信號,就需要通過模數(shù)轉(zhuǎn)換電路,變成單片機可以識別的數(shù)字電平信號。 MP3 就是用 ADC 采樣保存的失真文件。

模擬量轉(zhuǎn)換成數(shù)字的方式

模擬量變成數(shù)字量,通常都是用比較器來負責轉(zhuǎn)換。目前來說,常見的有兩種方式,一種是并行比較,一種是逐次比較

**并行比較器:**速度比較快,但是采用的元件非常非常多。成本會非常高。所以,實用性不是很廣泛

**逐次比較器:**通過反饋控制,多次運算后,轉(zhuǎn)換出結(jié)果。具有成本低、元件簡單等優(yōu)勢,而且容易做出高精度的轉(zhuǎn)換器,所以被廣泛使用。

逐次比較器ADC的概念

一個超級好的例子分享給你們

先來玩?zhèn)€游戲 :狗蛋拿了些花生米,跟你說,想吃就要先猜對有多少個。告訴你最多是 255 顆,你猜的時候,可以告訴你多了或者少了。那么,怎么猜才能最快猜出花生米的數(shù)量?
猜的時候,為了方便計算, 我們多加 0.5 顆花生米。
==第一步:==猜 255 ÷ 2 +0.5=128. 狗蛋告訴你,多了 (0) 。
第二步:猜 128 ÷ 2=64. 狗蛋告訴你,少了 (1)。
第三步:猜 (128 + 64) ÷ 2=96. 狗蛋 告訴 你,多了 (0) 。
第四步:猜 (96 + 64) ÷ 2=80. 狗蛋 告訴 你,少了 (1) 。
第五步:猜 (96 + 80) ÷ 2=88. 狗蛋 告訴 你,少了(1)。
第六步:猜 (96 + 88) ÷ 2=92. 狗蛋 告訴 你,多了(0)。
第七步:猜 (92+ 88) ÷ 2=90. 狗蛋 告訴 你,多了(0) 。
第八步:猜 (90+ 88) ÷ 2=89. 狗蛋 告訴 你,猜對 (?) 。
得出結(jié)果: 如果不加 0.5 ,實際計算公式得結(jié)果是 88.65234375 。實際上88.65比89小所以是 1
四舍五入, 89>88.65, 取 ?= 1 ;得出結(jié)果就是 0 1 0 1 1 0 0 1 =89=0x59;

STC內(nèi)部ADC模塊的寄存器

1.ADC口配置成ADC輸入模式或者高阻模式

2.ADC控制寄存器:ADC_CONTR.控制電源,轉(zhuǎn)換速度,標志位,啟動位,通道選擇[2:0]

3.ADC采樣結(jié)果輸出寄存器ADC_RES,ADC_RESL。可以是[1:0]+[7:0],也可以是[7:0]+[1:0].

4.ADC轉(zhuǎn)換,跟中斷有關的寄存器IE

5.輔助寄存器AUXR1,主要是控制結(jié)果寄存器的存儲格式

這里我們需要采集電池電壓(我們用P1.0采集)

我是準備用ADC0來檢測電池電壓的,具體看老師需求,然后把示數(shù)顯示到數(shù)碼管上面,因為之前我出過數(shù)碼管博客,大家可能還有點印象,不知道的看真正的數(shù)碼管

P1M1 |= 0x01;P1M0 &= ~0x01;//P1.0腳ADC0

P1ASF |= 0x01;

CLK_DIV |= 0x20;

ADC_RES = 0;ADC_RESL = 0;

ADC初始化

//ADC初始化void ADC_Init(){	P1M1 |= 0x0f;	P1M0 &= ~0x0f;//P1.0腳ADC0	P1ASF |= 0x0f;//	P1M1 |= 0x02;// 	P1M0 &= ~0x02;//P1.1腳ADC1//	P1ASF |= 0x02;	CLK_DIV |= 0x20;	ADC_RES = 0;	ADC_RESL = 0;}

ADC_CONTR = 0x88;

ADC讀數(shù)據(jù)底層驅(qū)動

//ADC讀數(shù)據(jù)底層驅(qū)動void ADC_Read_Data_Drive(){	//轉(zhuǎn)換之前先把轉(zhuǎn)換結(jié)果寄存器清零	ADC_RES = 0;	ADC_RESL = 0;	//啟動轉(zhuǎn)換	ADC_CONTR = 0x88;//轉(zhuǎn)換速度我用最慢的	//等到ADC_FLAG為1	while(!(ADC_CONTR&0x10));	//然后把數(shù)據(jù)傳到緩存變量里面去	ADC_Read_Data = ADC_RES<<8;	ADC_Read_Data = ADC_Read_Data+ADC_RESL;	}

演示視頻

采集電壓

采集電壓

ADC代碼

ADC_Drive.c(還有一個我自己寫的濾波函數(shù),使得數(shù)據(jù)穩(wěn)定)基本這個水平可以拿省二了

#include "all.h"//有數(shù)據(jù)那我們就得存u16 xdata ADC_Read_Data = 0;u16 xdata ADC_Filter_Data = 0;//ADC初始化void ADC_Init(){	P1M1 |= 0x0f;	P1M0 &= ~0x0f;//P1.0腳ADC0	P1ASF |= 0x0f;//	P1M1 |= 0x02;// 	P1M0 &= ~0x02;//P1.1腳ADC1//	P1ASF |= 0x02;	CLK_DIV |= 0x20;	ADC_RES = 0;	ADC_RESL = 0;}//ADC讀數(shù)據(jù)底層驅(qū)動void ADC_Read_Data_Drive(){	//轉(zhuǎn)換之前先把轉(zhuǎn)換結(jié)果寄存器清零	ADC_RES = 0;	ADC_RESL = 0;	//啟動轉(zhuǎn)換	ADC_CONTR = 0x88;//轉(zhuǎn)換速度我用最慢的	//等到ADC_FLAG為1	while(!(ADC_CONTR&0x10));	//然后把數(shù)據(jù)傳到緩存變量里面去	ADC_Read_Data = ADC_RES<<8;	ADC_Read_Data = ADC_Read_Data+ADC_RESL;	}//全局的ADC濾波數(shù)據(jù)結(jié)構(gòu)體指針ADC_Data* adc_filter;//ADC濾波數(shù)據(jù)底層驅(qū)動void ADC_Filter_Data_Drive(){			/*u16  ADC_Min = 0;	u16  ADC_Max = 0;	u16  ADC_Tmp = 0;	u16  ADC_Result = 0;*/		//設置兩個循環(huán)變量	u8 i = 0;	u8 j = 0;	ADC_Filter_Data = 0;	ADC_Read_Data_Drive();	for(i = 0;i<4;i++)//外層8次循環(huán)	{		adc_filter->ADC_Result = 0;		adc_filter->ADC_Min = 		adc_filter->ADC_Max = 		ADC_Read_Data;		for(j = 0;j<4;i++)//內(nèi)層8次循環(huán)		{			adc_filter->ADC_Tmp = ADC_Read_Data;			if (adc_filter->ADC_Tmp < adc_filter->ADC_Min) 			{				adc_filter->ADC_Result += adc_filter->ADC_Tmp;				adc_filter->ADC_Min = adc_filter->ADC_Tmp;			}			else if (adc_filter->ADC_Tmp > adc_filter->ADC_Max) 			{				adc_filter->ADC_Result += adc_filter->ADC_Tmp;				adc_filter->ADC_Max = adc_filter->ADC_Tmp;			}			else 			{				adc_filter->ADC_Result += adc_filter->ADC_Tmp;			}						}		adc_filter->ADC_Result /= 4;		ADC_Filter_Data += adc_filter->ADC_Result;	}	  ADC_Filter_Data /= 4;}

ADC_Drive.h

#ifndef ADC_Drive#define ADC_Drivetypedef struct ADC_Filter_Data{	u16  ADC_Min;      //ADC最小值	u16  ADC_Max;      //ADC最大值	u16  ADC_Tmp;      //ADC臨時值	u16  ADC_Result;   //ADC結(jié)果} ADC_Data;//外部聲明extern void ADC_Init();extern void ADC_Read_Data_Drive();extern void ADC_Filter_Data_Drive();extern u16 xdata ADC_Read_Data;extern u16 xdata ADC_Filter_Data;#endif

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/124049.html

相關文章

  • 身價億的女王對小農(nóng)說中斷

    摘要:復位后初值是子函數(shù)調(diào)用,中斷響應過程調(diào)用子函數(shù)處理中斷響應的時候,程序計數(shù)器的值以及相關數(shù)據(jù)會先壓入堆棧,然后去處理子函數(shù)中斷服務。聯(lián)動文章身家過億的帝都富豪對小碼農(nóng)說你時空復雜度會了嗎 ...

    Leck1e 評論0 收藏0
  • 身價億的女總裁對小農(nóng)說你按鍵

    摘要:行列總共使用個口,可以掃描個按鍵的開關狀態(tài),這就是矩陣鍵盤的優(yōu)勢。口之間必須串聯(lián)電阻。 文章目錄 小碼農(nóng)為了總裁,咳咳,為了知識敢說按鍵不會嗎?==**帝都富豪與...

    Doyle 評論0 收藏0
  • 身價億的賢淑才女對小農(nóng)說PWM可以控制時間長短

    摘要:否則可能會導致電平顛倒完美的計數(shù)糟糕的線條再來一個測試組我們來實現(xiàn)一個呼吸燈的效果呼吸燈波形為了賢淑妻子,咳咳,賢淑才女,小碼農(nóng)必定讓控制時間什么是脈寬調(diào)制中間動的線是電流線,電流通斷,電流小就暗,電流大就亮。 ...

    不知名網(wǎng)友 評論0 收藏0
  • 身價億的妖媚子對小農(nóng)說串口能傳送我的愛

    摘要:目前,所有型號串口的輸入是輸出是。串口全雙工通信是沒有時鐘脈沖的,只能依靠晶振脈沖定時器的溢出脈沖。中斷中讀取,清標志,然后返回給計算機,等待發(fā)送完畢防重疊最少時間次位定時器時間。實現(xiàn)燒錄程序的目的。 ...

    iOS122 評論0 收藏0
  • 關于ADC芯片的選型

    摘要:關于芯片的選型,還是其他芯片的選型,那都不是隨隨便便就說了算得。芯片成本參差不齊,選的好直接起飛,選的不好,直接破產(chǎn)。 關于ADC芯片的選型,還是其他芯片的選型,那...

    mgckid 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<