0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用LED或AVR微控制器讀取二進(jìn)制手輪或指輪開(kāi)關(guān)上的數(shù)字

454398 ? 來(lái)源:wv ? 2019-10-08 09:35 ? 次閱讀

步驟1:零件列表

為了便于指導(dǎo),我正在使用以下零件:

您可能需要這些

二進(jìn)制手輪或指輪開(kāi)關(guān)。這些可以在在線(xiàn)的主要電子商店購(gòu)買(mǎi),或者如果您在科羅拉多州,請(qǐng)查看Boulder的J.B. Saunders。他們便宜地買(mǎi)了它們!

無(wú)焊面包板

烙鐵,焊料,連接線(xiàn)(我使用24規(guī)格絞線(xiàn)是因?yàn)樗浅R讖澢?/p>

AVR微控制器

我正在使用ATmega328p,它位于Modern Device裸露的主板上

我正在使用USB BUB對(duì)AVR進(jìn)行編程

可選

四個(gè)LED(用于說(shuō)明編碼)

四個(gè)電阻(用于LED。我使用了我已經(jīng)在板凳上擺了200歐姆(我很懶惰 2 ))

現(xiàn)代設(shè)備]

如果您要使用四個(gè)二極管關(guān)于將反向極性插入MCU引腳的偏執(zhí)狂

一些用于編寫(xiě)或編譯固件的東西

我使用AVR Studio 4.16 SP1,但是您也可以使用:

Windows

WinAVR進(jìn)行Windows AVR開(kāi)發(fā)

FreeBSD/Linux(其他* NIX變體)

pkg_add -r avr-gcc -or- cd /usr/ports/devel/avr-gcc/ && make install clean pkg_add -r avr-libc pkg_add -r avr-gdb

對(duì)于Linux,您將安裝相同的東西,但使用特定的粒子包管理實(shí)用程序。

Mac

我在這里沒(méi)有經(jīng)驗(yàn),所以我建議Ladyada的教程為此。

您可能還希望使用其他實(shí)用程序,例如Eclipse,但這應(yīng)該是一個(gè)好的開(kāi)始。

現(xiàn)在您已經(jīng)知道需要什么,我們將其組合在一起,但是要做到這一點(diǎn),您需要知道二進(jìn)制開(kāi)關(guān)的工作方式。..。.所以讓我們繼續(xù)下一步吧!

第2步:二進(jìn)制開(kāi)關(guān)和真實(shí)表

正如我在簡(jiǎn)介中簡(jiǎn)要提到的,二進(jìn)制開(kāi)關(guān)是對(duì)其進(jìn)行編碼的開(kāi)關(guān)狀態(tài)為二進(jìn)制。二進(jìn)制是一種使用兩個(gè)離散狀態(tài)(一個(gè)和零)來(lái)表示其他符號(hào)的編碼方法。每個(gè)一個(gè)或零稱(chēng)為一個(gè)“位”,這些位通常串在一起分成八組,稱(chēng)為一個(gè)“字節(jié)”。并非字節(jié)中的所有位都必須用于編碼,但是ASCII字符集是僅使用7位的顯著示例(存在擴(kuò)展版本)。此指令中的按鈕開(kāi)關(guān)的范圍是0到15,并使用四位對(duì)表盤(pán)上的數(shù)字進(jìn)行編碼。

簡(jiǎn)短的二進(jìn)制算術(shù)

以了解四位如何表示16種不同的數(shù)字?jǐn)?shù)字,我們必須稍微了解一下二進(jìn)制編碼對(duì)該開(kāi)關(guān)的作用(以及一般情況)。

從第一張圖片中,您應(yīng)該能夠看到實(shí)際上從鍵盤(pán)背面有五個(gè)打擊墊開(kāi)關(guān)。這些分別標(biāo)記為1、2、4、8和C。C被視為公用端子。也就是說(shuō),它是開(kāi)關(guān)電路的一部分,始終與開(kāi)關(guān)中打開(kāi)的任何開(kāi)關(guān)相連。在我的設(shè)置中,我將“ C”墊接地,并且任何電流都將從斷開(kāi)的開(kāi)關(guān)流出,并從C端子流出并向下流至地面。因此,“ C”盤(pán)不會(huì)對(duì)表盤(pán)正面的數(shù)字進(jìn)行編碼時(shí)所用的位。這是指輪開(kāi)關(guān)內(nèi)部開(kāi)關(guān)電路的電流吸收器。

