切换到宽版
  • 10350阅读
  • 19回复

[C51]8x8x8三维三极管控制光立方过程与经验 [复制链接]

上一主题 下一主题
离线zhangzhi297
 

发帖
42
M币
4117
专家
12
粉丝
47
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2016-11-08
继上一篇帖子4x4x4光立方:http://bbs.mydigit.cn/read.php?tid=1872486
本光立方的亮点在于不使用锁存器,只利用单片机的24个引脚和64个三极管完成8x8x8的光立方控制。结构简单易懂,好焊接,没有过多连线,美观性强,具体结构原理请看上一篇帖子。


    当我有光立方这个概念的时候,我就在想它的原理。当然,平面上的led灯阵是通过行列两个方向的交叉控制,能过实现两列引脚控制所有灯,但立体的灯阵光立方不同,它不仅有平面的两个方向的控制,还要有立体的层控制,也就是说最简化的状态就是通过“行”“列”“层”三个组线控制一个灯,也就相当于xyz立体坐标系中的一个点可以由三个数表示一样,光立方中的一个灯就由xyz的一个坐标点来表示,通电的灯亮,不通电的灯不亮,只要能实现控制每一个灯单独亮起就成功了。但是跟平面灯阵不同,一个led灯有两个引脚,平面上通过两列的控制非常方便,对对应的灯通能够亮起的电,但立体的光立方不能这样做,一个led由三个部分控制,对应一个led的电平会有8种情况,但一个led只有两个引脚,最多有4种电平情况,所以我设计了通过一个三极管将一个控制端分为两列控制,从而达到一个led有8种情况,能够通过三端控制。具体原理我在上一篇文章中已经详细介绍了,这里不再复述。
   上回的4x4x4的光立方只是在我焊接这个8x8x8光立方之前的准备工作,以实验验证三极管的控制方案可行。这次我给大家带来8x8x8的光立方,并在光立方中加入了重力感应器,红外接收器,串口上位机,立体贪吃蛇小游戏。这里主要讲述制作过程和经验。
成品展示:




我的主要制作材料:
1、蓝色方形雾状led灯    512只    30元
2、STC12C5A60S2单片机    1片    6元
3、SS8050贴片三极管    64粒    5元
4、12*18cm数控万能洞洞板    1片    7元
5、10mm铜柱    4个     1.6元
6、2.54mm杜邦簧片    64个    1元
7、27mhz晶振    1颗    0.3元
8、红外接收器    1颗    0.3元
9、ADXL345加速度模块    1块    6元

制作这个光立方的成本大约也就50多元,主要贵在了led灯上,毕竟512不是个小数目。

我的制作过程:
    第一步当然是焊接led了,先从一个焊接成一排,再从一排焊成一面,最终面组合成立体的。
    为了节省成本,底座我选择的是裸露的杜邦端子,能够直接插拔的同时方便焊接,在跟板子接触的地方用弯排针连接,先把对应底座的点用弯排针固定起来。




正面用另一块洞洞板固定位置,到背面焊接固定好


然后焊接正面的杜邦端子



至此,底座的部分已经完工了,为了方便,先焊接背面电路,再进行led的组合

ss8050三极管的集电极接底座,基极和发射极并联引出两列排线。我这里基极横着穿到正面引出,发射极直接竖着引出。

完工之后的样子:


然后是led的焊接组装:焊接成排

焊接成面,我没有专用的光立方模版,只有用排针简易搭了一个固定架,最终感觉还是挺整齐的。


组装成体,至此耗时3个晚上,总共超过24小时


    然后就是接线的过程,这个过程没有拍照,也没有什么技术要求,只要把对应的三组引脚共24跟线接到单片机的P0,P1,P2接口上就可以了。我充分利用了洞洞板的特性,引线在板子上穿来穿去,始终不允许出现飞线的情况,原谅我有点强迫症。

    同样我也充分利用了这个单片机的接口,共36个io,除去接光立方的24个,还剩12个,其中有两个外接串口,一个红外中断,三个按键中断,4个加速度计的spi接口。还剩下两个io供以后扩展使用。其中三个按键共用了一个中断,使用二极管隔离可以做到同样的中断效果。

    第二步就是最具有挑战力的程序编写了,我最开始采用软件扫描的方法,但是发现单片机在计算其他东西的时候亮度会变很低,效果并不好,后来我采用定时器扫描的方式就稳定多了。由于跟网上流行的光立方结构不同,他们的光立方同时可以有一个面的灯亮起,然后8个面进行扫描,我的是同时最多8个灯亮起,然后64列进行扫描,每个灯亮起的平均时间是他们的八分之一,亮度也应该是八分之一,但实际观测来看区别并不大,64分之一的时间所产生的亮度还是可以亮的接受。

