工作項目中,有一個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); //áD??í¨
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
+關注
關注
4319文章
23081瀏覽量
397531 -
數碼管
+關注
關注
32文章
1882瀏覽量
91066 -
ISP
+關注
關注
6文章
476瀏覽量
51805
原文標題:胸牌DIY改裝記錄
文章出處:【微信號:weixin21ic,微信公眾號:21ic電子網】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論