引言
本應(yīng)用筆記介紹了一種DS1845或DS1855非易失數(shù)字電位器的簡(jiǎn)單接口方案,,利用Microchip?的PIC12F509實(shí)現(xiàn),。
硬件設(shè)置
圖1所示原理圖描述了按鍵與微控制器的連接,也說(shuō)明了I?C接口的實(shí)現(xiàn)方案,。
三個(gè)瞬態(tài)按鍵開(kāi)關(guān)分別用于遞增(UP),、遞減(DWN)和中間值(MID)設(shè)置。按下按鍵時(shí),,開(kāi)關(guān)迫使對(duì)應(yīng)的微控制器通用I/O (GP0,、GP1和GP3)口置低。因?yàn)槲⒖刂破鲀?nèi)部有上拉電阻(可選),,可以確切選擇這些I/O口,。如果微控制器工作在低電流休眠模式,IO口的電平變化也能產(chǎn)生喚醒中斷信號(hào),。另一輸入開(kāi)關(guān)為單刀雙擲開(kāi)關(guān),,連接到微控制器的GP2引腳,通過(guò)軟件編程選擇POT0和POT1,。
SDA,、SCL和LED連接到GP5、GP4和GP0,。SDA和SCL具有4.7kΩ上拉電阻,,直接與數(shù)字電位器的通信接口連接。LED和MID瞬態(tài)開(kāi)關(guān)共用GP0引腳,。大部分時(shí)間段,,GP0作為輸入引腳,按下MID按鍵時(shí)將GP0拉低。然而,,如果按下其它開(kāi)關(guān)的任何一個(gè)或兩個(gè)同時(shí)按下,,PIC?輸出低電平,點(diǎn)亮LED,。這種情況下,,LED將在MID按下時(shí)被點(diǎn)亮,其它按鍵按下時(shí),,LED由PIC驅(qū)動(dòng),。R1、R2,、R3可選,,使用PIC12F509時(shí)并不需要這些電阻。
圖2給出了估DS1845/DS1855時(shí)的特定連接方式,。跳線(xiàn)器用來(lái)選擇地址總線(xiàn),,隔離開(kāi)所使用的電源VCC (VDD)以及SDA和SCL。
圖1.PIC12F509接口電路
圖2.DS1845/DS1855數(shù)字電位器與PIC控制器的連接
固件說(shuō)明
這個(gè)項(xiàng)目的固件采用匯編語(yǔ)言編寫(xiě),,由MPLAB IDE (7.31版)進(jìn)行編譯,。該編譯軟件可以從Microchip免費(fèi)獲得。整個(gè)軟件占用的指令空間低于512字節(jié)(閃存),,數(shù)據(jù)空間低于14字節(jié)(RAM),。
指令分為5個(gè)模塊:初始化、讀操作,、遞增調(diào)節(jié),、遞減調(diào)節(jié)、中間值設(shè)置,。固件簡(jiǎn)單地以連續(xù)輪詢(xún)檢測(cè)輸入引腳進(jìn)行循環(huán),。因?yàn)檐浖墓逃醒舆t和軟件處理邏輯限制,采用了開(kāi)關(guān)去抖,,減少噪聲引起開(kāi)關(guān)的誤操作,。
一旦PIC電源上電或從休眠狀態(tài)喚醒(如果休眠狀態(tài)使能),將運(yùn)行初始化模塊,。初始化模塊運(yùn)行后,,為相應(yīng)的寄存器、標(biāo)志位及變量賦值,。執(zhí)行這些指令后,,從循環(huán)中調(diào)用讀操作或?qū)懖僮鳎ㄟ^(guò)I?C接口與數(shù)字電位器通信,。
數(shù)字電位器的I?C讀操作僅發(fā)生在RD_FLAG標(biāo)志置位時(shí),。初始化期間標(biāo)志位被置位,,此后,任何按鍵操作將改寫(xiě)數(shù)字電位器的數(shù)值,。數(shù)字電位器的電阻值改變后或器件開(kāi)啟后,,執(zhí)行一次I?C讀操作;如果沒(méi)有按下UP,、DWN或MID按鍵,,總線(xiàn)上不會(huì)發(fā)生通信操作。例如:如果數(shù)字電位器用來(lái)控制電源校準(zhǔn),,這時(shí)接通按鍵控制器可實(shí)現(xiàn)在線(xiàn)編程,。當(dāng)前的數(shù)字電位器抽頭位置將在執(zhí)行I?C寫(xiě)命令之前讀取。I?C寫(xiě)指令完成后,,RD_FLAG將重新置位,通過(guò)I?C讀取新的數(shù)字電位器數(shù)值,。
運(yùn)行UP,、DWN和MID模塊后將執(zhí)行讀操作。運(yùn)行這些模塊時(shí),,對(duì)應(yīng)的引腳被拉至低電平,;一旦檢測(cè)到引腳的高電平狀態(tài),將立即退出相應(yīng)的程序模塊,,不會(huì)產(chǎn)生任何I?C通信,。如果檢測(cè)到低電平狀態(tài),軟件將按照邏輯流程執(zhí)行相應(yīng)的程序模塊,。
可以從Maxim的FTP網(wǎng)站下載程序源代碼(.asm文件),。
功能說(shuō)明
該項(xiàng)目固件和硬件提供幾種不同操作,對(duì)DS1845/DS1855數(shù)字電位器的抽頭位置進(jìn)行編程,。開(kāi)關(guān)和LED的功能如下:
POT0/1 (選擇觸發(fā)開(kāi)關(guān)) 該開(kāi)關(guān)選擇下一個(gè)循環(huán)需要控制的數(shù)字電位器,。改變開(kāi)關(guān)S4的狀態(tài)選擇POT0或POT1,這將產(chǎn)生I?C讀操作,,不會(huì)影響LED,。
點(diǎn)擊MID、UP或DWN按鍵(< 400ms) 按下其中一個(gè)按鍵,,所選擇的數(shù)字電位器的抽頭位置將遞增(UP),、遞減(DWN)或設(shè)置為中間值(MID)。執(zhí)行I?C寫(xiě)操作時(shí),,LED將馬上點(diǎn)亮,;I?C讀操作將在下一循環(huán)產(chǎn)生。
按下并保持UP或DWN按鍵(> 400ms) 按下并保持UP或DWN按鍵時(shí),,所選擇的數(shù)字電位器將進(jìn)入快速遞增或遞減模式,。數(shù)字電位器的抽頭位置將連續(xù)變化,,直到釋放按鍵或達(dá)到最大/最小值。執(zhí)行I?C寫(xiě)操作時(shí),,LED將點(diǎn)亮,,并在釋放按鍵之前保持點(diǎn)亮狀態(tài)。釋放按鍵后,,將在下一循環(huán)執(zhí)行I?C讀操作,。
按下并保持UP按鍵,然后點(diǎn)擊DWN按鍵 按下并保持UP按鍵,,所選擇的數(shù)字電位器的抽頭位置將開(kāi)始遞增,。然后,在UP按鍵仍處于按下?tīng)顟B(tài)時(shí),,點(diǎn)擊DWN按鍵,,抽頭位置將直接置于最大電阻位置。LED始終處于點(diǎn)亮狀態(tài),,直到釋放按鍵,。釋放按鍵后,將在下一循環(huán)執(zhí)行I?C讀操作,。
按下并保持DWN按鍵,,然后點(diǎn)擊UP按鍵 按下并保持DWN按鍵,所選擇的數(shù)字電位器的抽頭位置開(kāi)始遞減,。在DWN按鍵按下的同時(shí),,點(diǎn)擊UP按鍵,所選擇電位器抽頭位置將直接置于最小電阻值0x00,。LED始終處于點(diǎn)亮狀態(tài),,直到釋放按鍵。釋放按鍵后,,將在下一循環(huán)執(zhí)行I?C讀操作,。
LED閃爍3次 PIC上電初始化或當(dāng)看門(mén)狗定時(shí)器(使能情況下)引起系統(tǒng)復(fù)位時(shí),LED將閃爍3次,。
LED連續(xù)快速閃爍 發(fā)生I?C通信故障時(shí),,LED將連續(xù)閃爍。故障解除后,,LED將恢復(fù)正常狀態(tài),。通過(guò)檢測(cè)器件地址是否正確、是否連接了I?C總線(xiàn)進(jìn)行故障排查,。
結(jié)論
本應(yīng)用筆記介紹了一種DS1845/DS1855接口方案,,利用簡(jiǎn)單的高性?xún)r(jià)比控制器實(shí)現(xiàn)。按鍵輸入將被轉(zhuǎn)化成I?C命令,,無(wú)需主機(jī)控制,,即可實(shí)現(xiàn)數(shù)字電位器的遞增,、遞減調(diào)節(jié),或?qū)⑵湓O(shè)置在數(shù)字電位器的中間值,。