資料介紹
描述
ArduboyXL號
我著手制作一個具有更大屏幕并能夠從微型 SD 卡加載游戲的Arduboy克隆。TL;DR 是它使用兩個 arduino——一個 Atmel 328p 從 SD 卡讀取并重新刷新 Atmel 32u4。多路復用器芯片用于將顯示器切換到編程器內核以顯示菜單。我制作了自定義工具來生成菜單列表和屏幕截圖文件。我用數控機床用鋁板加工了一個外殼。
背景
Arduboy 是一款基于 arduino 的便攜式游戲系統,旨在運行免費和開源游戲。它本質上只是一個 8 位微控制器,以信用卡大小的封裝連接到 oled 屏幕。
harwdare 非常有限。該處理器是一個 16MHz ATMega 32u4,具有 32KB 閃存和 2.5KB RAM。屏幕是 1.3"、128x64 像素、1 位 OLED。有 512 字節的 EEPROM 可用于保存游戲或高分。系統一次只能容納一個游戲,必須從 PC 刷新才能切換游戲。
有趣的是,這設法創造了一種頗具吸引力的體驗,吸引了許多明顯的開發者和玩家。它在 2015 年獲得了成功的 kickstarter ,籌集了超過 40 萬美元,并且有 100 多款游戲,從兒童制作的第一款游戲到具有專業外觀的游戲。從游戲的角度來看,這遠遠領先于Ouya等其他草根游戲機開發項目,其資助金額是其十倍以上。我認為,成功來自于限制——簡單的硬件意味著你需要制作一款簡單的游戲,這使得它更容易上手,也更容易完成。完成后,游戲將在一個完全獨立的平臺上運行,沒有其他東西可以搞砸它。如果您將您的游戲發送給朋友,他們會獲得完全相同的體驗,并且沒有真正的惡意軟件可能性(盡管我認為您可以制作一個會損壞硬件的程序,但它不像普通的可執行文件那樣可以勒索您的整個硬盤駕駛)。顯然范圍不一樣,但我認為小贏總比大失敗好。
我的電子游戲囤積本能被激活了。我想擁有所有的游戲。我已經著手制作我自己的系統版本,該系統包含系統本身中的所有游戲,無需從計算機重新刷新。
研究
你怎么做到這一點?我知道讓 arduino 與 SD 卡對話是相當簡單的——有圖書館可以做到這一點。所以我們可以從 SD 卡加載文件,但是如何讓它們在 arduino 上運行?程序存儲器中有一個小的保留部分稱為引導加載程序,目前允許您通過串行通信對芯片進行重新編程。理論上,可以重寫這段 4KB 的代碼,以便從 SD 卡對芯片本身進行重新編程……
但這聽起來真的很難。一個更簡單的解決方案是讓第二個 arduino 與 SD 卡通信,并將程序發送到玩游戲的 arduino。
“雙核”設計已經確定,但是如何讓一個arduino程序成為另一個arduino程序呢?
選項 1:STK500 over serial利用引導加載程序,您可以將串行命令從一個 arduino 發送到另一個以對其重新編程。這與當您通過 FTDI usb 連接到串行適配器時計算機對芯片重新編程的方式相同。對于布線,您只需連接 RX->TX 和 TX->RX(和 GND)。
我發現了以下示例:
George Caley 的Arduino 復印機
我能夠讓這段代碼在 Arduino Uno 和 Pro-Mini 上運行,它們都是基于 ATMega 328p 的開發板。
困難在于代碼的文檔記錄不完善。有大量的幻數塊,其中一些需要更改才能使代碼適用于 32u4 芯片。我開始使用 STK500 文檔將幻數轉換為命名常量,但我遇到的第一件事是“設置設備”指令,后跟設備代碼 0x86,我在任何地方都找不到它。我假設它是 328 的設備代碼,但我找不到準確進行所需的文檔。
Bald Wisdom 的引導驅動器
這看起來很棒,它使用命名常量,它實際上完全按照我的需要做,甚至從 SD 卡加載草圖。但是,我無法讓它工作。它使用硬件串行線進行編程,并使用第二條軟件驅動的串行線進行調試——我把它連接得很好,但從來沒有遇到過幾種不同類型的錯誤垃圾郵件。還有一些巨魔狗屎,比如接線圖,上面有幾段注釋,上面寫著“圖表是錯誤的”——它讓你質疑每一行代碼。
這里故事的寓意是使用選項 2。
選項 2:在線串行編程器 這是一種使用 SPI 接口的更直接的編程方法。這種方法實際上可以刷新引導加載程序本身,這很好,因為那里有很多關于如何在引導加載程序出錯時恢復你的 arduboy 的線程。這就引出了一個問題,即為什么我們首先要有引導加載程序,尤其是在需要外部設備進行串行通信的 pro-mini 之類的東西上。為什么不直接插入不同的東西并通過 ICSP 編程呢?
Nick Gammon 的十六進制上傳器
這幾乎立即起作用,從一種類型的 arduino 到另一種類型沒有任何困難。
問題是它真的很慢,需要大約 45 秒才能刷新。需要進行一些優化。
我實施了以下優化:
刪除文件長度驗證。在上傳之前讀取整個文件以避免超出程序內存邊界(實質上是讀取文件兩次)。引導加載程序區域受到保護,因此如果它確實通過,將會發生的只是上傳失敗,因此這一步似乎是不必要的。
刪除了行校驗和驗證。十六進制文件中的每一行都包含一個校驗和,但如果它是錯誤的,那么文件無論如何都會被破壞。你從哪里得到這個文件?只要有好的文件。
刪除了 clearPage 命令。我相信這是在向其上傳新數據之前清除目標芯片上的工作頁面。這需要很長時間,不做似乎不會造成任何問題。一個副作用是最后一頁的末尾可能有重復或垃圾數據(唯一不會被新數據完全覆蓋的頁面),但如果你最終進入該部分,你的程序就會偏離軌道無論如何,您只是想獲得一致的失敗狀態。
如果您確實需要此功能,更好的方法是將 0x00 寫入僅最后一頁的未使用部分。
減少/消除 BB_DELAY_MICROSECONDS 延遲。編程信號通過軟件定義的 SPI 總線,BB_DELAY_MICROSECONDS 是保持每個時鐘周期上升或下降的微秒數。默認值為 6,即 83KHz。SPI 總線可以很好地進入 MHz 范圍,因此增加它應該不是什么大問題。我嘗試了 3,然后是 1,然后我用一些匯編 NOP 指令(在一個時鐘周期內什么也不做)替換了微秒延遲,以延遲不到一微秒。
最后我把它調低到一個 NOP,最大速度,沒有問題。
刪除了上傳驗證。回讀整個上傳的閃存以驗證需要很長時間。為什么不運行它看看會發生什么?
更改了 SPI 總線初始化 SPI_HALF_SPEED -> SPI_FULL_SPEED。半速應該避免面包板上的錯誤。我最終在調試過程中來回改變并且沒有注意到任何區別。我不認為文件吞吐量是這里的瓶頸。
向 BB_SPITransfer() 添加了“inline”關鍵字。bit-bang spi 函數現在每秒被調用數百萬次,所以我認為內聯它可以減少一些開銷。我沒有衡量任何改進。
刪除了 chipErase 命令。不得不撤消這一點。原來你必須在寫之前擦除,你不能只是覆蓋。
這些變化結合起來使刷新時間減少到大約 7 秒!程序員將基于此代碼的修改版本。
部分
阿杜諾微型
基于 arduboy 中使用的相同 ATMega 32u4,該板斷開了所有必要的引腳以進行精確克隆。
比親微大,不過有保障的測試平臺還是不錯的。
請注意,此版本具有更大的芯片封裝,因此可以將一些額外的電線直接焊接到芯片上并獲得與 arduboy 的完全引腳兼容性。
您確實至少需要其中三個 - 一個用于面包板,一個用于最終項目,一個用于搞砸。
基于 328p 的 pro-mini 需要外部usb 轉串口設備對其進行編程,但它比基于 32u4 的 pro-micro 上的虛擬串口可靠得多。
我最終將其用于程序員核心。
是的,我們將有一個帶有 2KB RAM 的 CPU 連接到 8GB 存儲空間。有點荒謬,但他們并沒有真正制造比這更小的 SD 卡。
這些用于最終版本的按鈕。為了進行測試,我們將使用普通的觸覺開關。
值得注意的是,它還具有低電壓截止功能,因此可以在其他項目中與裸鋰聚合物電池一起使用。
互聯網告訴我三星 Galaxy S4 是世界上最受歡迎的智能手機,所以我想有人會為它制造新電池。此外,它是一個很好的方形,很容易與其他組件配合使用。
購買手機電池的一個大問題是,大量電池是從電子垃圾箱中挑選出來并作為新電池出售的。這個很可能是電子垃圾,上面貼著紅色標簽,但至少他們并沒有試圖將其假冒為正品。
這將從單個 3.7v LiPo 電池中為我們提供穩定的 5 伏電壓。請注意,arduino 板上的穩壓器只會向下調節,并且需要高得多的電壓。
額定300ma,應該沒問題。還有一個用于高電流應用的MOSFET 開關,但我認為這不是必需的。
電池充電器上有一個 USB 端口,但如果我們想要與 arduboy 建立數據連接,我們可以先使用這個 breakout。
內置電平轉換器可轉換為所需的 3.3v,具有卡檢測引腳,因此我們可以判斷何時插入了 SD 卡。
比壓電略好。
這個屏幕和arduboy的SSD1306控制器一模一樣,而且便宜,所以拿來測試。
幾乎是默認 arduboy 屏幕的兩倍,具有非常相似的 SSD1309 控制器。游戲可以通過一些小的十六進制編輯轉換為使用此顯示。
?
面包板克隆
最好從復制已經完成的事情開始,然后再做新的事情。我使用 SSD_1306 屏幕和標準壓電在面包板上連接了一個 arduboy 克隆,下載了游戲的源代碼并進行了編譯。一切都立即有效。
當我 10 歲的時候,我從音樂生日賀卡中取出壓電 - 我知道有一天它會派上用場。
增強型面包板克隆
我用更大的 SSD_1309 OLED 替換了屏幕,并用揚聲器替換了壓電顯示器。使用arduboy 自制包和不同的屏幕選項重新編譯游戲效果很好。
重新閃現概念證明
這個概念證明證明可以在不連接到計算機的情況下在兩個不同的游戲之間切換。程序員核心位于前臺面包板上,帶有一些用于上傳狀態的 LED 和兩個硬編碼的專用按鈕,用于將兩個不同的十六進制文件上傳到后臺的 arduboy 核心。
為簡單起見,顯示和移動按鈕僅連接到 arduboy 核心。切換游戲時會出現一些屏幕垃圾,因為屏幕與 ICSP 在同一總線上,此時程序員核心無法將其關閉。
完整原型
這是一個更復雜的原型,它顯示了整個過程的工作。當電源打開時,arduboy 核心正常啟動并開始玩它在內存中的任何游戲,而編程器核心進入睡眠模式(由于編程核心上運行的一些調試代碼,會出現短暫的重置問題)。
然后當你按下一個專用的菜單按鈕時,編程核心就會喚醒,在 arduboy 上拉 reset,翻轉一個多路復用器芯片來控制屏幕并顯示游戲菜單。它可以在列表中顯示任意數量的文件,并在您選擇時顯示每個游戲的 64x64 像素屏幕截圖。
程序員核心使用 SSD1306_text 庫的修改版本來顯示文本和圖形。有更精細的圖形庫可用,但要進行 SD 卡讀取和 ICSP 編程,閃存空間和內存非常寶貴。我修改了庫以使用具有比例間距的自定義壓縮字體,并編寫了一個命令行實用程序將 png 圖像轉換為可以直接嵌入到 arduino 草圖中的字體字節。
通常為了顯示這樣的列表,我會把整個東西加載到 ram 中并完成,但我們只有 2KB 的 ram,其中 75% 已經在使用中。我們甚至沒有足夠的空間來緩沖屏幕上顯示的文本。文件系統也是 FAT32,在 arduino 上只支持 8.3 文件名。這兩個問題的解決方案是使用一個預生成的列表文件,其中包含較短的 8.3 十六進制文件名和較長的顯示名稱。列表文件中的條目是固定長度的,所以我們可以很容易地跳到任何一行,閱讀它,并在我們進行時將顯示名稱打印到屏幕上。
屏幕截圖是從單獨的文件中讀取的,并一次一個字節地打印到屏幕上。它是在某種文本模式下完成的,其中 8 像素高的水平行填充有垂直條紋(每個一個字節)。我編寫了另一個命令行實用程序,可以將 png 屏幕截圖轉換為特殊格式并一次性生成列表文件。通過這種方式,您可以在您的計算機上保存一組具有常規長文件名和匹配屏幕截圖的游戲文件,然后只需運行該實用程序,然后再將所有內容上傳到 SD 卡。
硬件計劃
還有一些組件需要完成:電池、聲音和 RGB LED。我測試了電流消耗,最大電流約為 200ma,所以我可能會使用手機電池來確保較長的電池壽命。我用來測試的揚聲器很好很薄,但它的直徑很大,我可能會貨比三家,買一個小一點的。我還需要一個指輪電位器來調節音量,我不得不求助于 ebay - 他們不再真正制造它們了,所有新東西都使用數字電位器,這只會使事情復雜化。
arduboy 上的 RGB LED 是共陽極,幸運的是,我周圍的所有 LED 都是共陰極。我想在設備的頂部或側面做一些光管設計,讓它不僅僅是一個點光源。Bezek上的光管運行良好。
對于按鈕,我計劃使用 NES 控制器維修套件中的橡膠圓頂(仍在制作新的)。我計劃將按鈕與外殼一起用鋁加工出來。
軟件計劃
我希望能夠通過按左/右鍵在菜單的不同顯示模式之間循環。一方面是純文本顯示,每個游戲的 1-5 星評級,然后是當前名稱/屏幕截圖拆分,然后是完整屏幕截圖顯示。可能還有標題屏幕顯示。
有些游戲保存高分或將游戲保存到 512 字節的 EEPROM 中。我希望能夠在切換游戲時備份和恢復這些數據。
案例設計
這是一個透明視圖,顯示了外殼頂部和一些內部組件的切口。外殼設計為銑削,因此內角需要倒圓角。
這是一個有點復雜的裝配,所以我在 3D Studio 中制作了一些模型以確保一切都合適。
1 / 4 ?組裝設備的渲染圖。白色條是 RGB LED 的光管。
電路板設計
DesignSpark PCB 布局
我使用 DesignSpark PCB 來...設計(激發?)PCB。跡線布局是手動布線和自動布線器的混合,之后會進行調整。我在仔細檢查所有內容時發現了一些錯誤,希望我都能找到它們!
我導出了 gerber 文件并將它們上傳到 OSHPark 進行制造。
1 / 2 ? OSHPark 正面渲染
OSHPark 的物理 PCB。
1 / 2 ?安裝屏幕,間隙問題。
我犯了一個明顯的錯誤,部分電路板擋住了屏幕模塊上的某些組件。幸運的是,電路板的那部分沒有痕跡,所以只需要一點銼就可以修復它。
組裝電子產品,正面
組裝電子產品,后部
電子設備的背面。電池設計為與電線連接,但由于焊盤在 PCB 上抬起,因此連接到主開關的電線需要維修。我應該擴展 PCB 以從所有 4 個角支持 USB 充電模塊,并從一開始就將其粘住。
表殼加工
剛加工完。
呃……長話短說,我用鋁加工了一個箱子。我在當地的創客空間使用了 Bridgeport V2XT。它不是這項工作的理想機器,因為主軸在 4000rpm 時達到上限 - 對于 1/8" 鋁制刀具,您確實需要 20, 000+ rpm 才能獲得適當的表面速度。刀具夾持設置存在一些錯誤不夠安全,最重要的是我在編程時犯了一個錯誤,所以 D-Pad 和菜單按鈕孔最終太大了。不過它仍然可以通過。
外殼和按鈕,清理干凈。
自然地,經過幾個小時的加工,我折斷了其中一個螺絲孔內的絲錐。我只是把它留在那兒了。剩余的螺絲足以將其牢固地固定在一起。
外殼的外面。
由于振動,它有點條紋。這本可以通過使用更厚的固定片或帶有定制軟鉗口的虎鉗來避免。在后面板右側的最后一次通過時,抖動特別嚴重。
1 / 3 ?按鈕到位。
完畢!
在這里它已經完全組裝好了!
給電池充電。
我用亞克力制作了一根導光管,將充電狀態 LED 引導至外殼外部。
燈管特寫。
當電池充滿電時,指示燈變為藍色。
文件
該 zip 包含 ICSP flasher arduino 項目、C++ 二進制文件和用于轉換屏幕截圖、PCB 文件以及外殼和按鈕的 STL 文件的源代碼。
我不希望任何人能夠直接使用它,但如果您有類似的項目,它可能會對您有所幫助。
?
- 使用ZYBO從SD卡播放wav文件
- 使用Arduino(Arduboy)DIY手持游戲機
- SD卡2.0協議資料英文版 0次下載
- STM32F103C8T6通過SD卡加載固件
- 基于SPI協議的SD卡讀寫說明 49次下載
- SD卡的99SE封裝庫免費下載 43次下載
- SD卡的99SE封裝庫免費下載 13次下載
- 使用單片機實現SD卡讀寫的資料和程序免費下載
- 如何實現單片機讀寫SD卡的底層驅動程序
- SD卡資料 7次下載
- SD卡要點說明 265次下載
- SD卡分類簡介
- SD卡命令解釋
- sd卡-mmc卡-CPU說明資料
- sd卡接口電路
- 貼片式SD卡功能介紹【MK SD NAND】 386次閱讀
- SD卡鏡像啟動過程中如何第一時間獲取FPGA配置狀態? 369次閱讀
- sd卡是什么有什么用途 TF卡和SD卡有什么區別 3858次閱讀
- sd卡是什么有什么用途 TF卡和SD卡有什么區別 2015次閱讀
- SD卡的分類以及常見屬性 3686次閱讀
- TF卡和SD卡的區別有哪些? 8253次閱讀
- 怎么通過FPGA采取SD模式實現Micro SD卡的驅動 1693次閱讀
- SD/micro SD存儲卡介紹 1577次閱讀
- 一文了解microSD卡和SD卡的區別 9732次閱讀
- 微雪電子SD卡存儲模塊簡介 1593次閱讀
- fireflyROC-RK3328燒寫SD卡介紹 3255次閱讀
- FPGA SD卡驅動調試問題記錄 1366次閱讀
- 干貨 | SD卡/TF卡的PCB布局布線設計要求 2.5w次閱讀
- spi讀取sd卡數據例程 8823次閱讀
- mmc卡和sd卡的區別是什么 4.7w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多