1、2、4和8填充對(duì)數(shù)字的位進(jìn)行編碼。以二進(jìn)制形式,字節(jié)中1和0的位置和數(shù)字用于確定字符集中單個(gè)單元的身份,或者出于我們的目的,確定在表盤(pán)上選擇的數(shù)字。因?yàn)槲覀兊募现杏兴膫€(gè)位,所以一和零的唯一組合的最大數(shù)量為2 4 =16。記住這一點(diǎn)的最佳方法是增加可能性的數(shù)量(這里有兩個(gè)可能性:1或0)乘以位數(shù)(此處我們有4位:填充1、2、4和8)。如果我們要在四個(gè)位置寫(xiě)出1和0的所有唯一組合,則看起來(lái)像這樣:

No 1&aposs One 1 Two 1&aposs Three 1&aposs Four 1&aposs ------ ----- ------- --------- -------- 0000 0001 0011 0111 1111 0010 0101 1011 0100 1001 1101 1000 0110 1110 1010 1100

所以我們有16種獨(dú)特的可能性來(lái)安排0和1,并且方便地,此開(kāi)關(guān)的計(jì)數(shù)器從0到15。當(dāng)一個(gè)計(jì)劃組合在一起時(shí),這很好。但是您可能想知道,是否存在一種模式來(lái)說(shuō)明這四個(gè)位的排列方式(順便稱(chēng)為Nibble)如何代表數(shù)字。我很高興你問(wèn)。

還記得墊的1、2、4和8嗎?那不是營(yíng)銷(xiāo)人員反復(fù)無(wú)常的標(biāo)簽。讓我們?cè)俅慰纯次覀兊臄?shù)字模式。每個(gè)位位置都有一個(gè)“位置”,可以將其視為“ 2的冪”位置讀取,其中最低有效位在第0位開(kāi)始。也就是說(shuō),我們使用從0開(kāi)始的索引,并從零開(kāi)始計(jì)數(shù)到一,再到二,以此類(lèi)推,而不是在以1開(kāi)頭的白話(huà)中計(jì)數(shù)。因此,2 0 = 1,2 1 = 2,2 2 = 4,依此類(lèi)推。從右到左排列此字符,它的四位模式0101看起來(lái)像這樣:

Place --》 8 4 2 1 0 1 0 1

要確定“ 0101”代表的數(shù)字,我們要做的就是找到每個(gè)里面有1的地方,加上兩個(gè)數(shù)字的冪。在我們的示例中,第1和第4位有一個(gè)。加1 + 4,得到5,因此,二進(jìn)制數(shù)字0101代表十進(jìn)制數(shù)字5。這不令人興奮嗎?讓我們嘗試另一個(gè),即使我們的交換機(jī)只有四個(gè)位,這個(gè)也要完整的8位。這是一個(gè)好習(xí)慣,下次您會(huì)印象深刻。

01101110代表的十進(jìn)制數(shù)字是多少?在這里是它們的位置:

128 64 32 16 8 4 2 1 0 1 1 0 1 1 1 0查找具有1的位置,并將這些位置號(hào)加在一起。那將是64 + 32 + 8 + 4 + 2 =110。非常容易,是吧?現(xiàn)在知道了這一點(diǎn),我們就可以采用我們的4位開(kāi)關(guān),并形成一個(gè)相對(duì)于小數(shù)點(diǎn)為1的引腳號(hào)矩陣(數(shù)字邏輯1的電壓高于邏輯零的電壓,在我們的情況下分別為5V和0V)。他們代表的數(shù)字。參見(jiàn)下面的第二張圖片,我制作了一個(gè)表格來(lái)表示開(kāi)關(guān)上的打擊墊,根據(jù)撥盤(pán)前面選擇的數(shù)字,該打擊墊將為邏輯1?,F(xiàn)在我們可以開(kāi)始構(gòu)建東西了。請(qǐng)跟隨我進(jìn)入下一步!

步驟3:焊接開(kāi)關(guān)和測(cè)試二進(jìn)制邏輯

是時(shí)候?qū)⒑噶戏诺胶副P(pán)上了,開(kāi)始制造東西了。

