摘要:對于電壓或者電流連續(xù)變化的信號,就需要通過模數(shù)轉(zhuǎn)換電路,變成單片機可以識別的數(shù)字電平信號。目前來說,常見的有兩種方式,一種是并行比較,一種是逐次比較。具有成本低元件簡單等優(yōu)勢,而且容易做出高精度的轉(zhuǎn)換器,所以被廣泛使用。
模擬量—>數(shù)字量(ADC模塊)
5V 單片機 CPU 電路是二進制的,運算過程中,電壓只有2種:高電平 5V 和低電平 0V 。對于電壓或者電流連續(xù)變化的信號,就需要通過模數(shù)轉(zhuǎn)換電路,變成單片機可以識別的數(shù)字電平信號。 MP3 就是用 ADC 采樣保存的失真文件。
模擬量變成數(shù)字量,通常都是用比較器來負責轉(zhuǎn)換。目前來說,常見的有兩種方式,一種是并行比較,一種是逐次比較。
**并行比較器:**速度比較快,但是采用的元件非常非常多。成本會非常高。所以,實用性不是很廣泛
**逐次比較器:**通過反饋控制,多次運算后,轉(zhuǎn)換出結(jié)果。具有成本低、元件簡單等優(yōu)勢,而且容易做出高精度的轉(zhuǎn)換器,所以被廣泛使用。
先來玩?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;
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é)果寄存器的存儲格式
我是準備用ADC0來檢測電池電壓的,具體看老師需求,然后把示數(shù)顯示到數(shù)碼管上面,因為之前我出過數(shù)碼管博客,大家可能還有點印象,不知道的看真正的數(shù)碼管
//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; }
采集電壓
#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;}
#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
摘要:復位后初值是子函數(shù)調(diào)用,中斷響應過程調(diào)用子函數(shù)處理中斷響應的時候,程序計數(shù)器的值以及相關數(shù)據(jù)會先壓入堆棧,然后去處理子函數(shù)中斷服務。聯(lián)動文章身家過億的帝都富豪對小碼農(nóng)說你時空復雜度會了嗎 ...
摘要:行列總共使用個口,可以掃描個按鍵的開關狀態(tài),這就是矩陣鍵盤的優(yōu)勢。口之間必須串聯(lián)電阻。 文章目錄 小碼農(nóng)為了總裁,咳咳,為了知識敢說按鍵不會嗎?==**帝都富豪與...
摘要:否則可能會導致電平顛倒完美的計數(shù)糟糕的線條再來一個測試組我們來實現(xiàn)一個呼吸燈的效果呼吸燈波形為了賢淑妻子,咳咳,賢淑才女,小碼農(nóng)必定讓控制時間什么是脈寬調(diào)制中間動的線是電流線,電流通斷,電流小就暗,電流大就亮。 ...
摘要:目前,所有型號串口的輸入是輸出是。串口全雙工通信是沒有時鐘脈沖的,只能依靠晶振脈沖定時器的溢出脈沖。中斷中讀取,清標志,然后返回給計算機,等待發(fā)送完畢防重疊最少時間次位定時器時間。實現(xiàn)燒錄程序的目的。 ...
摘要:關于芯片的選型,還是其他芯片的選型,那都不是隨隨便便就說了算得。芯片成本參差不齊,選的好直接起飛,選的不好,直接破產(chǎn)。 關于ADC芯片的選型,還是其他芯片的選型,那...
閱讀 1240·2021-11-22 13:54
閱讀 1424·2021-11-22 09:34
閱讀 2698·2021-11-22 09:34
閱讀 4007·2021-10-13 09:39
閱讀 3341·2019-08-26 11:52
閱讀 3360·2019-08-26 11:50
閱讀 1529·2019-08-26 10:56
閱讀 1913·2019-08-26 10:44