Google ドライブのセキュリティ アップデートが行われてから、どうもブログに張り付けたリンクからアクセスできない模様。
とりあえず、Arduino関係のリンクを張っておきます。
こんなブログ、誰も見てないだろうと思って放置していたんだけど、ちょこちょこ見てくれる方がいるみたい。
ぼちぼち、修正していきます。
<追記>
ほぼ修正できたはず
でも、スケッチ内の不等号 「<」が「<」って表示になってしまってるので、こちらもぼちぼち修正します。
Google ドライブのセキュリティ アップデートが行われてから、どうもブログに張り付けたリンクからアクセスできない模様。
とりあえず、Arduino関係のリンクを張っておきます。
こんなブログ、誰も見てないだろうと思って放置していたんだけど、ちょこちょこ見てくれる方がいるみたい。
ぼちぼち、修正していきます。
<追記>
ほぼ修正できたはず
でも、スケッチ内の不等号 「<」が「<」って表示になってしまってるので、こちらもぼちぼち修正します。
2年ぶりに更新
備忘録だな
前回、2年前に廃インク吸収パッドのカウンターリセットをしたんだけど、また
「プリンタ内部の部品調整時期が近づいています」
がでた。
いい加減、買い替えろよって話もなくはないんだけど、壊れないんだよねぇ。
丈夫丈夫
今回も同じ方法でリセットしたけど、2年は短いよね。
もしかしたら、書き換える場所が違うか、初期値が 0 じゃないか。
でも、新しい情報がないので、様子見。
もう一回リセットはあるのか?
内部の部品調整時期のメッセージがずっと出てましたが、ついに、廃インク吸収パッドのカウンターがオーバーしてしまったようで、インクランプと用紙ランプが交互にピコピコ点滅を繰り返すようになりました。
電源ボタン以外は全く受け付けない状態です。
「12年も使ったし、そろそろ買い替えるか」
という気持ちと、
「まだどこも悪くないのに、強制的に買い換えさせられるのはムカつく」
という気持ちが戦った結果、
「何とかカウンターをリセットしよう」
ムカつく気持ちが勝ちました。
1.SSC Service Utility を試みる
PX-G900 = 海外モデルの Epson Stylus Photo R800 らしいので、R800で実行してみたけど、どうも通信がうまくいっていないようで無理でした。PX-G900 と G920 は別物の扱いのようです。
2.Epson adjustment program R800 を試みる
いきなり「dllが無い」と言われ困る。
Win98 XP あたりで動くことが分かったので、嫁が学生の時に使っていた、びぶ朗(FM-V BIBLO NE3/45LR)を引っ張り出して動かすも、認識するのだが、
「communication error occurred.」と出てアウト。
3.Epson Maintenance Reset Utility を試みかけてやめる
EPSON の US サイトにあったりセットプログラム。
だけど、一回限りで一時的にしか復活しない仕様のようなので、やめる。
4.WIC というものを発見。
金がかかるのでやめる。
(そもそも、対応機種ではなかったみたい)
諦めかかったのだけど、「カウンターの数値って、EEPROMに書き込んでるんとちゃうか?外付けやったら書き換えられるんとちゃうか?」
早速バラしました。
左がメイン、右が電源基板
あった!
「S24CS02A」 I2C の EEPROM
これなら Arduino で読み書きできる。
でも、この中のどの数値を書き換えるかわからん。わかっているのは、カウンターの数値が
0番 : 14787
80番 : 17115
を超えると、ロックがかかる。ということだけ。
とりあえず2バイトずつ取り出してそれらしい数値があれば書き換えるか。とか思ってたんだけど
なんと、『Epson Stylus Photo R800 Service Manual』 なるものを発見!らっき~!
そこには
Home side : 14787 count or more
Opposite-to-home side : 17115 count or more
Home side: 24<H>, 25<H>
Opposite-to-home side: 26<H>,27<H>
と書いてある。
では、ROMのデータを読んでみよう。
取り外して DIP に変換。
スケッチはラジオペンチさんの「ArduinoでI2Cの外付けEEPROMを使う」のものを少し改造。アドレス指定を 16bit → 8bit に変更(最後に記載)
接続図(ラジオペンチさんの図をそのままお借りしました。ずぼらしました。すみません。)
シリアルモニタにダンプされたデータ。
アドレス:データ
Home side (14787 count or more)
0x24 : 0xCF
0x25 : 0x19
Opposite-to-home side (17115 count or more)
0x26 : 0x96
0x27 : 0x20
となっているのですが、
Home side を
0x19CF にしても 0xCF19 にしても 14787 にならない。
Opposite-to-home side もそう。
もう計算方法がよくわからないので
『全部 0 にすればリセットしたことになるだろう』
という、適当な理由で「0」に書き換えました。
基板は 1.27mm ピッチ、DIP は 2.54mm ピッチ。
若干アクロバティックな方法で接続しました。
で、組み直して(ねじが一本余ったけど気にしない)、電源を入れる。
お~ピコピコ点滅しなくなったよ。
動き出したよ。
・・・
なんかエラーで止まったよ。通信エラーっぽい。
電源を入れなおす。
・・・
ばっちりっす!今のところ問題なく動いています。
おそらく、PX-G900 ~ G930 まで、行ける方法だと思います。
需要があるかわかりませんが、いちおうGoogle Drive にスケッチをアップしておきます。
「PX-G920リセット」フォルダの「S24CS02A_rw.zip」です。
------
スケッチはこちら。
/*
ベース
* I2C EEPROMの読み書きテスト
* 対応素子:24LC32, 24LC64, 24LC128, 24LC256, 24LC512
* 2015/07/03 ラジオペンチ http://radiopench.blog96.fc2.com/
* ダンプ出力にASCII文字を追加
S24CS01A_02A用に改造(のっち)
容量が小さいのでアドレス指定が 8bit
*/
#include <wire.h> //I2C ライブラリ
unsigned int startADR = 0x0000;
unsigned int endADR = 0x00FF; // アドレス上限
unsigned int ADR;
byte data;
char ascii[16]; // ASCII文字表示用バッファ
void setup() {
Wire.begin();
Serial.begin(9600);
/* // EEPROMに値を書き込みたい場合はコメントアウトを外す
Serial.print("Writing");
i2cEEPROM_write( 0x50, 0x24, 0); // データーを書込
i2cEEPROM_write( 0x50, 0x25, 0);
i2cEEPROM_write( 0x50, 0x26, 0);
i2cEEPROM_write( 0x50, 0x27, 0);
*/ // ここまで
Serial.println(); // 書き込み完了で改行
Serial.println(); //
Serial.println("EEPROM dump"); // EEPROMのダンプ開始
Serial.println("ADDR 0 1 2 3 4 5 6 7 8 9 A B
C D E F ASCII CHARACTER");
// 全アドレス範囲をダンプ
for (ADR = startADR; ADR <= endADR; ADR++) {
if ((ADR % 16) == 0) { // 行の先頭なら
printADR(ADR); // アドレス表示
for (int n = 0; n <= 15; n++) {
ascii[n] = ' '; // ASCII文字表示バッファを初期化
}
}
data = i2cEEPROM_read(0x50, ADR); // 外付けEEPROM読出
Serial.print(data >> 4, HEX); // 上位4ビット
Serial.print(data & 0x0F, HEX); // 下位4ビット
Serial.print(" "); // スペース入れ
if ((data > 0x20) & (data < 0x7F)) { // 表示可能文字
ascii[ADR & 0x0F] = data; // 表示バッファに記録
}
if ((ADR % 16) == 15) { // 行末なら
for (int n = 0; n <= 15; n++) { // ASCIIで表示
Serial.print(ascii[n]);
}
Serial.println(); // 改行
}
}
}
void loop() { // 無限ループで停止
}
void i2cEEPROM_write(int i2cADR, unsigned int eeADR, byte
data ) {
Wire.beginTransmission(i2cADR); // i2cアドレス指定
Wire.write((byte)(eeADR & 0xFF)); // EEPROMアドレス指定
Wire.write(data);
Wire.endTransmission();
delay(5); // 書き込み完了待ち
}
byte i2cEEPROM_read( int i2cADR, byte eeADR ) {
Wire.beginTransmission(i2cADR); // i2cアドレス指定
Wire.write((byte)(eeADR & 0xFF)); // EEPROMアドレス指定
Wire.endTransmission();
Wire.requestFrom(i2cADR, 1); // 1バイトデータリクエスト
while (Wire.available()) {
data = Wire.read(); // データ受信
}
return data;
}
void printADR(unsigned int a) { // アドレスを4桁表示
String b = "";
if (a < 0x1000) {
b = "0";
}
if (a < 0x100) {
b = "00";
}
if ( a < 0x10) {
b = "000";
}
Serial.print(b);
Serial.print(a, HEX);
Serial.print(" ");
}
以下の二つのブログを参考に徹底的に廃インクパッドの掃除をしました。
・ヘッド直下の廃インクパッド
3年と4カ月ぶり2回目ですが、もうドロドロ。
印字ヘッドの下
左端
印字ヘッドの下の下
左端の下
でかいパッドは、台所でじゃぶじゃぶ洗いましたが、もうエンドレスかと思いました。流しても流してもどんどん黒い液体が出てくるんですよ。
どんだけインクを無駄に使ってたのか・・・
ヘッド直下のは、ばらせなさそうだったので、参考にしたブログのようにレンジ換気扇用のマジックリン原液とダイソーの注射器で、繰り返すこと数時間。
なんか、周りも泡だらけになったので、霧吹きで水をかけまくってすすぎました。精密電子機器ですが、この下は濡れても大丈夫そうだったので。
すっかりきれいになりました。
清掃と、グリスアップで終了。今、パッドも本体も乾かしてます。
あとはカウンタのリセットをするだけです。
デイケアのラジカセ、電源が入ったり入らなかったりで、電源ボタンをぐりぐり押すもんだから、ボタンがぐらぐら。
「修理させてっ」って許可をもらって持って帰ってきました。
電源コードを挿したり抜いたりすると治る。というので、てっきり電源コネクタの半田クラックか?と思ってたんだけど、原因はコンデンサ不良でした。
整流回路のコンデンサが膨らんでてわかりやすい。
容量は表示は 2200μF だけど、920μF しかなかった。(自作のLCメーターでの測定なので誤差は大きいと思うけど)
AC10V を整流平滑化。
ものは 25V 2200μF なんだけど、手持ちにないので
25V 1000μF x 2 で代用。2個とも立てるとCDドライブに当たるので、ちょっと変則的な格好になった。
たぶんこれで問題ないと思うけど、裏に 470μF も追加しておいた。
電源ボタンは、ヒンジがぽっきり。
0.4mm のポリカの板でヒンジを作成。ぐりぐりし過ぎなければ大丈夫にしたつもり。
あと、ときどきCDの音が飛ぶ(止まる)。
原因はレーザー出力の低下か摺動部のグリスの劣化かと思ったので、ちょこっとだけグリスアップしておいた。
もしかしたら、電源の修理だけで治ってるかもしれない。
今、市販の CD と CD-ROM で2時間ほど鳴らしているけれど、一瞬読み込みが怪しかったのが一回だけあった。
また、飛ぶようになったら、レーザーダイオード近くの半固定抵抗をちょこっといじってみよう。
<追記>
一時間に一回くらいつまずくので半固定抵抗を少しまわしました。
今のところ数時間は問題なく動いています。