ネット体重計 – ネット家電研究会を参考にしながら、デザ言Dの課題の一部として体重計(TANITA1630)を改造しようと思ったら失敗した。

DSC00781.jpg

ソースコード(AVR-GCC)

安い体重計。表示部分が7segLEDなのでそこから取る。

DSC00732.jpgDSC00734.jpg



DSC00735.jpg

2カ所のバネを外し、電池ぶたの裏の金具も外すと

DSC00740.jpgDSC00743.jpg

開く。そして基盤裏

DSC00748.jpgDSC00751.jpg

7セグメントLED(BT-M515RE)を取り外す。3桁なのに12ピンしかない。

DSC00756.jpgDSC00758.jpg

データシートの置いてあるchipdocへのログインがめんどくさいので、自分で調べた。普通のアノードコモンの7segが三つ合体しているだけ。アノードが3つあって3桁のどれを光らせるかを選ぶ様になっている。

DSC00786.jpg

この7セグメントLEDへの指示をAVRで横取りして、体重を見る。

ケタ指定はアノードに繋がっていたので体重計のマイコン(NEC uPD789024)からの出力をそのまま入力すればOK。数字はカソードなので

DSC00787.jpg

こんな感じにすると、ケタと数字が読みとれる。

VCC, GNDを体重計から取ってこんな感じになった。

DSC00759.jpgDSC00781.jpg

AT90S4433を久しぶりに使った。

そして失敗した。数字がまざる。

原因は多分クロックか何か。

uPD789024が5MHzで動いていて、すごい勢いで3桁を切り替えている。こちらの4433は8MHzで、桁を監視し、足の状態から数字を推測している。多分これがまずい。

足の状態を取得し終わった後、数字へ変換する様にしてみても駄目だった。

あともっと速くするには

/** 体重計IOまわり **/

#define SEGLED_N_1() bit_is_clear(PINC,PC5) // セグメントLED 数字表示部

#define SEGLED_N_2() bit_is_clear(PINC,PC4)

#define SEGLED_N_3() bit_is_clear(PINC,PC3)

#define SEGLED_N_4() bit_is_clear(PINC,PC2)

#define SEGLED_N_5() bit_is_clear(PINC,PC1)

#define SEGLED_N_6() bit_is_clear(PINC,PC0)

#define SEGLED_N_7() bit_is_clear(PINB,PB2)

#define SEGLED_N_8() bit_is_clear(PINB,PB1)

#define SEGLED_D_1() bit_is_set(PINB,PB0) // セグメントLED 桁表示部

#define SEGLED_D_2() bit_is_set(PIND,PD7)

#define SEGLED_D_3() bit_is_set(PIND,PD6)

が原因というか、1PORTの情報まるごと取得する様にすれば良いんだけど4433は8ピンあるPORTが1つも無いので8535か2313などでやり直してみると良いかも知れない。

あと分解したは良いけど元に戻せる気がしない。