今天為大家分享一個(gè)DIY 產(chǎn)品,如下: 前兩天天我在瀏覽購(gòu)物網(wǎng)站的時(shí)候,被一個(gè)購(gòu)物清單吸引住了,5個(gè)ATtiny13單片機(jī)售價(jià)1.5美元。你敢相信,一個(gè)可編程的微控制器,只要0.3美元!于是我打算撿個(gè)便宜,買(mǎi)幾個(gè)回來(lái)玩玩。為了讓買(mǎi)回來(lái)的ATtiny13不落在角落里吃灰,我上網(wǎng)搜索了 "ATtiny13 Arduino"的關(guān)鍵詞,發(fā)現(xiàn)Arduino支持ATtiny13,所以我準(zhǔn)備拿他搞些事情。ATtiny13對(duì)庫(kù)的支持有限,所以除了讓它點(diǎn)亮幾個(gè)LED之外,我暫時(shí)沒(méi)有想到其他玩法。正當(dāng)我苦苦思索還能做什么時(shí),突然想到了一個(gè)很久以前的項(xiàng)目。那是一個(gè)使用ATtiny85的PoV
顯示器 。
(拍出來(lái)的效果會(huì)閃爍,眼睛看就不會(huì)) PoV顯示器基本上是一堆閃爍的LED,并有一些精心安排的延遲。而我發(fā)現(xiàn)ATtiny13和ATtiny85都有相同的引腳布局。那么…… 嘿嘿,我也來(lái)做一個(gè)!
材料準(zhǔn)備 1 x ATtiny13 5個(gè)3毫米的LED(也可以用5毫米的LED,3毫米的看起來(lái)更好,因?yàn)榭梢愿拷黀CB) 1個(gè)CR2032電池 1個(gè)CR2032電池座 1個(gè)滑動(dòng)開(kāi)關(guān) 原型PCB或定制PCB 電烙鐵 什么是PoV顯示器,它們是如何工作的? 人眼在觀察景物時(shí),光信號(hào)傳入大腦神經(jīng),需經(jīng)過(guò)一段短暫的時(shí)間(1/16秒),光的作用結(jié)束后,視覺(jué)形象并不立即消失,這種殘留的視覺(jué)稱(chēng)“后像”,視覺(jué)的這一現(xiàn)象則被稱(chēng)為“視覺(jué)暫留”。比如你看一個(gè)正常的顯示器,像素是以矩陣方式排列的,但在PoV
顯示器 中,像素或者LED則是排列成一個(gè)陣列的。就像是你快速翻動(dòng)小人書(shū)那邊,由于視覺(jué)暫留效應(yīng),小人書(shū)的人會(huì)動(dòng)起來(lái),這邊我們看到的,也不會(huì)是一排LED,而是一串字母或者是一幅圖像。
Arduino IDE相關(guān)設(shè)置 你可能正盯著ATtiny13,想知道 "我到底該怎樣為這個(gè)東西編程,它又沒(méi)有像Arduino那樣的USB接口"。好吧,要為這個(gè)微控制器編程,你需要另一個(gè)Arduino,Arduino Nano或Arduino Uno都可以。下載并安裝Arduino IDE。用USB線將你的Arduino Nano / Uno連接到電腦上。打開(kāi)?
工具->
開(kāi)發(fā)板,選擇你的主控板(注意選Uno/Nano而不是ATtiny13)。現(xiàn)在我們需要將我們的Arduino轉(zhuǎn)換成一個(gè)編程器。在Arduino IDE中,打開(kāi)
文件?->?
示例?->?
11.ArduinoISP?->?
ArduinoISP并點(diǎn)擊
上傳按鈕。如果上傳成功,就可以用我們的Arduino為其他微控制器編程了。現(xiàn)在我們還需要在Arduino IDE上安裝ATtiny13的硬件包,因?yàn)镮DE默認(rèn)不支持ATtiny13。打開(kāi)
文件?->?
首選項(xiàng)?->?
附加開(kāi)發(fā)版管理器網(wǎng)址然后粘貼上下面的鏈接:
https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json然后打開(kāi)
工具?->?
開(kāi)發(fā)板?->?
開(kāi)發(fā)板管理器。從列表中找到
MicroCore并點(diǎn)擊安裝。
ok,現(xiàn)在你就可以從Arduino IDE中選擇到ATtiny13了。選擇
工具?->?
開(kāi)發(fā)板?->?
MicroCore?->?
ATtiny13我們需要在Arduino IDE中再改變一些選項(xiàng),打開(kāi)
工具,并設(shè)置以下值:
Option Value Board ATtiny13 BOD 2.7v Clock 9.6Mhz internal Osc. Timing "Micors Disabled" Port Select Serial Port in which your Arduino is connected Programmer Arduino as ISP (MicroCore)
對(duì)ATtiny13進(jìn)行編程 現(xiàn)在可以把ATtiny連接到我們的Arduino了。把ATtiny連接到Arduino,如下所示(在ATtiny中,針腳1將用一個(gè)點(diǎn)
.?標(biāo)記。)
ATtiny13 Pin Arduino Pin 1 10 5 11 6 12 7 13 8 5v 4 Ground (GND)
燒錄引導(dǎo)程序到ATtiny13 這是一個(gè)一次性的設(shè)置,不用在每次上傳代碼到ATtiny時(shí)都重復(fù)這個(gè)設(shè)置。點(diǎn)擊?
工具->
燒錄引導(dǎo)程序。
這將把引導(dǎo)程序燒到ATtiny上,現(xiàn)在我們就可以用Arduino IDE把程序上傳到ATtiny了。
上傳PoV程序到ATtiny 在Arduino中新建一個(gè)程序。復(fù)制代碼并將其粘貼到新創(chuàng)建的程序中。
//?https://github.com/B45i/Tiny-PoV //?App?to?calculate?array?values:?https://pov-display-calc.vercel.app/ //?Preact?app?source:?https://github.com/B45i/pov-display-calc #include ? #define ?DELAY_TIME?1 #define ?CHAR_BREAK?2 uint8_t ?leds[]?=?{?0 ,?1 ,?2 ,?3 ,?4 ?};uint8_t ?keys[]?=?{?1 ,?2 ,?4 ,?8 ,?16 ?};void ?setup () ? { ??for ?(uint8_t ?i?=?0 ;?i?5 ;?i )?{ ????pinMode(leds[i],?OUTPUT); ??} }const ?PROGMEM?uint8_t ?alphabets[][5 ]?=?{ ??{?0 ,?0 ,?0 ,?0 ,?0 ?},???????//?Space ??{?30 ,?5 ,?5 ,?30 ,?0 ?},?????//?A ??{?31 ,?21 ,?21 ,?10 ,?0 ?},???//?B ??{?14 ,?17 ,?17 ,?10 ,?0 ?},???//?C ??{?31 ,?17 ,?17 ,?14 ,?0 ?},???//?D ??{?31 ,?21 ,?21 ,?17 ,?0 ?},???//?E ??{?31 ,?20 ,?20 ,?16 ,?0 ?},???//?F ??{?14 ,?17 ,?19 ,?10 ,?0 ?},???//?G ??{?31 ,?4 ,?4 ,?4 ,?31 ?},?????//?H ??{?0 ,?17 ,?31 ,?17 ,?0 ?},????//?I ??{?0 ,?17 ,?30 ,?16 ,?0 ?},????//?J ??{?31 ,?4 ,?10 ,?17 ,?0 ?},????//?K ??{?31 ,?1 ,?1 ,?1 ,?0 ?},??????//?L ??{?31 ,?12 ,?3 ,?12 ,?31 ?},???//?M ??{?31 ,?12 ,?3 ,?31 ,?0 ?},????//?N ??{?14 ,?17 ,?17 ,?14 ,?0 ?},???//?O ??{?31 ,?20 ,?20 ,?8 ,?0 ?},????//?P ??{?14 ,?17 ,?19 ,?14 ,?2 ?},???//?Q ??{?31 ,?20 ,?22 ,?9 ,?0 ?},????//?R ??{?8 ,?21 ,?21 ,?2 ,?0 ?},?????//?S ??{?16 ,?16 ,?31 ,?16 ,?16 ?},??//?T ??{?30 ,?1 ,?1 ,?30 ,?0 ?},?????//?U ??{?24 ,?6 ,?1 ,?6 ,?24 ?},?????//?V ??{?28 ,?3 ,?12 ,?3 ,?28 ?},????//?W ??{?17 ,?10 ,?4 ,?10 ,?17 ?},???//?X ??{?17 ,?10 ,?4 ,?8 ,?16 ?},????//?Y ??{?19 ,?21 ,?21 ,?25 ,?0 ?},???//?Z ??{?31 ,?17 ,?31 ,?0 ,?0 ?},????//?0 ??{?18 ,?31 ,?16 ,?0 ,?0 ?},????//?1 ??{?29 ,?21 ,?23 ,?0 ,?0 ?},????//?2 ??{?21 ,?21 ,?31 ,?0 ,?0 ?},????//?3 ??{?7 ,?4 ,?31 ,?4 ,?0 ?},??????//?4 ??{?23 ,?21 ,?29 ,?0 ,?0 ?},????//?5 ??{?31 ,?21 ,?29 ,?0 ,?0 ?},????//?6 ??{?1 ,?1 ,?31 ,?0 ,?0 ?},??????//?7 ??{?31 ,?21 ,?31 ,?0 ,?0 ?},????//?8 ??{?23 ,?21 ,?31 ,?0 ,?0 ?},????//?9 };void ?displayLine (uint8_t ?line) ? { ??for ?(uint8_t ?i?=?0 ;?i?5 ;?i )?{ ????digitalWrite(leds[i],?(line?