背景介紹:《看 sugar 如何說 i2c 通訊》 中 sugar 把 i2c 的硬體知識單拿出來說了說,硬體原理是 i2c 的精髓所在。
有些晶元以「非常規方式」使用 i2c,比如本篇要說的
tm1637
,懂硬體原理就能理解這種非常規軟體的設計依據。本篇的另一大亮點是引入了
proteus
的使用,使用虛擬硬體一分錢不花地搞懂全部知識。
tm1637
與tm1650
是同一廠家生產的同類晶元,主要用於驅動 8 段數碼管和掃瞄矩陣鍵盤(請看 sugar 寫的《看 sugar 講矩陣鍵盤的使用》)。
sugar 把兩者的 datasheet 拿過來對比一下,一目了然兩者有何區別。
1、tm1637
比tm1650
能多驅動兩個 8 段數碼管。
2、兩者長相不同,tm1637
腳多幾根。
3、tm1650
能掃瞄更多的按鍵。
一、倒序的位號
當 sugar 看到tm1637
的中文 datasheet 時覺得挺舒服的,看到下面的暫存器也覺得簡單易懂。
然而當 sugar 看到這個示波器波形和 i2c 匯流排資料時當真是暈了一下:
按 datasheet 所述,這個調亮度的應該是0x89
怎麼會是0x91
呢?腦子裡的二進位制敏感神經覺得是二進位制位的編號反了,一查 datasheet 果然是這樣:
按照 《看 sugar 如何說 i2c 通訊》寫到的常規 i2c 二進位制位編排方式應為:
bit7 -> bit0
高位在左,而 tm1637 和 tm1650 都是bit1 -> bit 8
低位在左。這就導致了按常規方法解析 tm16xx 的 i2c 資料出錯。
二、tm16xx 沒有「裝置位址」
在搞清楚二進位制位編號順序問題後,細看資料監視過程如下:
展開一組資料,可以發現 tm16xx 驅動 8 段數碼管時傳送的資料是:「命令」 + 「資料」
的形式,與 datasheet 所述一致。這就表示 tm16xx 不是 i2c 從裝置,沒有常規的「i2c 從裝置位址」。
這種不以「從裝置」身份出現在匯流排上的器件就比較霸道,如果要在同一匯流排上掛其他 i2c 裝置,則 i2c 從裝置位址要避開所有的命令,幾乎 tm16xx 就是在說:這條 i2c 匯流排歸我了。
搞清楚以上兩點,就已經會用 tm16xx 晶元了。搞清楚之後,因為不按常規出牌的 datasheet 給資料分析帶來麻煩,所以 sugar 從常規角度按 datasheet 做了個總結,看下面這個圖來做資料分析就舒服多了:
估計將本文看到這裡的讀者會對 sugar 用虛擬硬體研究知識的方法感興趣,下面 sugar 就來介紹一下這套方法。
首先來看一下 sugar 這次**工程的全貌,如下:
使用的是 arduino 主控,深入研究 arduino 的 c++ 封裝對鍛鍊軟體架構能力很有幫助。sugar 的第一期《軟體架構訓練計畫》以 rt-thread 為主體,在掌握了 rt-thread 之後,做應用層**的目標是像 arduino 一樣易用。arduino 在 proteus 中的**比較成熟而且各種庫非常多,所以在 proteus 中做微控制器程式設計** arduino 虛擬硬體是首選。
在本次的 proteus 工程中 sugar 使用了「匯流排」連線,目的是使圖面看起來更乾淨,使用匯流排的操作過程如下:
在 proteus 中晶元直接搜型號就能找到,本次用到的虛擬儀器有「 i2c 匯流排監視器」和「示波器」,到下圖所示的地方找:
關於 proteus 的操作 sugar 在網上找到了乙份非常不錯的中文教程,將在 10 月 1 日連帶相關軟體以及本篇的工程一起在《軟體架構訓練計畫》群裡共享。
sugar 用了 6 位 8 段數碼管顯示「1234567890」,這個庫原生支援 4 位 8 段數碼管,變成 6 位並且不丟顯示內容的話需要做 2 處修改。sugar 給出其中一處的提示,讀者可以嘗試通過架構除錯鎖定另一處的位置,並改之。第一處的提示如下:
如上圖修改之後能顯示 6 位了,超過 6 個數字要顯示時會漏掉後 2 位,這就留給讀者自己改吧(按架構找,不然**太多會很痛苦,找到並改對了就鍛鍊了架構能力)。
至於本篇的**,那是相當的簡單,sugar 一行都沒寫,只拼了 3 塊積木(弄 3 塊積木寫這麼多東西,不要打我喲),如下:
看一看大海
前段時間又去了海邊走走,歸途中西邊天空公升起絢爛的晚霞。2020年已然過去一半,特殊環境下發生的事情都是奇特的,這裡記錄一下碎片化的思考。雞湯不是毒藥,喝一碗不多。選擇 代表著主動性,通常可以與強大的個人能力聯絡起來 被選擇 往往代表著被動性,無能為力 迫不得已常常與之掛鉤,大多數理解為能力弱小。我...
python大神幫我看一看
python 專案 求大神 人民幣大寫轉換器 編寫乙個圖形介面的人民幣大寫轉換程式,使用者輸入乙個阿拉伯數字金額,將其轉換為人民幣大寫輸出。如 輸入小寫數字金額 1234567.89 中文大寫金額 壹拾貳萬叄仟肆佰伍拾柒元捌角玖分 說明 1.阿拉伯數字對應大寫表 數字轉大寫金額 0 零 1 壹 2 ...
看一看 笑一笑
一 廣東一夥劫匪在搶劫銀行時說了一句至理名言 通通不許動,錢是國家的,命是自己的!大家都一聲不吭躺倒。這叫觀念轉化,改變原有固定思維方式。劫匪望了一眼穿著裙子躺在桌上呈大字形的出納小姐,說 請你躺文明些!這是劫財,又不是劫色!這叫堅持職業操守,不該幹的不幹!搶劫成功回去後,其中乙個新來的劫匪 碩士學...