中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

網(wǎng)絡(luò)公司做的網(wǎng)站我能改后臺(tái)么免費(fèi)做網(wǎng)站怎么做網(wǎng)站嗎

網(wǎng)絡(luò)公司做的網(wǎng)站我能改后臺(tái)么,免費(fèi)做網(wǎng)站怎么做網(wǎng)站嗎,wordpress 附件插件下載,網(wǎng)站建站主機(jī)1,簡(jiǎn)介 單總線(one-wire)是美國(guó) DALLAS 公司推出的外圍串行擴(kuò)展總線技術(shù),與 SPI、I2C 等串行數(shù)據(jù)通信方式不同,它采用單根信號(hào)線,既傳輸時(shí)鐘又傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的。它具有節(jié)省 I/O口…

1,簡(jiǎn)介

單總線(one-wire)是美國(guó) DALLAS 公司推出的外圍串行擴(kuò)展總線技術(shù),與 SPI、I2C 等串行數(shù)據(jù)通信方式不同,它采用單根信號(hào)線,既傳輸時(shí)鐘又傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的。它具有節(jié)省 I/O口線資源、結(jié)構(gòu)簡(jiǎn)單、成本低廉、便于總線擴(kuò)展和維護(hù)等諸多優(yōu)點(diǎn)。

單總線英文名 1-Wire,傳輸速率一般是 15.3Kbit/s,最大可達(dá) 142Kbit/s,通常采用 100Kbit/s 以下的速率傳輸數(shù)據(jù)。

2,硬件結(jié)構(gòu)

單總線(one-wire)只有一根數(shù)據(jù)線,系統(tǒng)中的數(shù)據(jù)交換、控制都由這根線完成。設(shè)備(主機(jī)或從機(jī))通過(guò)一個(gè)漏極開(kāi)路或三態(tài)端口連至該數(shù)據(jù)線,以允許設(shè)備在不發(fā)送數(shù)據(jù)時(shí)能夠釋放總線,而讓其它設(shè)備使用總線,其內(nèi)部等效電路如圖所示。

單總線通常要求外接一個(gè)約為4.7kΩ的上拉電阻,這樣,當(dāng)總線閑置時(shí),其狀態(tài)為高電平。主機(jī)和從機(jī)之間的通信可通過(guò)3個(gè)步驟完成,分別為初始化1-wire器件、識(shí)別1-wire器件和交換數(shù)據(jù)。由于它們是主從結(jié)構(gòu),只有主機(jī)呼叫從機(jī)時(shí),從機(jī)才能應(yīng)答,因此主機(jī)訪問(wèn)1-wire器件都必須嚴(yán)格遵循單總線命令序列,即初始化、ROM、命令功能命令。如果出現(xiàn)序列混亂,1-wire器件將不響應(yīng)主機(jī)。

3,通信時(shí)序分析

由于DS18B20溫度傳感器在使用中與主機(jī)通訊是單總線(one-wire)通信,所以在這使用FPGA驅(qū)動(dòng)DS18B20溫度傳感器測(cè)量溫度來(lái)學(xué)習(xí)單總線(one-wire)。

3.1 FPGA 如何驅(qū)動(dòng) gxs18b20 并測(cè)量溫度?

首先 FPGA 向溫度傳感器寫(xiě)入一些數(shù)據(jù),數(shù)據(jù)按照一個(gè)字節(jié)一個(gè)字節(jié)發(fā)送,溫度傳感器接收到這些字節(jié)數(shù)據(jù),會(huì)自動(dòng)采集外界溫度數(shù)據(jù)并保存在內(nèi)部寄存器里面。然后 FPGA 向傳感器寫(xiě)入讀溫 度數(shù)據(jù)指令,便可讀取傳感器里面的溫度數(shù)據(jù)。

3.2 FPGA 與傳感器通信過(guò)程

通過(guò)單總線訪問(wèn) GX18B20 的執(zhí)行序列如下:

????????步驟 1:初始化。

????????步驟 2:ROM 操作指令

????????步驟 3:GX18B20 功能指令。

每一次 GX18B20 的操作都必須滿足以上步驟,若是缺少步驟或是順序混亂,器件將不會(huì)有返回值。

3.2.1 初始化

????????通過(guò)單總線的所有執(zhí)行操作都從一個(gè)初始化程序序列開(kāi)始。初始化序列包含一個(gè)由總線控制器 發(fā)出的復(fù)位脈沖和其后由從機(jī)發(fā)出的存在脈沖。存在脈沖讓總線控制器知道 Gx18B20 在總線上且 已經(jīng)準(zhǔn)備好操作。

????????所有和 Gx18B20 間的通信都以初始化序列開(kāi)始,初始化序列如圖所示。一個(gè)復(fù)位脈沖跟著一個(gè)存在脈沖表明Gx18B20 已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)。 在初始化序列期間,總線控制器拉低總線并保持 480us 以發(fā)出(TX)一個(gè)復(fù)位脈沖信號(hào),然后釋放總線,進(jìn)入接收狀態(tài)(RX)。當(dāng)總線被釋放后,5kΩ的上拉電阻將總線拉到高電平。當(dāng) GX18B20 檢測(cè)到 IO 引腳上的上升沿后,等待 15-60us,然后發(fā)出一個(gè)由 60-240us 低電平信號(hào)構(gòu)成的存在脈沖。

Bus master puling low : 主機(jī)拉低總線,主機(jī)向從機(jī)寫(xiě) 0

Gx18b20 pulling low : Gxs18b20 拉低總線,從機(jī)向主機(jī)發(fā) 0

Resistor pullup:從機(jī)的電阻上拉,期間從機(jī)可以接收主機(jī)寫(xiě)入的數(shù)據(jù)。

one_wire 端口是一個(gè)雙向的端口,也即該端口可以發(fā)送數(shù)據(jù),也可以接收數(shù)據(jù)。 主機(jī)有一個(gè)雙向端口與從機(jī)連接,從機(jī)對(duì)應(yīng)的端口的也是雙向端口。 雙向端口雖然可以發(fā)送和接收數(shù)據(jù),但是發(fā)送數(shù)據(jù)時(shí)候,不能接收數(shù)據(jù);也就是發(fā)送和接收數(shù)據(jù)必須分開(kāi)進(jìn)行。

各種手冊(cè)里面經(jīng)常出現(xiàn)“主機(jī)釋放總線”,“從機(jī)釋放總線”,這兩個(gè)概念不是一個(gè)意思。同理“主機(jī)拉低總線”和“從機(jī)拉低總線”也不是一個(gè)意思。

主機(jī)釋放總線:主機(jī)釋放總線期間,主機(jī)可以接收來(lái)自從機(jī)的數(shù)據(jù)。注意, 如果主機(jī)要接收從機(jī)傳來(lái)的數(shù)據(jù)。主機(jī)必須釋放總線。

主機(jī)拉低總線:主機(jī)向從機(jī)寫(xiě)入邏輯 0

從機(jī)釋放總線:從機(jī)釋放總線、從機(jī)電阻上拉差不多是一個(gè)意思,代表著此時(shí)從機(jī)可以接收數(shù)據(jù)。

3.2.2?ROM 操作指令

在這里我們選擇跳過(guò)ROM操作指令

SKIP ROM [CCh]

????????這條命令允許總線控制器不用提供 64 位 ROM 編碼就使用功能指令。例如,總線控制器可以先發(fā)出一條忽略 ROM 指令,然后發(fā)出溫度轉(zhuǎn)換指令[44h],從而完成溫度轉(zhuǎn)換操作。

3.2.3 GXS18B20 功能指令

GXS18B20 功能指令允許總線控制器讀寫(xiě) GX18B20 的寄存器,發(fā)起溫度轉(zhuǎn)換和識(shí)別電源模式。

下表是GXS18B20的功能指令表

其中我們只使用溫度轉(zhuǎn)換指令CONVERT T [44h]讀取溫度指令READ SCRATCHPAD [BEh]

CONVERT T [44h]

