版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 目錄</b></p><p><b> 摘要2</b></p><p><b> 一、設計目的2</b></p><p><b> 二、設計要求2</b></p><p><b> 三、題目分析3&l
2、t;/b></p><p> 四、設計方法及步驟4</p><p> 1、開發(fā)平臺介紹4</p><p> 2、ds18b20的工作原理6</p><p> 3、ds18b20的驅動程序9</p><p> 4、QT界面設計13</p><p> 5、驅動的掛載和運行
3、16</p><p><b> 五、設計總結17</b></p><p><b> 六、參考文檔18</b></p><p><b> 摘要</b></p><p> 近年來,隨著計算機技術及集成電路技術的發(fā)展,嵌入式技術日漸普及,在通訊、網(wǎng)絡、工控、醫(yī)療、電子等
4、領域發(fā)揮著越來越重要的作用。嵌入式系統(tǒng)無疑成為當前最熱門最有發(fā)展前途的IT應用領域之一。</p><p> 實時溫度采集系統(tǒng)是是將環(huán)境溫度實時的進行采集并顯示的系統(tǒng),在現(xiàn)在的許多家用電器、工業(yè)控制、甚至是高科技領域都有應用,它已經(jīng)普遍的融入了社會生活和生產(chǎn)之中,并且作為基礎的系統(tǒng),在今后的生活生產(chǎn)中并不會被淘汰,應用范圍還會繼續(xù)擴大,因此,掌握此系統(tǒng)是必要的。</p><p> 關鍵詞
5、:arm Linux ds18b20</p><p><b> 一、設計目的</b></p><p> 1、熟悉嵌入式系統(tǒng)的整個開發(fā)流程,具備獨立進行開發(fā)的能力;</p><p> 2、熟悉Linux C,可以用Linux C編寫驅動程序;</p><p> 3、熟悉C++,具備初步人機界面編程的能力;<
6、;/p><p> 4、學習和掌握驅動的下載和燒寫。</p><p><b> 二、設計要求</b></p><p> 在Samsung公司S3C2410處理器的開發(fā)板上,嵌入式linux系統(tǒng)環(huán)境下,設計溫度實時采集系統(tǒng),并設計顯示界面。</p><p> 1、設計溫度實時采集系統(tǒng),要求基于ARM9開發(fā)板,溫度傳感器可
7、以用ds18b20;</p><p> 2、要求溫度值精確到個位;</p><p> 3、要求自己設計QT界面,并在界面上顯示溫度值。</p><p><b> 三、題目分析</b></p><p> 在傳統(tǒng)的模擬信號遠距離溫度測量系統(tǒng)中,需要很好的解決引線誤差補償問題、多點測量切換誤差問題和放大電路零點漂移誤差
8、問題等技術問題,才能夠達到較高的測量精度。另外一般監(jiān)控現(xiàn)場的電磁環(huán)境都非常惡劣,各種干擾信號較強,模擬溫度信號容易受到干擾而產(chǎn)生測量誤差,影響測量精度。因此,在溫度測量系統(tǒng)中,采用抗干擾能力強的新型數(shù)字溫度傳感器是解決這些問題的最有效方案。</p><p> 美國Dallas半導體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持 "一線總線"接口的溫度傳感器,在其內(nèi)部使用了在板(ON-B
9、0ARD)專利技術。全部傳感元件及轉換電路集成在形如一只三極管的集成電路內(nèi)。一線總線獨特而且經(jīng)濟的特點,使用戶可輕松地組建傳感器網(wǎng)絡,為測量系統(tǒng)的構建引入全新概念?,F(xiàn)在,新一代的DS18B20體積更小、更經(jīng)濟、更靈活。</p><p> DS18B20可以程序設定9~12位的分辨率,精度為±0.5°C??蛇x更小的封裝方式,更寬的電壓適用范圍。分辨率設定,及用戶設定的報警溫度存儲在EEPROM
10、中,掉電后依然保存。DS18B20使電壓、特性及封裝有更多的選擇,讓我們可以構建適合自己的經(jīng)濟的測溫系統(tǒng)。</p><p><b> 四、設計方法及步驟</b></p><p><b> 1、開發(fā)平臺介紹</b></p><p> UP- 2410開發(fā)板主板資源:* 基于ARM 920T內(nèi)核的SAMSUNG S3C
11、2410處理器* 系統(tǒng)穩(wěn)定工作在202MHZ主頻* 64MB SDRAM* 可外接博創(chuàng)8寸640*480TFT真彩LCD或其他型號的TFT LCD屏* 可外接 觸摸屏* 1個主USB口、1個從USB口* 100M以太網(wǎng)口* 2個RS232標準串口* JTAG接口(14Pin標準)* CAN總線接口* 總線和可復用資源擴展接口* CF卡接口(IDE模式)* IDE接口* SD/MMC 接口* 64MB Nand
12、 Flash(可選更大容量)* 2MB NorFlash(可選)* 實現(xiàn)了MMU、AMBA總線* AD電位器* IIC接口* SPI接口* IIS音頻CODEC* 立體聲耳機、線路接口,板載MIC* 8通道10位AD轉換* 2位LED數(shù)碼管* 實時時鐘* IIC存儲器2片* PWM DA輸出* 3個可產(chǎn)生中斷的按鍵* 3個IO控制的LED</p><p> UP- 2410開發(fā)板軟件
13、資源:Linux:系統(tǒng)引導程序: VIVI操作系統(tǒng): Linux2.4.18/Linux2.6.18(可選)文件系統(tǒng): RAMDISK YAFFS圖形用戶界面: 支持QT/E設備驅動: 串口,Ethernet,Audio,SD卡,IDE,CF卡,AD/DA,USB,紅外,藍牙,LCD,觸摸屏,PS2 keyboard mouse, 17鍵數(shù)字鍵盤,SPI,I2C,RTC,GPIO等開發(fā)工具: JTAG燒寫Nor Flash
14、工具,arm-linux-gcc交叉編譯器,GDB,GDBSERVER調試工具,anjuta開發(fā)環(huán)境,sourceNavigator代碼編輯器,文件系統(tǒng)制作工具等多媒體軟件: mplayer媒體播放器,實現(xiàn)MPEG、MPEG2、MPEG4、AVI、WMV等多種媒體解碼;madplay音頻播放器WinCE:板級支持包: WinCE.net 4.2 /5.0(可選) BSP設備驅動: 串口,Ethernet,Audio,CF卡,SD
15、卡,USB,紅外,LCD,觸摸屏等多媒體軟件: mediaplayer媒體播放器,實現(xiàn)MPE</p><p> 2、ds18b20的工作原理</p><p> 如上圖所示,ds18b20只有三只引腳,GND,DQ和VDD,GND為電源地,DQ為數(shù)字信號輸入輸出端,VDD為電源輸入端。</p><p> DS18B20的內(nèi)部結構主要包括4部分;64位光刻ROM
16、、溫度傳感器、非易失的溫度報警觸發(fā)器TH和EL、配置寄存器,如下圖所示:</p><p> DS18B20的內(nèi)部結構</p><p> 64位ROM中,在產(chǎn)品出廠前就被廠家通過光刻刻錄好了64位序列號。該序列號可以看作是 DS18B20 的地址序列碼,用來區(qū)分每一個 DS18B20 ,從而更好地實現(xiàn)對現(xiàn)場溫度的多點測量。</p><p> 上圖中的暫存器是 D
17、S18B20 中最重要的寄存器。暫存器由9個字節(jié)組成,各字節(jié)定義如下表所列:</p><p><b> 字節(jié)定義</b></p><p> 0所測溫度值低8 位</p><p> 1所測溫度值高8 位</p><p> 2高溫報警值( TH)</p><p> 3
18、低溫報警值( TL)</p><p><b> 4配置寄存器</b></p><p><b> 5~7保留</b></p><p> 8循環(huán)冗余校驗(CRC)值</p><p> 配置寄存器用于用戶設置溫度傳感器的轉換精度,其各位定義如下:</p><
19、p> TM位是測試模式位,用于設置DS18B20 是工作模式(0)還是測試模式(1) ,其出廠值為 0。R1、 R0 用于設置溫度傳感器的轉換精度:00 ,分辨率為9 位,轉換時間為93. 75ms ;01 ,分辨率為10 位,轉換時間為187. 5 ms ;10 ,分辨率為11 位,轉換時間為 375 ms ;11 ,分辨為 12 位,轉換時間為750 ms。R1、 R0 的出廠值為11。其余5 位值始終為1。第0 和第 1
20、字節(jié)為 16 位轉換后的溫度二進制值,其中前4 位為符號位,其余12 位為轉換后的數(shù)據(jù)位(分辨率為12 位) 。如果溫度大于0 ,則前4 位值為0 ,只要將測到的數(shù)值乘上0. 062 5 即可得到實際溫度值;如果溫度小于0 ,則前 4 位為 1 ,需將測得的數(shù)值取反加 1 后,再乘上0. 062 5。</p><p> 按DS18B20 的供電方式, 其應用電路結構可分為如下3種:寄生電源供電方式;寄生源強上拉
21、供電方式;外部電源供方式。實際應用中,以外部電源供電方式為主。其應用原理圖如左圖所示。</p><p> 根據(jù)DS18B20 的通信協(xié)議,MCU 對其操作主要有如下3個步驟:讀寫之前,對DS18B20 發(fā)送約500μs 的低電平進行復位;復位成功,發(fā)送 ROM 指令;發(fā)送 RAM指令。MCU 對DS18B20 的具體操作流程如下圖所示:</p><p> 3、ds18b20的驅動程序&
22、lt;/p><p> 寫程序前先確定使用的外擴端口,這里使用的是GPB0口。</p><p><b> 源程序如下:</b></p><p> #include <linux/module.h></p><p> #include <linux/kernel.h></p>&
23、lt;p> #include <linux/fs.h></p><p> #include <linux/init.h></p><p> #include <linux/miscdevice.h></p><p> #include <linux/delay.h></p><p>
24、; #include <asm/irq.h></p><p> #include <asm/arch-s3c2410/regs-gpio.h></p><p> #include <asm/hardware.h></p><p> #define DEVICE_NAME"ds18b20"</p&
25、gt;<p> #define ds18b20_MAJOR 231</p><p> #define DQ S3C2410_GPB0</p><p> #define DQ_IN S3C2410_GPB0_INP</p><p> #define DQ_OUT S3C2410_GPB0_OUTP</p><p>
26、static char devicecount=0;//計數(shù)器,防止被多個人多次打開</p><p> void init_ds18b20(void)</p><p><b> {</b></p><p><b> do{</b></p><p> s3c2410_gpio_cfgpin
27、(DQ,DQ_OUT);</p><p> s3c2410_gpio_setpin(DQ, 1);</p><p> udelay(1);</p><p> s3c2410_gpio_setpin(DQ, 0);</p><p> udelay(500);</p><p> s3c2410_gpio_setp
28、in(DQ, 1);</p><p> udelay(60);</p><p><b> }</b></p><p> while((s3c2410_gpio_getpin(DQ))!=0);</p><p> while((s3c2410_gpio_getpin(DQ))==0);</p><
29、;p><b> }</b></p><p> void write(char data)</p><p><b> {</b></p><p> char i = 0;</p><p> s3c2410_gpio_cfgpin(DQ, DQ_OUT);</p><
30、p> s3c2410_gpio_pullup(DQ, 1);</p><p> for(i=0; i<8; i++){</p><p> s3c2410_gpio_setpin(DQ, 0); //產(chǎn)生下降沿</p><p> udelay(10);</p><p> s3c2410_gpio_setpin(DQ,
31、 data&0x01);</p><p> udelay(60);</p><p> s3c2410_gpio_setpin(DQ, 1);</p><p> data >>= 1;</p><p><b> }</b></p><p><b> }<
32、/b></p><p> unsigned char read(void)</p><p><b> {</b></p><p> unsigned char i;</p><p> unsigned char data=0;</p><p> s3c2410_gpio_cfgpi
33、n(DQ, DQ_OUT);</p><p> for(i=0; i<8; i++)</p><p><b> {</b></p><p> s3c2410_gpio_setpin(DQ, 0);</p><p> udelay(1);</p><p> s3c2410_gpio_
34、setpin(DQ, 1);</p><p> s3c2410_gpio_cfgpin(DQ, DQ_IN);</p><p> udelay(10);</p><p> data >>= 1;</p><p> if(s3c2410_gpio_getpin(DQ))</p><p> data
35、|= 0x80;</p><p> udelay(50);</p><p> s3c2410_gpio_cfgpin(DQ, DQ_OUT);</p><p> s3c2410_gpio_setpin(DQ, 1);</p><p><b> }</b></p><p> return
36、data;</p><p><b> }</b></p><p> /******************************************************************/</p><p> static int ds18b20_write(struct file *file, const char __
37、user *buffer, size_t count, loff_t * ppos)</p><p><b> { </b></p><p><b> return 0;</b></p><p><b> }</b></p><p> /****************
38、**************************************************/</p><p> static int ds18b20_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos)</p><p><b> {</b></p>
39、<p><b> return 0;</b></p><p><b> }</b></p><p> /*******************************************************************/</p><p> static int ds18b20_open
40、(struct inode *inode,struct file *file)</p><p><b> {</b></p><p> init_ds18b20();</p><p> if(devicecount >0) </p><p> return -ERESTARTSYS;</p>
41、<p> printk("device open : success\n");</p><p> devicecount++;</p><p><b> return 0;</b></p><p><b> }</b></p><p> static int
42、 ds18b20_release(struct inode *inode, struct file *filp)</p><p><b> {</b></p><p> devicecount--;</p><p> printk("device release\n");</p><p>&l
43、t;b> return 0;</b></p><p><b> }</b></p><p> /******************************************************************/</p><p> static int ds18b20_ioctl(struct ino
44、de *inode,struct file *file,unsigned int cmd,unsigned long arg)</p><p><b> {</b></p><p> unsigned int a, b;</p><p> unsigned int temperature=0;</p><p>
45、init_ds18b20();</p><p> write(0x0cc);</p><p> write(0x44);</p><p> udelay(500);</p><p> init_ds18b20();</p><p> write(0x0cc);</p><p> wr
46、ite(0x0be);</p><p> a = read();</p><p> b = read();</p><p> init_ds18b20();</p><p> temperature=((b<<=8) | a)*625/10000;</p><p> return temperat
47、ure;</p><p><b> }</b></p><p> static struct file_operations ds18b20_fops = {</p><p> .owner =THIS_MODULE,</p><p> .ioctl =ds18b20_ioctl,</p>
48、<p> .write =ds18b20_write,</p><p> .read =ds18b20_read,</p><p> .open =ds18b20_open,</p><p> .release =ds18b20_release,</p><p><b> };</b>&
49、lt;/p><p> static int __init ds18b20_init(void)</p><p><b> {</b></p><p><b> int ret;</b></p><p> ret = register_chrdev(ds18b20_MAJOR, DEVICE_NA
50、ME, &ds18b20_fops);</p><p> if (ret < 0) {</p><p> printk(DEVICE_NAME " can't register major number\n");</p><p> return ret;</p><p><b> }
51、</b></p><p> printk(DEVICE_NAME " initialized\n");</p><p><b> return 0;</b></p><p><b> }</b></p><p> static void __exit ds18
52、b20_exit(void)</p><p><b> {</b></p><p> unregister_chrdev(ds18b20_MAJOR, DEVICE_NAME);</p><p><b> }</b></p><p> module_init(ds18b20_init);&l
53、t;/p><p> module_exit(ds18b20_exit);</p><p><b> 4、QT界面設計</b></p><p> 界面的設計使用的軟件是Qt Creator,它是跨平臺的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收購后推出的一款新的輕量級集成開發(fā)環(huán)境(IDE)。此 IDE 能夠跨平臺運行,
54、支持的系統(tǒng)包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。根據(jù)官方描述,Qt Creator 的設計目標是使開發(fā)人員能夠利用 Qt 這個應用程序框架更加快速及輕易的完成開發(fā)任務。</p><p> 它的應用界面如下圖所示:</p><p><b> 源程序如下:</b></p><p><b>
55、 Widget.h</b></p><p> #ifndef WIDGET_H</p><p> #define WIDGET_H</p><p> #include <QWidget></p><p> #include <QTimer></p><p> namespa
56、ce Ui {</p><p> class Widget;</p><p><b> }</b></p><p> class Widget : public QWidget</p><p><b> {</b></p><p><b> Q_OBJEC
57、T</b></p><p><b> public:</b></p><p> explicit Widget(QWidget *parent = 0);</p><p> ~Widget();</p><p> QTimer *timer;</p><p><b>
58、 private:</b></p><p> Ui::Widget *ui;</p><p> private slots:</p><p> void ds18b20();</p><p> void on_exit_clicked();</p><p> void on_pause_clic
59、ked();</p><p> void on_start_clicked();</p><p><b> };</b></p><p><b> #endif</b></p><p><b> main.cpp</b></p><p> #i
60、nclude <QtGui/QApplication></p><p> #include "widget.h"</p><p> int main(int argc, char *argv[])</p><p><b> {</b></p><p> QApplication a
61、(argc, argv);</p><p><b> Widget w;</b></p><p><b> w.show();</b></p><p> return a.exec();</p><p><b> }</b></p><p>
62、widget.cpp</p><p> #include "widget.h"</p><p> #include "ui_widget.h"</p><p> #include <stdio.h></p><p> #include <stdlib.h></p&g
63、t;<p> #include <unistd.h></p><p> #include <sys/ioctl.h></p><p> #include<sys/types.h></p><p> #include<sys/stat.h></p><p> #includ
64、e<fcntl.h></p><p> int i = 0;</p><p><b> int fd;</b></p><p> Widget::Widget(QWidget *parent) :</p><p> QWidget(parent),</p><p> ui(n
65、ew Ui::Widget)</p><p><b> {</b></p><p> ui->setupUi(this);</p><p> fd = open("/dev/ds18b20",O_RDWR);</p><p> if (fd < 0) {</p>&l
66、t;p> perror("open device /dev/ds18b20");</p><p><b> exit(1);</b></p><p><b> }</b></p><p> timer = new QTimer;</p><p> connect(
67、timer,SIGNAL(timeout()),this,SLOT(ds18b20()));</p><p><b> }</b></p><p> Widget::~Widget()</p><p><b> {</b></p><p> delete ui;</p><
68、;p><b> }</b></p><p> void Widget::ds18b20()</p><p><b> {</b></p><p> i=ioctl(fd,0,NULL);</p><p> ui->lcdNumber->display(i);</p&
69、gt;<p><b> }</b></p><p> void Widget::on_start_clicked()</p><p><b> {</b></p><p> timer->start(1000);</p><p><b> }</b>
70、;</p><p> void Widget::on_pause_clicked()</p><p><b> {</b></p><p> timer->stop();</p><p><b> }</b></p><p> void Widget::on_
71、exit_clicked()</p><p><b> {</b></p><p> this->close();</p><p><b> }</b></p><p> 5、驅動的掛載和運行</p><p> 本次課程設計使用的是博創(chuàng)s3c2410開發(fā)板。在
72、運行程序前,先啟動虛擬機,進如linux系統(tǒng)。在home目錄下簡歷myfile文件,再新建ds18b20.c源程序文件,寫入上面所寫的源程序并編譯,然后產(chǎn)生ds18b20.ko可執(zhí)行文件。</p><p> 將Qt中所寫的幾個文件復制到myfile文件中,并進行編譯,產(chǎn)生my_temperature可執(zhí)行文件。</p><p> 然后,運行超級終端,并接通開發(fā)板電源。在超級終端中輸入命
73、令:mount –t nfs –o intr,wsize=1024,rsize=1024,nolock 192.168.1.28:/home /tmp 此命令將pc機的home目錄掛載到開發(fā)板的tmp目錄下,然后再設置完環(huán)境變量后掛載和運行驅動程序和界面程序。</p><p><b> 運行結果如下圖:</b></p><p><b> 五、設計總結&
74、lt;/b></p><p> 回顧起此次課程設計,至今我仍感慨頗多,從理論到實踐,在整整半個月的日子里,我學到很多很多的東西,不僅鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的內(nèi)容。</p><p> 在實踐期間遇到了很多的問題,例如:本次課設使用的ds18b20溫度傳感器,僅僅只有一個工作端口,但工作過程卻很麻煩,理解它的工作過程是我花時間最長的。還有像驅動的編
75、寫,界面的設計,因為界面設計使用的是C++,而我對C++并不熟悉,熟悉C++也很花時間,還有開發(fā)板的環(huán)境設置,運行命令等,十分麻煩,只要稍微有問題就不能正常運行。</p><p> 通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才是真正的知識,才能提高自己的實際動手能力和獨立思考的能力。</p><p&
76、gt;<b> 六、參考文檔</b></p><p> 《嵌入式系統(tǒng)原理與應用技術》袁志勇 北京航空航天大學出版社 2009</p><p> 《精通Linux C 編程》劉學勇 清華大學出版社 2009 </p><p> 《C++ GUI QT4編程》Jasmin Blanchette 電子工業(yè)出版社 2008 第二版
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于arm的實時溫度采集系統(tǒng)
- 基于arm的溫度采集系統(tǒng)
- 基于labview的實時溫度采集系統(tǒng)的設計
- 基于LabVIEW的實時溫度采集系統(tǒng)的設計定稿.doc
- 基于LabVIEW的實時溫度采集系統(tǒng)的設計1稿.doc
- 基于arm的數(shù)據(jù)采集系統(tǒng)
- 基于LabVIEW的實時溫度采集系統(tǒng)的設計2稿.doc
- 基于arm的溫度采集器課程設計
- 基于arm的數(shù)據(jù)采集系統(tǒng)設計
- 基于arm的數(shù)據(jù)采集系統(tǒng)——學位
- 基于arm的視頻采集系統(tǒng)設計
- 基于labview的實時溫度采集系統(tǒng)的設計【通信工程畢業(yè)論文】
- 基于ARM的圖像采集系統(tǒng)設計.pdf
- 基于ARM的虹膜圖像采集系統(tǒng).pdf
- 基于arm的遠程溫度監(jiān)測系統(tǒng)設計
- 基于ARM嵌入式陽極爐實時數(shù)據(jù)采集系統(tǒng)設計.pdf
- 基于USB的溫度采集系統(tǒng).pdf
- arm嵌入式系統(tǒng)課程設計--溫度采集系統(tǒng)的設計
- 畢業(yè)論文-基于labview的實時溫度采集系統(tǒng)的設計【精校排版】
- 基于ARM+CPLD的農(nóng)業(yè)溫室溫度實時控制系統(tǒng)的研究.pdf
評論
0/150
提交評論