拿起連接線(xiàn),剝?nèi)啥思s半厘米。只要使用不會(huì)混淆電線(xiàn)的顏色,無(wú)論使用哪種顏色或根本不使用其他顏色都沒(méi)有關(guān)系。當(dāng)您發(fā)現(xiàn)填充板“ 2”代替填充板“ 4”時(shí),您將嘗試調(diào)試二進(jìn)制邏輯錯(cuò)誤。

現(xiàn)在是驗(yàn)證或說(shuō)服自己二進(jìn)制邏輯正確的好時(shí)機(jī)。為此,我?guī)Я怂膫€(gè)LED和四個(gè)220歐姆電阻,并將它們放在面包板上。您可以根據(jù)您的LED顏色和正向電壓要求使用180歐姆甚至1k電阻。對(duì)于您的電源,您可以使用5V穩(wěn)壓電源(在其中一張照片中,這是我的面包板上懸掛的小電路),也可以通過(guò)Arduino,BBB等為該板供電。選擇是您自己選擇。

將C線(xiàn)連接到5V(請(qǐng)注意這一點(diǎn),因?yàn)樵谶B接到微控制器時(shí)會(huì)做相反的事情)。

連接線(xiàn)1、2、4 8個(gè)至自己的電阻,其后接LED的正極。如果您不確定,那是長(zhǎng)腿。然后將LED的另一側(cè)接地。

該電路應(yīng)類(lèi)似于我下面的電路。如果您真的不確定,請(qǐng)?jiān)趫D片中包含原理圖以顯示LED測(cè)試電路。還請(qǐng)注意,我在圖片中從左到右顯示了二進(jìn)制文件。只要電線(xiàn)連接到正確的LED,就可以將電線(xiàn)從左到右或從右到左連接到測(cè)試電路中,并且可以將它們與真值表進(jìn)行比較以確認(rèn)邏輯,這無(wú)關(guān)緊要。

一旦您確信該Universe可以按照您可以連接微控制器的方式正常運(yùn)行。

第4步:連接微控制器并加載代碼

選擇MCU上空閑的四個(gè)端口并將其配置為輸入。我在設(shè)置中選擇了PD [2..5],但是選擇哪一個(gè)都沒(méi)關(guān)系,如果您打算使用U(S)ART通信,請(qǐng)謹(jǐn)慎使用PD [0..1],因?yàn)檫@些引腳是通常為此保留。我很確定Arduino和其他克隆也將針腳0和1映射到其USB FTDI端口。作為一種可選措施,您可以選擇安裝二極管(在右側(cè)條紋下方的圖片中)。有些主板具有保護(hù)功能,但是如果您在主板上玩裸AVR芯片,那可能不是個(gè)壞習(xí)慣。在聞到足夠多的晶體管燒毀之后,您便可以執(zhí)行這些操作。

建立與輸入引腳的連接后,只需簡(jiǎn)單地讀取引腳并處理數(shù)據(jù)即可。您可以讀取引腳和發(fā)光二極管的指示燈,用于處理串行通信的設(shè)置中斷,或者如果將多個(gè)開(kāi)關(guān)串在一起,則可以將它們用作電子鎖,在授予訪問(wèn)權(quán)限之前測(cè)試引腳以查看是否輸入了正確的組合

第5步:[可選] AVR代碼示例

好的,好的,我不會(huì)讓您掛斷電話(huà)。我認(rèn)為您可能都具備讀取I/O引腳的能力,因此這并不意味著侮辱您的智慧。這只是我寫(xiě)的一小段代碼,用于讀取引腳并通過(guò)ATmega328p中的USART將數(shù)據(jù)發(fā)送到FreeBSD盒上的串行端口。

我不使用Arduino庫(kù),僅使用純C語(yǔ)言,因此您可能必須相應(yīng)地調(diào)整您的。也許有一種更優(yōu)雅的方法,但這是我想出的。

#include #include #include “uart.h”#define SWITCH_M 0b00111100int main(){ USART_init(BAUD_9600); DDRD = 0x00; // inputs for switches PORTD = 0xFF; // pullup on PD[2..5] (we have negative logic on switch now) uint8_t bcode = 0x00; for (;;) { bcode = (PIND & SWITCH_M); // bcode = 00xxxx00 bcode = (bcode 》》 2); // bcode = 0000xxxx bcode |= 0xF0; // bcode = 1111xxxx USART_tx(~bcode); // bcode = 0000xxxx bcode = 0x00; _delay_ms(2000); } }