????????這條命令時(shí)用于啟動(dòng)一次溫度轉(zhuǎn)換。溫度轉(zhuǎn)換指令被執(zhí)行后,產(chǎn)生的溫度轉(zhuǎn)換結(jié)果數(shù)據(jù)以 2 個(gè)字節(jié)的形式被存儲(chǔ)在溫度寄存器中,而后 GX18B20 保持低功耗的等待狀態(tài)。如果在寄生供電模 式下發(fā)出該指令,在溫度轉(zhuǎn)換期間(tCONV),必須在 10us(最多)內(nèi)給單總線一個(gè)強(qiáng)上拉,見(jiàn) GX18B20 供電節(jié)。如果 GX18B20 以外部電源供電,總線控制器在發(fā)出該命令后跟著發(fā)出讀時(shí)序, GX18B20 如處于轉(zhuǎn)換中,則總線返回 0,若溫度轉(zhuǎn)換完成,則返回 1。在寄生供電模式下,總線 被強(qiáng)上拉拉高前這樣的通信方式不會(huì)被使用。

READ SCRATCHPAD [BEh]

????????這條命令時(shí)主機(jī)讀取寄存器命令。讀取將從字節(jié) 0 的最低有效位開(kāi)始,一直進(jìn)行下去,直到 第 9 字節(jié)(字節(jié) 8,CRC)讀完,如果不想讀完所有字節(jié),控制器可以在任何時(shí)候發(fā)出復(fù)位命令 來(lái)中止讀取。

3.3 讀寫(xiě)時(shí)序

讀/寫(xiě)時(shí)序 GX18B20 的數(shù)據(jù)讀寫(xiě)是通過(guò)時(shí)序處理來(lái)進(jìn)行信息交換的,每個(gè)時(shí)序傳輸 1 位數(shù)據(jù)。

寫(xiě)時(shí)序

????????GX18B20 有兩種寫(xiě)時(shí)序:寫(xiě) 1 時(shí)序和寫(xiě) 0 時(shí)序??偩€控制器通過(guò)寫(xiě) 1 時(shí)序來(lái)寫(xiě)邏輯 1;通過(guò) 寫(xiě) 0 時(shí)序來(lái)寫(xiě)邏輯 0。寫(xiě)時(shí)序必須最少持續(xù) 60us,包括兩個(gè)寫(xiě)周期之間至少 1us 的恢復(fù)時(shí)間。當(dāng) 總線控制器把數(shù)據(jù)線從邏輯高電平拉低到低電平的時(shí)候,寫(xiě)時(shí)序開(kāi)始。 總線控制器要寫(xiě)產(chǎn)生一個(gè)寫(xiě)時(shí)序,必須把數(shù)據(jù)線拉到低電平然后釋放,且需在 15us 內(nèi)釋放總 線。當(dāng)總線被釋放后,上拉電阻將總線拉高。總線控制器要生成寫(xiě) 0 時(shí)序,必須把數(shù)據(jù)線拉到低 電平且繼續(xù)保持至少 60us。 總線控制器初始化寫(xiě)時(shí)序后,GX18B20 在一個(gè) 15us 到 60us 的窗口內(nèi)對(duì)信號(hào)線進(jìn)行采用。如果線上是高電平,就是寫(xiě) 1。反之,如果線上是低電平,就是寫(xiě) 0。

讀時(shí)序

????????總線控制器發(fā)起讀時(shí)序時(shí),GX18B20 僅被用來(lái)傳輸數(shù)據(jù)給控制器。因此,總線控制器在發(fā)出 讀寄存器指令[BEh]或讀電源模式指令[B4h]后必須立刻開(kāi)始讀時(shí)序,以便 GX18B20 提供請(qǐng)求的數(shù) 據(jù)。

?????????所有讀時(shí)序必須最少 60us,包括兩個(gè)讀周期間至少 1us 的恢復(fù)時(shí)間。當(dāng)總線控制把數(shù)據(jù)線從 高電平拉低到低電平時(shí),讀時(shí)序開(kāi)始,數(shù)據(jù)線必須至少保持 1us,然后總線被釋放。 在總線控制器發(fā)出讀時(shí)序后,GX18B20 通過(guò)拉高或拉低總線上來(lái)傳輸 1 或 0。當(dāng)傳輸 0 結(jié)束后, 總線將被釋放,通過(guò)上拉電阻回到高電平空閑狀態(tài)。從 GX18B20 輸出的數(shù)據(jù)在讀時(shí)序的下降沿出 現(xiàn)后 15us 內(nèi)有效。因此,總線控制器在讀時(shí)序開(kāi)始 15us 內(nèi)釋放總線然后采樣總線狀態(tài),以讀取數(shù)據(jù)線的狀態(tài)。

