RICOH SP150 chip resetleme

İnternetten kampanyadan ucuza aldığım yazıcının toneri geçenlerde bitti. Fakat en son çıktının renkleri mükemmeldi. İçindeki toner bitmiş olamazdı. Üzerinde demo toneri ile geldiğinden az sayıda bir baskı yapmıştık. Sonra tonerin üzerine baktığımda bir chip vardı. Fakat bu çip tonerin üzerine sabitlenmiş standalone bir chip’ti. Tonerin bittiğini sensörlerle ölçemezdi. Kesin üzerinde bir sayaç vardır. Chip’i söktüm ve üzerindeki devreyi analiz ettim. Ve evet  üzerinde i2c bir eeprom vardı. Buradan kaç sayfa basıldığını saklıyordu. Bu eeprom’u sıfır bir yazıcınınki ile tekrar yazarsam tekrar yazmaya devam edeceğini düşündüm. Biraz araştırma sonucu ilgili sıfırlama değerlerini buldum. Örnek bir I2C arduino kodu ile bu değerleri chip’e tekrar yazdım. Ve voila! İlk günkü kadar güzel bir tonerim oldu. Eminim içindeki toner binlerce sayfa yazar. Bittikçe sıfırlayacağım ve ne kadar gittiğine bakacağım.

Gördüm ki müşteriler iyi kazıklanıyorlar. Bitmemiş tonerler atılıyor yenisi aldırılıyor. Neyse ki bir şeyler biliyoruz da paramız boşa gitmiyor…

 

// Update EEPROM_I2C_ADDRESS define value with the chip you want to reprogram
// 83 is Chip K - black
#define EEPROM_I2C_ADDRESS 83
#include <Wire.h>

byte KChipData[]={ 50,0,1,3,18,1,1,255,100,0,52,48,55,53,52,51,20,9,65,66,22,0,22,38,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,100,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0};
void setup() {

// find EEPROM_I2C_ADDRESS 
// WhatI2CAddress();
// return;

 byte WriteData[128];
 memcpy(WriteData,KChipData,128*sizeof(byte));

 // Start Wire and Serial bus
 Wire.begin();
 Serial.begin(9600);
 delay(1000);

Serial.println("Start");
Serial.println(" ");
delay(3000);
Serial.println("go");

if (0){ // set to 1 to write to chip
 Serial.println("Write 128 bytes:");
 byte wordaddress;

 for(byte i=0;i<128;i++){
   wordaddress = i;
   i2cwrite((byte)wordaddress,(byte)WriteData[i]);
   //Serial.print(wordaddress);
   //Serial.print(":");
   Serial.print(WriteData[i]);
   Serial.print(",");
 }
}

// Start Read chip
 Serial.println(" ");
 Serial.println("Read 128 bytes:");
 for(byte i=0;i<128;i++){
   byte readVale = i2cread(i);
   //Serial.print(i);
   //Serial.print(":");
   Serial.print(readVale);
   Serial.print(",");
 } 
 Serial.println(" "); 
 Serial.println("End");

}

void loop() {

}

void i2cwrite(byte address, byte data) {
 Wire.beginTransmission(EEPROM_I2C_ADDRESS);
 Wire.write((byte)address);
 Wire.write((byte)data);
 Wire.endTransmission();
 delay(20);
}

byte i2cread(byte address) {
  byte rData = 0;
  Wire.beginTransmission(EEPROM_I2C_ADDRESS);
  Wire.write((byte)address);
  Wire.endTransmission();

  Wire.requestFrom(EEPROM_I2C_ADDRESS,1);
  while (Wire.available()){
    rData = Wire.read();
    return rData;
  }
}

void WhatI2CAddress() {
  Serial.println("started");
  for(int i=0;i<128;i++){
    Wire.requestFrom(i,1); //request first data byte
    Serial.print(i);
    Serial.print(":");
    while(Wire.available()){
      byte c = Wire.read();
      Serial.print(c); //if data exist, print it out. That way you can identify which address.
    }
    Serial.println(" ");
    delay(5);
  }
}

 

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak.