步驟1:零件和工具
零件和工具
帶LCD屏幕的東西 - 我將使用亞馬遜的這種數字秤
螺絲刀和鉗子 - 打開秤
剪線鉗和剝線鉗 - 剪線和剝線
烙鐵 - 將電線連接到屏幕上
連接線 - 對于這種低電流應用,非常小的規格是好的
熱膠槍 - 用于涂層連接和固定物
電路組件
ATmega328p - 用于讀取LCD屏幕的狀態
2 x 0.1uF陶瓷電容 - 去耦帽
1 x 10k ohm電阻 - AVR復位引腳上拉
1 x 22k ohm電阻 - ADC偏置
1 x 100k ohm電阻 - ADC偏置
1 x常開按鈕 - AVR重置按鈕
1 x電壓調節器 - I‘ m使用LD1086 3.3V LDO穩壓器
1 x 10uF鋁電容 - 穩壓器穩定性
1 x 1uF 鋁電容器 - 穩壓器穩定性
公頭連接器 - 將電線連接到面包板
面包板 - 用于原型設計
Perfboard - 如果您正在焊接實際電路
其他項目
串行啟用LCD屏幕 - 重印我們的內容正在閱讀(來自Sparkfun)
邏輯分析器 - 要查看w LCD引腳正在做。..。..我使用Link Instruments的這個小工具
第2步:打開它
有沒有人打開任何東西?
確保您的設備已拔下/取出所有電池!
尋找將設備固定在一起的螺釘(可能在背面/底部)
拆下任何外殼以露出內部電路
充電電容器可能會造成危險所以一定不要觸摸電路板上的任何東西!
在圖像中,您可以看到數字秤的內部。有一個覆蓋控制器的神秘黑色粘性電路,一些稱重傳感器,零(觸摸傳感器)和單元按鈕,以及LCD屏幕。不久前,這個電路將裝滿許多可以產生相關數據的組件。現在,它是一個單獨的,無法訪問的MCU,帶有一個外部EEPROM芯片。這就像設計師不希望我們這樣做。..。..即使沒有可訪問的數據點,我們也可以通過直接讀取LCD屏幕獲得我們想要的信息。
步驟3:LCD連接
LCD屏幕通常以幾種可能的方式連接到電路。..。..
插座連接 - 接頭引腳插入板上的插座
帶狀電纜 - 有時插入插座,但并非總是
直接連接 - LCD屏板上的引腳被固定
在廚房秤中,液晶顯示屏位于框架內,并用幾個螺絲將電路板固定在框架上。這樣,電路板上的驅動焊盤與LCD引腳接觸。
沒有焊接或電纜連接。如果電路沒有牢固地固定在外殼上,那么與LCD的連接就會丟失 - 正如缺少的部分或非常昏暗的屏幕所證明的那樣。這可能使得難以將任何附加導線連接到LCD。如果即使單個LCD引腳與電路板沒有良好接觸,部分或全部LCD也無法正常工作。
以下圖片不是這個精確的電路板,但它確實展示了電路板上的LCD焊盤。..。..
步驟4:將電線添加到LCD
這是事情變得有點棘手的地方。如上一步所述,LCD引腳仍然需要與驅動板焊盤良好接觸。您必須使用最佳判斷來確定將電線焊接到電路板的位置。我還建議使用令人難以置信的東西線;我的是30規格。
找到連接到LCD的焊盤
焊接導線連接到每個焊盤(使用細線和少量焊料)
將電線的另一端焊接到插頭引腳(保持順序!)
將電路板重新連接到LCD上。
接通電源以確保LCD仍在工作。
可選 - 用熱膠涂抹線頭連接以提高耐用性和絕緣性
此時,我們不知道什么線做什么,但沒關系。只要你保持它們的順序(液晶顯示屏上的針腳1連接到公頭的針腳1等),就可以輕松搞清楚了!在這一點上,我們應該談談這些LCD屏幕是如何工作的。
步驟5:直接驅動LCD
大多數人不是因為他們在駕駛它時有興趣閱讀液晶顯示屏,所以學習如何閱讀屏幕的最佳方法是了解它是如何被驅動的。我發現的最佳解釋之一可以在Atmel應用筆記 - AVR340中找到,但我會快速回顧一下這些關鍵點。
LCD屏幕是一組對存在的交流信號作出反應的段。控制引腳。這些段可能構成類似于七段顯示的字母數字數字,或者它們可以用于屏幕上的單個圖標,例如時鐘上的AM/PM文本。一個屏幕可以有許多段僅由幾個引腳驅動 - 這是通過多路復用完成的。
單個引腳實際上用于驅動多個段,具體取決于一組 COM 信號中的哪一個處于活動狀態任何給定的時間。如上所述,LCD使用AC信號驅動,通常以二進制方波(OFF或ON)的形式。但是,COM信號將具有三種狀態:OFF,1/2 ON和ON,其中ON為源電壓。鏈接的應用筆記給出了以下控制方案的示例。
注意,在任何給定時間只有一個COM信號有效,而LCD段line將控制不同的段,具體取決于三個COM行中的哪一個是活動的。要啟用段,段線必須與COM線異相。換句話說,如果COM線為HI,則段線應為LO,反之亦然。
我們的下一步是確定哪些LCD引腳是COM線,哪個驅動器段!
步驟6:查找COM線
在此步驟中,我們使用邏輯分析儀查找COM信號。實際上,可以使用示波器,實際上可以更容易地找到COM線;但是,O-scope的輸入通常比LA少得多。即使我們正在尋找交流信號,我們仍然可以通過設置觸發閾值電平在LA上讀取它。
數字廚房秤的工作電壓約為3.3V DC,因此我設置了觸發器我的LA輸入電壓為2.5V DC。這將確保我只看到脈沖的正部分,忽略所有其他未定義的區域。
將輸入觸發閾值設置為源電壓電平的約3/4
將水平時間刻度設置在5ms/格的范圍內
將電線連接到電路上的已知接地(或負極電池端子)
接通電源比例,確保屏幕正常工作
單獨監控單個引腳以查看脈沖的樣子
重復所有引腳,直到找到COM線為止
》
根據我的經驗,COM線通常位于LCD屏幕的末端;因此,它們應該是我們焊接到電路板上的第一批連接線。它們很容易與其他信號區別開來。..。..
如果使用O-Scope,它們可能是唯一具有三種狀態而不是兩種狀態的信號
它們會定期重復(可能是10到50毫秒)
LCD屏幕的狀態不會影響脈沖模式
數字廚房秤有四條COM線,周期為32ms。每個脈沖完全關閉或完全打開約4ms。無論在任何給定時間屏幕上顯示什么,這四行都具有永不重復的永久重復模式。
步驟7:解碼控制信號
這一步是迄今為止最難的,因為它需要您解決各種難題,以便破譯控制信號的含義。 LCD屏幕越復雜,這個過程就越困難。
數字刻度LCD有16條控制線--4條是COM信號,另外12條是驅動線段。我們需要監視每個引腳的各種LCD狀態,直到我們發現哪個LCD引腳負責哪個段。由于有四條COM線,每條控制線可能驅動四個不同的線段。
確定LCD屏幕的所有可能分段。
這是每個已知的分段廚房秤液晶屏。實際上,只有數字4的 b 和 c 段才有效,但顯示的所有其他段都有效。
記錄Pin已知LCD屏幕的狀態
使用邏輯分析儀(或O-Scope),我們需要記錄所有COM狀態的每個引腳的狀態。只要屏幕沒有變化,這些模式就會無限重復;但是,如果一個單獨的段發生變化,那個特定的控制信號將會改變其中一個COM線。我已經突出顯示了COM信號1和3的幾個不同引腳的狀態。注意,當一個引腳沒有時,一個段是ON的。與COM線相位 - 當COM為HI時,Pin為LO,反之亦然。
創建顯示所有引腳的矩陣已知LCD屏幕的狀態。
困難的部分是找到模式 - 也就是說,當LCD的單個段變為活動或非活動時,哪些控制線正在改變。最好將所有這些引腳狀態寫入各種屏幕,并對其中的段處于活動狀態進行細微更改。
在此表中,我放了a 1 用于任何COM信號有效(異相)的控制線,如前一個引腳狀態圖像所示。注意屏幕上的每個活動圖標非常重要 - 其中一些可能以隨機的方式連接。
找到模式的最佳方法是在細微變化后記錄引腳狀態。例如,與 AM 然后 PM 顯示的完全相同的時間,或顯示 0 然后 8 的數字。請記住,LCD中沒有芯片或線跡,因此控制線的順序可能與實際屏幕上的線段順序相對應。
請注意,引腳11和12的狀態看起來非常類似于13和14.鑒于屏幕顯示0.0,這是否意味著引腳11和12驅動數字1,而引腳13和14驅動數字0?這是有道理的,因為有六個有效段用于形成0,而引腳11和12中的第七個有效段可能是小數位!使用類似顯示器的附加讀數將有所幫助。例如,將模式從fl-oz切換為克將使顯示從0.0 fl-oz更改為0g。突然,引腳11和12全部關閉,但引腳13和14保持不變。我認為我們找到了一種模式!
填寫將控制線連接到LCD段的地圖。
在讀取足夠的讀數后,完整的模式將被發現。由于我們不直接驅動屏幕,測試理論連接的唯一方法是記下您認為針對給定顯示器的引腳應該是什么,然后使該顯示發生 - 在我們的例子中,這是通過切換到特定模式并向比例添加重量,直到顯示特定的數字組合。
在廚房秤的情況下,引腳排列在一種實際上有道理的方式!字母數字數字按其顯示順序組合在一起。隨機順序中唯一的行是各種單位圖標,但這是可以預料的。此表顯示了哪些控制線驅動給定有效COM信號的哪些段。
步驟8:LCD讀取器電路設計
帶有模式(希望如此)發現,我們可以創建一個電路來讀取LCD引腳并對該數據做一些有用的事情。
該電路將在ATmega328p微控制器上構建,使用所有默認的熔絲設置,無需外部時鐘源。由于COM線是模擬輸入,我們可以使用ADC單獨讀取每一個,但這是不必要的。通過使用模擬比較器僅讀取一條COM線,然后在軟件中模擬其他三條COM線,可以實現相同的效果。您可能還注意到我沒有為引腳5和6顯示連接。原因很簡單 - 我不關心這些引腳所代表的任何數據。
模擬比較器非常簡單。我們使用R5和R6在AIN1上產生偏置電壓。該分壓器的輸出約為2.7V - 類似于我用于邏輯分析儀輸入的2.5V觸發閾值! COM1線路饋入AIN0。只要AIN0上的電壓上升到高于AIN1或低于AIN1,比較器就會觸發。我們將其用作中斷源來觸發LCD讀周期的開始。這也將用于保持我們的模擬COM線同步。
我想指出的最后一件事是與JP2的關系 - 我實際上計劃完全控制數字秤。我的電路將能夠禁用秤的電源并驅動模式按鈕。我選擇讓PORTC全部開放。這樣就可以釋放I2C引腳,以便與其他芯片進行通信,以及一些可能在以后使用的模擬輸入。您的實現可能會有所不同!
步驟9:固件 - 概述
完整的源代碼可以在這個GitHub存儲庫中找到。
首先,我們的固件將讀取LCD屏幕,然后將該信息打印到另一個LCD屏幕進行比較。唯一的問題是我們想要使用的LCD屏幕是串行驅動的,我們的串口發送引腳用于讀取其中一個LCD引腳。這不是什么大問題,只是意味著來自該引腳的數據將無法訪問。
執行此操作的代碼是repo中的main-v1.0.c文件。這段代碼用C語言編寫。它不使用任何Arudino庫,因為那不是我的角色。這些是我們固件的基本構建塊。..
在引導時,配置AVR設備
設置IO引腳
關閉未使用的模塊(以節省電量)
使用定時器0模擬COM線2,3和4
使用模擬比較器檢測Com線1
使用USART0寫入本地LCD屏幕
在主要永久循環中
閱讀LCD屏幕
將LCD屏幕數據打印到本地LCD屏幕
中斷服務程序
計時器0 - 與COM同步1,用于模擬每4ms的其他COM線路動作
模擬比較器 - 當COM 1變為HI時觸發,打開定時器0
其他功能我們需要
讀取LCD - 啟動LCD屏幕讀數。..可能啟用模擬比較器并等待
LCD打印 - 傳輸一個字節,字符串等到本地LCD屏幕
步驟10:固件 - Main-v1.0
如上所述,代碼的第一個版本將讀取刻度LCD屏幕,然后將該數據寫入本地LCD屏幕。這僅僅是一個概念證明。..將數據從一個屏幕重寫到另一個屏幕是毫無意義的!我相信我已經很好地評論了源代碼,如果你對AVR代碼都熟悉的話,你可以理解發生了什么,但是我會討論一些更好的觀點。
一些文件是包括:
modules/avr.h - 我將其包含在我工作的每個AVR項目中
modules/lcd/SerLCD_2x16 .h - 用于寫入本地LCD屏幕的函數原型和宏
definitions.h - 我們所有的主要宏和定義
util/delay.h - 簡單的延遲例程
硬件模塊在第486行的 initialize_AVR()函數中配置。
模擬比較器
模擬比較器在COM 1的上升沿觸發。然后啟用定時器0,模擬COM 1下降沿和其他3個COM線。
定時器0
定時器0設置為每0.2ms觸發一次ISR。 ISR中的計數器將導致事件發生很長時間(即,持續4ms),并且switch語句用于對每個活動的模擬COM線執行不同的操作。每個COM線都會記錄LCD引腳的狀態,并且在周期結束時,定時器0被禁用。
LCD讀取
讀取周期由線路311上的 readLCD()功能啟動。該功能簡單地使能模擬比較器并處于while循環中,直到讀取周期完成。第321行上的 decodeDigit()函數實際上將所有引腳狀態數據轉換為每個LCD數字的數字。
LCD寫入
從407開始發現的LCD寫例程是我剛才寫的。它們也可以在modules/lcd文件夾中找到,但我只是將我想要使用的函數復制到主文件中,所以我沒有從多個位置編譯文件。我認為它們非常自我解釋。
Main
在Main函數中,初始化AVR設備,然后進入永久循環。在該循環內,讀取LCD屏幕,并將該數據解碼并打印到本地LCD屏幕以進行測試。跳過數字4,我不擔心刻度的時鐘模式,因為我沒有監視AM/PM LCD引腳段。
在以前版本的電路中,我監控所有LCD引腳,因此我能夠打印時鐘模式數據;但是,提供的固件無法執行此操作。另請注意,由于用于打印到此LCD屏幕的串行傳輸線,數字中的“&”符號阻止我讀取一個特定的Scale LCD引腳。
步驟11:固件 - 主要-v2.0
固件的第二個版本幾乎與第一個版本相同;但是,我已經刪除了所有的LCD打印功能。不再有 LCD_write()功能,USART0也沒有使用。另一個主要區別是添加了 updateLevel()函數。這個簡單的例程將比例顯示的權重打包成兩個字節的數據。這些字節將通過TWI總線傳輸到另一個芯片,但這是另一個項目的一部分,所以我沒有在這里包含該代碼。您還應該注意到,在main的開頭,代碼會將比例強制為以克為單位的重量模式。這樣做是為了使從這個比例傳輸到互聯網的數據始終保持一致。
主循環現在讀取lcd屏幕并在延遲1秒之前創建兩個級別的數據字節。 ,沒什么。所有的辛勤工作都由模擬比較器和定時器0的中斷服務程序處理。
步驟12:結束
我希望通過使用本指南,您可以入侵任何數字設備,以便從LCD屏幕讀取數據。
責任編輯:wv
-
微控制器
+關注
關注
48文章
7948瀏覽量
154900 -
lcd
+關注
關注
34文章
4520瀏覽量
171493
發布評論請先 登錄
超低功耗的32位微控制器RX110系列數據手冊

RM42L432 16/32位RISC閃存微控制器數據表

TMS570LS0714-S 16位和32位RISC閃存微控制器數據表

TMS570LS1115 16位和32位RISC閃存微控制器數據表

TMS570LS1225 16位和32位RISC閃存微控制器數據表

TMS570LS1227 16位和32位RISC閃存微控制器數據表

TMS570LS1114 16位和32位RISC閃存微控制器數據表

TMS570LS3137-EP 16位和32位RISC閃存微控制器數據表

RM41L232 16位和32位RISC閃存微控制器數據表

RM44Lx20 16位和32位RISC閃存微控制器數據表

TMS570LS0232 16位和32位RISC閃存微控制器數據表

評論