? ? ? ? 圖 1?標(biāo)識(shí) TINIT, TRC, 和 TSAMPLE 之和必須小于 15us。

? ? ? ? 圖 2?指出,系統(tǒng)時(shí)間可以通過(guò)以下方法達(dá)到最大:TINIT 和 TRC 保持時(shí)間盡可能短,并且把控制器采樣時(shí)間放到 15us 周期的最后。

4,FPGA驅(qū)動(dòng)gxs18b20

4.1 編寫(xiě)代碼思路

1,根據(jù)FPGA 與溫度傳感器的通信過(guò)程分析:

? ?FPGA對(duì)傳感器進(jìn)行初始化操作;? ?? ------> 分配一個(gè)字節(jié)時(shí)間 byte = 0
? ?向傳感器寫(xiě)入 ?0xcc;? ? ? ? ? ? ? ? ? ? ? ?------> 分配一個(gè)字節(jié)時(shí)間 byte = 1
? ?向傳感器寫(xiě)入 ?0x44;? ? ? ? ? ? ? ? ? ? ? ?------> 分配一個(gè)字節(jié)時(shí)間 byte = 2
? ?等待一段時(shí)間;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?------> 分配一個(gè)字節(jié)時(shí)間 byte = 3
? ?初始化操作;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?------> 分配一個(gè)字節(jié)時(shí)間 byte = 4
? ?向傳感器寫(xiě)入 ?0xcc;? ? ? ? ? ? ? ? ? ? ? ? ------> 分配一個(gè)字節(jié)時(shí)間 byte = 5
? ?向傳感器寫(xiě)入 ?0xbe;? ? ? ? ? ? ? ? ? ? ? ? ------> 分配一個(gè)字節(jié)時(shí)間 byte = 6
? ?讀取傳感器溫度,讀取兩個(gè)字節(jié);? ? ?------> 分配兩個(gè)字節(jié)時(shí)間 byte = 7/8

2,代碼編寫(xiě)思路

,定義一個(gè)us的計(jì)數(shù)器,計(jì)數(shù)器計(jì)數(shù)時(shí)間為100us;
????????cnt 100_000/20 = 5000 --> 0-4999?
????????90us時(shí)就是計(jì)數(shù)到4499
????????10us時(shí)就是計(jì)數(shù)到499

,定義一個(gè)位計(jì)數(shù)器bit_cnt 在cnt==4999時(shí)加1,在bit_cnt == 7 && cnt==4999時(shí)清0
,字節(jié)計(jì)數(shù)器 byte_cnt 在位計(jì)數(shù)器bit_cnt == 7 && cnt == 4999時(shí)加1,在bit_cnt == 7 && cnt == 4999 && byte==8時(shí)清0

,在如何設(shè)計(jì)連續(xù)寫(xiě)1或者寫(xiě)0

定義一個(gè)[7:0]wr_data ,其中?bit_cnt是從0計(jì)數(shù)到7?
wr_data在cnt計(jì)數(shù)到最大值時(shí)候,向右移位,通過(guò)判斷wr_data[0]最低位,判斷寫(xiě)0還是寫(xiě)1

4.2 代碼編寫(xiě)

根據(jù)以上思路分析,編寫(xiě)代碼如下:

