CS5460A, 電子秤 DIY


http://wp.me/ph3BR-G6

 

CS5460A, 原來是一個很老的IC, 資料表說用在 POWER METER 設計, 但是買過幾種電子秤, 不管在祖國還是台灣, (可能天下文章一大抄) 裡面都有這個IC, 仔細看了一下, 原來他們都是設計成 ADC 的用途.

LOAD CELL (重量感測器), 測量重量的元件, 就是 “簡單" 的一條金屬棒, 上面貼有 STRAIN GAUGE (應變片) 組成的電橋.

STRAIN GAUGE (應變片), 很薄的金屬片, 貼在一層膠膜上, 其實就是一個電阻, 在一定範圍內, 受力變長, 電阻值增加, 力量移除, 回復原來的長度.

Wheatstone bridge (惠斯登電橋), 四個電阻組成的網絡, 輸入穩定的電壓, 輸出端因 (力量) 電阻值的變化而電壓改變.

電子秤突然壞了, 只顯示 -SYS-, 如果不是 CS5460A 壞了, 就是負責讀重和顯示的 MCU 有問題, 送原廠不值得, 買新的就 $200 不到, 所以拆了, 玩玩 DIY, 自己寫一個電子秤應該不太難. 確定 LOAD CELL 是好的, 用力扳它的時候輸出電壓有變化. 顯示也是好的, 因為上電開機會顯示 HELLO, 也會從 9 數到 0, 然後才出現 -SYS-, 但是不再量重, 看來是某些不明的原因讓他罷工, 可是不完全損壞, 最可能是CALIBRATION 錯誤或者EEPROM資料損壞.

nEO_IMG_DSCF3245

.

nEO_IMG_DSCF3248

nEO_IMG_DSCF3247

如果不是設計者故意的在 MCU 的軟件內設定 “自殺" 行為, 就是 CS5460A 壞了. 反正買個新的比送原廠修的運費來的划算, 而且可以 DIY 改機, 可以加入自定的功能, 例如, 無線傳送讀數, 2D barcode 系統整合等.

首先要試驗, 能不能用 MCU 控制 CS5460A, 他用 SPI 的 4 線功能, 資料說明書寫的, 初始化要做以下動作,

送入 8 bit 一組的指令到 CS5460A, 分別為 0xff, 0xff, 0xff (最少3個到5個), 然後 0xfe

搜尋了 GOOGLE, 找到有人寫的源碼, 確定是這樣做的….


;----------------------------------
;CS5460A_INIT CS5460A初始化
;
;---------------------------------
CS5460A_INIT:
         LDI    R16,   $FF
         CALL   CS5460A_WR8
         LDI    R16,   $FF
         CALL   CS5460A_WR8
         LDI    R16,   $FF
         CALL   CS5460A_WR8
         LDI    R16,   $FE
         CALL   CS5460A_WR8  ;串口初始化

REF:

http://www.codeforge.cn/read/11425/avrcs5460asm.asm__html

http://en.wikipedia.org/wiki/Wheatstone_bridge

人家的源碼

;avr单片机与CS5460的汇编程序,实现了对cs5460的初始化和读写…源码文章链接

;CodeForge.cn

;免费源码开发与分享

;http://www.codeforge.cn/read/11425/avrcs5460asm.asm__html

;avrcs5460asm.asm in avrcs5460asm.rar

;avr单片机与CS5460的汇编程序,实现了对cs5460的初始化和读写...源码文章链接

;----------------------------------
;CS5460A_INIT CS5460A初始化
;
;---------------------------------
CS5460A_INIT:
LDI    R16,   $FF
CALL   CS5460A_WR8
LDI    R16,   $FF
CALL   CS5460A_WR8
LDI    R16,   $FF
CALL   CS5460A_WR8
LDI    R16,   $FE
CALL   CS5460A_WR8  ;串口初始化

LDI    R16,   $42
LDS    R19,   LIRMSOS0
LDS    R18,   LIRMSOS1
LDS    R17,   LIRMSOS2
CALL   CS5460A_WR32    ;直流偏移

LDI    R16,   $60
LDS    R19,   LIRMSOS3
LDS    R18,   LIRMSOS4
LDS    R17,   LIRMSOS5
CALL   CS5460A_WR32    ;交流偏移

LDI    R16,   $44
LDS    R19,   LIRMSDE0
LDS    R18,   LIRMSDE1
LDS    R17,   LIRMSDE2
CALL   CS5460A_WR32    ;电流增益

LDI    R16,   $4A
LDS    R19,   COUNT0
LDS    R18,   COUNT1
LDS    R17,   COUNT2
CALL   CS5460A_WR32    ;直流偏移

LDI    R16,   $78
LDS    R19,   PEIZHI0
LDS    R18,   PEIZHI1
LDS    R17,   PEIZHI2
CALL   CS5460A_WR32    ;配置寄存器

