Stap 8: Emuleren inktcartridges
Nu is het probleem met dit dat ik wil niet dat mijn nep inktcartridges wennen ooit, dus dat is hiervoor hebben we een vaste dump dat de microcontroller in ram everytime die het opstart zal laden. Hierdoor kan de printer niet alleen lezen, maar ook naar het schrijven. Wanneer de microcontroller is vervolgens weer terug op uitgeschakeld, wordt de vorige gegevens hersteld. (Dubbele Bonus)
Storing gegevensmatrices in de microcontroller, plaats deze ergens onder de inclusief, maar voordat nietig main()
Opmerking: Dit kan variëren tussen verschillende microcontroller families, maar het werkt goed met mijn PIC18F
RAM van unsigned char zwart [32] = {0x10, 0x00, 0x02, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x90, 0x6A, 0x17, 0xE3, 0x54, 0xA3, 0x39, 0x50, 0x14, 0x15, 0x31, 0x93, 0xE4, 0xB4, 0x24, 0x96, 0x57, 0x04, 0x35, 0xF5, 0xE4, 0x14};
RAM van unsigned char cyaan [32] = {0x4C, 0x04, 0x01, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x90, 0x5A, 0x19, 0xF0, 0x94, 0x03, 0x3B, 0x50, 0x16, 0x17, 0x31, 0x93, 0xE4, 0xB4, 0x24, 0x96, 0x57, 0x04, 0x35, 0xF5, 0xE4, 0x34};
RAM van unsigned char gele [32] = {0x4A, 0x04, 0x01, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x90, 0x6A, 0x8B, 0xC9, 0xA4, 0x41, 0x3B, 0x50, 0x1A, 0x1B, 0x31, 0x93, 0xE4, 0xB4, 0x24, 0x96, 0x57, 0x04, 0x35, 0xF5, 0xE4, 0x74};
Opmerking: Opgemerkt dat ik geen Magenta? Dat is want dat is de inktcartridge heb ik niet.
De volgende stap is om te schrijven een routine waarmee wordt gecontroleerd welke inktcartridge wordt aangevraagd, en toestaan dat de host te lezen en te schrijven.
Dit is hoe ik het deed:
void main() {} While(1) {} epsnCartStartListen(); while(epsnCartReady()==1); Wachten op de klaar signaal om terug te gaan naar laag while(epsnCartReady()==0);
unsigned char * inkPtr;
char addr = 0x00;
...
addr = espnCartGetAddr();
Als (addr & 0x7 == 0x01) {/ / als de eerste 3 bits gelijk is aan 0x01
inkPtr = & black [0]; Wijs de zwarte gegevens
} else if (addr & 0x7 == 0x03) {/ / als de eerste 3 bits gelijk is aan 0x03
inkPtr = & cyaan [0]; Wijs de cyaan gegevens
} else if (addr [i] & 0x7 == 0x05) {}
inkPtr = & cyaan [0]; Dit is bedoeld om te worden Magenta, maar ik heb dat niet
} else if (addr [i] & 0x7 == 0x07) {}
inkPtr = & gele [0];
} else {}
verder: / / teruggaan naar het begin van de hoofdlus, omdat we dit adres niet weet
}
if(addr&0x08) {//WriteMode – Check om te zien als de Host wil schrijven
while(epsnCartReady()) {//keep herhalen totdat RST laag gaat
* inkPtr = epsnCartIn();
de gegevens van de pointer wijst naar
wordt geschreven met nieuwe gegevens
inkPtr ++; _ / / Verhogen de aanwijzer
}
} else {//Read modus
while(epsnCartReady()) {}
epsnCartOut(*inkPtr);
Output de gegevens de Pointer wijst naar
inkPtr ++; Inrement de aanwijzer
}
}
}
}
Succes!
Na deze nieuwe programmacode en draaien op mijn printer, aanvaard de printer 4 imaginaire cartridges dankzij mijn microcontroller. Ik ben ook zeer geschokt dat ik de gegevens van de cartridge cyaan inkt voor magenta aswell geaccepteerd!
Dit is een grote voltooiing voor me als dit mijn eerste echte wereld reverse is engineering die ik ooit heb gedaan en ik kreeg veelbelovende resultaten.
Nu kan ik doorgaan met het omzetten van de printer in een 3D-printer
Ik hoop dat jullie graag dit, dit is mijn tweede instructable en dit kostte me een tijdje om te schrijven: P
Als u wan, zijn jullie meer dan welkom om te downloaden van de bronbestanden
Cheers!
Romeinse