微控制器的工作原理


由: 馬歇爾大腦

微控制器是電子產(chǎn)品中的專用計(jì)算機(jī)。 埃內(nèi)斯托·阿吉托斯 / 蓋蒂圖片社
如今,微控制器隱藏在數(shù)量驚人的產(chǎn)品中。如果您的微波爐有一個(gè) 發(fā)光二極管 或 液晶顯示器 屏幕和鍵盤(pán),它包含一個(gè)微控制器。所有現(xiàn)代汽車都至少包含一個(gè)微控制器,并且可以有多達(dá)六個(gè)或七個(gè):發(fā)動(dòng)機(jī)由微控制器控制,就像 防抱死制動(dòng)器這 巡航控制 等等。任何具有遙控器的設(shè)備幾乎肯定都包含一個(gè)微控制器: 電視, 錄像機(jī) 而高端立體聲系統(tǒng)都屬于這一類。好 長(zhǎng)官 和 數(shù)碼相機(jī), 手機(jī), 攝錄一體機(jī), 答錄機(jī), 激光打印機(jī), 電話 (帶有來(lái)電顯示、20 號(hào)碼存儲(chǔ)器等)、尋呼機(jī)和功能齊全的冰箱、洗碗機(jī)、洗衣機(jī)和烘干機(jī)(帶有顯示器和鍵盤(pán)的那些)......你明白了。基本上,任何與用戶交互的產(chǎn)品或設(shè)備內(nèi)部都埋有一個(gè)微控制器。
在本文中,我們將介紹微控制器,以便您了解它們是什么以及它們是如何工作的。然后,我們將更進(jìn)一步,討論如何自己開(kāi)始使用微控制器 - 我們將創(chuàng)建一個(gè)帶有微控制器的數(shù)字時(shí)鐘!我們還將建造一個(gè)數(shù)字溫度計(jì)。在這個(gè)過(guò)程中,您將學(xué)到很多關(guān)于微控制器如何在商業(yè)產(chǎn)品中使用的信息。
什么是微控制器?
微控制器是一臺(tái)計(jì)算機(jī)。所有計(jì)算機(jī) - 無(wú)論我們談?wù)摰氖莻€(gè)人 臺(tái)式電腦 或大 大型計(jì)算機(jī) 或微控制器 - 有幾個(gè)共同點(diǎn):
所有計(jì)算機(jī)都有一個(gè) 中央處理器 (中央處理單元)執(zhí)行程序。如果您現(xiàn)在坐在臺(tái)式計(jì)算機(jī)上閱讀本文,則該計(jì)算機(jī)中的 CPU 正在執(zhí)行實(shí)現(xiàn)顯示此頁(yè)面的 Web 瀏覽器的程序。
CPU 從某處加載程序。在臺(tái)式計(jì)算機(jī)上,瀏覽器程序從 硬盤(pán).
計(jì)算機(jī)有一些 公羊 (隨機(jī)存取存儲(chǔ)器),它可以在其中存儲(chǔ)“變量”。
計(jì)算機(jī)有一些輸入和輸出設(shè)備,因此它可以與人交談。在臺(tái)式機(jī)上, 鍵盤(pán) 和 鼠 是輸入設(shè)備,并且 監(jiān)控 和 打印機(jī) 是輸出設(shè)備。硬盤(pán)是一種 I/O 設(shè)備 - 它處理輸入和輸出。
您使用的臺(tái)式計(jì)算機(jī)是“通用計(jì)算機(jī)”,可以運(yùn)行數(shù)千個(gè)程序中的任何一個(gè)。微控制器是“專用計(jì)算機(jī)”。微控制器有一件事做得很好。還有許多其他共同特征定義了微控制器。如果計(jì)算機(jī)符合這些特征中的大多數(shù),那么您可以將其稱為“微控制器”:
微控制器是”嵌入式“在其他設(shè)備(通常是消費(fèi)產(chǎn)品)內(nèi)部,以便他們可以控制產(chǎn)品的功能或動(dòng)作。因此,微控制器的另一個(gè)名稱是“嵌入式控制器”。
微控制器是 耿耿 到一個(gè)任務(wù)并運(yùn)行一個(gè)特定程序。該程序存儲(chǔ)在 .ROM (只讀內(nèi)存)并且通常不會(huì)更改。
微控制器通常是 低功耗設(shè)備.臺(tái)式計(jì)算機(jī)幾乎總是插入墻上插座,可能會(huì)消耗 50 瓦的電力。電池供電的微控制器可能消耗 50 毫瓦。
微控制器具有 專用輸入設(shè)備 并且經(jīng)常(但并非總是)有一個(gè)小 用于輸出的 LED 或 LCD 顯示屏.微控制器還從其控制的器件獲取輸入,并通過(guò)向器件中的不同組件發(fā)送信號(hào)來(lái)控制器件。 例如,電視內(nèi)部的微控制器從 遙控 并在電視屏幕上顯示輸出。控制器控制通道選擇器, 議長(zhǎng) 系統(tǒng)和對(duì)顯像管電子設(shè)備的某些調(diào)整,例如色調(diào)和亮度。這 發(fā)動(dòng)機(jī)控制器 In 汽車從氧氣和爆震傳感器等傳感器獲取輸入,并控制燃油混合和火花塞正時(shí)等。一個(gè) 微波爐 控制器從鍵盤(pán)獲取輸入,在LCD顯示屏上顯示輸出并控制 中繼 這將打開(kāi)和關(guān)閉微波發(fā)生器。
微控制器通常是 體積小,成本低.選擇組件是為了最小化尺寸并盡可能便宜。
微控制器通常是(但并非總是) 加固型 在某種程度上。 例如,控制汽車發(fā)動(dòng)機(jī)的微控制器必須在普通計(jì)算機(jī)通常無(wú)法處理的極端溫度下工作。阿拉斯加的汽車微控制器必須在-30華氏度(-34攝氏度)的天氣下正常工作,而內(nèi)華達(dá)州的同一微控制器可能在120華氏度(49攝氏度)下工作。當(dāng)您添加由 發(fā)動(dòng)機(jī),發(fā)動(dòng)機(jī)艙內(nèi)的溫度可能高達(dá) 150 或 180 華氏度(65-80 攝氏度)。 另一方面,嵌入在VCR中的微控制器根本沒(méi)有加固。
實(shí)際的 處理器 用于實(shí)現(xiàn)微控制器的用途可能差異很大。例如,顯示的手機(jī) 數(shù)字手機(jī)內(nèi)部 包含一個(gè) Z-80 處理器.Z-80 是 8 位 微處理器 開(kāi)發(fā)于 1970 年代,最初用于當(dāng)時(shí)的家用電腦。Garmin GPS 顯示在 全球定位系統(tǒng)接收器如何 我被告知,工作包含英特爾 80386 的低功耗版本。80386 最初用于臺(tái)式計(jì)算機(jī)。
在許多產(chǎn)品中,例如微波爐,對(duì)CPU的要求相當(dāng)?shù)?,價(jià)格是一個(gè)重要的考慮因素。在這些情況下,制造商轉(zhuǎn)向 專用微控制器芯片 - 最初設(shè)計(jì)為低成本、小型、低功耗的嵌入式CPU的芯片。摩托羅拉 6811 和 英特爾 8051 都是這種芯片的好例子。還有一系列流行的控制器稱為“PIC微控制器”,由一家名為“PIC微控制器”的公司創(chuàng)建。 微片.按照今天的標(biāo)準(zhǔn),這些 CPU 非常簡(jiǎn)約;但是,當(dāng)大量購(gòu)買時(shí),它們非常便宜,并且通常只需一個(gè)芯片即可滿足設(shè)備設(shè)計(jì)人員的需求。
一個(gè)典型的低端微控制器芯片可能有 1,000 個(gè) 字節(jié) 芯片上的 ROM 和 20 字節(jié) RAM,以及 8 個(gè) I/0 引腳。在大量情況下,這些芯片的成本有時(shí)可能只有幾美分。你當(dāng)然永遠(yuǎn)不會(huì)在這樣的芯片上運(yùn)行Microsoft Word——Microsoft Word可能需要30兆字節(jié)的RAM和一個(gè)每秒可以運(yùn)行數(shù)百萬(wàn)條指令的處理器。但是,您也不需要Microsoft Word來(lái)控制微波爐。使用微控制器,您需要完成一項(xiàng)特定的任務(wù),而低成本、低功耗的性能才是最重要的。
使用微控制器

