ネット体重計 – ネット家電研究会を参考にしながら、デザ言Dの課題の一部として体重計(TANITA1630)を改造しようと思ったら失敗した。
ソースコード(AVR-GCC)
7セグメントLED(BT-M515RE)を取り外す。3桁なのに12ピンしかない。
データシートの置いてあるchipdocへのログインがめんどくさいので、自分で調べた。普通のアノードコモンの7segが三つ合体しているだけ。アノードが3つあって3桁のどれを光らせるかを選ぶ様になっている。
この7セグメントLEDへの指示をAVRで横取りして、体重を見る。
ケタ指定はアノードに繋がっていたので体重計のマイコン(NEC uPD789024)からの出力をそのまま入力すればOK。数字はカソードなので
こんな感じにすると、ケタと数字が読みとれる。
VCC, GNDを体重計から取ってこんな感じになった。
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などでやり直してみると良いかも知れない。
あと分解したは良いけど元に戻せる気がしない。