亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲(chóng)蟲(chóng)首頁(yè)| 資源下載| 資源專(zhuān)輯| 精品軟件
登錄| 注冊(cè)

D0

  • 微機(jī)原理與接口課件

    微處理器及微型計(jì)算機(jī)的發(fā)展概況  第一代微處理器是以Intel公司1971年推出的4004,4040為代表的四位微處理機(jī)。      第二代微處理機(jī)(1973年~1977年),典型代表有:Intel 公司的8080、8085;Motorola公司的M6800以及Zlog公司的Z80。     第三代微處理機(jī) 第三代微機(jī)是以16位機(jī)為代表,基本上是在第二代微機(jī)的基礎(chǔ)上發(fā)展起來(lái)的。其中Intel公司的8088。8086是在8085的基礎(chǔ)發(fā)展起來(lái)的;M68000是Motorola公司在M6800 的基礎(chǔ)發(fā)展起來(lái)的;     第四代微處理機(jī) 以Intel公司1984年10月推出的80386CPU和1989年4月推出的80486CPU為代表,     第五代微處理機(jī)的發(fā)展更加迅猛,1993年3月被命名為PENTIUM的微處理機(jī)面世,98年P(guān)ENTIUM 2又被推向市場(chǎng)。 INTEL CPU 發(fā)展歷史Intel第一塊CPU 4004,4位主理器,主頻108kHz,運(yùn)算速度0.06MIPs(Million Instructions Per Second, 每秒百萬(wàn)條指令),集成晶體管2,300個(gè),10微米制造工藝,最大尋址內(nèi)存640 bytes,生產(chǎn)曰期1971年11月. 8085,8位主理器,主頻5M,運(yùn)算速度0.37MIPs,集成晶體管6,500個(gè),3微米制造工藝,最大尋址內(nèi)存64KB,生產(chǎn)曰期1976年 8086,16位主理器,主頻4.77/8/10MHZ,運(yùn)算速度0.75MIPs,集成晶體管29,000個(gè),3微米制造工藝,最大尋址內(nèi)存1MB,生產(chǎn)曰期1978年6月. 80486DX,DX2,DX4,32位主理器,主頻25/33/50/66/75/100MHZ,總線頻率33/50/66MHZ,運(yùn)算速度20~60MIPs,集成晶體管1.2M個(gè),1微米制造工藝,168針PGA,最大尋址內(nèi)存4GB,緩存8/16/32/64KB,生產(chǎn)曰期1989年4月 Celeron一代, 主頻266/300MHZ(266/300MHz w/o L2 cache, Covington芯心 (Klamath based),300A/333/366/400/433/466/500/533MHz w/128kB L2 cache, Mendocino核心 (Deschutes-based), 總線頻率66MHz,0.25微米制造工藝,生產(chǎn)曰期1998年4月) Pentium 4 (478針),至今分為三種核心:Willamette核心(主頻1.5G起,FSB400MHZ,0.18微米制造工藝),Northwood核心(主頻1.6G~3.0G,FSB533MHZ,0.13微米制造工藝, 二級(jí)緩存512K),Prescott核心(主頻2.8G起,FSB800MHZ,0.09微米制造工藝,1M二級(jí)緩存,13條全新指令集SSE3),生產(chǎn)曰期2001年7月. 更大的緩存、更高的頻率、 超級(jí)流水線、分支預(yù)測(cè)、亂序執(zhí)行超線程技術(shù) 微型計(jì)算機(jī)組成結(jié)構(gòu)單片機(jī)簡(jiǎn)介單片機(jī)即單片機(jī)微型計(jì)算機(jī),是將計(jì)算機(jī)主機(jī)(CPU、    內(nèi)存和I/O接口)集成在一小塊硅片上的微型機(jī)。 三、計(jì)算機(jī)編程語(yǔ)言的發(fā)展概況 機(jī)器語(yǔ)言  機(jī)器語(yǔ)言就是0,1碼語(yǔ)言,是計(jì)算機(jī)唯一能理解并直接執(zhí)行的語(yǔ)言。匯編語(yǔ)言  用一些助記符號(hào)代替用0,1碼描述的某種機(jī)器的指令系統(tǒng),匯編語(yǔ)言就是在此基礎(chǔ)上完善起來(lái)的。高級(jí)語(yǔ)言  BASIC,PASCAL,C語(yǔ)言等等。用高級(jí)語(yǔ)言編寫(xiě)的程序稱(chēng)源程序,它們必須通過(guò)編譯或解釋?zhuān)B接等步驟才能被計(jì)算機(jī)處理。 面向?qū)ο笳Z(yǔ)言  C++,Java等編程語(yǔ)言是面向?qū)ο蟮恼Z(yǔ)言。 1.3 微型計(jì)算機(jī)中信息的表示及運(yùn)算基礎(chǔ)(一) 十進(jìn)制ND有十個(gè)數(shù)碼:0~9,逢十進(jìn)一。 例 1234.5=1×103 +2×102 +3×101 +4×100 +5×10-1加權(quán)展開(kāi)式以10稱(chēng)為基數(shù),各位系數(shù)為0~9,10i為權(quán)。 一般表達(dá)式:ND= dn-1×10n-1+dn-2×10n-2 +…+D0×100 +d-1×10-1+… (二) 二進(jìn)制NB兩個(gè)數(shù)碼:0、1, 逢二進(jìn)一。 例 1101.101=1×23+1×22+0×21+1×20+1×2-1+1×2-3 加權(quán)展開(kāi)式以2為基數(shù),各位系數(shù)為0、1, 2i為權(quán)。 一般表達(dá)式:  NB = bn-1×2n-1 + bn-2×2n-2 +…+b0×20 +b-1×2-1+… (三)十六進(jìn)制NH十六個(gè)數(shù)碼0~9、A~F,逢十六進(jìn)一。 例:DFC.8=13×162 +15×161 +12×160 +8×16-1 展開(kāi)式以十六為基數(shù),各位系數(shù)為0~9,A~F,16i為權(quán)。 一般表達(dá)式: NH= hn-1×16n-1+ hn-2×16n-2+…+ h0×160+ h-1×16-1+… 二、不同進(jìn)位計(jì)數(shù)制之間的轉(zhuǎn)換 (二)二進(jìn)制與十六進(jìn)制數(shù)之間的轉(zhuǎn)換  24=16 ,四位二進(jìn)制數(shù)對(duì)應(yīng)一位十六進(jìn)制數(shù)。舉例:(三)十進(jìn)制數(shù)轉(zhuǎn)換成二、十六進(jìn)制數(shù)整數(shù)、小數(shù)分別轉(zhuǎn)換   1.整數(shù)轉(zhuǎn)換法“除基取余”:十進(jìn)制整數(shù)不斷除以轉(zhuǎn)換進(jìn)制基數(shù),直至商為0。每除一次取一個(gè)余數(shù),從低位排向高位。舉例: 2. 小數(shù)轉(zhuǎn)換法“乘基取整”:用轉(zhuǎn)換進(jìn)制的基數(shù)乘以小數(shù)部分,直至小數(shù)為0或達(dá)到轉(zhuǎn)換精度要求的位數(shù)。每乘一次取一次整數(shù),從最高位排到最低位。舉例:  三、帶符號(hào)數(shù)的表示方法 機(jī)器數(shù):機(jī)器中數(shù)的表示形式。真值: 機(jī)器數(shù)所代表的實(shí)際數(shù)值。舉例:一個(gè)8位機(jī)器數(shù)與它的真值對(duì)應(yīng)關(guān)系如下:  真值: X1=+84=+1010100B     X2=-84= -1010100B   機(jī)器數(shù):[X1]機(jī)= 01010100    [X2]機(jī)= 11010100(二)原碼、反碼、補(bǔ)碼最高位為符號(hào)位,0表示 “+”,1表示“-”。 數(shù)值位與真值數(shù)值位相同。 例  8位原碼機(jī)器數(shù):  真值:   x1  = +1010100B     x2    =- 1010100B      機(jī)器數(shù): [x1]原  = 01010100  [x2]原 = 11010100原碼表示簡(jiǎn)單直觀,但0的表示不唯一,加減運(yùn)算復(fù)雜。 正數(shù)的反碼與原碼表示相同。       負(fù)數(shù)反碼符號(hào)位為 1,數(shù)值位為原碼數(shù)值各位取反。 例 8位反碼機(jī)器數(shù):          x= +4: [x]原= 00000100 [x]反= 00000100     x= -4: [x]原= 10000100  [x]反= 111110113、補(bǔ)碼(Two’s Complement)正數(shù)的補(bǔ)碼表示與原碼相同。       負(fù)數(shù)補(bǔ)碼等于2n-abs(x)8位機(jī)器數(shù)表示的真值四、 二進(jìn)制編碼例:求十進(jìn)制數(shù)876的BCD碼 876= 1000 0111 0110 BCD  876= 36CH = 1101101100B 2、字符編碼    美國(guó)標(biāo)準(zhǔn)信息交換碼ASCII碼,用于計(jì)算      機(jī)與計(jì)算機(jī)、計(jì)算機(jī)與外設(shè)之間傳遞信息。 3、漢字編碼 “國(guó)家標(biāo)準(zhǔn)信息交換用漢字編碼”(GB2312-80標(biāo)準(zhǔn)),簡(jiǎn)稱(chēng)國(guó)標(biāo)碼。 用兩個(gè)七位二進(jìn)制數(shù)編碼表示一個(gè)漢字 例如“巧”字的代碼是39H、41H漢字內(nèi)碼例如“巧”字的代碼是0B9H、0C1H1·4  運(yùn)算基礎(chǔ) 一、二進(jìn)制數(shù)的運(yùn)算加法規(guī)則:“逢2進(jìn)1”       減法規(guī)則:“借1當(dāng)2”       乘法規(guī)則:“逢0出0,全1出1”二、二—十進(jìn)制數(shù)的加、減運(yùn)算        BCD數(shù)的運(yùn)算規(guī)則 循十進(jìn)制數(shù)的運(yùn)算規(guī)則“逢10進(jìn)1”。但計(jì)算機(jī)在進(jìn)行這種運(yùn)算時(shí)會(huì)出現(xiàn)潛在的錯(cuò)誤。為了解決BCD數(shù)的運(yùn)算問(wèn)題,采取調(diào)整運(yùn)算結(jié)果的措施:即“加六修正”和“減六修正”例:10001000(BCD)+01101001(BCD)        =000101010111(BCD)                1 0 0 0 1 0 0 0       +  0 1 1 0 1 0 0 1           1 1 1 1 0 0 0 1        +  0 1 1 0 0 1 1 0     ……調(diào)整          1 0 1 0 1 0 1 1 1                                        進(jìn)位  例:  10001000(BCD)- 01101001(BCD)= 00011001(BCD)                   1 0 0 0 1 0 0 0            -   0 1 1 0 1 0 0 1             0 0 0 1 1 1 1 1         -                    0 1 1 0   ……調(diào)整             0 0 0 1 1 0 0 1  三、 帶符號(hào)二進(jìn)制數(shù)的運(yùn)算 1.5 幾個(gè)重要的數(shù)字邏輯電路編碼器譯碼器計(jì)數(shù)器微機(jī)自動(dòng)工作的條件程序指令順序存放自動(dòng)跟蹤指令執(zhí)行1.6 微機(jī)基本結(jié)構(gòu)微機(jī)結(jié)構(gòu)各部分組成連接方式1、以CPU為中心的雙總線結(jié)構(gòu);2、以內(nèi)存為中心的雙總線結(jié)構(gòu);3、單總線結(jié)構(gòu)CPU結(jié)構(gòu)管腳特點(diǎn)  1、多功能;2、分時(shí)復(fù)用內(nèi)部結(jié)構(gòu)  1、控制; 2、運(yùn)算; 3、寄存器; 4、地址程序計(jì)數(shù)器堆棧定義 1、定義;2、管理;3、堆棧形式

    標(biāo)簽: 微機(jī)原理 接口

    上傳時(shí)間: 2013-10-17

    上傳用戶:erkuizhang

  • Arduino學(xué)習(xí)筆記4_Arduino軟件模擬PWM

    注:1.這篇文章斷斷續(xù)續(xù)寫(xiě)了很久,畫(huà)圖技術(shù)也不精,難免錯(cuò)漏,大家湊合看.有問(wèn)題可以留言.      2.論壇排版把我的代碼縮進(jìn)全弄沒(méi)了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脈寬調(diào)制波,通過(guò)調(diào)整輸出信號(hào)占空比,從而達(dá)到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個(gè)8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調(diào)制波。分辨率8 位即2 的8 次方等于 256 級(jí)精度。但是有時(shí)候我們會(huì)覺(jué)得6 個(gè)PWM 引腳不夠用。比如我們做一個(gè)10 路燈調(diào)光, 就需要有10 個(gè)PWM 腳。Arduino Duemilanove 2009 有13 個(gè)數(shù)字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。 二、Arduino 軟件模擬PWM Arduino PWM 調(diào)壓原理:PWM 有好幾種方法。而Arduino 因?yàn)殡娫春蛯?shí)現(xiàn)難度限制,一般 使用周期恒定,占空比變化的單極性PWM。 通過(guò)調(diào)整一個(gè)周期里面輸出腳高/低電平的時(shí)間比(即是占空比)去獲得給一個(gè)用電器不同 的平均功率。 如圖所示,假設(shè)PWM 波形周期1ms(即1kHz),分辨率1000 級(jí)。那么需要一個(gè)信號(hào)時(shí)間 精度1ms/1000=1us 的信號(hào)源,即1MHz。所以說(shuō),PWM 的實(shí)現(xiàn)難點(diǎn)在于需要使用很高頻的 信號(hào)源,才能獲得快速與高精度。下面先由一個(gè)簡(jiǎn)單的PWM 程序開(kāi)始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 這是一個(gè)軟件PWM 控制Arduino D13 引腳的例子。只需要一塊Arduino 即可測(cè)試此代碼。 程序解析:由for 循環(huán)可以看出,完成一個(gè)PWM 周期,共循環(huán)255 次。 假設(shè)bright=100 時(shí)候,在第0~100 次循環(huán)中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平; 然后第100 到255 次循環(huán)里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無(wú) 論輸出高低電平都保持30us。 那么說(shuō),如果bright=100 的話,就有100 次循環(huán)是高電平,155 次循環(huán)是低電平。 如果忽略指令執(zhí)行時(shí)間的話,這次的PWM 波形占空比為100/255,如果調(diào)整bright 的值, 就能改變接在D13 的LED 的亮度。 這里設(shè)置了每次for 循環(huán)之后,將bright 加一,并且當(dāng)bright 加到255 時(shí)歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應(yīng)該是大家想的比較多的想法。 然后介紹一個(gè)簡(jiǎn)單一點(diǎn)的。思維風(fēng)格完全不同。不過(guò)對(duì)于驅(qū)動(dòng)一個(gè)LED 來(lái)說(shuō),效果與上面 的程序一樣。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,這段代碼少了一個(gè)For 循環(huán)。它先輸出一個(gè)高電平,然后維持(bright*30)us。然 后輸出一個(gè)低電平,維持時(shí)間((255-bright)*30)us。這樣兩次高低就能完成一個(gè)PWM 周期。 分辨率也是255。 三、多引腳PWM Arduino 本身已有PWM 引腳并且運(yùn)行起來(lái)不占CPU 時(shí)間,所以軟件模擬一個(gè)引腳的PWM 完全沒(méi)有實(shí)用意義。我們軟件模擬的價(jià)值在于:他能將任意的數(shù)字IO 口變成PWM 引腳。 當(dāng)一片Arduino 要同時(shí)控制多個(gè)PWM,并且沒(méi)有其他重任務(wù)的時(shí)候,就要用軟件PWM 了。 多引腳PWM 有一種下面的方式: int brights[14] = {0}; //定義14個(gè)引腳的初始亮度,可以隨意設(shè)置 int StartPWMPin = 0, EndPWMPin = 13; //設(shè)置D0~D13為PWM 引腳 int PWMResolution = 255; //設(shè)置PWM 占空比分辨率 void setup() { //定義所有IO 端輸出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //隨便定義個(gè)初始亮度,便于觀察 brights[ i ] = random(0, 255); } } void loop() { //這for 循環(huán)是為14盞燈做漸亮的。每次Arduino loop()循環(huán), //brights 自增一次。直到brights=255時(shí)候,將brights 置零重新計(jì)數(shù)。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是計(jì)數(shù)一個(gè)PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個(gè)PWM 周期均遍歷所有引腳 { if(i < brights[j])\   所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調(diào)整LED 亮度的話,我們用64 級(jí)精度就行。這樣速度就是2x32x64=4ms。就不會(huì)閃了。

    標(biāo)簽: Arduino PWM 軟件模擬

    上傳時(shí)間: 2013-10-08

    上傳用戶:dingdingcandy

  • Hyperlynx仿真應(yīng)用:阻抗匹配

    Hyperlynx仿真應(yīng)用:阻抗匹配.下面以一個(gè)電路設(shè)計(jì)為例,簡(jiǎn)單介紹一下PCB仿真軟件在設(shè)計(jì)中的使用。下面是一個(gè)DSP硬件電路部分元件位置關(guān)系(原理圖和PCB使用PROTEL99SE設(shè)計(jì)),其中DRAM作為DSP的擴(kuò)展Memory(64位寬度,低8bit還經(jīng)過(guò)3245接到FLASH和其它芯片),DRAM時(shí)鐘頻率133M。因?yàn)轭l率較高,設(shè)計(jì)過(guò)程中我們需要考慮DRAM的數(shù)據(jù)、地址和控制線是否需加串阻。下面,我們以數(shù)據(jù)線D0仿真為例看是否需要加串阻。模型建立首先需要在元件公司網(wǎng)站下載各器件IBIS模型。然后打開(kāi)Hyperlynx,新建LineSim File(線路仿真—主要用于PCB前仿真驗(yàn)證)新建好的線路仿真文件里可以看到一些虛線勾出的傳輸線、芯片腳、始端串阻和上下拉終端匹配電阻等。下面,我們開(kāi)始導(dǎo)入主芯片DSP的數(shù)據(jù)線D0腳模型。左鍵點(diǎn)芯片管腳處的標(biāo)志,出現(xiàn)未知管腳,然后再按下圖的紅線所示線路選取芯片IBIS模型中的對(duì)應(yīng)管腳。 3http://bbs.elecfans.com/ 電子技術(shù)論壇 http://www.elecfans.com 電子發(fā)燒友點(diǎn)OK后退到“ASSIGN Models”界面。選管腳為“Output”類(lèi)型。這樣,一樣管腳的配置就完成了。同樣將DRAM的數(shù)據(jù)線對(duì)應(yīng)管腳和3245的對(duì)應(yīng)管腳IBIS模型加上(DSP輸出,3245高阻,DRAM輸入)。下面我們開(kāi)始建立傳輸線模型。左鍵點(diǎn)DSP芯片腳相連的傳輸線,增添傳輸線,然后右鍵編輯屬性。因?yàn)槲覀兪褂盟膶影澹诒韺幼呔€,所以要選用“Microstrip”,然后點(diǎn)“Value”進(jìn)行屬性編輯。這里,我們要編輯一些PCB的屬性,布線長(zhǎng)度、寬度和層間距等,屬性編輯界面如下:再將其它傳輸線也添加上。這就是沒(méi)有加阻抗匹配的仿真模型(PCB最遠(yuǎn)直線間距1.4inch,對(duì)線長(zhǎng)為1.7inch)。現(xiàn)在模型就建立好了。仿真及分析下面我們就要為各點(diǎn)加示波器探頭了,按照下圖紅線所示路徑為各測(cè)試點(diǎn)增加探頭:為發(fā)現(xiàn)更多的信息,我們使用眼圖觀察。因?yàn)闀r(shí)鐘是133M,數(shù)據(jù)單沿采樣,數(shù)據(jù)翻轉(zhuǎn)最高頻率為66.7M,對(duì)應(yīng)位寬為7.58ns。所以設(shè)置參數(shù)如下:之后按照芯片手冊(cè)制作眼圖模板。因?yàn)槲覀冏铌P(guān)心的是接收端(DRAM)信號(hào),所以模板也按照DRAM芯片HY57V283220手冊(cè)的輸入需求設(shè)計(jì)。芯片手冊(cè)中要求輸入高電平VIH高于2.0V,輸入低電平VIL低于0.8V。DRAM芯片的一個(gè)NOTE里指出,芯片可以承受最高5.6V,最低-2.0V信號(hào)(不長(zhǎng)于3ns):按下邊紅線路徑配置眼圖模板:低8位數(shù)據(jù)線沒(méi)有串阻可以滿足設(shè)計(jì)要求,而其他的56位都是一對(duì)一,經(jīng)過(guò)仿真沒(méi)有串阻也能通過(guò)。于是數(shù)據(jù)線不加串阻可以滿足設(shè)計(jì)要求,但有一點(diǎn)需注意,就是寫(xiě)數(shù)據(jù)時(shí)因?yàn)榇嬖诨貨_,DRAM接收高電平在位中間會(huì)回沖到2V。因此會(huì)導(dǎo)致電平判決裕量較小,抗干擾能力差一些,如果調(diào)試過(guò)程中發(fā)現(xiàn)寫(xiě)RAM會(huì)出錯(cuò),還需要改版加串阻。

    標(biāo)簽: Hyperlynx 仿真 阻抗匹配

    上傳時(shí)間: 2013-12-17

    上傳用戶:debuchangshi

  • Arduino學(xué)習(xí)筆記4_Arduino軟件模擬PWM

    注:1.這篇文章斷斷續(xù)續(xù)寫(xiě)了很久,畫(huà)圖技術(shù)也不精,難免錯(cuò)漏,大家湊合看.有問(wèn)題可以留言.      2.論壇排版把我的代碼縮進(jìn)全弄沒(méi)了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脈寬調(diào)制波,通過(guò)調(diào)整輸出信號(hào)占空比,從而達(dá)到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個(gè)8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調(diào)制波。分辨率8 位即2 的8 次方等于 256 級(jí)精度。但是有時(shí)候我們會(huì)覺(jué)得6 個(gè)PWM 引腳不夠用。比如我們做一個(gè)10 路燈調(diào)光, 就需要有10 個(gè)PWM 腳。Arduino Duemilanove 2009 有13 個(gè)數(shù)字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。 二、Arduino 軟件模擬PWM Arduino PWM 調(diào)壓原理:PWM 有好幾種方法。而Arduino 因?yàn)殡娫春蛯?shí)現(xiàn)難度限制,一般 使用周期恒定,占空比變化的單極性PWM。 通過(guò)調(diào)整一個(gè)周期里面輸出腳高/低電平的時(shí)間比(即是占空比)去獲得給一個(gè)用電器不同 的平均功率。 如圖所示,假設(shè)PWM 波形周期1ms(即1kHz),分辨率1000 級(jí)。那么需要一個(gè)信號(hào)時(shí)間 精度1ms/1000=1us 的信號(hào)源,即1MHz。所以說(shuō),PWM 的實(shí)現(xiàn)難點(diǎn)在于需要使用很高頻的 信號(hào)源,才能獲得快速與高精度。下面先由一個(gè)簡(jiǎn)單的PWM 程序開(kāi)始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 這是一個(gè)軟件PWM 控制Arduino D13 引腳的例子。只需要一塊Arduino 即可測(cè)試此代碼。 程序解析:由for 循環(huán)可以看出,完成一個(gè)PWM 周期,共循環(huán)255 次。 假設(shè)bright=100 時(shí)候,在第0~100 次循環(huán)中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平; 然后第100 到255 次循環(huán)里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無(wú) 論輸出高低電平都保持30us。 那么說(shuō),如果bright=100 的話,就有100 次循環(huán)是高電平,155 次循環(huán)是低電平。 如果忽略指令執(zhí)行時(shí)間的話,這次的PWM 波形占空比為100/255,如果調(diào)整bright 的值, 就能改變接在D13 的LED 的亮度。 這里設(shè)置了每次for 循環(huán)之后,將bright 加一,并且當(dāng)bright 加到255 時(shí)歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應(yīng)該是大家想的比較多的想法。 然后介紹一個(gè)簡(jiǎn)單一點(diǎn)的。思維風(fēng)格完全不同。不過(guò)對(duì)于驅(qū)動(dòng)一個(gè)LED 來(lái)說(shuō),效果與上面 的程序一樣。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,這段代碼少了一個(gè)For 循環(huán)。它先輸出一個(gè)高電平,然后維持(bright*30)us。然 后輸出一個(gè)低電平,維持時(shí)間((255-bright)*30)us。這樣兩次高低就能完成一個(gè)PWM 周期。 分辨率也是255。 三、多引腳PWM Arduino 本身已有PWM 引腳并且運(yùn)行起來(lái)不占CPU 時(shí)間,所以軟件模擬一個(gè)引腳的PWM 完全沒(méi)有實(shí)用意義。我們軟件模擬的價(jià)值在于:他能將任意的數(shù)字IO 口變成PWM 引腳。 當(dāng)一片Arduino 要同時(shí)控制多個(gè)PWM,并且沒(méi)有其他重任務(wù)的時(shí)候,就要用軟件PWM 了。 多引腳PWM 有一種下面的方式: int brights[14] = {0}; //定義14個(gè)引腳的初始亮度,可以隨意設(shè)置 int StartPWMPin = 0, EndPWMPin = 13; //設(shè)置D0~D13為PWM 引腳 int PWMResolution = 255; //設(shè)置PWM 占空比分辨率 void setup() { //定義所有IO 端輸出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //隨便定義個(gè)初始亮度,便于觀察 brights[ i ] = random(0, 255); } } void loop() { //這for 循環(huán)是為14盞燈做漸亮的。每次Arduino loop()循環(huán), //brights 自增一次。直到brights=255時(shí)候,將brights 置零重新計(jì)數(shù)。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是計(jì)數(shù)一個(gè)PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個(gè)PWM 周期均遍歷所有引腳 { if(i < brights[j])\   所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調(diào)整LED 亮度的話,我們用64 級(jí)精度就行。這樣速度就是2x32x64=4ms。就不會(huì)閃了。

    標(biāo)簽: Arduino PWM 軟件模擬

    上傳時(shí)間: 2013-10-23

    上傳用戶:mqien

  • 我比較喜歡的一個(gè)組件常用的互動(dòng)組件(Combobox、checkbox and Radio) ... www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=BB

    我比較喜歡的一個(gè)組件常用的互動(dòng)組件(Combobox、checkbox and Radio) ... www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=BB ... 91K 2005-6-9 - 百度快照 ... www.baidu.com/ s?ct=0&ie=gb2312&bs=Jtable%D6%D0%BC%D3%C8%EBcheckbox&sr=&z=&wd=Jtable++... - 20k - 補(bǔ)充材料

    標(biāo)簽: itbookinfo Combobox checkbox huachu

    上傳時(shí)間: 2014-01-21

    上傳用戶:Amygdala

  • 自定義一個(gè)簡(jiǎn)單的日期類(lèi)DateType

    自定義一個(gè)簡(jiǎn)單的日期類(lèi)DateType,它具有數(shù)據(jù)成員y、m、d,用來(lái)表示當(dāng)前日期的年、月、日。而后設(shè)計(jì)該類(lèi)欲實(shí)現(xiàn)(完成)的功能,進(jìn)而設(shè)計(jì)出相應(yīng)的類(lèi)成員函數(shù)。 例如,下面給出的“雛形”可用來(lái)實(shí)現(xiàn)對(duì)天的增加,比較兩個(gè)日期是否相等,以及對(duì)日期的輸出等操作。請(qǐng)完成各類(lèi)成員函數(shù),并編制主函數(shù),說(shuō)明DateType類(lèi)對(duì)象,對(duì)定義的各成員函數(shù)進(jìn)行調(diào)用,以驗(yàn)證它們的正確性。 class DateType { //自定義的日期類(lèi)DateType int y,m,d //數(shù)據(jù)成員,表示當(dāng)前日期的年、月、日 public: DateType(int y0=1, int m0=1, int D0=1) //構(gòu)造函數(shù),設(shè)定年、月、日;并設(shè)置參數(shù)默認(rèn)值 void incrementDay() //增加1天 bool equal(DateType dt2) //判斷二日期是否相等 void printDate() //屏幕輸出日期對(duì)象的有關(guān)數(shù)據(jù)(年、月、日) }

    標(biāo)簽: DateType 自定義

    上傳時(shí)間: 2013-12-22

    上傳用戶:songyue1991

  • 本實(shí)驗(yàn)以常見(jiàn)的1602B字符型LCD模塊為例

    本實(shí)驗(yàn)以常見(jiàn)的1602B字符型LCD模塊為例,介紹該模塊的簡(jiǎn)單使用。1602B可以顯示2行16個(gè)字符,有8位數(shù)據(jù)總線D0-D7,和RS、R/W、EN三個(gè)控制端口,工作電壓為5V,并且?guī)в凶址麑?duì)比度調(diào)節(jié)和背光。

    標(biāo)簽: 1602B LCD 實(shí)驗(yàn) 字符型

    上傳時(shí)間: 2013-12-21

    上傳用戶:com1com2

  • 該C程序基于MSP430

    該C程序基于MSP430,在圖形液晶上顯示年月日星期和時(shí)間 程序功能:該程序是用F449來(lái)控制對(duì)128X64點(diǎn)陣的片選CS1,CS2,數(shù)據(jù)線D0-D7,讀寫(xiě)信號(hào)等的操作? // 來(lái)對(duì)點(diǎn)陣的操作,具體內(nèi)容如“利爾達(dá),TEL:0571 -88800000。具體詳瀏覽程序描述 // 硬件連接:必須連接F449邊上的p3.0-P3.7,P4.0,P4.1,P2.6,P2.7口上的短接器。另外,可以通過(guò)3296電位器R20來(lái)調(diào)節(jié)LCD灰度。

    標(biāo)簽: 430 MSP C程序

    上傳時(shí)間: 2013-12-19

    上傳用戶:璇珠官人

  • SED1335驅(qū)動(dòng)320x240圖形液晶驅(qū)動(dòng)演示程序 接口情況表述: No: LCM ----- 52 --------------------- 1...VSS..... GND

    SED1335驅(qū)動(dòng)320x240圖形液晶驅(qū)動(dòng)演示程序 接口情況表述: No: LCM ----- 52 --------------------- 1...VSS..... GND 地線 2...VDD..... +5V(VCC) 電源 3...VO ..... -Vadj Input 對(duì)比度負(fù)壓調(diào)整輸入 4...A0 ..... P2.0 寄存器選擇信號(hào),命令數(shù)據(jù)方式選擇 5.../WR..... WR 寫(xiě)有效 6.../RD..... RD 讀有效 7...D0 ..... P0.0 數(shù)據(jù)總線 D0 8...D1 ..... P0.1 數(shù)據(jù)總線 D1 9...D2 ..... P0.2 數(shù)據(jù)總線 D2 10..D3 ..... P0.3 數(shù)據(jù)總線 D3 11..D4 ..... P0.4 數(shù)據(jù)總線 D4 12..D5 ..... P0.5 數(shù)據(jù)總線 D5 13..D6 ..... P0.6 數(shù)據(jù)總線 D6 14..D7 ..... P0.7 數(shù)據(jù)總線 D7 15../CS .... GND 片選通信號(hào),低電平有效.實(shí)際使用應(yīng)編入地址 16../RES.... /RESET 復(fù)位信號(hào),低電平有效,阻容式復(fù)位電路 17..VEE..... -Vout 逆變-22.5V 負(fù)電壓輸出 18..VSS..... GND 地線 0V

    標(biāo)簽: 320x240 1335 SED LCM

    上傳時(shí)間: 2013-12-22

    上傳用戶:redmoons

  • 在微機(jī)上模擬I2C總線的設(shè)計(jì)中

    在微機(jī)上模擬I2C總線的設(shè)計(jì)中,用并行口的D0(PIN2)模擬SCL信號(hào),用D1(PIN3)模擬SDA信號(hào)。根據(jù)IIC總線的電平規(guī)范

    標(biāo)簽: I2C 微機(jī) 模擬 線的設(shè)計(jì)

    上傳時(shí)間: 2013-11-27

    上傳用戶:咔樂(lè)塢

主站蜘蛛池模板: 石城县| 玛沁县| 岑溪市| 青田县| 平潭县| 沙河市| 河北区| 苗栗县| 安国市| 阳曲县| 来凤县| 达日县| 新建县| 旬邑县| 海丰县| 保定市| 蒲城县| 从江县| 平果县| 保山市| 高安市| 体育| 巴东县| 务川| 竹北市| 石狮市| 碌曲县| 太谷县| 万安县| 沭阳县| 景东| 高雄市| 瑞丽市| 上思县| 元江| 寿宁县| 星子县| 麻江县| 南部县| 兴国县| 荔浦县|