BASIC Stamp 是一種 PIC 微控制器,經(jīng)過(guò)定制,可以理解 BASIC 編程語(yǔ)言。在 電子門(mén)的工作原理,您了解了 7400 系列 TTL 設(shè)備,以及在哪里購(gòu)買它們以及如何組裝它們。您發(fā)現(xiàn),實(shí)現(xiàn)簡(jiǎn)單的設(shè)備通常需要許多門(mén)。例如,在 數(shù)字時(shí)鐘文章,我們?cè)O(shè)計(jì)的時(shí)鐘可能包含 15 或 20 個(gè)芯片。微控制器的一大優(yōu)勢(shì)是軟件 - 您在控制器上編寫(xiě)和執(zhí)行的小程序 - 可以取代許多門(mén)。因此,在本文中,我們將使用微控制器來(lái)創(chuàng)建數(shù)字時(shí)鐘。這將是一個(gè)相當(dāng)昂貴的數(shù)字時(shí)鐘(近200美元!),但在這個(gè)過(guò)程中,你將積累未來(lái)幾年使用微控制器所需的一切。即使您實(shí)際上沒(méi)有創(chuàng)建此數(shù)字時(shí)鐘,也可以通過(guò)閱讀它來(lái)學(xué)到很多東西。
我們?cè)谶@里將使用的微控制器是一種專用設(shè)備,旨在使生活盡可能簡(jiǎn)單。該設(shè)備被稱為“BASIC郵票”,由一家名為 視差.BASIC Stamp 是一種 PIC 微控制器,經(jīng)過(guò)定制,可以理解 BASIC 編程語(yǔ)言。使用BASIC語(yǔ)言使得為控制器創(chuàng)建軟件變得非常容易。微控制器芯片可以在接受9伏的小型載板上購(gòu)買 電池,您可以通過(guò)將其插入臺(tái)式計(jì)算機(jī)上的其中一個(gè)端口來(lái)對(duì)其進(jìn)行編程。任何制造商都不太可能在實(shí)際生產(chǎn)設(shè)備中使用BASIC印章 - 印章昂貴且緩慢(相對(duì)而言)。但是,將郵票用于原型設(shè)計(jì)或一次性演示產(chǎn)品是很常見(jiàn)的,因?yàn)樗鼈兎浅R子谠O(shè)置和使用。
順便說(shuō)一下,它們被稱為“郵票”,因?yàn)樗鼈兒袜]票一樣大。
我們將在本文中使用的特定 BASIC 郵票稱為“BASIC 郵票修訂版 D”。
BASIC Stamp 修訂版 D 是安裝在載板上的 BS-1,帶有 9 伏電池座、電源調(diào)節(jié)器、編程電纜連接、I/O 線的針座引腳和小型原型制作區(qū)域。您可以購(gòu)買BS-1芯片并將其他組件連接到面包板上。修訂版 D 只是讓生活更輕松。
從上表中可以看出,您不會(huì)用 BASIC 印章做任何奇特的事情。75 行限制(256 字節(jié) 電丙胺 可以容納大約 75 行長(zhǎng)的 BASIC 程序)對(duì)于 BS-1 來(lái)說(shuō)是相當(dāng)有限的。但是,您可以創(chuàng)建一些非常整潔的東西,而且Stamp非常小且電池供電的事實(shí)意味著它幾乎可以去任何地方。
對(duì)基本印章進(jìn)行編程
您可以使用 基本編程語(yǔ)言.如果您已經(jīng)了解 BASIC,那么您會(huì)發(fā)現(xiàn)郵票中使用的 BASIC 很簡(jiǎn)單,但有點(diǎn)精簡(jiǎn)。如果你不懂BASIC,但你懂另一種語(yǔ)言,比如 C、帕斯卡或 爪哇島,那么拿起 BASIC 將是微不足道的。如果你以前從未編程過(guò),你可能想去 學(xué)習(xí)編程 首先在臺(tái)式計(jì)算機(jī)上。以下是Stamp BASIC中可用說(shuō)明的快速概述。(有關(guān)完整文檔,請(qǐng)轉(zhuǎn)到視差:基本圖章文檔。
標(biāo)準(zhǔn)基本說(shuō)明:
為。。。下一個(gè) - 正常循環(huán)語(yǔ)句
gosub - 轉(zhuǎn)到子例程
轉(zhuǎn)到 - 轉(zhuǎn)到程序中的標(biāo)簽(例如 - “標(biāo)簽:”)
如果。。。then - 正常 if /then 決定
let - 賦值(可選)
返回 - 從子例程返回
結(jié)束 - 結(jié)束程序并休眠
與 I/O 引腳相關(guān)的說(shuō)明:
按鈕 - 讀取輸入引腳上的按鈕,具有去抖動(dòng)和自動(dòng)重復(fù)功能
高電平 - 將 I/O 引腳設(shè)置為高電平
輸入 - 將 I/O 引腳的方向設(shè)置為輸入
低電平 - 將 I/O 引腳設(shè)置為低電平
輸出 - 設(shè)置 I/O 引腳到輸出的方向
電位器 - 讀取 I/O 引腳上的電位計(jì)
脈沖蛋白 - 讀取輸入引腳上輸入的脈沖的持續(xù)時(shí)間
脈沖輸出 - 在輸出引腳上發(fā)送特定持續(xù)時(shí)間的脈沖
PWM - 在輸出引腳上執(zhí)行脈沖寬度調(diào)制
反轉(zhuǎn) - 反轉(zhuǎn) I/O 引腳的方向
Serin - 讀取輸入引腳上的串行數(shù)據(jù)
Serout - 在輸出引腳上寫(xiě)入串行數(shù)據(jù)
聲音 - 將特定頻率的聲音發(fā)送到輸出引腳
切換 - 切換輸出引腳上的位
特定于基本印章的說(shuō)明:
分支 - 讀取分支表
調(diào)試 - 將調(diào)試字符串發(fā)送到臺(tái)式計(jì)算機(jī)上的控制臺(tái)
EEPROM - 將程序下載到 EEPROM
向下查看 - 返回列表中值的索引
查找 - 使用索引進(jìn)行數(shù)組查找
小睡 - 短時(shí)間睡眠
暫停 - 指定時(shí)間的延遲
隨機(jī) - 選擇一個(gè)隨機(jī)數(shù)
讀取 - 從 EEPROM 讀取值
睡眠 - 在指定時(shí)間內(nèi)關(guān)閉電源
寫(xiě)入 - 將數(shù)據(jù)寫(xiě)入 EEPROM
操作:
+ - 加法
--減法
* - 乘法(低字)
** - 乘法(高詞)
/-劃分
-勇氣
max - 返回最多 2 個(gè)值
min - 返回最少 2 個(gè)值
&- 和
|-或
^-異或
&/ - NAND
|/ - 無(wú)
^/ - XNOR
If 語(yǔ)句邏輯:
=
<>
<
<=
>
>=
和
或
變量
BS-1 中的所有變量都有預(yù)定義的名稱(您可以用自己的名稱替換)。請(qǐng)記住,只有 14 字節(jié)的 RAM 可用,因此變量非常寶貴。以下是標(biāo)準(zhǔn)名稱:
W0, W1, W2...W6 - 16 位字變量
B0, B1, B2...b13 - 8 位字節(jié)變量
位0, 位 1, 位 2...bit15 - 1 位位變量
因?yàn)橹挥?14 個(gè)字節(jié)的內(nèi)存,所以 w0 和 b0/b1 在 RAM 中的位置相同,w1 和 b2/b3 是相同的,依此類推。此外,bit0 到 bit15 駐留在 w0 中(因此 b0/b1 也是如此)。
I/O 引腳
您可以看到BS-1中的14條指令與I / O引腳有關(guān)。之所以強(qiáng)調(diào)這一點(diǎn),是因?yàn)镮/O引腳是BASIC印章與世界對(duì)話的唯一途徑。BS-1 上有 8 個(gè)引腳(編號(hào)為 0 到 7),BS-2 上有 16 個(gè)引腳(編號(hào)為 0 到 15)。
引腳是 雙向,這意味著您可以讀取它們的輸入值或向其發(fā)送輸出值。將值發(fā)送到引腳的最簡(jiǎn)單方法是使用 高 或 低 功能。語(yǔ)句高電平 3 在引腳 3 上發(fā)送 1 (+5 伏)。低電平發(fā)送 0(接地)。引腳 3 在這里是任意選擇的 - 您可以在從 0 到 7 的任何引腳上發(fā)送位。
有許多有趣的I/O引腳指令。例如,POT讀取電位計(jì)(可變電阻器)上的設(shè)置,如果您用 電容器 正如 POT 指令所期望的那樣。PWM指令發(fā)出脈寬調(diào)制信號(hào)。像這樣的說(shuō)明可以使將控件和電機(jī)連接到印章變得更加容易。請(qǐng)參閱的 文檔 了解詳細(xì)信息的語(yǔ)言。此外,像斯科特·愛(ài)德華這樣的書(shū) 編程和自定義 BASIC 印章計(jì)算機(jī) 由于它包含的示例項(xiàng)目,因此非常有用。
玩基本圖章

典型 BASIC 程序編輯器的屏幕截圖如果您想玩 BASIC 印章,很容易上手。您需要的是一臺(tái)臺(tái)式計(jì)算機(jī)和一臺(tái) 基本印章入門(mén)套件.入門(mén)套件包括 Stamp、編程電纜和您在臺(tái)式計(jì)算機(jī)上運(yùn)行的應(yīng)用程序,用于將 BASIC 程序下載到 Stamp 中。
您可以從以下位置獲得入門(mén)套件 視差 (制造商)或來(lái)自供應(yīng)商,如 賈梅科 (誰(shuí)應(yīng)該熟悉 電子門(mén) 和 數(shù)字時(shí)鐘 文章)。您可以從視差訂購(gòu) BASIC Stamp D 入門(mén)套件(部件號(hào) 27202),或者從 Jameco 訂購(gòu)零件編號(hào)140089。您將收到印章(如下圖所示)、編程電纜、軟件和說(shuō)明。該套件的價(jià)格為兩家供應(yīng)商的 79 美元。偶爾,Parallax會(huì)推出一個(gè)名為“We've Bagged the Basics”的特別節(jié)目,其中還包括Scott Edward的 編程和自定義 BASIC 印章計(jì)算機(jī)].
連接郵票很容易。您將其連接到 并行端口 的電腦。然后,您運(yùn)行DOS應(yīng)用程序來(lái)編輯您的BASIC程序并將其下載到圖章。
要在此編輯器中運(yùn)行程序,請(qǐng)單擊 ALT-R。編輯器應(yīng)用程序檢查 BASIC 程序,然后將其通過(guò)電線發(fā)送到圖章上的 EEPROM。然后,圖章執(zhí)行程序。在這種情況下,程序在I/O引腳3上產(chǎn)生方波。如果將邏輯探頭或 LED 連接到引腳 3(請(qǐng)參閱 電子門(mén)文章 有關(guān)詳細(xì)信息),您將看到 LED 閃爍每秒打開(kāi)和關(guān)閉兩次(由于暫停命令,它每 250 毫秒更改一次狀態(tài))。該程序?qū)⑹褂?伏電池運(yùn)行數(shù)周。您可以通過(guò)縮短 LED 亮起的時(shí)間(可能亮起 50 毫秒,熄滅 450 毫秒)以及使用 NAP 指令而不是暫停來(lái)節(jié)省電量。
創(chuàng)建一個(gè)非常昂貴的數(shù)字時(shí)鐘

