工作项目中,有一个3x8段数码管显示的需求,无意中从网上有看到有大牛改装电子胸牌的帖子。
因而对电子胸牌的原理做了仔细的了解。选择的是淘宝上买的 ”乐闪优 五字电子胸牌“。
厂家不提供通讯接口,但提供PC上位机改字软件,本来想通过bus hound直接抓取USB通讯数据协议。
这样主机(Android) 可以直接把电子胸牌做数码管显示。结果,协议破解还相对容易,只是每次改字软件每次更新显示内容时,胸牌上都会固定的显示 “M1-8 ”,用来提示。故不能直接使用。看来只能重写固件代码了;1,胸牌上电前,按下靠近胸牌的按键,胸牌会进入DFU模式,但自己写的代码烧进去后,总是无法运行,每次都提示option bytes未擦除,这条路没走通。
2,找到芯片上的Jtag引脚,将PA13 PA14引脚接到J-link, j-link采用SWD 模式 可以调试代码了。
但是因驱动GPIO中有用到PA13, PA14引脚,故中途调试时,调试一次后,就没办法再调试了,SWD引脚指向GPIO功能了。3,最后想到用厂家的ISP串口下载功能。PCB板上Pin44 BOOT0脚强行接到了GND,但进入ISP需要BOOT0接VCC,故将芯片Pin44脚翘起,通过一个按键开关,来选择是接GND,还是接VCC,
顺便把Pin7 Reset引脚也接了出来,通过按键可以进行复位。PCB上预留了串口接BT模块的接口,故PCB上有USART1的接口焊盘,方便了不少。PA14->Usart1.TX PA15->Usart1.RX.
(二) 胸牌点亮逻辑图
通过万用表测量,胸牌共11行,55列,GPIO点亮逻辑图如下:
从辑逻图中可以看出,每二列由一个GPIO控制。
所以驱动时序如下1,先将要点亮的列GPIO设置为Push_Pull 输出高,其它输出低。2,对选中列的11行进行扫描,每次扫描输出一行中二个灯的状态。主要点亮函数代码附上:
void LED_Open(uint8_t x, uint8_t y)
{
if(x >= LED_COL || y >= LED_ROW)return;
Clear_All_LED();
Write_One_LED_Pin(Led_GPIO_Port_Arrange[x / 2], Led_GPIO_Pin_Arrange[x / 2], 1); //ÁÐѡͨ
if (y <= 4){
if(x % 2 == 0)
{
if(x <= 4 * y ) Write_One_LED_Pin(Led_GPIO_Port_Arrange[y * 2 + 1], Led_GPIO_Pin_Arrange[y * 2 + 1], 0);
else Write_One_LED_Pin(Led_GPIO_Port_Arrange[y * 2], Led_GPIO_Pin_Arrange[y * 2], 0);
}else{
if(x <= 4 * y + 3) Write_One_LED_Pin(Led_GPIO_Port_Arrange[y * 2 + 2], Led_GPIO_Pin_Arrange[y * 2 + 2], 0);
else Write_One_LED_Pin(Led_GPIO_Port_Arrange[y * 2 + 1], Led_GPIO_Pin_Arrange[y * 2 + 1], 0);
}
}else{
if(x % 2 == 0)
{
if(x <= 6 * y - 10) Write_One_LED_Pin(Led_GPIO_Port_Arrange[y * 3 - 4], Led_GPIO_Pin_Arrange[y * 3 - 4], 0);
else Write_One_LED_Pin(Led_GPIO_Port_Arrange[y * 3 - 5], Led_GPIO_Pin_Arrange[y * 3 - 5], 0);
}else{
if(x <= 6 * y - 7) Write_One_LED_Pin(Led_GPIO_Port_Arrange[y * 3 - 2], Led_GPIO_Pin_Arrange[y * 3 - 2], 0);
else Write_One_LED_Pin(Led_GPIO_Port_Arrange[y * 3 - 4], Led_GPIO_Pin_Arrange[y * 3 - 4], 0);
}
}
}
现在胸牌屏改为了串口通讯接口,就做了一下串口的上位机软件,可以手动点亮屏。
项目中,要将游戏中的运动人物的时间,速度,个数显示到屏,在Excel中弄一些显示模板,对协议也做了包装,上面只要发送 目标值(小数字)及即时值(大数字)就可以实现显示功能了。
这样游戏和硬件中都不需要含字库了。具体软件Android游戏的同事正在调试使用,等样机出来后,我会上图,敬请大家期待哈~~~
(显示屏外套上滤光片后,显示效果就好很多,先上个裸照)
最终的效果图出来了,实际的显示效果比拍出来的效果好。
拍出来的图片红晕太明显了,实际显示没有红晕。
要做样机,后续又买了两个,居然发现版本号不一样了,MCU换成了MM的单片机~~~~~~
找电话给淘宝店主,一是不给换,二要再买之前GD的版本,店主也爱理不理,态度不好。
可能是我没能如他希望的那样,没有下个大单给他吧~~~
下载了MM的下载软件,同样把BOOT0拉到高,用MM32ISP下载工具,然而怎么样都连不上,无法用ISP。
怀疑有二点:1,MM单片机ISP串口不知是不是PA14,PA15,从MM资料中没有找到这方法的介绍。
2,网络上说MM单片机有些是没有ISP功能的。搞的我也很怀疑了。官方资料上,对ISP好像也很排斥一样,一点介绍都没有。最后只能用终级一招了,换MCU。从嘉立创上买来GD单片机换掉它。
最终搞定!
-
pcb
+关注
关注
4317文章
23009浏览量
396322 -
数码管
+关注
关注
32文章
1875浏览量
90951 -
ISP
+关注
关注
6文章
476浏览量
51716
原文标题:胸牌DIY改装记录
文章出处:【微信号:weixin21ic,微信公众号:21ic电子网】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论