freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于arm的遠(yuǎn)程溫度監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)(編輯修改稿)

2024-10-06 18:28 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 而不同,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。 DS18B20測(cè)溫原理如圖3所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開(kāi)始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測(cè)溫度。圖3中的斜率累加器用于補(bǔ)償和修正測(cè)溫過(guò)程中的非線(xiàn)性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。斜率累加器比較預(yù)置預(yù)置計(jì)數(shù)器1低溫度系數(shù)晶振 LSB 置位/清除—0溫度寄存器 加1=0高溫度系數(shù)晶振計(jì)數(shù)器2圖25:DS18B20測(cè)溫原理框圖DS18B20有4個(gè)主要的數(shù)據(jù)部件:(1)光刻ROM中的64位序列號(hào)是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開(kāi)始8位(28H)是產(chǎn)品類(lèi)型標(biāo)號(hào),接著的48位是該DS18B20自身的序列號(hào),最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線(xiàn)上掛接多個(gè)DS18B20的目的。 (2)DS18B20中的溫度傳感器可完成對(duì)溫度的測(cè)量,以12位轉(zhuǎn)化為例:用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,℃/LSB形式表達(dá),其中S為符號(hào)位。圖26:DS18B20溫度值格式表這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0,這5位為0,;如果溫度小于0,這5位為1。 例如+125℃的數(shù)字輸出為07D0H,+℃的數(shù)字輸出為0191H,℃的數(shù)字輸出為FF6FH,55℃的數(shù)字輸出為FC90H。圖27:DS18B20溫度數(shù)據(jù)表(3)DS18B20溫度傳感器的存儲(chǔ)器 DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的EEPRAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。 圖28:配置寄存器結(jié)構(gòu):低五位一直都是1,TM是測(cè)試模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶(hù)不要去改動(dòng)。R1和R0用來(lái)設(shè)置分辨率,如下表所示:(DS18B20出廠時(shí)被設(shè)置為12位)圖29:溫度分辨率設(shè)置表您可以在web網(wǎng)頁(yè)上設(shè)置溫度的上下限的閾值,當(dāng)溫度不在這一范圍內(nèi)時(shí),就會(huì)使蜂鳴器報(bào)警響鈴,如果高于上限報(bào)警器每隔1秒響一次,低于下限則報(bào)警器響5秒鐘,在區(qū)間內(nèi)不響。傳感器如果測(cè)量的值恢復(fù)正常的話(huà),就會(huì)關(guān)閉蜂鳴器,不然會(huì)一直響鈴報(bào)警。程序運(yùn)行后,溫度測(cè)量程序每隔十秒鐘測(cè)一次,每次測(cè)量都會(huì)把時(shí)間,溫度值存入數(shù)據(jù)庫(kù)中,遠(yuǎn)程控制監(jiān)測(cè)cgi頁(yè)面,每次刷新,都會(huì)把入庫(kù)的所有數(shù)據(jù)顯示在頁(yè)面上,你通過(guò)它可以清楚的看到每次的溫度記錄。3開(kāi)發(fā)流程:(1)本次開(kāi)發(fā)環(huán)境為fedora9(2)編譯器為armlinuxgcc (3)開(kāi)發(fā)板為arm116410開(kāi)發(fā)板(4)溫度傳感器為DS18B20:一、使用tar –zxvf 命令解壓,這時(shí)會(huì)生成opt文件夾。進(jìn)入文件夾opt/FriendlyARM/toolschain/。使用su 命令進(jìn)入root用戶(hù),使用命令mkdir在/usr/local/目錄下創(chuàng)建arm目錄。并使用cp –。打開(kāi)/etc/下的bashrc文件,在最后加上以下內(nèi)容:export PATH=$PATH:/usr/local/arm/。重啟linux系統(tǒng),此時(shí)交叉編譯器安裝完畢。二、安裝sqlite3數(shù)據(jù)庫(kù)使用tar –zxvf 命令解壓,進(jìn)入root用戶(hù)并進(jìn)入解壓出來(lái)的文件夾執(zhí)行命令./configure host=armlinux perfix=/usr/local/sqlite3 makemake install此時(shí)嵌入式版本的sqllite3數(shù)據(jù)庫(kù)安裝完畢了。三、數(shù)據(jù)庫(kù)移植我們用的是ftp下載,也可以使用其他的方式下載到板子上:把剛安裝好的數(shù)據(jù)庫(kù)移植到開(kāi)發(fā)板上,首先把串口線(xiàn),網(wǎng)線(xiàn)等與開(kāi)發(fā)板連接好,打開(kāi)SecureCRT這個(gè)工具,打開(kāi)串口,啟動(dòng)開(kāi)發(fā)板。在linux系統(tǒng)中進(jìn)入root用戶(hù)使用命令。(1)service vsftpd restart啟動(dòng)ftp。(2)service iptables stop關(guān)閉防火墻。(3)ifconfig 查看PC 機(jī)linux系統(tǒng)的ip。(4)cp /usr/local/sqlite3/bin/sqlite3 /var/ftp/這樣把sqlite3復(fù)制到/var/ftp/目錄下去,等待向板子上下載。(5)cp /usr/local/sqlite3/lib/ /var/ftp/目錄下。在開(kāi)發(fā)板上的終端創(chuàng)建目錄/project/進(jìn)入并執(zhí)行:ftp +PC機(jī)的linux的ip地址,輸入anonymous(表示匿名登錄)回車(chē),再輸入回車(chē)(不需要密碼)。4,使用命令get sqlite3下載sqlite3,在使用命令get 。把sqlite3放在/usr/bin/目錄下,,并在該目錄下執(zhí)行:ln –s ln –s 到現(xiàn)在板子上已經(jīng)有了sqlite3數(shù)據(jù)庫(kù)了,即移植數(shù)據(jù)庫(kù)完成了。四、驅(qū)動(dòng)的編譯及下載新建一個(gè)Makefile文件,用vi打開(kāi),在里面寫(xiě)上obj:=。解壓縮,使用命令:cp config_mini6410_h43 .config因?yàn)榘遄拥囊壕潦莌43的,所以必須使用這一個(gè)文件。執(zhí)行make zImage,如果沒(méi)有錯(cuò)誤,則可以進(jìn)行下一步,此鏡像可以下載到開(kāi)發(fā)板上運(yùn)行。然后再執(zhí)行命令:make –C /home/dell/C后邊的是內(nèi)核的路徑,M后邊是驅(qū)動(dòng)程序的路徑,modules表示編譯成模塊(此編譯方法為內(nèi)核外編譯)。并將其復(fù)制到/var/ftp/目錄下,等待下載到板子上,用下載數(shù)據(jù)庫(kù)的辦法。五、 驅(qū)動(dòng)程序的加載及創(chuàng)建設(shè)備節(jié)點(diǎn):(推薦)。都放到一個(gè)目錄下,易于操作管理。使用命令insmod ,此時(shí)會(huì)出現(xiàn)一個(gè)主設(shè)備號(hào)251或者其他數(shù)字,在使用mknod /dev/DS18B20 c 251(主設(shè)備號(hào)) 0 回車(chē)創(chuàng)建設(shè)備節(jié)點(diǎn),以后提供給用戶(hù)的就是這個(gè)節(jié)點(diǎn)文件,他可以open,read,close,write等操作。使用同樣的辦法,創(chuàng)建蜂鳴器的設(shè)備文件節(jié)點(diǎn)。此時(shí),你可以執(zhí)行測(cè)試程序,查看一下效果。六、應(yīng)用程序及web頁(yè)面程序的運(yùn)行以及pthread程序下載到板子上。在目錄/lin/project/work/目錄下創(chuàng)建date數(shù)據(jù)庫(kù)sqlite3 date便可創(chuàng)建。再執(zhí)行pthread這個(gè)程序,這時(shí),后臺(tái)程序就已經(jīng)開(kāi)始運(yùn)行了。打開(kāi)瀏覽器。4軟件設(shè)計(jì) DS18B20驅(qū)動(dòng)程序一 18b20驅(qū)動(dòng)程序分為幾個(gè)模塊函數(shù),l 寄存器的設(shè)置(輸入) void tmp_input(void )l 寄存器的設(shè)置(輸出) void tmp_output(void)l IO口的設(shè)置(高電平) void tmph(void)l IO口的設(shè)置(低電平) void tmpl(void)l 向18b20寫(xiě)一個(gè)位 void wrbt(uchar bite)l 從18b20讀一個(gè)位 uchar rdbt(void)l 向18b20寫(xiě)一個(gè)字節(jié) void wrbyte(uchar k)l 從18b20讀一個(gè)字節(jié) uchar rdbyte(void)l 復(fù)位初始化18b20 uchar reset(void)l 打開(kāi)設(shè)備節(jié)點(diǎn)(向用戶(hù)提供的)int DS18B20_open(struct inode *inode,struct file *file)l 關(guān)閉設(shè)備節(jié)點(diǎn)(向用戶(hù)提供的)int DS18B20_release(struct inode *inode,struct file *file)l 對(duì)18b20進(jìn)行ROM操作命令static ssize_t DS18B20_read(struct file *filp,unsigned char __user *buf,size_t count,loff_t *ppos) 。二 驅(qū)動(dòng)的框架(1)驅(qū)動(dòng)框架包括向內(nèi)核注冊(cè)驅(qū)動(dòng)信息,從內(nèi)核刪除驅(qū)動(dòng)信息(防止內(nèi)核污染),設(shè)備的主次設(shè)備號(hào)的獲取,static struct file_operations DS18B20_fops={.owner = THIS_MODULE, //擁有該結(jié)構(gòu)模塊的指針,避免在操作時(shí)被卸載,一般初始化為T(mén)HIS_MODULE(2)對(duì)外操作 open = DS18B20_open, //對(duì)外提供打開(kāi)操作.release = DS18B20_release,//當(dāng)file結(jié)構(gòu)指針釋放時(shí),調(diào)用次函數(shù),即:當(dāng)最后一個(gè)打開(kāi)該設(shè)備文件的用戶(hù)調(diào)用close時(shí),將調(diào)用此函數(shù)//release 函數(shù)的主要任務(wù)是清理未結(jié)束的輸入/輸出操作、釋放資源、用戶(hù)自定義排他標(biāo)志的復(fù)位等 .read = DS18B20_read, //對(duì)外提供讀操作 .write = DS18B20_write, //對(duì)外提供寫(xiě)操作.unlocked_ioctl = DS18B20_ioctl,//該函數(shù)是特殊的控制函數(shù),可以通過(guò)它向設(shè)備傳遞控制信息或從設(shè)備取得狀態(tài)信息,即為io控制函數(shù)}。(3)設(shè)備號(hào)生成static struct cdev DS18B20_devs。int major=0。static void DS18B20_setup_cdev(struct cdev *dev,int minor,struct file_operations *fops){int err,devno=MKDEV(major,minor)。//把0和原來(lái)生成的設(shè)備號(hào)再合并到一塊去 ,再生成一個(gè)設(shè)備號(hào),表示有一個(gè)設(shè)備 cdev_init(dev,fops)。 devowner=THIS_MODULE。 devops=fops。 //把dev的ops設(shè)置成為fopserr=cdev_add(dev,devno,1)。 //向內(nèi)核注冊(cè)新生成的devno信息,1表示和設(shè)備關(guān)聯(lián)的的設(shè)備書(shū)目if(err) //判斷設(shè)備是否存活,如果cdev_add()調(diào)用成功的話(huà),設(shè)備就可以使用了,外部的應(yīng)用程序?qū)λ牟僮?,?nèi)核就會(huì)允許了 { printk(Error %s adding DS18B20 %d\n,KERN_ALERT,minor)。 printk(Error %d adding DS18B20 %d\n,err,minor)。 }}(4)申請(qǐng)?jiān)O(shè)備號(hào)static int DS18B20_init(void){ int result。dev_t dev=MKDEV(major,0)。 //申請(qǐng)?jiān)O(shè)備,major為主設(shè)備號(hào),0為次設(shè)備號(hào),表示自動(dòng)分配設(shè)備號(hào)if(major) //表示如果已經(jīng)有了主設(shè)備號(hào),就直接注冊(cè)設(shè)備號(hào) { result=register_chrdev_region(dev,1,DS18B20_DEVICE_NAME)。 } else //如果沒(méi)有主設(shè)備號(hào), { result=
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1