花費(fèi) 79 美元來(lái)刷新一個(gè) 發(fā)光二極管 對(duì)你來(lái)說(shuō)可能看起來(lái)很奢 侈。您可能想做的是用您的 BASIC 印章創(chuàng)建一些有用的東西。通過(guò)多花大約 100 美元,您可以創(chuàng)建一個(gè)非常漂亮的數(shù)字時(shí)鐘!這似乎 非常 奢 侈,直到您意識(shí)到這些零件可以在您以后可能想要構(gòu)建的各種其他項(xiàng)目中重復(fù)使用。
假設(shè)我們想使用 BASIC 標(biāo)記上的 I/O 引腳來(lái)顯示數(shù)值。在 數(shù)字時(shí)鐘文章,我們看到了如何使用 7447 芯片連接到 7 段 LED 顯示屏。7447 與 BASIC 印章配合使用同樣出色。您可以將四個(gè) I/O 引腳直接連接到 7447,并輕松顯示 0 到 9 之間的數(shù)字。由于 BS-1 Stamp 有 8 個(gè) I/O 引腳,因此像這樣直接驅(qū)動(dòng)兩架 7447 很容易。
對(duì)于時(shí)鐘,我們至少需要四位數(shù)字。要用八個(gè) I/O 引腳驅(qū)動(dòng)四個(gè) 7447,我們必須稍微更有創(chuàng)意。下圖顯示了一種方法:
在此圖中,圖章中的 8 條 I/O 線從左側(cè)進(jìn)入。這種方法使用四條線路連接到所有四條 7447。然后,Stamp 中的其他四條線按順序激活 7447(芯片上的“E”表示“啟用”——在 7447 上,這將是引腳 5 上的消隱輸入)。為了使這種安排起作用,Stamp中的BASIC程序?qū)⑤敵鏊臈l數(shù)據(jù)線上的第一個(gè)數(shù)字,并通過(guò)將其E引腳與第一條控制線切換來(lái)激活第一個(gè)7447。然后它會(huì)發(fā)送第二個(gè)數(shù)字的值并激活第二個(gè) 7447,像這樣重復(fù)對(duì)所有四個(gè) 7447 進(jìn)行排序。通過(guò)稍微不同的接線方式,您實(shí)際上可以只用一個(gè) 7447 來(lái)做到這一點(diǎn)。通過(guò)使用 74154 解復(fù)用器芯片和一些驅(qū)動(dòng)程序,您可以使用此方法驅(qū)動(dòng)多達(dá) 16 位數(shù)字。
事實(shí)上,這是控制LED顯示屏的標(biāo)準(zhǔn)方法。例如,如果您有一個(gè)舊的 LED 計(jì)算器,請(qǐng)?jiān)谟^看顯示屏?xí)r將其打開(kāi)并搖晃。您實(shí)際上將能夠看到一次只有一個(gè)數(shù)字被照亮。該方法稱為 多路復(fù)用 顯示。
雖然這種方法適用于時(shí)鐘和計(jì)算器,但它有兩個(gè)重要問(wèn)題:
LED 消耗大量功率。
7 段 LED 只能顯示數(shù)值。
另一種方法是使用 液晶屏.事實(shí)證明,LCD廣泛可用,可以很容易地掛在郵票上。例如,下面顯示的兩行乘 16 個(gè)字符的字母數(shù)字顯示可從 賈梅科 (部件號(hào) 150990)和 視差 (部件號(hào) 27910)。此處顯示了安裝在試驗(yàn)板上的典型顯示器,以便于接口:

這種LCD有幾個(gè)優(yōu)點(diǎn):
顯示器可由單個(gè) I/O 引腳驅(qū)動(dòng)。顯示屏包含允許圖章與其通信的邏輯 串行,因此只需要一個(gè) I/O 引腳。此外,Stamp BASIC中的SEROUT命令可以輕松處理串行通信,因此與顯示器的通信很簡(jiǎn)單。
LCD可以顯示字母數(shù)字文本:字母,數(shù)字甚至自定義字符。
LCD消耗的功率非常小 - 只有3毫安。
唯一的問(wèn)題是其中一個(gè)顯示器售價(jià)59美元。顯然,您不會(huì)將其中一個(gè)嵌入到 烤面包機(jī)烤箱.但是,如果您正在設(shè)計(jì)烤面包機(jī)烤箱,您可能會(huì)使用這些顯示器之一進(jìn)行原型設(shè)計(jì),然后創(chuàng)建自定義芯片和軟件以驅(qū)動(dòng)最終產(chǎn)品中更便宜的LCD。
要驅(qū)動(dòng)這樣的顯示器,您只需為其提供 +5 伏電壓和接地(Stamp 均由 9 伏電池供電),然后將 Stamp 中的一個(gè) I/O 引腳連接到顯示器的輸入線。我發(fā)現(xiàn)將 Stamp 的 I/O 引腳連接到 LCD 等設(shè)備的最簡(jiǎn)單方法是使用繞線工具(賈梅科 部件號(hào) 34577)和 30 號(hào)繞線(Jameco 部件號(hào) 22541 是典型值)。這樣,不涉及焊接,連接緊湊可靠。
以下 BASIC 程序?qū)⑹?BASIC 標(biāo)記的行為類似于時(shí)鐘,并在 LCD 上輸出時(shí)間(假設(shè) LCD 連接到標(biāo)記上的 I/O 引腳 0):
暫停 1000'等待 LCD 顯示屏啟動(dòng)
Serout 0, N2400, (254, 1) '清除顯示屏
Serout 0, n2400, (“time:”) 'Paint “time:” 在顯示屏上
'加載程序前預(yù)設(shè)
b0 = 0 '秒
b1 = 27 分鐘
b2 = 6 '小時(shí)
再:
b0 = b0 + 1'增量秒
如果 B0 < 60,則分鐘
b0 = 0'如果秒=60
b1 = b1 + 1 ' 然后遞增分鐘數(shù)
紀(jì)要:
如果 B1 < 60 則小時(shí)數(shù)
b1 = 0'如果分鐘=60
b2 = b2 + 1 ' 然后遞增小時(shí)數(shù)
小時(shí):
如果 B2 < 13,則顯示
b2 = 1'如果小時(shí)數(shù)=13 重置為 1
顯示:
Serout 0, N2400, (254, 135) '顯示位置光標(biāo),
'然后顯示時(shí)間
Serout 0, N2400, (#b2, “:”, #b1, “:”, #b0, “ ”)
暫停 950 '暫停 950 毫秒
再次轉(zhuǎn)到“重復(fù)”
在此程序中,SEROUT 命令將數(shù)據(jù)發(fā)送到 LCD。序列 (254, 1) 清除 LCD(254 是轉(zhuǎn)義字符,1 是清除屏幕的命令)。序列 (254, 135) 定位光標(biāo)。另外兩個(gè) SEROUT 命令只是將文本字符串發(fā)送到顯示器。
這種方法將創(chuàng)建一個(gè)相當(dāng)準(zhǔn)確的時(shí)鐘。通過(guò)調(diào)整 PAUSE 語(yǔ)句,您可以將準(zhǔn)確性提高到每天幾秒鐘內(nèi)。顯然,在實(shí)際時(shí)鐘中,您希望連接一兩個(gè)按鈕以使其更容易設(shè)置-在此程序中,您在將程序下載到Stamp之前預(yù)設(shè)了時(shí)間。

懷表B模塊
雖然這種方法簡(jiǎn)單且有效,但它并不是非常準(zhǔn)確。如果您想要更好的精度,一個(gè)好方法是連接 實(shí)時(shí)時(shí)鐘芯片 直到您的印章。然后,每隔一秒左右,您就可以從芯片中讀取時(shí)間并顯示它。實(shí)時(shí)時(shí)鐘芯片使用 石英晶體 以提供出色的準(zhǔn)確性。時(shí)鐘芯片通常還包含日期信息和句柄 閏年 自動(dòng)更正。
將實(shí)時(shí)時(shí)鐘連接到圖章的一種簡(jiǎn)單方法是使用稱為 懷表 B.
懷表B可從兩者購(gòu)買 賈梅科 (部件號(hào) 145630)和 視差 (部件號(hào) 27962)。該器件大約四分之一那么大,包含時(shí)鐘芯片、晶體和串行接口,因此只需要一個(gè) I/O 引腳即可與之通信。這個(gè)組件的成本約為30美元 - 同樣,不是你想嵌入烤面包機(jī)烤箱的東西,但在構(gòu)建原型時(shí)很容易玩。
構(gòu)建數(shù)字溫度計(jì)

現(xiàn)在您對(duì)印章和LCD有了一點(diǎn)了解,我們可以添加另一個(gè)組件并創(chuàng)建一個(gè)數(shù)字溫度計(jì)。為了創(chuàng)建溫度計(jì),我們將使用一種稱為DS1620的芯片。該芯片包含:
一個(gè) 溫度傳感裝置
一 模數(shù) (A/D) 轉(zhuǎn)換器 用于溫度傳感裝置
一個(gè) 移位寄存器 從 A/D 轉(zhuǎn)換器讀取數(shù)據(jù)
一點(diǎn)兒 電丙胺 (電可擦除可編程只讀存儲(chǔ)器)以記住設(shè)置
DS1620有兩種模式:一種模式用作獨(dú)立的恒溫器芯片,另一種模式將其連接到計(jì)算機(jī)并用作 溫度計(jì).EEPROM記住恒溫器的電流模式和設(shè)定溫度。
將DS1620連接到印章非常容易。DS1620采用8引腳芯片。從印章向DS1620引腳8提供+5伏電壓。DS1620引腳4的電源接地。然后使用印章中的三個(gè)I/O引腳驅(qū)動(dòng)DS1620上的三個(gè)引腳:
DS1620上的引腳1是數(shù)據(jù)引腳。在此引腳上讀取和寫(xiě)入數(shù)據(jù)位。
DS1620上的引腳2是時(shí)鐘引腳。使用此引腳對(duì)移位寄存器中的數(shù)據(jù)進(jìn)行時(shí)鐘輸入和輸出。
DS1620上的引腳3為復(fù)位/選擇引腳。將引腳 3 設(shè)置為高以選擇芯片并與之通信。
對(duì)于此示例代碼,假定:
數(shù)據(jù)引腳轉(zhuǎn)到標(biāo)記上的 I/O 引腳 2。
時(shí)鐘引腳轉(zhuǎn)到印章上的 I/O 引腳 1。
復(fù)位/選擇引腳轉(zhuǎn)到標(biāo)記上的 I/O 引腳 0。
完成的接線如下所示:
您可以從以下任一位置獲得DS1620 賈梅科 (部件號(hào) 146456) 或 視差 (部件號(hào) 27917)在“應(yīng)用套件”中,其中包括芯片、電容器、一些良好的文檔和示例代碼。或者您可以從以下位置自行購(gòu)買芯片 賈梅科 (部件號(hào) 114382)。我建議在第一次嘗試使用DS1620時(shí)購(gòu)買應(yīng)用套件,因?yàn)槲臋n非常有用。
您可以將DS1620組裝在Stamp載板的原型區(qū)域或單獨(dú)的試驗(yàn)板上。組裝完成后,將LCD顯示器掛接到印章的I / O引腳3,然后加載并運(yùn)行以下程序:
符號(hào) RST = 0 ' 1620 上的選擇/重置線
符號(hào) CLK = 1 ' 時(shí)鐘線,用于 1620 上的移位寄存器
符號(hào) DQ = 2 ' 數(shù)據(jù)線 1620
符號(hào) DQ_PIN = DQ 的引腳 2 ' 引腳表示
符號(hào) LCD = 3' LCD 數(shù)據(jù)線
開(kāi)始:
低 RST ' 取消選擇 1620,除非與之交談
1620 上的高 CLK ' 時(shí)鐘引腳應(yīng)默認(rèn)為高電平
暫停1000' 等待溫度計(jì)和液晶屏啟動(dòng)
設(shè)置:
高 RST ' 選擇 1620
b0 = $0C ' $0c 是 1620 命令字節(jié)
' 說(shuō)“寫(xiě)入配置”
gosub shift_out ' 發(fā)送到 1620
b0 = %10 ' %10 是 1620 命令字節(jié)
' 設(shè)置溫度計(jì)模式
gosub shift_out ' 發(fā)送到 1620
低 RST ' 取消選擇 1620
暫停 50' 延遲 50ms 對(duì)于 EEPROM
start_convert:
b0 = $EE ' $EE 是 1620 命令字節(jié)
' 開(kāi)始轉(zhuǎn)換
高 RST ' 選擇 1620
gosub shift_out ' 發(fā)送到 1620
低 RST ' 取消選擇 1620
' 這是主循環(huán)
' - 每秒讀取并顯示溫度
main_loop:
高 RST ' 選擇 1620
b0 = $AA ' $AA 是 1620 命令字節(jié)
' 用于讀取溫度
gosub shift_out ' 發(fā)送到 1620
gosub shift_in ' 讀取溫度
'從 1620 年
低RST'取消選擇DS1620。
gosub display'以攝氏度為單位顯示溫度
暫停 1000 ' 等待一秒鐘
轉(zhuǎn)到main_loop
' shift_out子例程發(fā)送任何內(nèi)容
' 1620 的 B0 字節(jié)
shift_out:
輸出 DQ ' 將 DQ 引腳設(shè)置為
' 輸出模式
對(duì)于 b2 = 1 到 8
低 CLK ' 準(zhǔn)備為位計(jì)時(shí)
'進(jìn)入1620年
DQ_PIN = bit0 ' 發(fā)送數(shù)據(jù)位
高CLK'鎖存數(shù)據(jù)位進(jìn)入1620
b0 = b0/2 ' 向右移動(dòng)所有位
' 朝向位 0
下一個(gè)
返回
' shift_in子例程得到一個(gè) 9 位
' 溫度從 1620
shift_in:
輸入 DQ ' 將 DQ 引腳設(shè)置為
' 輸入模式
w0 = 0 ' 清除 w0
對(duì)于 B5 = 1 到 9
w0 = w0/2 ' 向右移位輸入。
低 CLK ' 詢問(wèn) 1620 以獲取下一個(gè)位
bit8 = DQ_PIN ' 讀取位
高電平 CLK ' 切換時(shí)鐘引腳
下一個(gè)
返回
' 以攝氏度為單位顯示溫度
顯示:
如果 bit8 = 0,則 pos ' 如果 bit8=1
' 則溫度為負(fù)數(shù)
b0 = b0 &/ b0 ' 通過(guò) NAND 反轉(zhuǎn) b0
' 與自身
b0 = b0 + 1
位置:
液晶屏,N2400,(254,1)' 清除液晶屏
鋸齒 LCD, n2400, (“溫度 = ”) ' 顯示 “溫度=”
' 在顯示屏上
bit9 = bit0 ' 保存半度
b0 = b0 / 2 ' 轉(zhuǎn)換為度數(shù)
如果 bit8 = 1,則 neg ' 查看溫度是否為負(fù)數(shù)
顯示器液晶顯示器,N2400,(#b0)顯示正溫度
轉(zhuǎn)到一半
負(fù):
鋸齒液晶屏,n2400,(“-”,#b0)' 顯示負(fù)溫度
半:
如果 bit9 = 0,則偶數(shù)
鋸齒液晶屏,n2400,(“.5 C”)' 顯示半度
轉(zhuǎn)到完成
甚至:
鋸齒液晶屏,n2400,(“.0 C”)' 顯示半度
做:
返回
如果運(yùn)行此程序,您會(huì)發(fā)現(xiàn)它以半度的精度顯示攝氏溫度。
DS1620測(cè)量溫度,單位為攝氏半度。它以 9 位 2s 補(bǔ)碼數(shù)返回溫度,范圍為 -110 至 250 F(-55 至 125 C)。將收到的數(shù)字除以 2 得到實(shí)際溫度。 2s補(bǔ)碼二進(jìn)制數(shù) 是一種方便的表示方式 負(fù)值.以下列表顯示了 4 位 2s 補(bǔ)碼編號(hào)的值:
0111 : 7
0110 : 6
0101 : 5
0100 : 4
0011 : 3
0010 : 2
0001 : 1
0000 : 0
1111 : -1
1110 : -2
1101 : -3
1100 : -4
1011 : -5
1010 : -6
1001 : -7
1000 : -8
您可以看到,2s 補(bǔ)碼數(shù)中的 4 位表示值 -8 到 7,而不是 4 位表示 0 到 15 之間的值。您可以查看最左側(cè)的位以確定該數(shù)字是負(fù)數(shù)還是正數(shù)。如果數(shù)字為負(fù)數(shù),則可以反轉(zhuǎn)位并加 1 以獲得數(shù)字的正表示。
以下是此處顯示的數(shù)字溫度計(jì)程序的情況:
它使用 象征 關(guān)鍵字來(lái)設(shè)置幾個(gè)常量,使程序稍微更易于閱讀(并且還使您可以輕松地將芯片移動(dòng)到印章上的不同I / O引腳)。
它將DS1620上的CLK和RST引腳設(shè)置為預(yù)期值。
它向DS1620上的EEPROM寫(xiě)入一個(gè)命令字節(jié),告訴芯片在“溫度計(jì)模式”下工作。 由于該模式存儲(chǔ)在EEPROM中,因此您只需執(zhí)行一次,因此從技術(shù)上講,您可以在運(yùn)行程序一次后將這部分代碼從程序中取出(以節(jié)省程序空間)。
程序發(fā)送命令 $EE (“$”表示“十六進(jìn)制數(shù)” - $EE十進(jìn)制為238)告訴溫度計(jì)啟動(dòng)其轉(zhuǎn)換過(guò)程。
然后程序進(jìn)入 圈.每秒向DS1620發(fā)送一條命令,告訴DS1620返回當(dāng)前溫度,然后將DS1620返回的9位值讀取到w0變量中。通過(guò)切換DS1620上的CLK線,Stamp一次發(fā)送和接收1位數(shù)據(jù)。請(qǐng)記住,w0(16位)變量覆蓋b0/b1(8位)變量,b0/b1(8位)變量覆蓋bit0/bit1/.../bit15(1位)變量,因此,當(dāng)您將DS1620中的一個(gè)位插入第8位并將w0除以2時(shí),您所做的是將每個(gè)位向右移動(dòng),以將DS1620的9位溫度存儲(chǔ)到w0中。將溫度保存為 w0 后,顯示子例程將確定該數(shù)字是正數(shù)還是負(fù)數(shù),并將其作為攝氏度溫度在 LCD 上適當(dāng)?shù)仫@示。從攝氏度到華氏度的轉(zhuǎn)換是:
dF = dC * 9/5 + 32
在這一點(diǎn)上,我們已經(jīng)成功地創(chuàng)造了一種極其昂貴的溫度計(jì)。你會(huì)用它做什么?這里有一個(gè)想法。假設(shè)您在一家制藥公司工作,并且您正在全國(guó)各地運(yùn)送昂貴的藥物,這些藥物必須始終保持在一定溫度下,否則藥物會(huì)變質(zhì)。您可以使用圖章做什么是創(chuàng)建一個(gè) 數(shù)據(jù)記錄溫度計(jì).雙 賈梅科 (部件號(hào) 143811) 和 視差 (部件號(hào) 27960) 銷售一種名為“RAM 包模塊”的設(shè)備。 它包含一個(gè)帶串行接口的低功耗 8 KB(或可選的 32 KB)RAM 芯片。您可以將此組件(或類似內(nèi)容)添加到 Stamp 中,并編寫(xiě)每分鐘將溫度讀數(shù)保存到 RAM 的代碼。然后,您可以將郵票放入毒品運(yùn)輸中,并在旅行的另一端取回郵票。RAM模塊將包含整個(gè)行程的溫度歷史記錄,您將知道藥物是否解凍。
有各種像這樣的整潔、有用的設(shè)備,現(xiàn)在你知道微控制器是如何工作的,你可以用 Stamp 構(gòu)建!
責(zé)任編輯:David
【免責(zé)聲明】
1、本文內(nèi)容、數(shù)據(jù)、圖表等來(lái)源于網(wǎng)絡(luò)引用或其他公開(kāi)資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對(duì)本文的引用持有異議,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時(shí)處理。
2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。
3、本文內(nèi)容僅代表作者觀點(diǎn),拍明芯城不對(duì)內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨(dú)立判斷做出的,請(qǐng)讀者明確相關(guān)結(jié)果。
4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。
拍明芯城擁有對(duì)此聲明的最終解釋權(quán)。