专业版
#第八届立创电赛#AtomBoy游戏机

创建时间:9个月前

描述

<h1>0、视频展示</h1> <p><a href="https://www.bilibili.com/video/BV1Th4y117CR/" target="_blank"><div style="text-align:center;"><span style="font-weight:bold;font-size:3em;padding:0px 5px;font-family:'楷体';" class="btn badge badge-pill badge-danger">点击观看视频</span></div></a></p> <h1>1、项目功能介绍</h1> <p>这是一款信用卡大小,基于瑞萨MCU的小型游戏机,OLED屏128*64分辨率,内置七款小游戏,可充电350毫安时锂电池,工作电流约15mA,待机电流小于100μA。板载daplink。 <img src="//image.lceda.cn/pullimage/6BZ5tXxqdZLFDHyuNg2TGWUbVWfGrtnp4uo0VKWy.png" alt="image.png"></p> <h2>内置游戏</h2> <ul> <li>[x] 恐龙游戏</li> <li>[x] 像素鸟</li> <li>[x] 贪吃蛇</li> <li>[x] 五子棋</li> <li>[x] 2048</li> <li>[x] 太空侵略者</li> <li>[x] IKUN <h2>功能</h2></li> <li>[x] 超长待机</li> <li>[x] 待机时保存游戏进度</li> <li>[x] 板载DAP-LINK <h1>2、项目属性</h1> <p>首次公开,原创作品。</p> <h1>3、开源协议</h1> <p>The GNU General Public License v3.0</p> <h1>4、硬件部分</h1> <h2>电路</h2> <table> <tr> <th><img src="//image.lceda.cn/pullimage/UW5eNqXUG0jP7HIo6Fs8V2hkzDb82FuVkNZovZqK.png" alt="image.png"> 硬件部分比较简单,usb进来的电流通过ETA6002为锂电池充电,ETA6002同时负责电池的放电,放电分为两路,一路供给mcu,一直供电;另一路供给oled和蜂鸣器,由mcu控制对应的ldo实现在休眠模式下断开他们的供电。 另外,usb同时为板载的daplink供电并交换数据,daplink通过swd接口与ra单片机相连。 oled通过spi与mcu连接。 蜂鸣器由mcu输出4000HZ的pwm信号,经一三极管控制。</th> <th>主要芯片</th> <th>功能</th> </tr> <tr> <td>R7FA2E1A72DFL</td> <td>主控MCU,M23核心48M,16kb+64kb</td> </tr> <tr> <td>SH1106(CH1116)</td> <td>1.3寸OLED屏</td> </tr> <tr> <td>ETA6002</td> <td>锂电池充放电</td> </tr> <tr> <td>ME6211C33M5G-N</td> <td>LDO</td> </tr> <tr> <td>CH32V203F6P6</td> <td>daplink</td> </tr> </table> <h2>结构</h2> <p>电路板四角粘贴磁铁,面板同样粘贴磁铁,通过磁吸,夹住3D打印夹层。 磁吸的设计使外壳上没有螺丝固定,并且易拆卸。 目前3d外壳无法导出,等待立创eda修复bug。该bug与侧面开孔有关,删除侧面开孔后可导出,但usb接口的开孔也随之消失。临时的解决方案是3d打印到手后手动打磨。 已用SolidWorks重画,见附件。 <img src="//image.lceda.cn/pullimage/CFqSyG6lVuk5Z51bN8fI3URxzHKD6Ea9H1hVm9GX.png" alt="image.png"> <img src="//image.lceda.cn/pullimage/j3GoN0yrvXD6VfwK0KSPhJYFDvzyr3th7wlU9Lq1.png" alt="image.png"></p> <h1>5、软件部分</h1> <h2>代码获取</h2> <p>代码托管在github上:<a href="https://github.com/liux-pro/AtomBoy" target="_blank">https://github.com/liux-pro/AtomBoy</a> 另外,daplink固件使用<code>@XIVN1987</code>大佬的固件,他的开源地址是<a href="https://github.com/XIVN1987/DAPLink" target="_blank">https://github.com/XIVN1987/DAPLink</a></p> <h2>为板载的DAPLINK烧录固件</h2> <ol> <li>(可跳过此步骤,直接使用附件里的固件)下载daplink代码并使用<a href="http://www.mounriver.com/" target="_blank">MounRiver Studio</a>编译daplink固件。</li> <li>下载并安装<a href="https://www.wch.cn/downloads/WCHISPTool_Setup_exe.html" target="_blank">WCH单片机烧录工具</a></li> <li>如图所示选择ch32烧录,图中第六步选择附件的CH32V203_DAPLink_aa14c15.hex<img src="//image.lceda.cn/pullimage/LtrHnlz2sBdDsw1n4bBCYjze3ffcGrfltzh3YITj.png" alt="image.png"></li> <li>短接pcb上的DAP BOOT触点。<img src="//image.lceda.cn/pullimage/m3fFgw27HJPusJGVrMLqFzndenVMG6sfd70nc2Rf.png" alt="image.png"></li> <li>通过usb数据线插入电脑,软件会自动烧录daplink固件。</li> <li>至此DAPLINK已就绪。<img src="//image.lceda.cn/pullimage/8QYhiGmaOVx9kdo1toZ3uKv7Jt2d9zKg4LMKXeVT.png" alt="image.png"> <h2>编译AtomBoy</h2> <p>使用了瑞萨<a href="https://github.com/renesas/fsp/releases/tag/v4.5.0" target="_blank">RASC</a>生成基于cmake组织的工程文件,需使用<a href="https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads" target="_blank">ARM GCC</a>编译。 如果要在自己的电脑上编译,首先安装好cmake,ninja,然后下载<a href="https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads" target="_blank">ARM GCC</a>,执行如下编译命令。 假设gcc工具链解压到了D盘根目录。</p> <pre><code class="language-bash">cmake -B build -G Ninja -DCMAKE_FIND_ROOT_PATH=D:/gcc-arm-none-eabi-10.3-2021.10-win32/gcc-arm-none-eabi-10.3-2021.10/bin cmake --build build </code></pre> <h2>烧录AtomBoy</h2> <p>由于板载了DAP-LINK,不需要使用外置烧录设备,预先装好python3,通过pip安装pyocd。</p> <pre><code class="language-bash">pip install pyocd</code></pre> <p>之后usb链接电脑后,通过板载daplink直接烧录程序。</p> <pre><code class="language-bash">cmake --build build --target flash</code></pre> <h2>模拟器</h2> <p>为方便调试,避免每次修改都要重新烧录,额外写了一个模拟器使大部分代码可以在电脑上运行。 <img src="//image.lceda.cn/pullimage/7K7FC2ISm2n9Hc87FRDm8zm4B1uxpqWTjmg3TDtO.gif" alt="1690698861953.gif"></p></li> <li>装好 <a href="https://www.msys2.org/" target="_blank">msys2</a> 环境</li> <li>(可选)使用 msys2-mingw64 执行<code>sed -i "s#mirror.msys2.org/#mirrors.ustc.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*</code>切换国内源</li> <li>使用 msys2-mingw64 执行<code>pacman -S mingw-w64-x86_64-SDL2</code>,安装SDL2</li> <li>使用 msys2-mingw64 执行<code>pacman -S mingw-w64-x86_64-toolchain cmake make ninja git</code>,安装编译器等</li> <li><code>cd emulator &amp;&amp; cmake -G Ninja -B build</code></li> <li><code>cd build &amp;&amp; ninja</code></li> <li><code>./AtomBoyEmulator.exe</code> <h2>使用CLion</h2> <p>使用CLion能加快开发效率,避免手动敲命令。 说不明白,看视频吧。视频中演示了如何编译,烧录,如何使用模拟器。 <a href="https://www.bilibili.com/video/BV1Nx4y1X7iN/" target="_blank">https://www.bilibili.com/video/BV1Nx4y1X7iN/</a> <img src="//image.lceda.cn/pullimage/7w6R6P4KbqfsK6NMekqyyiwRDufS1ZnjVMKmTC5d.png" alt="image.png"></p></li> </ol></li> </ul> <h2>代码结构</h2> <h3>目录</h3> <pre><code class="language-bash">├─.github │ └─workflows # Github Action 自动构建hex文件 ├─cmake # cmake脚本,RASC自动生成 ├─emulator # 基于SDL的模拟器 ├─ra # 系统代码,RASC自动生成 ├─ra_cfg # 系统代码,RASC自动生成 ├─ra_gen # 系统代码,RASC自动生成 ├─script # 链接脚本,RASC自动生成 └─src # 源码 ├─app # 应用程序 ├─Arduino # 模拟Arduino形式 ├─buzzer # 蜂鸣器 ├─fps # 控制屏幕刷新,提供系统system tick ├─u8g2 # u8g2源码 └─u8g2_port # u8g2移植 └─main.cpp # 主函数入口 └─button.cpp # 按键扫描 └─sleep.cpp # 低功耗模式 </code></pre> <h3>RASC生成</h3> <p>代码基本结构通过RASC生成。可通过RASC导入本项目进行对瑞萨mcu的引脚,时钟,外设等配置。编译过程不需要rasc的参与。 RASC当前版本(v4.5)生成的cmake文件有各种问题,在本项目中已改成,自己生成新项目需注意。</p> <ul> <li><a href="https://github.com/renesas/fsp/issues/256" target="_blank">https://github.com/renesas/fsp/issues/256</a></li> <li><a href="https://github.com/renesas/fsp/issues/280" target="_blank">https://github.com/renesas/fsp/issues/280</a> <h3>整体架构</h3> <ol> <li>由定时器生成1ms的时钟源,每隔约16ms更新标志位,主循环轮询获取标志位后刷新一帧,算力足够的情况下能稳定帧率。</li> <li>驱动OLED屏使用U8G2,移植采用硬件SPI。</li> <li>每个按键直连一个GPIO,GPIO开启内部上拉,随屏幕刷新更新按钮状态,发现GPIO向低电平跳变代表按钮按下。无消抖。游戏中要每帧调用扫描函数,更新按键状态。</li> <li>每个游戏(含主菜单)都视为一个app。主循环通过变量<code>nextApplication</code>判断进入哪个app,默认进入主菜单。</li> <li>每个app实现run抽象方法,在内部通过u8g2操作屏幕实现游戏逻辑,run方法返回后重新进入主循环。</li> <li>在菜单app中,选定某项后,修改<code>nextApplication</code>后return,下一轮循环根据修改后<code>nextApplication</code>进入选定的游戏。</li> <li>power键试实现了短按、长按,超过500ms视为长按。长按重启系统。短按进入低功耗模式,通过power按键的再次按下唤醒系统。</li> <li>通过goSleep函数进入低功耗模式,关闭无关的LDO,被唤醒后恢复oled,蜂鸣器供电,并重新初始化oled,以便继续执行谁面前的逻辑。</li> <li>5分钟无任何操作自动进入低功耗模式。</li> <li>整体对时钟稳定性要求不高,采用内置振荡器。</li> <li>每个APP内尽量不使用全局变量。未开启堆内存,分配 14000kb 栈内存。</li> </ol></li> </ul> <p>注:若您的项目涉及软件开发,请在附件上传对应的工程源码。这里可以详细说明您的软件流程图、功能模块框图、相关算法的解释或科普、源码结构、编译环境的搭建和配置、源码编译方法、程序烧录方法等。推荐图文并茂的形式向别人介绍您的想法。</p> <h1>6、BOM清单</h1> <table> <tr> <th>大部分器件可在立创商城购买,在嘉立创eda中所有器件均已做<strong style="color:#FF0000;">器件标准化</strong>,绑定了立创商城编号。另外的配件购买链接如下。</th> <th>元件</th> <th>规格</th> <th>购买链接</th> <th>备注</th> </tr> <tr> <td>OLED屏</td> <td>插接16PIN 白光</td> <td><a href="https://item.taobao.com/item.htm?id=661586745978" target="_blank">https://item.taobao.com/item.htm?id=661586745978</a></td> </tr> <tr> <td>锂电池</td> <td>303040-350毫安</td> <td><a href="https://item.taobao.com/item.htm?id=578342493353" target="_blank">https://item.taobao.com/item.htm?id=578342493353</a></td> <td>让卖家配 <strong>1.25正向</strong> 插头</td> </tr> <tr> <td>摇杆</td> <td>10*10*9MM</td> <td><a href="https://item.taobao.com/item.htm?id=595134302480" target="_blank">https://item.taobao.com/item.htm?id=595134302480</a></td> <td>同时购买键帽;买两套</td> </tr> <tr> <td>CH32V203F6P6</td> <td>CH32V203F6P6</td> <td><a href="https://item.taobao.com/item.htm?id=689965812965" target="_blank">https://item.taobao.com/item.htm?id=689965812965</a></td> <td></td> </tr> <tr> <td>磁铁</td> <td>50片 8*2mm</td> <td><a href="https://item.taobao.com/item.htm?id=44141739720" target="_blank">https://item.taobao.com/item.htm?id=44141739720</a></td> <td>高温会让磁铁消磁</td> </tr> </table> <h1>7、大赛LOGO验证</h1> <p><img src="//image.lceda.cn/pullimage/e4D1l3djrkdYCTCwchHBzKuC4EA3mHLyY2SgnASS.png" alt="image.png"></p> <h1>8、演示您的项目并录制成视频上传</h1> <p><a href="https://www.bilibili.com/video/BV1Th4y117CR/" target="_blank">https://www.bilibili.com/video/BV1Th4y117CR/</a></p> <h1>9、由开源软件强力驱动</h1> <table> <tr> <th>功能</th> <th>开源链接</th> </tr> <tr> <td>OLED驱动</td> <td><a href="https://github.com/olikraus/u8g2" target="_blank">https://github.com/olikraus/u8g2</a></td> </tr> <tr> <td>DAPLink固件</td> <td><a href="https://github.com/XIVN1987/DAPLink" target="_blank">https://github.com/XIVN1987/DAPLink</a></td> </tr> <tr> <td>五子棋AI算法</td> <td><a href="https://gitlab.com/nowozin/maxigoarduboy" target="_blank">https://gitlab.com/nowozin/maxigoarduboy</a></td> </tr> <tr> <td>ikun动画压缩算法</td> <td><a href="https://www.quicklz.com/" target="_blank">https://www.quicklz.com/</a> (官网打不开了)</td> </tr> <tr> <td>恐龙游戏素材</td> <td><a href="https://github.com/chromium/chromium" target="_blank">https://github.com/chromium/chromium</a></td> </tr> <tr> <td>瑞萨SDK</td> <td><a href="https://github.com/renesas/fsp" target="_blank">https://github.com/renesas/fsp</a></td> </tr> </table> <h1>10、可优化部分</h1> <p>重新排布元件使电池附近1mm无元件,减少装配难度。 usb口置于左或右侧,而不是上下的长边处。现有的设计typec口处太薄了,强度不够。另外可以埋入小铁棍加强筋。 面板磁铁粘贴处除胶,改用ab胶粘贴,自带的3m胶不足以粘强磁。 摇杆太小,方向不好控制。 无法显示电量,充电状态。</p>