`timescale 1ns / 1psmodule ds18b20_driver(input            clk       ,input            reset     ,input            dq        ,output reg       temp_sign ,output reg [7:0] temp_data);localparam CNT_MAX = 4999  ;localparam SKIP    = 8'hCC ;localparam CONVERT = 8'h44 ;localparam READ    = 8'hBE ;wire              dqout    ;reg               dqout_en ;reg [12:0]        cnt      ;reg [2 :0]        bit_cnt  ;reg [3 :0]        byte_cnt ;reg [7 :0]        wr_data  ;reg [16:0]        rd_data  ;reg               init_err ;//三態(tài)門(mén)assign dq = dqout_en == 1 ? dqout: 1'bz;assign dqout = 0;//計(jì)數(shù)器always @(posedge clk ) beginif (reset) begincnt <= 0;endelse if (cnt == CNT_MAX) begincnt <= 0;		endelse begincnt <= cnt + 1;endendalways @(posedge clk ) beginif (reset) beginbit_cnt <= 0;endelse if (cnt == CNT_MAX && bit_cnt == 7) beginbit_cnt <= 0;		endelse if (cnt == CNT_MAX)beginbit_cnt <= bit_cnt + 1;endendalways @(posedge clk ) beginif (reset) beginbyte_cnt <= 0;endelse if (cnt == CNT_MAX && bit_cnt == 7 && byte_cnt == 8) beginbyte_cnt <= 0;		endelse if (cnt == CNT_MAX && bit_cnt == 7)beginbyte_cnt <= byte_cnt + 1;endendalways @(posedge clk ) beginif ((byte_cnt == 0 || byte_cnt == 4) && bit_cnt == 7 &&  cnt == CNT_MAX) beginwr_data <= SKIP;endelse if(bit_cnt == 7 && byte_cnt == 1 && cnt == CNT_MAX) beginwr_data <= CONVERT;endelse if(bit_cnt == 7 && byte_cnt == 5 && cnt == CNT_MAX) beginwr_data <= READ;endelse if (cnt == CNT_MAX) beginwr_data <= wr_data >> 1;endendalways @(posedge clk) beginif (reset) begindqout_en <= 0;endelse if(byte_cnt == 0 || byte_cnt == 4)begin //初始化dqout_en <= bit_cnt <= 4 ? 1'b1 : 1'b0;      	end else if(byte_cnt == 3) //等待dqout_en <= 0; else if (byte_cnt == 1 || byte_cnt == 2 || byte_cnt == 5 || byte_cnt == 6) //向傳感器寫(xiě)入字節(jié)begin                      dqout_en <= cnt == 0 ? 1'b1 : (((cnt == 499 && wr_data[0]) || (cnt == 4599 && ~wr_data[0])) ? 1'b0 : dqout_en);endelse if(byte_cnt == 7 || byte_cnt == 8)dqout_en  <= cnt <= 99 ? 1'b1 : 1'b0; //拉高2US 讀取采樣end //主機(jī)采樣always @(posedge clk ) begin if(reset) beginrd_data <= 0;end else if((byte_cnt == 7 || byte_cnt == 8) && cnt == 649 ) //13us采樣beginrd_data <= {dq,rd_data[15:1]};endelserd_data <= rd_data;endalways @(posedge clk ) begin if(byte_cnt == 8 && bit_cnt == 7 && cnt == 659 && ~rd_data[15]) begintemp_data <= rd_data[10:4];temp_sign <= rd_data[15]  ;endelse if(byte_cnt == 8 && bit_cnt == 7 && cnt == 659 && rd_data[15]) begintemp_data <= ~rd_data[10:4] + 1 ;temp_sign <= rd_data[15]        ;endend	always @(posedge clk ) beginif((byte_cnt == 0 || byte_cnt == 4) && bit_cnt == 6 && cnt == CNT_MAX) //初始化采?beginif (dq == 0)init_err <= 0;elseinit_err <= 1;end endendmodule

在這里編寫(xiě)了一個(gè)頂層模塊,其中定義了一個(gè)時(shí)鐘管理單元?(PLL實(shí)現(xiàn))來(lái)管理時(shí)鐘和復(fù)位信號(hào),

頂層模塊如下:

`timescale 1ns / 1ps
module top(input	wire		clkin_50m,inout               dq );wire reset;wire clk;wire       temp_sign;wire [7:0] temp_data;clock_and_reset clock_and_reset (.clkin_50m (clkin_50m), .clkout_50M(clk), .reset     (reset));ds18b20_driver ds18b20_driver(.clk       (clk),.reset     (reset),.dq        (dq),.temp_sign (temp_sign),.temp_data (temp_data));endmodule

