İ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); } }
Son derece akil ve hinlik dolu faydali bir paylasim olmus. Takdir ve dahi tesekkur ettim.
Buna bir video yayınlarsanız harika olur.