㈠ 帶12位AD轉換的51單片機
TLC2543是TI的一片12位AD晶元,11通道AD轉換,數據傳輸符合SPI串列方式,是常用的高精度AD晶元,價格有點貴了35一片,不過物有所值,在實驗中讀書還是很穩定的。TLC2543的操作也很簡單,命令格式:通道+精度+數據順序,不過值得注意的:是本次讀取的值是上次轉換的AD值,也就是說本次發送的命令是啟動下一次轉換同時讀取上次轉換的值。
㈡ 基於單片機數字頻率計設計匯編語言程序的設計思路
大學實驗課吧?但是圖呢?圖呢????發圖啊~
㈢ 利用STC89C52單片機以及PCF8591的AD轉換設計一個數字電壓表,求大神給個程序例子,在線等!!!急!!!
這是吳鑒鷹單片機開發板配套的常式。
/*-----------------------------------------------
名稱:IIC協議PCF8591AD/DA轉換
內容:使用4路AD中的4路檢測外部模擬量輸入使用液晶顯示
------------------------------------------------*/
#include<reg52.h>
#include"i2c.h"
#include"delay.h"
#include"1602.h"
#include<stdio.h>
#defineAddWr0x90//寫數據地址
#defineAddRd0x91//讀數據地址
externbitack;
unsignedcharReadADC(unsignedcharChl);
bitWriteDAC(unsignedchardat);
/*------------------------------------------------
主程序
------------------------------------------------*/
main()
{
unsignedcharnum=0,i;
unsignedchartemp[7];//定義顯示區域臨時存儲數組
floatVoltage;//定義浮點變數
LCD_Init();//初始化液晶
DelayMs(20);//延時有助於穩定
LCD_Clear();//清屏
while(1)//主循環
{
for(i=0;i<5;i++)//連續讀5次,取最後一次,以便讀取穩定值
num=ReadADC(0);//讀取第1路電壓值,范圍是0-255
Voltage=(float)num*5/256;//根據參考電源VREF算出時間電壓,float是強制轉換符號,用於將結果轉換成浮點型
sprintf(temp,"V0%3.2f",Voltage);//格式輸出電壓值,%3.2f表示浮點輸出,共3位數,小數點後2位
LCD_Write_String(0,0,temp);
for(i=0;i<5;i++)
num=ReadADC(1);
Voltage=(float)num*5/256;
sprintf(temp,"V1%3.2f",Voltage);
LCD_Write_String(8,0,temp);
for(i=0;i<5;i++)
num=ReadADC(2);
Voltage=(float)num*5/256;
sprintf(temp,"V2%3.2f",Voltage);
LCD_Write_String(0,1,temp);
for(i=0;i<5;i++)
num=ReadADC(3);
Voltage=(float)num*5/256;
sprintf(temp,"V3%3.2f",Voltage);
LCD_Write_String(8,1,temp);
//主循環中添加其他需要一直工作的程序
DelayMs(200);
}
}
/*------------------------------------------------
讀AD轉值程序
輸入參數Chl表示需要轉換的通道,范圍從0-3
返回值范圍0-255
操作分四步:
(1)、發送地址位元組,選擇該器件。
(2)、發送控制位元組,選擇相應通道。
(3)、重新發送地址位元組,選擇該器件的讀寫。
(4)、接收目標通道的數據。
------------------------------------------------*/
unsignedcharReadADC(unsignedcharChl)
{
unsignedcharVal;
Start_I2c();//啟動匯流排
SendByte(AddWr);//發送器件地址
if(ack==0)return(0);
SendByte(0x40|Chl);//發送器件子地址
if(ack==0)return(0);
Start_I2c();
SendByte(AddWr+1);//10010001是讀命令
if(ack==0)return(0);
Val=RcvByte();
NoAck_I2c();//發送非應位
Stop_I2c();//結束匯流排
return(Val);
}
㈣ 關於AD590溫度感測器
AD590是一種電流輸出型溫度感測器,其電流輸出與絕對溫度成線性關系。工作電壓范圍為4V至30V,溫度檢測范圍為-55℃至+150℃。AD590的溫度-電流關系如下表所示:
溫度(℃) 電流(μA)
-55 0
0 1
100 101
150 151
AD590的引腳圖見下圖。實驗任務是利用AD590溫度感測器測量溫度,並將模擬量轉換結果送入ADC0809進行A/D轉換,再將結果顯示在數碼管上。
電路原理圖如圖4.30所示。硬體連線步驟如下:
(1) 將「單片機系統」區域中的P1.0-P1.7與「動態數碼顯示」區域中的ABCDEFGH埠用8芯排線連接。
(2) 將「單片機系統」區域中的P2.0-P2.7與「動態數碼顯示」區域中的S1-S2-S3-S4-S5-S6-S7-S8埠用8芯排線連接。
(3) 將「單片機系統」區域中的P3.0與「模數轉換模塊」區域中的ST端子用導線連接。
(4) 將「單片機系統」區域中的P3.1與「模數轉換模塊」區域中的OE端子用導線連接。
(5) 將「單片機系統」區域中的P3.2與「模數轉換模塊」區域中的EOC端子用導線連接。
(6) 將「單片機系統」區域中的P3.3與「模數轉換模塊」區域中的CLK端子用導線連接。
(7) 將「模數轉換模塊」區域中的A2-A1-A0端子用導線連接到「電源模塊」區域中的GND端子。
(8) 將「模數轉換模塊」區域中的IN0端子用導線連接到自製的AD590電路。
(9) 將「單片機系統」區域中的P0.0-P0.7用8芯排線連接到「模數轉換模塊」區域中的IN0端子。
以上步驟完成後,即可實現AD590溫度感測器的溫度測量和顯示功能。
㈤ 共地情況下,單片機AD采樣如何減少干擾
從理論上來說,2cm的隔離距離完全夠用了,至於還是出現干擾需要找到干擾源及干擾頻率後才能進一步定位。給你一個建議,如果有可能的話,將輸入20V轉5V採用DC/DC隔離電源模塊來實現,或許效果會好點。另外,適當多增加一些濾波電容,組合起來進行濾波。如果有條件,可以做一些EMC實驗,可以准確定位干擾源及其頻率點。