Paso 8: Emulación de cartuchos de tinta
Ahora el problema con esto es que no quiero mis cartuchos de tinta falsa para cada vez que se acostumbre, así para hacer eso es que tenemos un vertedero fijo que el microcontrolador se carga en la ram cada vez que se inicia. Esto permitirá que la impresora no sólo leer, sino escribir en él, así. Cuando el microcontrolador está apagado encenderla, los anteriores datos se restauran. (Doble Bonus)
Almacenar conjuntos de datos en el microcontrolador, lugar este en algún lugar bajo la incluyen, pero antes de main() vacío
Nota: Esto puede variar entre microcontroladores diferentes familias, pero funciona muy bien con mi PIC18F
RAM negra unsigned char [32] = {0 x 10, 0 x 00, 0 x 02, 0xF2, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 50, 0x90, 0x6A, 0x17, 0xE3, 0x54, 0xA3, 0 x 39, 0 x 50, 0x14, 0x15, 0x31, 0x93, 0xE4, 0xB4, 0x24, 0x96, 0x57, 0 x 04, 0x35, 0xF5, 0xE4, 0x14};
RAM unsigned char cian [32] = {0x4C, 0 x 04, 0 x 01, 0xF2, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 50, 0x90, 0x5A, 0x19, 0xF0, 0x94, 0 x 03, 0x3B, 0 x 50, 0x16, 0x17, 0x31, 0x93, 0xE4, 0xB4, 0x24, 0x96, 0x57, 0 x 04, 0x35, 0xF5, 0xE4, 0x34};
RAM char sin signo amarillo [32] = {0x4A, 0 x 04, 0 x 01, 0xF2, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 50, 0x90, 0x6A, 0x8B, 0xC9, 0xA4, 0 x 41, 0x3B, 0 x 50, 0x1A, 0x1B, 0x31, 0x93, 0xE4, 0xB4, 0x24, 0x96, 0x57, 0 x 04, 0x35, 0xF5, 0xE4, 0x74};
Nota: ¿Notado que no tengo Magenta? Eso es debido a es el cartucho de tinta que no tengo.
El siguiente paso es escribir una rutina que comprueba que cartucho de tinta se solicita y permitir que el host a leer y escribir en él.
Esto es como lo hice:
void main() {} {While(1)} epsnCartStartListen(); while(epsnCartReady()==1); Espere la señal de lista volver a baja while(epsnCartReady()==0);
unsigned char * inkPtr;
char el addr = 0 x 00;
...
addr = espnCartGetAddr();
Si (addr & 0x7 == 0 x 01) {/ / si los primeros 3 bits es igual a 0 x 01
inkPtr = & negro [0]; Señale los datos negro
} else if (addr & 0x7 == 0 x 03) {/ / si los primeros 3 bits es igual a 0 x 03
inkPtr = & cyan [0]; Punto a los datos de cian
} else if (addr [i] & 0x7 == 0 x 05) {}
inkPtr = & cyan [0]; Esto está destinado a ser Magenta, pero no tengo
} else if (addr [i] & 0x7 == 0x07) {}
inkPtr = & amarillo [0];
} else {}
continuar: / / volver al inicio del bucle principal porque no sabemos que esta dirección
}
if(addr&0x08) {//WriteMode-Compruebe si el Host quiere escribir
while(epsnCartReady()) {//keep bucle hasta que primero se baja
* inkPtr = epsnCartIn();
los datos el puntero apunta a
se escribe con nuevos datos
inkPtr ++; Incremento el puntero
}
} else {//Read modo de
{while(epsnCartReady())}
epsnCartOut(*inkPtr);
Salida de datos el puntero apunta a
inkPtr ++; Inrement el puntero
}
}
}
}
¡ Un éxito!
Después de este nuevo código de programación y de encender mi impresora, la impresora acepta 4 cartuchos imaginario gracias a mi microcontrolador. También me sorprende bastante que acepta los datos del cartucho de tinta cian para así magenta!
Esto es un gran logro para mí ya que es mi primer mundo real inversa ingeniería que he hecho y yo fuimos resultados prometedores.
Ahora puedo continuar con convertir la impresora en una impresora 3D
Espero que chicos les haya gustado esto, este es mi segundo instructable y esto me tomó un tiempo para escribir: P
Si quieres, ¡ ustedes son más que Bienvenidos descargar los archivos de origen
¡ Saludos!
Romana