?4.3 測(cè)試仿真

由于18b20溫度傳感器屬于從機(jī),所以仿真時(shí)較難,采用半仿真。我們定義一個(gè)仿真文件slave.v

其中讓dq作為輸出,使其輸出0,然后將此模塊例化到測(cè)試模塊中

`timescale 1ns / 1ps
module slave(output dq);assign dq = 0;endmodule

測(cè)試代碼如下:

`timescale 1ns / 1psmodule tb_top();reg  clkin_50m ;wire dq        ;pullup(dq);  // pullup原語(yǔ) 模擬上拉電阻 可以讓dq空閑狀態(tài)處于高電平top top (.clkin_50m(clkin_50m), .dq(dq));slave slave (.dq(dq));initial beginclkin_50m = 0;forever #(10) clkin_50m = ~clkin_50m;endendmodule

4.4 仿真波形

仿真波形如下

http://m.risenshineclean.com/news/61781.html

相關(guān)文章:

  • 淘寶網(wǎng)站框架seo發(fā)帖工具
  • 知名網(wǎng)站有哪些?百度推廣技巧
  • 清遠(yuǎn)新聞最新長(zhǎng)沙seo計(jì)費(fèi)管理
  • 網(wǎng)站建設(shè)注意什么小程序推廣平臺(tái)
  • 建設(shè)網(wǎng)站寶安區(qū)短視頻營(yíng)銷(xiāo)推廣方案
  • 做百度微信小程序都有哪些網(wǎng)站百度上做推廣怎么收費(fèi)
  • 做網(wǎng)站服務(wù)器需要系統(tǒng)全國(guó)新冠疫情最新消息
  • 小網(wǎng)站如何做密碼找回福州seo網(wǎng)絡(luò)推廣
  • 下載網(wǎng)站源碼拼多多運(yùn)營(yíng)
  • 購(gòu)物網(wǎng)站app制作aso優(yōu)化什么意思
  • 系統(tǒng)開(kāi)發(fā)包括什么seo百度推廣
  • 模板網(wǎng)站可以自己買(mǎi)空間嗎嗎百度一下全知道
  • 網(wǎng)站欄目頁(yè)如何做網(wǎng)絡(luò)推廣平臺(tái)公司
  • 做網(wǎng)站平面模板是啥意思互動(dòng)營(yíng)銷(xiāo)案例分析
  • php網(wǎng)站開(kāi)發(fā)實(shí)例教程簡(jiǎn)介關(guān)鍵詞優(yōu)化怎么優(yōu)化
  • 在線安卓軟件開(kāi)發(fā)優(yōu)化大師官網(wǎng)下載
  • 做優(yōu)化很好的網(wǎng)站常德政府網(wǎng)站市民留言
  • 深圳做網(wǎng)站的給說(shuō)各種網(wǎng)站
  • 寧波網(wǎng)站優(yōu)化軟件網(wǎng)絡(luò)推廣seo怎么做
  • 網(wǎng)站程序是如何開(kāi)發(fā)的百度搜索引擎優(yōu)化
  • 做的網(wǎng)站怎樣更新百度競(jìng)價(jià)點(diǎn)擊一次多少錢(qián)
  • 福建設(shè)備公司網(wǎng)站百度24小時(shí)人工電話
  • 網(wǎng)站軟文偽原創(chuàng)企業(yè)營(yíng)銷(xiāo)策略有哪些
  • 東莞網(wǎng)上商城網(wǎng)站建設(shè)南京seo公司
  • 河南省建設(shè)人才信息網(wǎng)官網(wǎng)自助優(yōu)化排名工具
  • 編程軟件自學(xué)網(wǎng)百度關(guān)鍵詞自然排名優(yōu)化公司
  • 東莞網(wǎng)站建設(shè)是什么意思西安seo培訓(xùn)學(xué)校
  • 設(shè)計(jì)相關(guān)網(wǎng)站武漢企業(yè)seo推廣
  • 網(wǎng)站建設(shè)編程語(yǔ)言常用的seo查詢工具有哪些
  • 做3d模型的叫什么牛的網(wǎng)站色盲眼中的世界