下面是扫描显示的驱动,仅供参考
  1. /***********************************************
  2. 刷新显示的工作全部放到定时器0中断函数
  3. 8位自动重载 定时间隔10us
  4. P0为层控制,每一层的的正极,强推挽高电位使亮
  5. P1为三极管基极,高电位使亮
  6. P2为三极管发射极,低电位使亮
  7. 由于是三维控制,同时最多可以8个灯亮,所以可以有3种扫描方式,下面只是其中一种
  8. ***********************************************/
  9. void timer0_isr(void) interrupt 1
  10. {
  11. P0=0x00;
  12. P2=0xff;
  13. if(layer_x<7)
  14.     layer_x++;
  15. else
  16. {
  17.     layer_x=0;
  18.     if(layer_y<7)
  19.         layer_y++;
  20.     else
  21.         layer_y=0;
  22.     P1=1<<layer_y;
  23. }
  24. P2=~(1<<layer_x);
  25. P0=display[layer_x][layer_y];
  26. }


    自己光立方的显示驱动写完了,就可以编写动画程序了,但是8x8x8的动画实在太多,一时间也设计不出好看的,所以就借鉴了网上的动画程序,同时把网上的一款设计很不错的上位机编写接口,结果非常完美,在这里我要非常感谢@Agu's Mill 古作坊 的软件和源码,感谢他的程序方便我,也方便了大家。


    自己预先计划设计的加速度计也要写程序了,本想设计一个能模拟水在立方体中随重力变化的程序,恕我愚笨,没能有好的程序设计,最后只能写了个简单的重力点程序,只亮一个点,这个点随重力移动,始终保持在最下面,刚开始感觉挺好玩的,但由于供电线的阻碍,也没有很有趣。

    然后是计划中的贪吃蛇,在原先4x4x4的光立方中就想加入这个游戏,但分辨率太小,不能愉快玩耍,只做了个简易动画。这次8x8x8的我想就完全可以写这个游戏,可以通过串口和红外进行输入,有前后左右上下共6个方向,所以需要6个按键,跟传统贪吃蛇多了一个维度,刚开始时很容易找不到方向,慢慢就好了,然后就是当贪吃蛇走到光立方中间的时候,蛇和食物具体的位置不能很好的判断,需要换好几个方向进行观察,一局下来眼都花了。不过结果还是蛮成功的,玩的挺有意思。
(强烈简易取消图片上传的300k限制,好多大图都得压缩,动图压缩的都看不见了)
全文完,上面就是本次独自制作的8x8x8光立方的过程介绍,下面是作品展示。



















[ 此帖被zhangzhi297在2016-11-13 00:02重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共10条打赏 ,M币+30
离线founder3

发帖
3757
M币
185
专家
1
粉丝
38
只看该作者 1楼 发表于: 2016-11-08
请登录后查看
离线南子

发帖
166
M币
336
专家
0
粉丝
6
只看该作者 2楼 发表于: 2016-11-08
请登录后查看
离线z466904982

发帖
1427
M币
5019
专家
2
粉丝
45
只看该作者 3楼 发表于: 2016-11-08
请登录后查看
离线cj8510

发帖
1922
M币
5502
专家
4
粉丝
128
只看该作者 4楼 发表于: 2016-11-08
请登录后查看
离线guxing7351

发帖
12272
M币
15761
专家
3
粉丝
73
只看该作者 5楼 发表于: 2016-11-08
请登录后查看
离线仁杰

发帖
455
M币
156
专家
1
粉丝
19
只看该作者 6楼 发表于: 2016-11-08
请登录后查看
离线snaker

发帖
882
M币
1600
专家
1
粉丝
29
只看该作者 7楼 发表于: 2016-11-08
请登录后查看

发帖
5240
M币
9593
专家
71
粉丝
360
只看该作者 8楼 发表于: 2016-11-08
请登录后查看
离线ddjjjj01234

发帖
2194
M币
334
专家
3
粉丝
87
只看该作者 9楼 发表于: 2016-11-10
请登录后查看
快速回复
限80 字节
温馨提示:所有技术区严禁灌水,“沙发”“顶”字样;禁止广告贴;以免被删除
 
上一个 下一个