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