從我的車(chē)輪開(kāi)關(guān)從0開(kāi)始并循環(huán)向上,我得到以下輸出:

0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    240

    文章

    22907

    瀏覽量

    650138
  • AVR微控制器
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    6795
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    二進(jìn)制補(bǔ)碼及與原碼的互相轉(zhuǎn)換方法

    表示負(fù)數(shù)。其余位表示數(shù)值的大小。 二進(jìn)制補(bǔ)碼?是一種用于表示有符號(hào)整數(shù)的二進(jìn)制編碼方式,常用于?計(jì)算機(jī)系統(tǒng)中。在補(bǔ)碼系統(tǒng)中,一個(gè)數(shù)字的補(bǔ)碼是通過(guò)對(duì)其原碼進(jìn)行位取反(即一補(bǔ)數(shù)反碼),然
    的頭像 發(fā)表于 09-19 22:25 ?30次閱讀

    二進(jìn)制處理中的一些技巧

    二進(jìn)制和十進(jìn)制的處理中,有時(shí)候一些小技巧是很有用的。 1、把十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù) (1)在MATLAB中有一個(gè)函數(shù)dec2bin,可以把正整數(shù)轉(zhuǎn)換為2
    的頭像 發(fā)表于 07-05 11:51 ?356次閱讀

    二進(jìn)制串行計(jì)數(shù)工作原理是什么?

    數(shù)字電路設(shè)計(jì)中,計(jì)數(shù)是一種非常關(guān)鍵的組件,用于測(cè)量時(shí)間、計(jì)數(shù)事件跟蹤狀態(tài)變化等。其中,二進(jìn)制串行計(jì)數(shù)作為一種常用的計(jì)數(shù)
    的頭像 發(fā)表于 05-28 15:52 ?493次閱讀

    如何實(shí)現(xiàn)二進(jìn)制和BCD碼數(shù)據(jù)的相互轉(zhuǎn)變?

    如何實(shí)現(xiàn)二進(jìn)制和BCD碼數(shù)據(jù)的相互轉(zhuǎn)變? 二進(jìn)制碼是將十進(jìn)制數(shù)字表示為二進(jìn)制數(shù)和十進(jìn)制數(shù)的一種表示方法。在計(jì)算機(jī)系統(tǒng)中,
    的頭像 發(fā)表于 02-18 14:51 ?2422次閱讀

    二進(jìn)制與邏輯電平的變化范圍

    二進(jìn)制中的兩個(gè)數(shù)字0和1稱(chēng)為位(bit, 是二進(jìn)制數(shù)字binary digit的縮寫(xiě))。在數(shù)字電路中,使用兩個(gè)不同的電平表示這兩個(gè)位。一般情況下,1 用高電平表示,0用低電平表示,這種
    的頭像 發(fā)表于 02-04 16:54 ?901次閱讀
    <b class='flag-5'>二進(jìn)制</b>與邏輯電平的變化范圍

    鴻蒙二進(jìn)制數(shù)組創(chuàng)建

    背景 c++層數(shù)據(jù)都是二進(jìn)制,需要轉(zhuǎn)換成arrayBuffer透?jìng)鞯絜ts層給業(yè)務(wù)使用,但是鴻蒙的使用下面兩個(gè)api創(chuàng)建出來(lái)的二進(jìn)制數(shù)組數(shù)據(jù)都是錯(cuò)誤的。 接口
    的頭像 發(fā)表于 01-31 15:24 ?1123次閱讀

    二進(jìn)制、八進(jìn)制、十六進(jìn)制在現(xiàn)實(shí)當(dāng)中有什么意義?

    ,我們可以從數(shù)字存儲(chǔ)和數(shù)據(jù)傳輸?shù)慕嵌葋?lái)看這些進(jìn)制的意義。計(jì)算機(jī)內(nèi)部使用的是二進(jìn)制,即由0和1組成的數(shù)字系統(tǒng)。這是因?yàn)橛?jì)算機(jī)中的所有數(shù)據(jù)都被轉(zhuǎn)化為二進(jìn)
    的頭像 發(fā)表于 01-16 11:14 ?1895次閱讀

    10進(jìn)制轉(zhuǎn)換為二進(jìn)制的算法

    的基本原理。十進(jìn)制數(shù)是我們?nèi)粘I钪凶畛R?jiàn)的數(shù)字系統(tǒng),它由0到9十個(gè)數(shù)字組成。而二進(jìn)制是計(jì)算機(jī)科學(xué)中使用的數(shù)字系統(tǒng),它只由0和1兩個(gè)
    的頭像 發(fā)表于 01-15 10:32 ?1442次閱讀

    10進(jìn)制轉(zhuǎn)換為二進(jìn)制的算法

    10進(jìn)制轉(zhuǎn)換為二進(jìn)制是計(jì)算機(jī)領(lǐng)域中非常重要的一個(gè)問(wèn)題。在計(jì)算機(jī)中,所有的數(shù)據(jù)都是以二進(jìn)制形式進(jìn)行存儲(chǔ)和處理的。因此,我們常常需要將10進(jìn)制數(shù)轉(zhuǎn)換為
    的頭像 發(fā)表于 01-11 09:14 ?1555次閱讀

    labview二進(jìn)制字符串轉(zhuǎn)數(shù)值

    LabVIEW是一種圖形化編程環(huán)境,用于實(shí)時(shí)數(shù)據(jù)采集、信號(hào)處理以及自動(dòng)化控制等領(lǐng)域。它采取了數(shù)據(jù)流編程的思想,用戶(hù)可以通過(guò)將各種功能模塊進(jìn)行連接,輕松搭建起復(fù)雜的系統(tǒng)。 在LabVIEW中,二進(jìn)制
    的頭像 發(fā)表于 01-05 16:20 ?2118次閱讀

    你知道十進(jìn)制轉(zhuǎn)二進(jìn)制如何進(jìn)行轉(zhuǎn)換嗎?

    你知道十進(jìn)制轉(zhuǎn)二進(jìn)制如何進(jìn)行轉(zhuǎn)換嗎? 當(dāng)我們提到數(shù)字系統(tǒng)時(shí),最常見(jiàn)的是十進(jìn)制系統(tǒng)和二進(jìn)制系統(tǒng)。十進(jìn)制
    的頭像 發(fā)表于 12-20 17:05 ?1070次閱讀

    ldr文件能否轉(zhuǎn)成二進(jìn)制16進(jìn)制文件?

    1 ldr文件能否轉(zhuǎn)成二進(jìn)制16進(jìn)制文件?想用MCU加載ldr文件! 2 生成的ldr文件可以通過(guò)CCES或者VDSP++軟件燒錄到flash中,但是這種方法太慢了,效率低,不適合批量生產(chǎn)??刹豢梢杂胒lash燒錄
    發(fā)表于 11-30 08:16

    二進(jìn)制DAC示例介紹

    電子發(fā)燒友網(wǎng)站提供《二進(jìn)制DAC示例介紹.pdf》資料免費(fèi)下載
    發(fā)表于 11-28 11:23 ?1次下載
    <b class='flag-5'>二進(jìn)制</b>DAC示例介紹

    進(jìn)制、十六進(jìn)制二進(jìn)制數(shù)制的區(qū)別

    計(jì)算機(jī)內(nèi)部一般也是8位的倍數(shù)(8位= 1字節(jié)),所以每個(gè)字節(jié)可以方便地用2個(gè)十六進(jìn)制數(shù)字表示。對(duì)于工程師來(lái)說(shuō),這比長(zhǎng)的二進(jìn)制數(shù)字序列更容易處理,但是計(jì)算機(jī)內(nèi)部仍然是以2為基數(shù)的二進(jìn)制數(shù)字
    的頭像 發(fā)表于 11-28 10:45 ?1329次閱讀
    十<b class='flag-5'>進(jìn)制</b>、十六<b class='flag-5'>進(jìn)制</b>和<b class='flag-5'>二進(jìn)制</b>數(shù)制的區(qū)別

    二進(jìn)制數(shù)據(jù)及取值范圍的計(jì)算方法

    本文介紹二進(jìn)制數(shù)據(jù)的相關(guān)知識(shí),如定義、取值范圍計(jì)算、轉(zhuǎn)換為十進(jìn)制的方法以及一些常見(jiàn)位數(shù)的二進(jìn)制數(shù)據(jù)的取值范圍等。
    的頭像 發(fā)表于 11-08 15:48 ?1564次閱讀
    <b class='flag-5'>二進(jìn)制</b>數(shù)據(jù)及取值范圍的計(jì)算方法