文档

BOM

暂无

附件

附件名 下载
CH32V203_DAPLink_aa14c15.hex
shield.STL
SolidWorks.7z
AtomBoy-49MB.mp4

评论(31)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
童话与云 回复
<p>来咯[emojis:色]</p>
立创电赛 回复
<p>B站视频可以同步上传在本页面哦</p>
传说哥 回复
<p>@lcds 超过50MB了,传不上去[emojis:流汗]</p>
立创电赛 回复
<p>@legend-tech 可以压缩后传哦</p>
立创电赛 回复
<p>点赞+收藏+评论赢500元京东E卡:<a href="https://diy.szlcsc.com/posts/9d4438cf6d3848d3a53c50e029514a91" target="_blank">https://diy.szlcsc.com/posts/9d4438cf6d3848d3a53c50e029514a91</a></p>
无敌 回复
<p>立创yyds</p>
manweirdo 回复
<p>没想到 坤 还能这么玩 哈哈</p>
ideajoker 回复
<p>高,实在是高</p>
lumine_c 回复
<p>好好好</p>
盖乐世呦 回复
<p>传说哥yyds</p>
传说哥 回复
<p>YYDS</p>
9618_hfx 回复
<p>好好好</p>
立创电赛 回复
<p>@vjk0909恭喜您的评论中奖了!10元京东E卡等额积分已发送到您的账户,您可登录立创商城https://activity.szlcsc.com/point/use/info.html查看!感谢您对立创电赛的支持!</p>
立创电赛 回复
<p>@9618_hfx恭喜您的评论中奖了!10元京东E卡等额积分已发送到您的账户,您可登录立创商城https://activity.szlcsc.com/point/use/info.html查看!感谢您对立创电赛的支持!</p>
prdjc2020 回复
<p>有创意很有趣的小东西[emojis:强]</p>
小飞警 回复
<p>好好好都这么玩是吗</p>
6737950a 回复
<p>立创nice</p>
linbingxu 回复
<p>传说哥牛蛙</p>
guohaifang 回复
<p>不来个灌老高手都对不起你这块板子</p>
RoastDuck 回复
<p>成功被封面的坤吸引了进来~</p>
shanghaikb 回复
<p>专研勤学苦练</p>
chkj123 回复
<p>[emojis:强][emojis:强][emojis:强]</p>
MOLUN 回复
<p>有颜有料</p>
ooooooqqqqq 回复
<p>你是懂ikun的小心思的</p>
立创电赛 回复
<p>@chkj123恭喜您的评论中奖了!10元京东E卡等额积分已发送到您的账户,您可登录立创商城:<a href="https://activity.szlcsc.com/point/use/info.html" target="_blank">https://activity.szlcsc.com/point/use/info.html</a> 查看!感谢您对立创电赛的支持!</p>
立创电赛 回复
<p>@ooooooqqqqq恭喜您的评论中奖了!10元京东E卡等额积分已发送到您的账户,您可登录立创商城:<a href="https://activity.szlcsc.com/point/use/info.html" target="_blank">https://activity.szlcsc.com/point/use/info.html</a> 查看!感谢您对立创电赛的支持!</p>
手攒着月 回复
<p>来了[emojis:爱心]</p>
jrfinseu 回复
<p>开庭请带上你的设计</p>
立创电赛 回复
<p>恭喜您在“瑞萨MCU杯”第八届立创电子设计开源大赛中获得一等奖,相关奖励及证书将于近期发出!</p>
传说哥 回复
<p>@lcds 感谢立创电赛工作人员的辛苦付出和卓越组织。</p>
ntees 回复
<p>开庭带着你的Ikun联名版板子来</p>
goToTop
svg-battery svg-battery-wifi svg-books svg-more svg-paste svg-pencil svg-plant svg-ruler svg-share svg-user svg-logo-cn svg-double-arrow