LDI    R16,   $E8
CALL   CS5460A_WR8
LDI    R16,   $E8
CALL   CS5460A_WR8
LDI    R16,   $E8
CALL   CS5460A_WR8    ;开始转化
RET

;-------------------------------
;CS5460A_WR8 发送一个字节命令
;入口:  R16
;占用资源:R16 R25
;------------------------------
CS5460A_WR8:
CBI   PORTD,CSCS
;CALL  DELAY500US
LDI   R25,    $8
CLC
LOOP1:
ROL   R16
BRCS  YI1
CBI   PORTD,CSSDI
RJMP  SZ1
YI1:      SBI   PORTD,CSSDI
SZ1:      NOP
NOP
SBI   PORTD,CSSCLK
NOP
CBI   PORTD,CSSCLK
NOP
DEC   R25
BRNE  LOOP1
CALL  DELAY500US
SBI   PORTD,CSSCLK
RET

;----------------------------------
;CS5460A_WR32 向寄存器写数据
;入口:  R16 R17 R18 R19
;占用资源:R25
;---------------------------------------
CS5460A_WR32:
CBI   PORTD,CSCS       ;写入命令(寄存器地址)
CALL  DELAY500US
LDI   R25,    $8
CLC
LOOP2:
ROL   R16
BRCS  YI2              ;判断数据位1或0
CBI   PORTD,CSSDI      ;置0
RJMP  SZ2
YI2:      SBI   PORTD,CSSDI      ;置1
SZ2:      NOP
NOP
SBI   PORTD,CSSCLK     ;时钟下降沿改变数据
NOP
CBI   PORTD,CSSCLK
NOP
DEC   R25
BRNE  LOOP2

CALL  DELAY500US       ;写入第一个数据字节
LDI   R25,    $8
CLC
LOOP3:
ROL   R19
BRCS  YI3
CBI   PORTD,CSSDI
RJMP  SZ3
YI3:      SBI   PORTD,CSSDI
SZ3:      NOP
NOP
SBI   PORTD,CSSCLK
NOP
CBI   PORTD,CSSCLK
NOP
DEC   R25
BRNE  LOOP3

CALL  DELAY500US       ;写入第二个数据字节
LDI   R25,    $8
CLC
LOOP4:
ROL   R18
BRCS  YI4
CBI   PORTD,CSSDI
RJMP  SZ4
YI4:      SBI   PORTD,CSSDI
SZ4:      NOP
NOP
SBI   PORTD,CSSCLK
NOP
CBI   PORTD,CSSCLK
NOP
DEC   R25
BRNE  LOOP4

CALL  DELAY500US       ;写入第三个数据字节
LDI   R25,    $8
CLC
LOOP5:
ROL   R17
BRCS  YI5
CBI   PORTD,CSSDI
RJMP  SZ5
YI5:      SBI   PORTD,CSSDI
SZ5:      NOP
NOP
SBI   PORTD,CSSCLK
NOP
CBI   PORTD,CSSCLK
NOP
DEC   R25
BRNE  LOOP5
CALL  DELAY500US
SBI   PORTD,CSSCLK
RET

;--------------------------------------
;CS5460A_RE32     从寄存器读出数据
;出口;
;占用资源;
;--------------------------------------
CS5460A_RE32:
CBI   PORTD,CSCS
SBI   PORTD,CSSDO
CALL  DELAY500US       ;送命令子节(寄存器地址)
LDI   R25,    $8
CLC
LOOP6:
ROL   R16
BRCS  YI6
CBI   PORTD,CSSDI
RJMP  SZ6
YI6:      SBI   PORTD,CSSDI
SZ6:      NOP
NOP
SBI   PORTD,CSSCLK
NOP
CBI   PORTD,CSSCLK
NOP
DEC   R25
BRNE  LOOP6

LDI   R25,   $8     ;读出第一个字节
CALL  DELAY500US
SBI   PORTD,CSSDI
CLC
LOOP7:    SBI   PORTD,CSSCLK
NOP
SBI   PORTD,CSSDO
SBIC  PIND,   5
SEC
ROL   R3
CBI   PORTD,CSSCLK
CALL  DELAY500US
DEC   R25
BRNE  LOOP7

LDI   R25,   $8     ;读出第二个字节
CALL  DELAY500US
LOOP8:    SBI   PORTD,CSSCLK
NOP
SBI   PORTD,CSSDO
SBIC  PIND,  5
SEC
ROL   R2
CBI   PORTD,CSSCLK
CALL  DELAY500US
DEC   R25
BRNE  LOOP8

LDI   R25,   $8     ;读出第三个字节
CALL  DELAY500US
SBI   PORTD,CSSDI
CLC
LOOP9:    SBI   PORTD,CSSCLK
NOP
SBI   PORTD,CSSDO
SBIC  PIND,   5
SEC
ROL   R1
CBI   PORTD,CSSCLK
CALL  DELAY500US
DEC   R25
BRNE  LOOP9
NOP
NOP
SBI   PORTD,CSSCLK
CBI   PORTD,CSSDO
RET

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s